数据工程师面试最全指南

数据工程师面试最全指南

虽然,数据工程师(DE)是近今年增长最快的科技行业职位之一,但其实网上并没有很多关于数据工程的面试内容,以及该如何去准备的资源。

过去一年里,我参加了旧金山湾区几家科技公司的数据工程师职位的面试,也帮助很多人成功通过面试。本文中,我会解释数据工程面试过程中,一些最重要的技术话题:简历、编程、SQL和系统设计等等。也会教你如何准备面试的非技术部分,因为我觉得这也是成功通过面试的关键,但它总是被求职者们忽略。

不过,我不会讨论在任何公司的DE面试中所提出的具体问题,因为这篇文章的目的主要是用作一般的指导,帮助你了解成为一名成功的数据工程师所需的基本技能。如果你想了解更多数据工程相关内容,可以阅读以下这些文章:
跟数据科学家相比,数据工程师更需要哪些技能?
2021 Data Engineer求职必备技能
面试常见5大SQL题目:培养SQL技能,助你完胜任何面试!
四条SQL准则:提升你的数据科学技能

简历

你的简历不仅是获得招聘人员和招聘经理注意的敲门砖,也是你要与面试官深入讨论、展示你技能的地方,其中包括:技术能力、解决问题的能力、团队合作的能力、沟通和项目管理能力。

我在简历中看到的最常见的错误,是只专注于技术执行细节,而没有解释或理解系统设计中的权衡(比如,“我用Kafka是因为我经理让我用的”)和更大的项目蓝图。记住,面试官并不像你一样了解你之前公司的业务问题和数据基础设施,所以,你需要提供足够的背景来帮助他们理解技术的复杂性,以及你的项目对公司带来的影响。所以,想要深入研究一个项目的关键,就要从头到尾完整的描绘出你的项目,像讲一个故事一样!

我强烈建议你练习谈论你最重要的数据项目(如果可以,尽可能跟有工程背景的人交谈)并确认你的故事能解答以下问题:

  • 做这个项目的动机是什么?(比如,你的项目试图解决的是什么样的数据/业务问题?)
  • 都和哪些团队合作过?是如何合作的?
  • 如果你是项目所有者,那你如何计划、推动该项目?
  • 在系统设计中,你进行了哪些技术权衡?(比如,你为什么使用框架X而不是其他替代方案?)
  • 与你项目有关的技术统计数据都有哪些?(比如,你的数据管道的吞吐量和延迟是多少?)
  • 该项目的影响是什么?(比如,它产生了多少收入?有多少人用过你的应用程序?)
  • 你遇到过哪些挑战?又是如何解决的?

当讲述一个优秀的项目故事时,数字是非常重要的。与其说“我处理了很多数据……”,不如查看一下你项目的统计数据,然后把它们写进你的简历。数字会展示项目的规模、项目的影响、以及你对项目的深刻理解,也会让你的项目更加可信(如果你不能在简历上向面试官展示你处理了多少数据,面试官可能会觉得很可疑)

图源:Clément H on Unsplash

编程能力

好吧,可以说所有软件工程面试中最让人不愉快的部分来了:编程面试中,你会被问到复杂算法(但可能在工作中,你并不需要),不但要求你实现复杂算法,还要尽可能的用最少、最有效的数据结构代码,在30分钟内解释代码的时间和空间的复杂性。

相对于算法,数据工程师的编程面试更注重数据,而且面试问题通常比较实用。比如,编写一个函数来转换输入数据,并生成所需的输出数据。当然,你还需要尽可能使用最优化的数据结构和算法,优雅地处理所有潜在的数据问题。但数据工程师不能只靠内置库来处理现实世界中的数据,所以,在编程面试中,可能还需要你使用流行的开源库(比如Spark和pandas)来实施解决方案。如果需要的话,大部分面试都允许你在面试过程中查阅相关文件。如果工作要求你精通特定的框架,也要为此做好准备,在你的编程面试中使用这些框架。

在面试中编程,比在工作中编程要困难得多,因为你要在很短的时间内写出最好的代码(我知道在面试过程中大脑一片空白有多可怕)所以,我强烈推荐你在LeetCode或HackerRank之类的编程网站上练习一些(但不要太多)编程问题,让自己适应在CoderPad上写代码。

SQL, SQL, SQL

SQL 对于数据工程师来说是一项非常重要的技能,所以,我特意为它列出一个单独的部分(但SQL并不是真正的编程语言)事实上,除了编程面试之外,额外附加一个SQL面试也是很常见的。因为,数据工程师要负责构建可靠、可扩展的数据处理和数据建模解决方案,所以,你要比数据分析师和数据科学家(他们主要使用 SQL 查询处理过的数据)更擅长SQL,也就是说,只知道“SELECT…FROM…”是远远不够的了。

“难道SQL不只是一种查询语言吗?关于SQL,我还应该知道些什么?”

首先,SQL不仅仅是一种查询语言。它也是许多大数据框架共享的数据处理模式,比如SparkSQL、pandas、KafkaSQL等。所以,熟练掌握SQL还表明你也可以有效地学习、使用这些框架。

一名优秀的数据工程师,应该能够把复杂的业务问题转化为性能良好的 SQL 查询和数据模型。为了编写处理较少数据的高效查询,你需要了解查询引擎和优化器的工作原理。比如,有时把CASE语句和聚合函数结合使用,可以替代JOIN和UNION,处理的数据要少得多。

数据模型对如何构建查询有很大影响。比如,尽可能利用 table来分区和索引。但是,数据模型在很大程度上也依赖查询模式。要设计一个好的数据模型,需要你能把业务问题转换为最终用户可以运行的SQL查询。这就是 SQL 面试和数据建模面试经常并存的原因。

系统设计

系统设计是数据工程技术面试中最重要、也是最难的部分。在系统设计面试中,你会从头到尾设计一个数据解决方案,通常由三部分组成:分别是数据存储、数据处理和数据建模。

最初的面试问题通常非常简短而抽象(比如,从头到尾设计一个数据仓库),你的工作是提出后续问题,来确定需求和用例,就像解决现实生活中的数据问题一样。系统设计的主要挑战,是根据这些需求和用例来选择数据存储系统和数据处理框架的最佳组合,有时,最佳解决方案不止一个。完成系统设计面试的关键,是理解数据工程中的关键原则和概念,以及各种数据系统和框架之间的权衡。

数据建模通常是系统设计面试的最后一部分,但有时它可能是SQL面试的一部分。比如,数据建模面试问题中有这样的例子,要求你为兽医诊所的预订系统设计后端的分析表格。数据建模中最重要的原则,是根据用例和查询模式设计数据模型。当然,你有责任澄清需求和用例,以便做出更好的设计选择。

图源:Christina @ wocintechchat.com

你自己(也是最重要的部分)

现在,我们已经讨论了数据工程面试中的所有技术主题,让我们来谈谈非技术部分。面试不是你只需要正确答案就能通过的一次考试,而是一系列的对话,看看你是否能快速学习,是否能与团队一起解决问题。所以,在面试中尽量表现人性化一点、做真实的自己,这点非常重要:

  • 对人友好和善。因为没人愿意和素质低下的人一起工作。
  • 对话。最好的面试通常就像对话一样。如果你需要信息或反馈,就提出问题。
  • 解决问题的能力,而不是仅仅给出答案。就像在现实生活中一样,你并不能总是立刻就知道问题的正确答案。所以更重要的是展示你如何解决一个问题,而不是只给出一个答案。
  • 展示你对数据工程的热情。除了工作职责之外,你为了成为一名更好的数据工程师,还做了些什么?

在面试官面试你的同时,你也在面试他们。你喜欢和他们一起工作吗?这个团队会为你提供成长的机会吗?你同意经理的观点和管理风格吗?找到一个好的团队是很难的,所以要明智地提问。

压力

面试压力很大,而且这是一个不完美的过程,陌生人只通过与你一个小时的互动来判断你的专业能力,所以有时面试结果并不公平。当你无法在面试问题上取得任何进展,并感觉面试官看不起你时,你会感到很沮丧。一次又一次地被拒会对你的自尊造成毁灭性的打击,可能会让你觉得自己不够好。我也遇到过这种情况:大多数求职申请都没有回音,所有编程面试都失败了。我以为我永远不会成为一名工程师。但我很高兴我没有放弃。

如果你因为面试而感到不知所措、沮丧或绝望,我想对你说,其实你并不孤单。如果你被拒绝,那是他们的损失。对自己耐心点,保持对未来的希望,因为事情总会变得更好,而你只需要继续尝试!记住,每场面试都要自信十足,因为你足够优秀!

希望这篇文章对你准备下一次的数据工程面试有所帮助。如果你有任何问题或反馈,请在下方留言评论。你还可以订阅我们的YouTube频道,观看大量数据科学相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Xinran Waibel 
翻译作者:Lea
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://towardsdatascience.com/the-ultimate-guide-to-data-engineer-interviews-f2443cc42ad7