原文标题:Mastering the Data Science Interview Loop
原文链接:https://towardsdatascience.com/mastering-the-data-science-interview-15f9c0a558a7
作者:AndreiLyskov
简介
2012年,《哈佛商业评论》宣布数据科学将成为21世纪最性感的工作。从那以后,围绕数据科学的炒作一直呈增长趋势。最近的报告显示,对数据科学家的需求远远超过供应量。
然而,现实是,这些工作大多是为那些已经有经验的人准备的。另一方面, 由于供应/需求的动态变化,入门级的数据科学工作竞争非常激烈。数据科学家来自从社会科学到传统的计算机科学等各种背景。许多人还将数据科学视为一个重塑自我的机会,这导致大量希望获得数据科学家作为第一个角色标签的人涌入该领域。
更复杂的是,与具有更标准化面试流程的软件开发职位不同,数据科学面试可能会有很大的多样性。这部分是因为作为一个新兴行业,数据科学家的定义依然没有达成共识。Airbnb认识到了这一点,并决定将他们的数据科学家分为三个方向:算法,推理和分析。
https://www.linkedin.com/pulse/one-data-science-job-doesnt-fit-all-elena-grewal/
因此,在开始寻找一份工作之前,确定什么方面的数据科学对你来说有吸引力很重要。根据你对此问题的回答,你学习的内容和将被问到的问题会有所不同。尽管类型不同,一般来说,他们会遵循一个类似的面试流程,只是提出的具体问题可能会有所不同。在本文中,我们将探讨在面试过程的每个步骤中会发生什么,以及一些提示和准备方法。如果你正在寻找可能在面试中出现的数据科学问题清单,你可以考虑阅读https://towardsdatascience.com/data-science-interview-guide-4ee9f5dc778和https://www.analyticsvidhya.com/blog/2018/06/comprehensive-data-science-machine-learning-interview-guide/。
编程能力考查
编程能力考查的范围可以从简单的Fizzbuzz问题到更复杂的问题,例如从混乱的数据中构建时间序列预测模型。根据问题的复杂程度,答题时间限定在30分钟到一周不等。这些考查可以在HackerRank,CoderByte等网站上进行。
通常情况下,考官会用一份已经写好的测试样例来判断你是否通过考试。判断标准通常会既考虑正确性也考虑复杂性(例如运行代码需要多长时间)。如果考官没有提供测试样例,那么你应该编写自己的测试样例。对于数据科学的编程能力考查来说,你甚至可能会遇到统计学的多项选择问题,因此请务必询问你的考官你将会被考查哪些方面的内容。
当你解答考题的时候,请务必牢记公司并不总是在寻找“正确”的解决方案。他们也可能在寻找代码可读性,良好的设计,甚至是特定的最佳解决方案。因此,不要主观判断考查结果,即使通过了所有测试用例,你也有可能没有进入下一阶段的面试流程。
准备:
1.练习Leetcode上(https://leetcode.com/)的SQL问题和传统的数据结构/算法问题。
2.复习Brilliant上(https://brilliant.org/)的数学和统计问题。
3. SQL Zoo(https://sqlzoo.net/)和Mode Analytics(https://mode.com/sql-tutorial/introduction-to-sql/)都提供了可以各种可以在你自己浏览器中解决的SQL练习。
提示:
1.在开始写代码之前,通读所有问题。这一过程可以让你的潜意识开始处理问题。
2.从最困难的问题开始,当你遇到障碍时,先转向更简单的问题。
3.专注于先通过所有测试用例,然后考虑降低复杂度和提高可读性。
4.如果你已经完成并且还剩下几分钟,就去喝点东西并试着理清思路。最后一次通读你的答案,然后提交。
5.没有写完代码也没关系。有时公司会给你一个不合理的繁琐的编程试题,需要一周的时间然而却要求你在5-10个小时之内完成。假如你真的绝望了,你随时可以离开,把时间用来准备下一个面试。
HR的筛选
HR的筛选包括行为方面的问题,要求你解释简历总的某些部分,比如为什么你想申请这家公司,以及你可能在工作中遇到过的特殊情况的例子。偶尔你可能会被问到几个简单的技术问题,也许是一个SQL或一个基础的计算机科学理论问题。之后,你将有几分钟时间提出自己的问题。
请记住,与你交谈的人不太可能是技术人员,因此他们可能不太深入了解组织的岗位或技术方面。考虑到这一点,尝试将你的问题集中在公司、那里人员的履历以及面试流程等后勤问题上。如果你有他们无法回答的具体问题,你可以随时要求招聘人员将你的问题转给能够回答的人。
记住,面试是双向的,所以在花更多的时间去面试这家公司之前,你最好先识别一下是否有问题存在。
准备:
1.阅读岗位描述和公司描述。
2.查找你将要面对的面试官的信息,并尝试寻找你们之间的共通点。也许你们都在一个特定的城市工作过,或者在类似的非营利组织做过志愿者。
3.在接听电话之前浏览一遍你的简历。
提示:
1.准备好相关问题之后再开始。
2.让你的简历内容保持清晰。
3.找一个安静的空间来参加面试。如果不可能,请重新安排面试时间。
4.专注于在通话的前几分钟建立融洽关系。如果招聘人员想花几分钟谈论昨晚的篮球比赛,那就随他们吧。
5.不要说你现在或过去的公司的坏话。即使你工作的地方很糟糕,它也会让你有所受益。
技术电话面试
在面试的这个阶段,你将有机会接受团队的一位技术人员的面试。诸如此类的电话面试通常使用Coderpad(https://coderpad.io/)等平台进行,平台包括代码编辑器以及运行代码的方法。有时可能会要求你在Google文档中编写代码。因此,你需要在没有语法突出显示或代码完备的情况下完成编程。语言方面,通常会要求你用Python和SQL,但是这可能会因你面试的岗位和公司而异。
这个阶段的问题可能很复杂,从使用Windows函数解决的简单SQL问题到涉及动态规划的问题。无论难度如何,你都应该在开始编程之前提出澄清性的问题。一旦你对问题和期望有了充分的了解,就从做一个有效解决方案开始,这样你至少可以处理一些东西。但是,在考虑优化之前,务必告诉面试官你首先会以非最佳的方式解决问题。在你有成果之后,开始优化你的答案并使你的代码更具可读性。在整个过程中,描述你的方法是很有帮助的,因为面试官偶尔可能会帮助引导你正确的方向。
如果你在面试的结尾有几分钟的时间,请充分利用你正在与团队的技术人员交流的机会。向他们询问编程的标准和流程,团队如何处理工作以及他们的日常工作。
准备:
1.如果你将要面试的数据科学职位是工程组织的部分,请务必阅读《破解编码面试》(https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850)和《编程访谈要素》(https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836),因为你可能需要有软件工程师来咨询技术面试的内容。
2.抽认卡通常是复习可能在此阶段出现的机器学习理论的最佳方式。你可以自己制作或购买此套装(https://machinelearningflashcards.com/),价格为12美元。机器学习备忘单(https://ml-cheatsheet.readthedocs.io/en/latest/)也是一个很好的复习资源。
3.查看Glassdoor,了解可能出现的问题类型。
4.研究谁将面试你。拥有博士学位的机器学习工程师将以不同于数据分析师的方式进行面试。
提示:
1.如果你遇到困难,可以寻求帮助。
2.与朋友一起练习模拟技术电话面试或使用interviewing.io(http://www.interviewing.io/)等平台。
3.在开始解决问题之前,不要害怕要求一两分钟的时间思考问题。一旦你确定开始,通过你的方法来跟随面试官的思路是很重要的。
作业项目
作业项目在数据科学面试中越来越受欢迎,因为它们往往与你开始工作后将要做的事情有更紧密的联系。这一过程一般设置在技术面试之前、第一轮HR筛选之后,或者作为现场面试的可交付物。公司可能会测试你的处理模糊性的能力(例如,给定一个数据集,找到一些趋势或和业务利益相关的地方)或关注更具体的可交付成果(例如,给定一些数据,构建一个分类器)。
如果可能的话,尝试提出声明性的问题以确定你知道他们正在测试你的内容以及你的受众群体。如果你的作业项目的受众是商业利益相关者,那么填满幻灯片的技术术语并不是一个好主意。取而代之的,把重点放在表述可操作性的见解和建议,并给出技术术语的附录。
虽然所有作业项目可能在目标上有所不同,但共同点是你将收到公司的数据。因此,无论他们要求你做什么,第一步始终是探索性的数据分析。幸运的是,有一些自动的EDA解决方案,如SpeedML(https://speedml.com/automate-exploratory-data-analysis/)。你需要做的主要是研究数据的特殊性。通常情况下,公司已经合成地生成数据,留下特定的“复活节彩蛋”供你查找(例如,以客户收入为基础的电力分配法)。
完成作业之后,你可以试着从朋友或导师那里得到一些反馈意见。通常,如果你在一个作业工作了足够长的时间,你可能会专注于细节而忽略整体,所以从一个不知道具体细节的人那里得到反馈总是很好的。
准备:
1.练习“作业”测试,你可以从datamasked网站购买,也可以查看Github上repo里的没有问题的答案。
2.复习可能有助于你的工作的库和工具。例如,用于快速数据可视化的SpeedML或Tableau。
提示:
1.有些公司会需要你邮件给他们以获取更多信息的项目,因此不要害怕与他们联系!
2.一个好的作业项目往往可以抵消现场面试的任何不良表现。理由是,尽管你不知道如何解决一个特定的面试问题,但你已经证明你有能力解决他们每天可能遇到的问题。因此,如果需要再刷更多LEETCODE的问题和改进你的现场演示文稿之间做出选择的话,后者更值得重视。
3.确保保存你所做的每个现场测试。你永远不知道在将来的测试中何时需要重用其中的某一组件。
4.只要你可以陈述完整,你也可以做假设。在信息不对称的给定情况下,最好做一个假设,而不是不断地用问题轰炸你的招聘人员。
现场面试
现场面试将包括一整天的一系列面试,包括一个午餐面试,通常用于评估你的“文化适应性”。
重要的是要记住,任何让你进入这个阶段的公司都希望看到你成功通过面试。他们已经花了大量的金钱和时间来面试候选人并将其范围缩小到现场面试的规模,所以你要对你的能力有点信心!
务必向你的招聘人员索要一份将会面试你的人员名单,以便你有机会事先做一些研究准备。如果你将要和一个经理进行面试,你应该专注于准备更高层次的问题,例如公司战略和文化。另一方面,如果你将要与软件工程师进行面试,他们可能会要求你编写展示一个编程问题。如前所述,面试官的背景将影响他们会问的问题类型。
准备:
1.尽可能多地阅读有关这个公司的信息。公司网站,CrunchBase,维基百科,最近的新闻文章,Blind,Glassdoor等,都是信息收集的重要资源。
2.与朋友进行一些模拟面试,他们可以就你可能展示的任何不顺畅或者答案漏洞给你反馈。如果你将在现场提供带回家的演示文稿,这将特别有用。
3.准备好常见的行为面试问题的故事,例如“介绍一下你自己”,“为什么选择这家公司”,“讲一讲你必须与不好相处的同事打交道的一次经历”。
4.如果在现场面试环节中有任何软件工程师,那么这是一个刷数据结构和算法的好机会。
提示:
1.不要太严肃。这些面试官中的大多数人更愿意回到他们的办公桌前解决他们被分配的项目。因此,尽量为面试官带来愉快的体验。
2.确保穿着到位。如果你在东海岸的财富500强公司中进行面试,那么你可能需要穿得比在西海岸面试一家创业公司更加保守。
3.利用浴室和淋浴间歇来重振自己。
4.提出你真正感兴趣的问题。你正在面试公司,就像他们正在面试你一样。
5.在现场面试后给所有招聘人员和招聘经理发送简短的感谢信。
录用和协商
与许多人进行协商可能听起来很不舒服,特别是那些没有过工作经验的人。然而,现实情况是,协商几乎没有任何不利因素(只要你有礼貌)反而拥有很多好处。
通常,公司会通过电话通知你他们计划给你录用通知。此时,你很有可能立即允诺并接受录用。正确的做法是,你应该表达你对这个录用的兴奋,并要求他们给你一些时间与你重要的人或朋友讨论。你也可以预先告诉他们你还在其他几家公司进行面试,并且你很快就会回复他们。有时候录用会有截止日期,但是,这些录用通知通常是非常随意的,可以通过你的简单请求推迟。
你的协商能力最终取决于各种因素,但最大的因素是可选性。如果你手头有两个很棒的录用通知,那么协商要容易得多,因为你可以选择离开。
当你在协商时,有各种各样的杠杆你可以拉。三个主要因素是基本工资、股票期权和签约/安置奖金。每个公司都有不同的政策,这意味着一些杠杆可能比其他杠杆更容易拉动。一般来说,签约/安置费是最容易谈判的,其次是股票期权,然后是底薪。所以,如果你在一个比较弱势的位置,就要求更高的签约/安置奖金。然而,如果你处于强势地位,增加基本工资可能对你最有利。原因是,它不仅会在你加薪时起到更大的乘数作用,还会影响公司的福利,如401K匹配和员工股票购买计划。也就是说,每种情况都是不同的,所以要确保根据需要重新确定协商内容的优先级。
准备:
1.协商方面最好的资源之一是Haseeb Qureshi撰写的一篇文章(https://haseebq.com/my-ten-rules-for-negotiating-a-job-offer/),里面详细介绍了他如何从众多毕业生中脱颖而出收到Google,Airbnb和其他许多录用合同。
提示:
1.如果你不擅长即时谈话,那么让招聘人员的电话转到语音邮件是个好办法,这样你就可以在给他们回电之前组织好语言。不太可能因为面试通常是通过电子邮件完成的而收到拒绝电话。这意味着当你回电话给他们时,你应该在心理上排练如果他们告诉你他们想要录用你时你想要说些什么。
2.表现出对公司的真正兴趣。当招聘人员感知到候选人只是为了薪酬,他们可能不太可能在协商过程中帮助你。
3.总是给事情留下好的记录!即使你不接受公司的录用,和你的招聘人员保持礼貌和坦率也很重要。科技行业可能是一个非常小的圈子,你的声誉非常重要。
4.在你手上有实际的录用合同之前,不要拒绝其他公司或停止面试。口头录用有反悔的历史,所以在你有纸质的东西之前不要庆祝。
记住,面试是一种可以学习的技能,就像其他任何东西一样。希望本文能够让你对数据科学面试流程中的内容有所了解。
这个过程也并不是完美的,有时候你没有给面试官留下深刻的印象因为你没有一些晦涩的知识。但是,通过反复坚持和充分准备,你将能够很快获得一份数据科学的工作!
注:
翻译文章首发于 微信 @数据派THU 公众号