技术面试的Dos and Don’ts,你知道多少?
今日份知识你摄入了么?
技术面试不仅仅是测试你对数据结构、或是计算事件发生概率的算法的理解。
摄影:Icons8 team 图片来源:Unsplash
对于许多只参加过一两次面试的候选人来说,他们可能还意识不到这些问题,因为他们更专注于面试的技术部分。但是,在进行技术面试时,我们希望以下这些建议可以帮助你更好地为未来做好准备。
技术面试要做的(Dos)
要熟知数据
摄影:Mika Baumeister 图片来源:Unsplash
我记得我第一次参加FAANG(Facebook、Apple、Amazon、Netflix、Alphabet)的面试。
面试的第一个技术部分结束之后,我接受了技术项目经理(Technical Project Manager)的面试。他们开始询问我的过往经历和过去做过的项目。起初,面试进行地还算顺利。然后他们开始询问这些经验对当前职位有何影响。
我回答之后,他问了一个我从未想过的问题。
“那个项目一共节省了多少时间?”
我以前从未想过这个问题。在我职业生涯的那个阶段,我基本只是按照别人的要求去做。我从未想到过“影响”和“节省时间”这样的大局概念。作为项目开发者,我还是太年轻了,经验不足,我只会想到要如何编程、以及如何满足别人的需求。突然间,我变得不堪一击。
剩下的面试内容也是这样。我每回答一个问题,都会被戳穿,暴露我除了编程之外没有什么别的技能。他们想要的是自主意识强、且具有独立思考能力的员工,但老实说,在我目前的工作中,我并没有费太多心思在这方面。
所以,我的建议是——熟知数据。像亚马逊这样的公司是非常受指标驱动的。他们希望开发人员和工程师不仅负责开发。这意味着候选人需要做好准备。当你准备面试时,不仅要准备好一两件关于你的故事,还要确保你已准备好解释该事件产生的影响。
想想你过去做过的项目,即使你的公司没有直接计算影响和/或估计它节省了多少时间,你也应该花一些时间自己估算一下。
你还可以准备一些指标,表明你有大局观的概念,而且在该项目中自主意识非常强。这可以让你脱颖而出,并帮助你更好地了解如何在 FAANG 面试中如何表现。
要在开始之前先讨论清楚你的问题
图片来源:http://grownupsurvivalguide.com/2016/09/24/10-tips-for-rocking-an-interview/
大多数人的前几次白板面试都会很艰难。你想在答题前就在脑海中模拟出完美答案,所以面试过程中你可能会直接愣住。或者,你可能还没有与面试官沟通你的答题计划,就开始答题。
一听到问题就立即开始寻找解决方案听起来好像很好,但这可能会让你在一开始就误入歧途。你可能会发现自己花了 15 分钟来回答第一个问题,但却根本答不出来。
因此,要提前花几分钟时间给面试官解释你的答案框架。概述你想要使用哪些方法、数据结构和算法来获得解决方案。这不仅能帮你解决问题,还可以帮面试官了解你的思考过程。
即使你没有给出最优的答案,有时面试官也会对你好感加倍。因此,沟通非常重要,谈论你解题过程可以展示你传达解决方案的能力。
此外,优秀的面试官通常会引导你找到答案。这并不意味着他们会为你解释这个问题,但他们可能会提出问题,确保你会考虑到边缘案例,避开一些主要的陷阱。
老实说,我记得的最棒的一次面试完全不像是面试。感觉就像两个工程师一起解决问题。当然,也有一些面试官根本不会帮你。
要准备好提出疑问
听着像是废话,但没有面试官会喜欢对工作没有任何疑问的候选人。但遗憾的是,你可能并不关心你得第一份工作的内容。你只想要这份工作,所以很难提出有意义的问题。
但这并不代表你不需要准备一些问题来表现出你对这个职位很感兴趣。
我不建议你 Google 来找问题,因为这类搜索引擎提供的都是一些宽泛的、公司层面的问题。相反,你应该试着问面试官与他们职位相关的问题。例如:
1. 你最近在技术方面遇到的最大挑战是什么?
2. 你觉得公司可以提供良好的发展机会吗?
3. 你如何描述该公司的工程文化?
等等。
这些问题可以表明你对工作领域的兴趣,同时还可以帮助你与面试官建立更多联系。
现在我已经有了很多经验,上面这些是我会问的问题,因为我知道,这不仅仅和薪水有关,而是我真的需要了解对公司具有挑战性和产生影响的问题和项目。
当然,研究厉害的技术很有趣,但总会有更加厉害的新技术。与使用的各种技术相比,我更关心项目带来的影响。
要和朋友练习或在校内模拟
读到这篇文章的人可能还在上大学期间,有些可能已经步入社会。对于在校大学生,学校可能会有模拟面试的服务。如果你有这样的条件,就好好参加这些活动。对于那些已经步入社会的人,你可以向朋友寻求帮助。
在模拟面试中,导师和职员通常会帮学生进行模拟,而且他们熟知面试的进行情况。这就意味着,参加模拟面试的学生能最大程度地接近真实面试地内容。
如果没有这种条件,比较好一点的情况是,你有其他计算机科学系的朋友,或者已经在科技公司工作的朋友帮你。讨论问题、并在白板上解决问题,而不是在计算机上解决问题时,你越能应付得来,真正面试时的表现就会越好。
大家都认为能参加面试的候选人擅长编程,因此也擅长面试。遗憾的是,编程技能并不一定能转化为面试技能,所以勤才能补拙!
技术面试中不要做的(Don’ts)
不要因为面试一环失败就被击垮
当你得到面试的机会,通常要经过几轮才能通过。几轮面试可能涉及数据结构、系统设计、行为面试等,这些大型公司无所不用其极,不会让你轻松地走出面试房间。
关键是,成功与失败的机率是共存的。
面试过程中,你可能会陷在一个问题里出不来。
你可能不清楚他们所说的面向对象设计是什么。
技术领域涉及广泛,你不可能无所不知。有一个问题没准备好是很正常的状况。
关键是,不要让一轮糟糕的面试决定你其余的面试。即使你内心深处知道你那一轮表现很差,也要保持乐观。
原因有很多个:
一,如果你在其他面试中做得足够好,公司可能会在几个月后再次邀请你参加面试,甚至面试一个不一样的岗位。保持乐观可能很难,但你永远不知道它所带来的影响。
二,这只是一个很好的练习机会。所有人都不希望有技术面试,但它们确实有可能会是。所以,你练习得越多,下一次面试的准备就越充分。
即使你有一轮面试很糟糕,你也需要保持乐观。
不要以为你知道面试官会问什么问题
你永远不知道面试时会被问到什么问题,所以,问问找你的HR是个好办法。大多数 FAANG 都会提供一些学习材料,这非常有用。但是,如果你准备去面试现场,而你还没有从HR那里得到任何提示,那么你应该问问他们你应该准备些什么。
有的公司非常专注于数据结构和算法;有的公司会把与面向对象和系统设计问题混为一谈。你最不想做的事情就是成为一名只会处理决策树、处理反转链表、或二叉树追踪方面问题的数据科学家。
这种面试会又尴尬又累人。说实话,这也是在浪费每个人的时间,如果公司没有让你为这些问题做好准备……那么他们将占很大一部分责任。但你还是应该主动问!
参加面试时,你要尽可能地获得自己的优势。
不要太执着于解决方案
我们有一个坏习惯,那就是过度执着于解决方案。讨论问题时,你的面试官可能会一直给你一些提示,以确保你的回答方向不出现偏差。
然而,当我们在思考问题时,我们通常会遵循同样的思考路径,即使这条路错地很离谱。
虚心接受提示。如果你在同一问题上花了15分钟都没有取得任何进展,请深呼吸,思考你的回答方向是正确的。
如果你在很长一段时间内都没有找到正确的解决方案,并且你知道还有三四个问题需要回答,那么就考虑花一到两分钟来确定你的回答方向没有偏差。这很难做到,但不要过度执着于错误的解决方案。
不要说技术栈的坏话
你可能喜欢 Hadoop、Go 或其他语言或基础架构。你也可能讨厌其他语言或架构。
但这并不意味着你要让所有人都知道你喜欢某一语言或讨厌某一语言。这类人经常被认为是精英主义者。给别人感觉是,你比其他人更了解这类语言,因为你用的语言是最好的,而其他人都在石器时代编程一样。
团队和公司会使用多种语言。如果你开始谈论某一特定的技术堆栈,这一技术堆栈可能就是这个公司的。
当然,如果你有自己喜欢的语言,可以随时说出来。但一般来说,消极的观点可能让面试官对你产生不好的印象。
不要让一次糟糕的面试毁了你今后的面试
这听起来有点类似于不要让一轮面试定义你,但这个涉及范围更大。不要让一次糟糕的面试定义你。我们很多人都会经历多次面试,其中不乏失败的经历。
每次收到以下电子邮件或电话都会让人感觉郁闷:
“对不起,你不够优秀。”
看到这样的信息,都会让人感觉很糟糕。
但是,你不能让一两次糟糕的面试打败你。我们经常看到一些人在得到这份工作之前,在同一年内多次参加同一家公司的面试。让一个面试来定义其余的面试是错误的。
我们想对每个面试的人说的是:不要放弃。要学习的东西很多,你可能无法全部完成。没关系。只要保持积极,就能通往光明大道。
结论
技术面试难度很大。面试官想要的不仅仅是程序员,还要能够掌控项目、自主思考、独立工作。职位描述总是想要程序员具有五年以上经验,可以用 30 种不同的语言,并且知道如何使用世界上所有的云技术。不要让这些要求影响你的学习,或阻止你前进的步伐。
坚持申请工作就可以了!
不要放弃!
原文作者:Seattle DataGuy
翻译作者:Lia
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://betterprogramming.pub/the-dos-and-donts-for-passing-your-technical-interview-1f2503c10733
本周公开课预告
往期精彩回顾
点击“阅读原文”查看数据应用学院核心课程