Uber & Beyond的工程师面试流程导航

0
Uber & Beyond的工程师面试流程导航

作为世界上发展最快的公司之一,优步一直在寻找新的工程师来帮助我们使交通更安全、更可靠。为了实现这一目标,我们正在以前所未有的规模开发技术——从机器学习算法和数据可视化平台,到移动框架和自动驾驶汽车。

准备好迎接挑战了吗?如果是这样,你的第一步(当然是在申请之后)是与我们的团队见面并面试,以确定优步是否适合你!继续往下读,了解更多掌握技术面试过程的步骤,包括技巧、要点和其他建议作为候选人脱颖而出并在优步工程公司找到一个家。

优步路易斯维尔工程团队的成员分享了在技术面试过程中导航的技巧。
优步路易斯维尔工程团队的成员分享了在技术面试过程中导航的技巧。

启动申请流程

在我们的网站上提交申请后职业页面,招聘人员会查看你的résumé,然后联系你,安排一次简短的电话交谈。在这个电话中,他们会要求你描述你的技术经验,为什么你对申请的职位感兴趣,以及更好地了解你在技术职位中寻找什么。如果这个机会看起来既符合你的职业目标,也符合我们的需求,他们会安排你和你申请团队的软件工程师或工程经理进行技术电话面试。如果你申请的职位已经有人了,或者我们了解到公司其他部门有更适合你的兴趣和技能的职位,我们会建议你考虑申请其他职位。如果一切顺利,我们将邀请你参加现场面试。接下来的部分描述了如何准备这些面试,以及在优步工程面试过程中会发生什么。

面试前

在面试过程中尽早开始准备技术面试是一个好主意——甚至在提交申请之前。你的准备工作应该包括三个关键部分:准备自我介绍、复习计算机科学基础知识以及解决实际问题。

第一步是最容易被忽视的,但是能够对你的背景以及为什么你对面试的职位感兴趣进行“电梯游说”是很重要的。当谈到你以前的经历时,一定要说明你的个人贡献。例如,如果你是一个开发全栈web应用程序的团队的一员,请具体说明你对项目的贡献。毕竟,“我负责设计我们的数据库模式和后端API端点”比“我们构建了一个显示照片的应用程序”更有力。在这个过程中,你也应该有勇气诚实地说出你在下一步职业生涯中寻找的是什么。这对于帮助我们确定满足您和我们的需求的最佳角色至关重要。

你对计算机科学基础知识的记忆可能有点生疏了。在面试前回顾一下基本的数据结构和算法,这将帮助你认识到它们在解决面试问题时发挥作用,例如,认识到一个问题的数据自然适合树状结构,这可能会推动你找到递归的解决方案。对于经验丰富的专业人士来说,与讨论实际工作经验相比,讨论这些基本概念往往是事后才想到的,但做好准备也无妨。

你和面试官会讨论的另一个问题是,“你的解决方案的规模有多大?”当出现这种情况时,您应该准备从它们的角度谈论您所从事的解决方案的运行时和内存需求大魔神的复杂性。事实上,你解决问题的第一次尝试可能会导致一个幼稚的结果O (n2解决方案,认识到这一点可以让你知道如何解决同样的问题O(n log n)时间。这也会给你一个机会,让你和面试官谈谈在Uber工作是什么感觉,Uber在全球拥有数百万用户。

一旦您刷新了数据结构和算法的知识,就应该尽可能多地进行编程练习。ACM-ICPC是此类问题的良好来源存档从过去的编程比赛来看,CodeWars,以及这本书破解编码面试.为了模拟一个真实的面试,你应该给自己一个大约30分钟的时间限制。如果你有一个朋友愿意阅读你的解决方案并提供反馈,这也是一种有益的改进方式,当然你也应该愿意为他们做同样的事情作为回报!

应聘者在面试过程中可以使用HackerRank或白板来解决编码问题。
应聘者在面试过程中可以使用HackerRank或白板来解决编码问题。

面试过程中

在优步的技术面试中,你应该期待什么?我们发现,面试软件工程师最实用的方法是向他们提出现实世界工程挑战中的编码问题。这意味着我们不会向您展示逻辑谜题或脑筋急转弯,如“一辆校车可以容纳多少个高尔夫球?”简而言之,我们感兴趣的是你如何将你的想法转化为代码,以及我们的工程方法是否与你的匹配。

一般来说,你可以用自己选择的语言来回答面试问题。然而,我们真正的意思是,你不应该选择在中国进行面试Haskell如果你不熟悉这些语言只是因为你面试的团队使用这些语言,而你认为这会给你的招聘经理留下深刻的印象。最好是用你熟悉的语言获得一个有效的解决方案。这可能意味着你的面试官不熟悉你选择的语言,这没关系——在这种情况下,你应该能够足够清楚地解释你的代码,让他们理解它是做什么的。

一个常见的问题是是否允许在解决方案中使用外部库。例如,你可以问有关using的问题NumPy用于处理矩阵的问题PythonMomentJS用于处理日期和时间节点)。作为一般规则,最好将自己限制在所选语言的标准库中。但是,如果您知道一个通用库或一组库可以帮助解决某种类型的问题,您可以向面试官提及这一点,以便他们更好地了解您对所选语言的生态系统的熟悉程度。

格式

无论是电话面试还是面对面面试,你通常都有大约一个小时的时间和每个面试官在一起。主要的区别是,面对面面试时,你将连续进行六次这样的面试,中间有短时间的休息,午餐时间较长。每次面试都是从你向面试官介绍自己开始的。这是你留下好印象的机会,让面试官知道你为什么对这个职位感兴趣。

然后,您将花费30-40分钟完成编码练习,如上所述。在电话面试中,你的面试官会使用HackerRank在输入时读取代码。你的面试官也可能为这个问题准备了一些测试示例,以看看你的代码是否如预期的那样工作。对于面对面的面试,你可以使用HackerRank或在白板上解决这些问题,这取决于面试官的偏好——事实上,在面试当天,你可能会有多种格式。

编程练习结束后,你和面试官将花5-10分钟讨论你以前的工作经验。这可能包括行为问题,比如:“告诉我一次你与团队成员解决技术分歧的情况”或“描述一次你需要从一个不太积极响应的人那里获得信息的情况——你是如何处理的?”能够谈论你过去的经历以及你从中学到了什么能让面试官更好地了解你的工作风格。

每次面试的最后5-10分钟是留给你向面试官提问的时间。这是一个很好的机会,让你更多地了解正在面试的团队,了解你将要从事的技术,以及在这家公司工作是什么样子。这也是一个很好的机会来表达你对这次机会的兴奋。没有问题要问面试官的求职者通常被认为对面试不感兴趣,所以在面试前花点时间想一些能引起你兴趣的话题,并想从面试官那里学到更多。请记住,面试不仅仅是我们提问的机会,它也是你拷问潜在队友和经理的机会,让他们了解在这些项目中工作是什么感觉。

掌握编码练习的技巧

既然你要把面试的大部分时间花在编程练习上,那么把大部分准备时间花在培训上也是有意义的。这里要记住的最重要的事情是沟通面试官。例如,当他们给出例题时,问一些明确的问题,以确保你理解了练习。如果问题是在单词列表中找到字谜,那么确保你首先知道什么是字谜是个好主意。这也使您有机会识别潜在的边缘情况,例如在确定两个单词是否是字谜或结果的顺序是否重要时,大小写是否重要。

尽管这似乎是不言而喻的,但在解决问题时大声思考会让面试官深入了解你的思维过程。谈谈你正在采取的方法,以及你能找到的任何折衷之处。如果您不得不在两种不同的数据结构之间做出选择,请解释为什么选择了其中一种。给你的面试官一个机会来评论这些权衡——他们可能会告诉你一开始不要担心这些问题(比如内存开销)。在面试的后期,你可能会有时间来解决某些边缘情况或改进解决方案的性能。如果有机会,强烈推荐后一个步骤:增强结果表明您可以迭代现有的解决方案来改进代码。

编码练习的目标应该是为了得到一个有效的解决方案(如果不是,可能有一个很好的理由!)尽管识别边缘情况令人印象深刻,但您应该始终将重点放在解决问题上。编写一些测试来帮助检查您的解决方案也是非常有价值的;这将帮助您捕捉在稍后优化代码时可能意外引入的任何回归。

经常被忽视但极其重要的一点是,使用这个练习来展示您编写可读且组织清晰的代码的能力。要做到这一点,可以考虑选择明确的变量和函数名称,并将解决方案的各个部分分成不同的函数,特别是如果面试官在随后的面试中引入了额外的复杂问题。就像在现实世界的工程环境中一样,清晰、简洁的代码展示了与他人协作和良好工作的能力。

面试之后

在电话筛选和亲自面试之后,给面试官发一张便条是一个好主意,感谢他们抽出时间来面试。如果你没有面试官的联系方式,你也可以把这个发给你的招聘人员。

在你的现场面试后的几天内,你就会收到招聘人员关于你面试结果的反馈,他们会为你接下来的步骤提供指导。

如果你面试的团队决定不给你加薪,你可以向招聘人员询问下次你能做得更好的地方,或者是否有其他更适合你的开放机会。也欢迎你向招聘人员反馈面试过程的情况。我们一直在努力改进我们的招聘流程,欢迎提出建议!

Uber路易斯维尔工程办公室是我们地图数据团队的几名成员的家。
Uber路易斯维尔工程办公室是我们地图数据团队的几名成员的家。

下一个步骤

其中许多技巧也适用于优步以外的技术面试,但你会发现每家公司的面试流程略有不同。最重要的是,利用你的技术面试来确定这个职位是否与你的职业目标和技能相匹配。在一天结束的时候,面试过程是团队和候选人之间关于这个机会是否对双方都有利的对话。

现在你已经知道如何在优步工程面试过程中导航,考虑申请一个角色在我们队!

马特·迪肯森(Matt Dickenson)是Uber地图数据团队的软件工程师,专注于机器学习和计算机视觉。他在路易斯维尔,CO办公室工作。

评论