公司博客上

工程面试——招聘经理脱颖而出的指南

2020年1月22日 公司博客上

分享这篇文章

问任何一个处于成长期公司的工程领导,他们的首要任务是什么,他们可能会说招聘。当我们想到接受一份工作的决定对公司和求职者来说有多么重要时,几个小时的面试似乎很短。我们希望确保我们的面试过程充分利用这段时间,以帮助候选人和Databricks了解该职位是否适合他们。我们想要了解你,并确保你得到你所需要的信息来做出最好的决定。要做到这一点,最好的方法之一就是设计强调对话和合作的面试。现实世界的问题是混乱而复杂的。我们更想了解候选人如何解决抽象的挑战,而不是看到具体的解决方案。

在进入面试流程之前,您希望应聘者了解Databricks数据团队的哪些方面?

尽管Databricks运营的基础设施规模很大,但我们的工程组织相对较小。我们操作着数百万台虚拟机,每天生成tb级的日志,处理eb级的数据。以我们的规模,我们定期观察云硬件、网络和操作系统故障,而我们的软件必须优雅地保护客户免受上述任何故障的影响。我们只有不到200名工程师。

我们的规模意味着我们可以灵活地采用或创造我们认为是每个工程挑战的最佳解决方案的技术。另一方面,我们的基础设施的许多部分仍在成熟中,因此许多计划的关注范围超出了单个服务的范围。它仍然是一家初创公司,所以所有权和责任的界限并不总是明确的。这意味着很容易做出改变,并在你的核心关注领域之外产生影响,你将比在其他地方拥有更多的项目。

在数据库工作之后,你打算成为什么方面的大师?你将能够在大数据和机器学习领域创建可扩展的系统。大多数工程师在日常工作中并没有应用ML,但我们深深地了解它是如何在一系列行业中为我们的客户使用的。

如何准备技术面试问题?

我们的工程面试包括45到90分钟的技术和软技能评估。虽然我们的一些技术面试是更传统的算法问题,重点是数据结构和计算机科学基础,但我们已经转向更多的实际问题解决和编码评估。即使是算法问题,如果考生愿意,也可以在笔记本电脑上解决,而不是在白板上。这有助于我们了解他们如何在更现实的环境中编写代码。对于我们的编码问题,我们较少关注算法知识,更多关注设计、代码结构、调试和学习新领域。例如,我们的一些技术问题可能会使用你不熟悉的语言/框架,所以你需要展示阅读文档和解决新领域问题的能力。其他问题包括按照特性说明逐步构建一个复杂的程序。

我们也会根据应聘者的背景、工作经验和角色来调整面试。对于更多的全栈角色,我们花了更多的时间在web通信(http, websockets,身份验证),浏览器基础(缓存,js事件处理)和API +数据建模的基础上。对于更低级的系统工程,我们将强调多线程和OS原语。

我建议做好三件事:

  1. 在网上找一些编码问题,然后练习完全解决它们。这意味着创建完整的工作代码和测试,而不查看解决方案。创建测试很重要;我们的一些技术问题有几个阶段,所以你会希望能够在面试期间快速设置一个快速编辑/编译/调试循环的测试工具,就像你在日常工作中一样。
  2. 复习计算机科学基础知识。了解常见的数据结构、每个方法的运行时和内存利用率,以及它们在您计划使用的语言中的接口。这技术面试手册在GitHub上可以很好地概述不同的数据结构,但你也应该学习系统概念,如多线程、并发、锁和事务。
  3. 模拟面试。模拟面试的时间压力和对话是在真正面试之前让你放松的好方法。让一个朋友问你一些你不知道的问题,并在需要的时候给你暗示。

浩毅在我们的开发工具团队写了一个很棒的博文关于如何有效地面试,这让我们更好地了解我们如何组织面试,以及我们在寻找什么。

你在面试中最常见的错误是什么?

既然我们已经谈到了面试的要求和如何准备,下面有几件事你应该有意识地去尝试在工程师的工作面试中。

主要原因是对工作缺乏热情和兴趣。记住,你也是在面试这家公司,表现出你愿意与之匹配是很重要的。工作热情低,对工作不熟悉砖产品不问任何问题,或是让面试官主导整个谈话,这些都是你对面试官不感兴趣的迹象。就像你希望面试过程能挑战你,深入了解你的技能和兴趣一样,我们喜欢面试者问我们尖锐的问题,花时间了解我们。

对于技术面试,如果应聘者正在追求一个行不通的解决方案,我们会在花大量时间实施之前帮助他们意识到这一点。如果面试官在问问题,很有可能他们是在暗示你走另一条路。不要停留在单一的解决方案上,花一分钟时间后退一步,用新的提示或问题重新考虑你的方法。记住,你的面试官可能已经问了几十次同样的问题,看到了一系列的方法。他们还想看看你在现实环境中如何应对,在现实环境中,你将与一个以类似方式提供帮助的团队一起工作。

对于注重工作经历和软技能的面试,要有具体的例子。从广义的角度开始是可以的,但要讲一个故事,讲述你过去工作经历中的具体例子是如何回答这个问题的。当谈论你的工作经验时,试着(1)清楚地定义问题,(2)你的解决方案,(3)结果和(4)任何改进的想法。提供一个经过深思熟虑的答案的好方法是使用STAR访谈回应技巧

在你的团队中(无论是现在还是过去),你在成功且有影响力的工程师身上看到了哪些品质?

在Databricks这样的初创公司,我在成功工程师身上看到的最重要的品质是所有权。我们正在快速发展,这每周都会带来很多新的挑战,但我们并不总是清楚如何在团队之间划分责任,以及如何确定优先级。优秀的工程师处理这种不确定性的方法是找出最具影响力的问题,而不仅仅是那些局限于他们当前团队职责的问题。有时这意味着直接帮助构建解决方案,但通常这是激励其他人优先考虑工作。

我们关注的第二个品质是学习和成长的能力,尤其是对于那些处于职业生涯早期的人。知识的衍生往往比候选人现有的技术技能更重要。我们正在解决的许多工程问题都没有现成的模板可以遵循。这意味着不断突破抽象层来考虑更大的系统——从最低层次的cpu指令,到如何在浏览器中呈现可视化。

我是如何在面试中看到这些品质的?表现出大量所有权的工程师通常可以详细介绍他们过去工作所依赖的邻近系统。例如,他们知道他们使用的特定存储层或构建系统的优点和缺点以及原因。他们还经常创建变更来帮助他们的团队变得更有效——要么通过工具改进,要么通过流程变更。成长来自于对过去工作的反思。没有解决方案是完美的,伟大的工程师知道他们接下来要做什么,或者采取不同的方法。很多求职者说,成长的机会是他们选择下一份工作的主要标准,但他们应该能够谈论他们已经在做什么来成长。也许这是一个副项目,他们最近学习的一项新技术,对开发人员环境的一些改进,或者他们在当前角色中培养的导师关系。

你的团队正在解决哪些问题?你需要什么样的技能才能让应聘者成功解决这些问题?

工作团队拥有相当广泛的产品用例来支持,并且大多数团队都是全栈工作。我们寻找的是能够快速学习新技术的多面手。我们也非常面向客户,需要工程师能够深入了解我们的用户,制定需求。一些团队成员要么过去有自己的初创公司,要么在初创公司担任早期员工。

了解一个角色的最好方法之一是问,“我将成为什么方面的大师?”对于工作区团队来说,主要有三个技能。

  1. 快速学习新技术。工作区团队做了大量的探索性和原型工作。团队中有许多通才,他们需要将产品意识和将现有技术应用于新问题的能力结合起来。一个很好的例子是调整开源Jupyter,使其在Databob下载地址bricks托管的云中运行,并使用Databricks集群。另一个是创建一个发布/订阅基础架构,通过GraphQL API将更新流发送到实时web客户端。
  2. 围绕数据科学、机器学习和数据分析的工作流程。我们正在为这些角色构建产品,这样您就可以深入了解不同行业和公司规模的各种客户的数据科学家和数据工程师的日常工作流程。这个团队的工程师经常接触我们的客户和现场工程的内部客户冠军。
  3. JVM上的可伸缩web服务设计。我们的团队致力于有状态笔记本和Workspace的核心后端,在我们这种规模的服务中,它经常面临独特的设计挑战。团队中的每个人都深入了解资源原语(cpu/内存/io/网络),以及如何在分布式容错架构中优化它们的使用。

在Databricks,我们一直在寻找具有上述特征的软件工程师。如果您有兴趣解决我们目前正在解决的一些挑战,请查看我们的职业页面并申请我们的面试!

泰德·汤姆林森(Ted Tomlinson)是Databricks的工程总监。他管理着Workspace团队,该团队负责Databricks的旗舰协作笔记本产品和用于实现跨环境的交互式数据科学和机器学习的服务。

免费试用Databricks

相关的帖子

看到所有公司博客上的帖子