面试流程——谷歌资深面试官经验总结
- 概述
- 面试题的来源
- 准备时间表与注意事项
- 面试评估流程
- 答题情况
- 着装规范
- 十大常见错误
- 常见问题解答
1.1 概述
大多数公司的面试流程其实都大同小异。本章会简述面试流程,以及企业到底想招募什么样的人才。这些信息将指导你如何做好面试准备,以及在面试过程中和面试结束后该如何应对。
收到面试通知后,你通常得先经历一次筛选面试(screening interview),一般通过电话进行。顶尖高校的应届毕业生则可能需要参加现场的筛选面试。
不要因“筛选面试”这个词儿而掉以轻心,筛选面试也很有可能涉及编码与算法问题,要求不见得比现场面试低。如果不确定它是不是技术筛选面试,不妨问问招聘助理面试官是什么来头,若是工程师,那十有八九会与技术相关。
许多公司会在面试中运用在线同步文档编辑系统,但也有可能让你直接在纸上写好代码,然后在电话里念给他们听。有些面试官甚至还会给你留“家庭作业”,或是要求你用电子邮件将写好的代码发给他们。
在现场面试(on-site interview)之前,通常会有一两轮筛选面试。现场面试大概有4到6轮,其中一轮可能是午餐面试。当然,午餐面试比较随意,面试官一般不会问你技术 问题,甚至不会纳入面试评价范畴。但同时,这也是难得的好机会,你可以跟面试官探讨自己感兴趣的问题,了解公司的企业文化。其他几轮面试主要涉及技术问 题,包括编码和算法等。此外,你可能还要回答与简历相关的问题。
面试结束后,面试官们会聚在一起讨论你的表现,或者提交书面评价。大多数情况下,公司招聘人员都会在一周内给你回复,告知应聘进展。
要是已经望穿秋水等了一个多星期,你也可以主动询问进展。就算招聘人员没有回应,也并不表示你被拒了(至少大的高科技公司是这样,其实几乎所有公司都是如此)。我再重复一次:没有回应表示你的应聘结果还是未知数。当然,人们都希望招聘方在得出最终结论时,及时通知求职者。
拖拖拉拉的情况确实有。等不及的话,不妨问问相关招聘人员,但务请有礼有节。招聘人员和我们一样,他们很忙,有些人会因此容易忘事。
1.2 面试题的来源
求职者经常会问我,某些公司最近都喜欢问哪些面试题?他们总以为面试题会应时而变。实际上,公司本身对面试题并没有什么倾向,这完全取决于面试官的个人喜好。容我解释一下。
在大公司里,面试官通常需要先参加一些面试培训课程。在谷歌,担任面试官之前,我先参加了一次由外部公司提供的专门培训。培训课程为期一天,有一半 时间侧重于法律层面的事务,比如,面试官不能探问求职者的婚姻状况,不得询问种族,等等。另一半时间则在探讨如何应对“刺头”求职者,比如当问及编码问题 或其他令求职者认为是在“羞辱”自己的问题时,要是求职者“暴跳如雷”,该怎么应对。培训过后,我又实地观摩了两次真正的面试,然后就开始独自面试了。
就是这样。我们受过的培训也不过如此,其实所有公司都大同小异。
根本就不存在什么“谷歌官方面试题清单”,也从来没有人要求我一定要问哪些特定的问题,或者必须避开哪些话题。
那我的面试题从何而来呢?其实,来源和大家一样。
面试官也当过求职者,他们会借用自己当年被拷问过的题目。又或者,有些面试官也会彼此交换题库。还有些人喜欢上网找问题,比如CareerCup.com网站。有些面试官也可能从上述渠道收集面试题,并或多或少做些调整。
就算真有公司给面试官准备好问题清单,这种情况也并不多见。面试官通常也会自行挑选问题,而且大家往往会有五六个常用的备选题目。
因此,下次在你想知道谷歌“最近”都问些什么问题的时候,不妨先停下来想一想。谷歌与亚马逊的面试题其实没什么不同,他们需要的都是软件开发人才。至于面试题是不是“最近流行的”也就更无关紧要了。万变不离其宗,因为这本来就得靠面试官自己去把握。
当然,总体上,不同的公司在风格上存在差异。互联网公司往往会提些系统设计方面的问题,而那些使用数据库的公司则明显偏爱数据库方面的问题。然而,大部分面试题无外乎就是数据结构和算法之类的,任何公司都会问到。
1.3 准备时间表与注意事项
“台上一分钟,台下十年功”,事实上你的面试表现取决于你的功底——离不开多年的积淀。你需要刚好具备能为公司所用的技术经验,然后还要准备好在面试中解决实际的技术问题。下面的时间表和流程图可以给你一些启发。
如果你起步比较晚,也不用担心。“尽人事,知天命”,请安心准备,祝你好运!
1.4 面试评估流程
招聘人员可能会告诉你,他们主要考查四个方面:工作经验、企业文化契合度、编程技能及分析能力。这四个方面相辅相成,但在决定录用与否时,分量最重的通常还是编程技能和分析能力(或者看你是否聪明)。这也是为什么本书的主要篇幅都在探讨如何提升编程与算法技能。
当然,虽说编程与算法技能往往最为重要,但并不表示你可以忽视其他两个方面。
一旦进入大型科技公司的面试环节,你之前的工作经验就不是特别重要了,但它可能会左右面试官对你的看法。比如,如果你说起以前写的某个复杂程序的精 彩之处,面试官很有可能会想:“哇,她可真聪明!”一旦他认定你智力超群,可能就会下意识地忽略你所犯的小错误。总之,面试并不会十分精确,对某些“软问 题”做好充分准备会大有裨益。
创业公司比大公司更看重企业文化契合度(或你的个性,主要看是否与公司合拍)。举个例子,如果公司的企业文化鼓励员工独立做决定,那么喜欢听从指导的人就不太适合了。
此外,求职者因为过于自大、巧辩或抵触而被淘汰的情况也并不少见。我就遇到过,有位求职者对我提问的用词吹毛求疵,并抱怨这导致他解题不太顺利,后 来他还对我的引导方式心生不满。这种“抵触心太重”的表现其实也是一个警示,果然,其他面试官对他的感觉也很不好。最后他被淘汰了。谁会愿意跟这种人一起 共事呢?
所以,你应该注意以下几点。
- 如果人们都认为你骄傲自大、过于狡辩,或有其他负面评价,那你最好在面试中收敛一下。个性不讨喜的话,哪怕你的表现再好,也可能会被拒。
- 准备一些与简历相关的问题。虽然这不是最重要的因素,但也不能掉以轻心。稍微花点时间准备就能起到很好的效果,做到“四两拨千斤”。
- 把主要精力用在编程与算法问题上。
最后,我还是要再强调一遍,面试并不会十分精确。你的表现可能会有失水准,招聘委员会(或不管是谁)有时候也会做出错误判断。就像任何群体一样,招聘委员会也可能会被某位主导人物的观点所左右。这也许不公平,但这就是生活。
记住——这次被拒绝并不代表永远。一年内你还可以重新应聘,很多求职者都有过失利后再成功的经历。
不要气馁,失败是成功之母。
1.5 答题情况
有则谣传流传甚广且颇具迷惑性:求职者必须答对全部问题才会被录用。事实绝非如此。
首先,面试题的答案很难用“正确”和“错误”去简单评判。我个人在评估求职者的面试表现时,一般不会只看他们答对了几道题。相反,我会考量其最终解法是否最优,用时多久,代码整洁与否。这不只是单纯的是非判断,还要综合考虑很多因素。
其次,你的面试表现还会拿来跟其他求职者作比较。比如说,你用15分钟出色地解决了一道题,而另一个人不到5分 钟就搞定了一道比较容易的题,是否就意味着那个人的表现比你好呢?也许是,但也未必。很自然,面试官出的题越简单,他们越是希望你尽快给出最佳答案。但要 是题目很难,他们也不会指望你能答得又快又好,毕竟,出点纰漏也是在所难免的。
我在谷歌评估过数千名求职者的面试资料,其中只有一位求职者的面试表现堪称“完美无瑕”。其他人,包括最后被录用的几百个幸运儿,都或多或少犯过一些错。
1.6 着装规范
软件工程师一般都穿得比较随意。这一点从面试的着装规范也看得出来。参加面试时,推荐做法是穿得比同级别员工稍好一点。
以下是我给软件工程师(及测试人员)的面试着装建议,意在让大家找到一个“平衡点”:不要穿得过于正式,也不要太随意。其实,有很多人还是穿着牛仔裤和T恤衫参加创业公司或大公司的面试,也不会有什么问题。毕竟,公司不是看你穿什么,而是看你的编程水平。
创业公司 | 微软、谷歌、亚马逊、 Facebook等科技巨头 | 非科技公司 (包括银行) | |
---|---|---|---|
男性 | 卡其裤、休闲裤或整洁得体 的牛仔裤。Polo衫或礼服衬衫 | 卡其裤、休闲裤或整洁得体 的牛仔裤。Polo衫或礼服衬衫 | 套装,不打领带(可 带一条领带以防万一) |
女性 | 卡其裤、休闲裤或整洁得体 的牛仔裤。大方得体的上衣 或毛衣 | 卡其裤、休闲裤或整洁得体 的牛仔裤。大方得体的上衣 或毛衣 | 套装,或得体的休闲裤 配整洁的上衣 |
这些只是指导建议,具体还要参考公司的企业文化。此外,如果你应聘的是项目经理、开发主管或其他管理层职位,面试时最好还是穿得正式一点。
1.7 十大常见错误
错误一:只在计算机上练习
如果你正准备参加海洋游泳比赛,你会只在泳池里练习吗?应该不会。你得去体验大风大浪及海洋里各种情况带来的影响。所以,你肯定会希望到海洋中实地训练。
在计算机上借助编译器演练面试题就像只在泳池里练习一样。抛开这个环境吧,让我们拿出纸和笔。你可以在写好全部代码并做过人工测试之后,再在计算机上用编译器进行验证。
错误二:不做行为面试题演练
很多求职者将全部时间花在演练技术问题上,而忽视了行为面试题。你猜怎么着?面试官可是两者都会考查的。
而且不止于此,你回答行为问题的表现其实还会左右面试官对你技术能力的看法。行为问题的准备工作其实相对比较轻松,而且容易达到事半功倍的效果。用心回顾你以往的项目和经历,然后准备一些小故事。
错误三:不做模拟面试训练
假设你要准备一场重大演讲,所有同事和相关人员都将列席,而且它还关乎你的未来。要是只在头脑里无声地练习演讲,到了真正演讲时,你肯定会发狂的。
光是纸上谈兵,不做模拟面试也会陷入同样的境地。如果你是一名工程师,肯定认识不少同行。不妨找个朋友帮你做模拟面试。作为回报,你也可以给他当一回面试官。
错误四:试图死记硬背答案
死记硬背答案最多只能解决一些特定问题,但是一碰到新的题,你可能就傻眼了。而且,基本上你不太可能碰上出自本书的题目。
最靠谱的做法就是,不看答案,先把书里的题全部认真做一遍。这样你才有可能练就各种技能和技巧,从容应对新问题。就算最后你只能大概复习一下为数不多的题,这种做法也会对你很有帮助。质量胜于数量。
错误五:不大声说出你的解题思路
透露个秘密:面试官才不会知道你心里想什么。因此,面试时默不作声,我根本无法了解你的思路。假如你沉默时间过长,我还会误以为你毫无进展。你得多出声,没准说着说着就找到了解法。请大声说出解题的思路,这样面试官就会知道你还在处理这个问题,没有卡壳。
这么做还有个好处就是不至于跑题,从而有助于你尽快找到解法。当然,最大的作用就是突显你强大的沟通能力。何乐而不为呢?
错误六:过于仓促
写程序不是什么竞赛,面试也不是,所以解题时不要太过仓促。代码写得太草率容易出问题,也说明你这个人不够细心。请放慢节奏,有条不紊,多做测试,问题考虑得周全些。这么一来,最终你反而能更高效地给出答案,错误也会少一些。
错误七:代码不够严谨
其实每个人都写得出完美的代码,但有时我们还是会在面试中写出错误百出的程序,不是吗?代码冗余、数据结构乱七八糟(比如,缺少面向对象设计)等 等,这些都是常见错误!写代码时,不妨设想一下你是在处理实际问题,要注重可维护性。将代码划分成不同的子程序,并精心设计数据结构来处理相应的数据。
错误八:不做测试
在日常工作中,你不可能不做任何测试就提交代码,既然如此,为什么要在面试中省略这一步呢?写完代码后,请“运行”(或者审查)一下程序来验证结果。或者,在处理复杂问题时,你还可以边写代码边测试。
错误九:修正错误漫不经心
程序总会有bug,这就是生活或编程的本来面目。只要用心测试你的代码,bug也许就会现出原形。那也不错。
不过,重要的是发现bug时,你必须三思而后行,修正之前先确定出错原因。有些求职者看到传入特定参数时函数返回false
而不是true
,会直接将返回值取反,接着检查问题是否得到修正。当然,偶尔他们也能瞎猫碰上死耗子,但实际上如此仓促行事往往会导致更多的bug,同时也反映出你这个人比较粗心大意。
有bug其实很正常,但胡乱修改代码却很严重。
错误十:轻言放弃
我知道面试题都很难,但不难怎么显出求职者的水平呢。你会迎难而上还是轻言放弃?态度很重要,面试官都喜欢那些不畏挑战、迎难而上解决问题的求职者。毕竟,面试本来就不简单。所以,碰到棘手的问题请不要惊慌,也不要轻言放弃。
1.8 常见问题解答
碰到熟悉的问题时应该如实相告吗?
是的!碰到熟悉的问题,当然要告诉面试官!有些人会觉得这很傻——要是熟悉这个问题(并知道答案),岂不是如虎添翼,对吧?其实,未必如此。
我们力荐你如实相告的理由如下。
-
彰显你的诚实品质。这能反映出你的诚信——可以大大加分!要知道面试官可是在默默地考察你,看你够不够格成为他未来的同事。我不知道你个人怎么想,反正我是喜欢和实在人一起共事。
-
这个问题可能略有改动。你不会想冒这个险给个错误答案吧?
-
如果你将正确答案脱口而出,面试官会觉得很可疑。面试官当然知道题目的难度。但如果你佯装磕磕绊绊地答题,则很有可能夸张过度,而显得你这个人很不诚实。
该使用哪种编程语言?
很多人都会建议说用自己最得心应手的语言,其实理想情况下,你应该使用面试官最熟悉的语言。我一般会推荐使用C、C++或Java,因为大多数面试 官都熟悉这三种语言。我个人偏好Java(除非涉及C/C++问题),因为用Java编写程序效率比较高,而且写出来的程序简单易懂,哪怕平时用惯C++ 的人看Java程序也不会有太大难度。有鉴于此,本书基本上都用Java来解题。
面试结束后我没有收到回复,是被拒了吗?
不是的。真要被拒的话,公司一般都会给你通知。面试结束后短时间内没有收到回复并不代表什么。你可能表现得很不错,但招聘人员不巧度假去了,没能及 时处理。公司可能正在进行部门重组,具体该招多少人尚无定论。又或者,你确实表现得不怎么样,但碰巧遇到了一个办事拖拉或者特别忙的招聘人员,他没能及时 答复你。当然,也会有一些奇怪的公司,“嗯,既然我们不打算录用这个求职者,那就没必要给他回复”。所以,一切取决于公司本身。但你可以发邮件或打电话跟 踪后续进展。
被拒之后我还能重新申请吗?