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

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

在面试过程中,我会问一些基本的数据库设计问题。规范化(何时-为什么)是我在数据库设计方面关注的问题之一。我列举的一些场景涉及同步服务器以及它们考虑相关问题、安全问题等的原因和方式。

  1. 你会从他们喜欢的特定数据库系统(例如 Oracle)的角度询问他们吗?
  2. 你会问他们什么技术问题?
  3. 您会列举哪些场景?您会寻找什么答案来应对这些场景?
  4. 您如何了解他们是否具备处理安全问题的经验?
  5. 其他相关问题。(例如数据库恢复/备份)

谢谢。

答案1

以下是我针对高级数据库管理员的十大面试问题,这是Tom LaRock 针对初级 DBA 提出的 10 大问题。

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

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

生产 DBA 任务可能是:

  • 设置备份、索引维护和 DBCC 作业。看看他们是否会询问您希望多久备份一次数据库,以及您希望在本地还是通过网络备份。不要问他们如何配置特定的磁带备份软件,除非这已经写在他们的简历上了。
  • 找出 Johnny 无法登录并运行查询的原因。
  • 有人抱怨查询速度太慢。告诉我你要去哪里查找发生了什么。然后他们说他们刚刚打电话说他们的查询已经完成,但他们想确保这种情况不会再次发生。
  • 从昨晚的备份中恢复单个表。

开发任务可能是:

  • 调试该存储过程。
  • 解释该执行计划。
  • 创建一个视图来将客户与发票合并。

使用 AdventureWorks 模式。他们可能最近没有用过它,但至少它很容易解释。

答案2

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

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

然后我们根据他们谈论的内容向他们提出更多问题。

我们正在探索理解

  • 绩效与常态化
  • 密钥设计和引用完整性
  • 需要改进的地方 - 即替代数据库结构 - 触发器、视图、程序
  • 设计中的薄弱环节——如何克服多对多关系
  • 这对服务器维护有何影响
  • 数据安全问题
  • 应用程序安全问题

然后,我们作为一个团队开始思考,对于这类问题,我们认为初级/高级/建筑师类型的答案是什么。

因此,对于 - 绩效与规范化 -

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

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

他们会推荐不同类型的设计吗,例如星型模式,并讨论其在多个层面上的影响(架构师)

  • 密钥设计和引用完整性

会看到需要参考完整性来强制执行数据关系并能够讨论这一点,但不会看到关键选择和设计(初级)的问题

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

能够争论与 Keys 和 Integrity 有关的各种观点,并能够提出各种实际的快速设计模型(建筑师)

你明白了。

如果您希望我添加更多内容,请发表评论,并详细说明我们对其余内容的看法,但仅包含前两个,以便让您了解我们的想法。

重点是思考 1. 问题 2. 我们作为团队然后思考我们会认为这些类型的问题应该由初级/高级/建筑师来回答什么。

我强调团队作为候选人和团队必须对新人的能力充满信心,如果他们能想出他们认为是不同层次的答案,那么新人将有望更好地融入团队。这也让团队有能力影响候选人的选择。他们还提名一个人加入问题小组。这对团队的支持很有帮助。

答案3

您可以虚构一个数据库,其中存在一些规范化问题、潜在的安全故障,但总体上看起来很典型,例如员工数据库。然后,您可以先向受访者询问一些简单的问题,例如他们将如何通过连接获取数据库中的某些数据,然后逐步提出有关规范化和安全问题的更难的问题。

答案4

这不一定与数据库相关,但我喜欢在面试中添加实际问题解决和设计场景。

对于实际操作问题,准备一个或多个系统,让应聘者可以访问并让他们解决开放式问题。我个人最喜欢的是性能问题,因为它不一定是可以根据面试需求重现的问题,而且很少有一个正确答案。相反,您可以观察应聘者完成他们的故障排除过程,他们还需要与您展开讨论以获取有关环境的更多信息。关键是面试官要诚实地说明问题,不要把场景变成寻找错误配置设置或类似问题的复活节彩蛋。

对于设计场景,我会向应聘者提供新项目的总体概述(即没有遗留依赖项),并要求他们在特定领域(无论是 DBA、系统还是网络)提出符合项目目标的总体设计。关键是要让项目足够小,以便有人可以在脑子里记住整个场景,并且解释起来不会花费超过几分钟的时间。

我在这里为我的系统和网络人员举的一个例子是,在考虑到我们业务的某些限制的情况下,描述他们为正在设立的小型分支机构所做的设计。在 DBA 方面,也许可以使用小型/明显的 CRUD 应用程序。无论哪种情况,您都不需要详细的设计,而需要更多的概述,看看候选人是否会寻找出现的常见问题。

这两种情况的重点都是围绕主题展开讨论,并让候选人用自己的问题引导讨论。应该清楚的是,你并没有要求候选人给出确切的答案。

你可以想象,我非常不喜欢面试中的琐事,我认为这能让我更深入地了解候选人的能力。

相关内容