您如何面试数据库程序员/管理员申请人?


12

面试中,我问基本的数据库设计问题。关于数据库设计,规范化(何时为什么)是我关注的问题之一。我在某些站点涉及同步服务器,以及它们为什么/为什么/如何考虑相关问题;安全问题等。

  1. 您会从他们喜欢的特定数据库系统(例如Oracle)的上下文中询问他们吗?
  2. 您会问什么技术问题?
  3. 您将在什么情况下找到站点,以及寻找这些情况的答案?
  4. 您如何确定他们是否熟悉安全问题?
  5. 其他相关问题。(例如,数据库还原/备份)

谢谢。

Answers:


15

这是我针对高级数据库管理员的十大面试问题,这是汤姆·拉洛克(Tom LaRock)针对初级DBA的十大问题。

我注意到其他人建议候选人应对服务器进行故障排除。如果采用这种方法,请使用带有快照的虚拟机。以特定的方式设置服务器,使其具有某些配置或性能问题,并对其进行快照,然后在每次访问后可以回滚至快照。

如果这样做,则将任务限制为您实际要执行的任务。不要问生产DBA关于规范化的问题,也不要问开发DBA为什么一个节点不会加入集群。

生产DBA任务可能是:

  • 设置作业以进行备份,索引维护和DBCC。看看他们是否询问您要备份数据库的频率以及是否要在本地或通过网络备份。不要问他们如何配置特定的磁带备份软件,除非该软件已经在他们的简历中。
  • 找出为什么Johnny无法登录并运行他的查询。
  • 有人抱怨查询速度慢。告诉我您在哪里可以找到正在发生的事情。然后说他们刚刚打电话说他们的查询已经完成,但是他们想确保它不会再次发生。
  • 从昨晚的备份中还原单个表。

开发任务可能是:

  • 调试此存储过程。
  • 解释此执行计划。
  • 创建一个视图以将客户加入发票。

使用AdventureWorks模式。奇怪的是他们最近还没有玩过它,但是至少很容易解释。


3
真?那个初级DBA问题列表太荒谬了。这些是我在大学上第一学期后就可以从开发人员那里得到正确答案的问题。我更喜欢高级DBA的问题,除了“我是一名开发人员。请解释为什么我的桌子上需要一个唯一的钥匙。” 我猜这是因为我想相信开发人员已经知道这一点。我是一名开发人员,不知道至少不能担任Jr. DBA的角色:o
Gromer

5
您会感到惊讶。我采访了数十位六位数职位的DBA候选人,这些候选人没有汤姆的问题的答案。
布伦特·奥扎尔

2
与布伦特所说的一样。经过多次采访,尽管有一份简历说他们有10年的Oracle和5年的SQL Server以及OCP和MCDBA证书,但我还是有很多候选人无法回答那些初级DBA问题。
K. Brian Kelley,2009年

3
我还从Gromer关于希望相信开发人员已经知道他们需要表上的唯一键的言论中笑了出来。如果我每次参加咨询活动的收入只有1美元,而仅仅通过添加主键来解决性能问题,我会这样做的,哦,等等,这远远超过1美元。;-)
布伦特·奥扎尔

1
记住,我们正在谈论筛选出您不雇用的开发人员。当然,您在聪明的开发人员身边-但这仅仅是因为您没有雇用失败者。这些问题过滤掉了失败者。
布伦特·奥扎尔

9

作为面试的一部分,在我的软件团队中,我们测试了对数据库的理解。

我们提出了一个非常糟糕的设计(考虑CRM类型的应用程序),并要求他们在经过大约30分钟的思考时间后改进设计。

然后,我们根据他们的谈话向他们询问更多问题。

我们正在努力了解

  • 性能V标准
  • 关键设计和裁判完整性
  • 需要改进的地方-即替代数据库结构-触发器,视图,程序
  • 设计中薄弱的领域-如何克服多对多关系
  • 这如何影响服务器-Maintenancece
  • 资料安全性问题
  • 应用程序安全性问题

然后,我们作为一个团队考虑了对于这些类型问题的初中/高级/建筑师类型的答案。

因此-效果v规范化-

首先会看到该问题,并能够讨论原因(初中)

会推荐4/5 NF,但要了解性能问题,他们会反规范化并了解如何表达问题(高级)

他们会建议其他类型的设计(例如,星型模式)并讨论许多层次的含义(建筑师)

  • 关键设计和参照完整性

会看到需要使用ref完整性来加强数据关系并能够讨论此问题,但不会看到“关键选择和设计”(初级)的问题

将讨论与数据量和数据类型有关的问题v寻找数据中的自然键,并能够讨论为什么他们要看这些自然键-以及参照完整性带来的问题(高级)

可以争论与键和完整性有关的各种观点,并能够提出用于快速设计的各种实际模型(建筑师)

您得到图片。

如果您想让我添加更多内容,请发表评论,并详细说明我们对其余部分的看法,但仅包括前两个内容即可向您提供我们所想的想法。

关键是要考虑1.问题2.我们作为一个团队,然后考虑了我们将考虑对这些类型的问题进行初级/高级/建筑师类型的答案的问题。

我强调团队,因为候选人和团队必须对进来的人的技能充满信心,如果他们提出了他们认为对不同层次的答案,那么进来的人将有望更好地适应团队。它还使团队能够影响候选人的选择。他们还提名一个人参加问题面板。对团队买入有很大帮助。


5

您可以组成一个虚构的数据库,其中存在一些规范化问题,潜在的安全故障,但总的来说看起来很典型,例如员工数据库。然后,您可以首先询问受访者一些简单的问题,包括如何通过联接来获取数据库中的某些数据,然后逐步解决有关规范化和安全性问题的更棘手的问题。


1

看到智能并完成事情

...并询问他们最近读过哪些书,他们读了哪些博客以及听了哪些播客。并询问他们是否参与stackoverflow.com和serverfault.com ;-)


1
如果他们将要处理敏感数据,也要进行犯罪背景检查。您不想要一个聪明,能干事且邪恶的人;-)
克里斯·W·瑞

1
参见史蒂夫·耶格(Steve Yegge)关于乔尔斯书的博客文章:steve-yegge.blogspot.com/2008/06/…–
尼克·卡瓦迪亚斯

谢谢-Yegge的帖子很有趣,而且发人深省。我特别喜欢这样:“你想要一个超人的神灵般的人。一个可以教你很多东西的人。你佩服并希望你能效法的人,而不是你认为会佩服和效法你的人。”
克里斯·瑞

1

这不一定与数据库有关,但是我想添加到访谈中的是动手解决问题和设计方案。

对于动手操作问题,请提供一个人可以访问的系统,使他们对开放式问题进行故障排除。我个人最喜欢的是性能问题,因为不一定需要在面试时可以重现某些内容,而且很少有正确的答案。取而代之的是,您可以观看候选者的整个故障排除过程,他们还需要与您展开讨论以获取有关环境的更多信息。关键是要让访调员对问题诚实,而不是将场景转变为寻找一种配置错误或类似情况的复活节彩蛋。

对于设计方案,我给应聘者一个新项目的概述(即没有遗留的依赖),并要求他们在其特定领域(无论是DBA,系统还是网络)提出符合项目目标的总体设计。关键是要使项目足够小,以至于有人可以将整个场景掌握在头脑中,而且解释所需的时间不会超过几分钟。

我在这里为我的系统和网络人员使用的一个示例是在给定我们业务的某些限制的情况下,针对正在建立的小型分支机构描述其设计。在DBA方面,可以使用小型/显而易见的CRUD应用程序。无论哪种情况,您都没有在寻找详细的设计,而是在寻找更多的概述,并查看候选人是否寻找出现的常见问题。

这两种情况的重点是打开有关该主题的讨论,并让候选人提出自己的问题进行讨论。应该清楚的是,您并没有要求给出确切的答案。

可以想象,我在面试中非常不喜欢琐事,我认为这使我对候选人的能力有了更深的了解。


0

让她/他说话。询问过去的经验,询问他遇到了什么问题以及他们如何处理商品。选择这个或那个解决常见问题的动机是什么[备份?监控?向外扩展,向上扩展,安全]。

我认为您可以通过聆听来告诉很多有关此人的信息。

如果您正在寻找特定领域的专业知识,请询问详细的问题-Stefan Thyberg的建议非常好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.