II. 幕后

大多数公司的面试方式都非常相似。本章我们将概述一些公司面试的方式以及什么是他们所看重的。这些信息将指导你如何进行面试准备,以及面试中和面试后该如何表现。

一旦你被选中参加面试,你通常要经过一次筛选面试。这通常是通过电话进行的。而就读于名校的应届求职者将很可能是面对面现场体验这类面试的。

别让这个名字迷惑了你,“筛选”面试通常涉及编码和算法问题,并且面试的门槛可能和面对面面试(in-person interview)一样高。如果你不确定面试是否是技术性的,问问你的招聘协调人你的面试官所担任的职位(或面试可能涵盖的范围)。例如,如果是工程师的话,通常会进行技术面试。

许多公司都利用了在线同步文档编辑器,但也有一些公司希望你将代码写在纸上,然后在电话里向面试官将其读回。甚至,有些面试官会在挂电话后给你布置“家庭作业”,或者只是让你把写的代码通过电子邮件发给他们。

在进行现场面试(on-site)之前,你通常要经过一两个面试官的筛选。

在现场面试中,你通常会有 3 到 6 次面对面的面试。其中之一经常是在午餐时间。午餐面试通常不是技术性的,面试官甚至可能不会提交反馈。你可以与面试官讨论你的兴趣爱好,或者也可以询问公司的企业文化。你的其他面试大多是技术性的,涉及编码、算法、设计/架构和工作经历/经验问题的组合。

由于公司的优先级、规模和纯粹的随机性,上述主题范围内的问题在不同公司甚至不同团队之间的分布都不相同。面试官在面试问题上通常有很大的自由度。

面试后,面试官会以某种形式提供反馈。在一些公司,面试官会聚在一起讨论你的表现并做出决定。在其他公司,面试官会向招聘经理或招聘委员会提交一份建议,以做出最终决定。也有一些公司,面试官甚至不做决定,他们的反馈会被直接提交给招聘委员会,由他们来做决定。

大多数公司在一周后就会采取下一步行动(发offer、拒绝、进一步面试,或者只是更新流程)。一些公司的反馈速度很快(有时是同一天!),而另一些公司的反应时间要长得多。

如果你已经等了一个多星期,你应该跟招聘人员联系一下。如果你的招聘人员没有回应,这并不意味着你就被拒绝了(至少在任何大型科技公司以及几乎所有其他公司中都没有这种情况)。让我再重复一遍:不回复跟你的面试状态并无直接联系。换句话说,一旦做出最终决定,所有招聘人员都应当会告诉求职者。

延迟可能而且确实会发生。如果预计会有延迟,请与招聘人员联系,但这样做时要保持尊重。招聘人员和你一样,他们有时也会忙碌和健忘。

Microsoft 面试

Microsoft 想要聪明的人、极客、热爱科技的人。你可能不会被考察 C++ AP l的输入输出,但是你需要做到在白板上编写代码。

在一个典型的面试中,你将在早上的某个时间出现在 Microsoft,填写一些基础资料。接着你将有一个简短的面试,招聘人员会给你一个简单的问题。招聘人员通常是为了帮你做准备,而不是盘问你技术问题。如果你被问到一些基本的技术问题,那可能是因为你的招聘人员想让你轻松地进入面试,这样当“真正的”面试开始时,你就不会那么紧张了。

善待你的招聘人员。你的招聘人员可能是你最大的支持者,如果你在第一次面试中遇到失误,他们甚至会敦促你重新面试。他们可以为你争取工作——或者不争取!

白天,你将进行四到五次面试,通常是由两个不同的团队来执行。不像许多公司,你在会议室会见面试官,在 Microsoft,你会与面试官在他们的办公室会见。这是一个很好的时机,你可以看看周围,感受一下团队文化。

根据团队的不同,面试官可能会也可能不会将他们对你的反馈分享给面试的其他环节。

当你完成对一个团队的面试时,你可能会与招聘经理交谈(通常被称为“as app”,即“as appropriate”的缩写)。如果是这样,那是一个好兆头!这很可能意味着你通过了一个特定团队的面试。现在就看招聘经理的决定了。

你可能会当天收到决定,也可能是一个星期。在一周没有人力资源部门的消息后,发一封友好的电子邮件询问状态更新。

如果你的招聘人员反应不积极,那是因为她很忙,而不是因为你被默默拒绝了。

必要的准备:

“你为什么想为 Microsoft 工作?”

在这个问题中,Microsoft 希望看到你对技术充满热情。一个很好的回答可能是:“从我记事起,我就一直在使用 Microsoft 的软件,我对 Microsoft 如何创造出一款普遍优秀的产品印象深刻。例如,我最近一直在使用 Visual Studio 学习游戏编程,它的 APl 非常出色”。请注意,这样的答案显示了对技术的热情!

独特之处:

只有当你表现得很优秀时,才会联系到招聘经理,因此如果你能与其谈话的话,这是一个很好的迹象!

此外,Microsoft 倾向于赋予团队更多的个人控制权,并且产品集是多样化的。由于不同的团队看重不同的方面,因此 Microsoft 内不同部门的体验可能会有很大差异。

Amazon 面试

Amazon 的招聘流程通常从电话视频开始的,由一个特定的团队对候选人进行面试。在一小段时间内,候选人可能会有两次或两次以上的面试,这要么表明他们的面试官之一没有被说服,要么表明他们被考虑进入一个不同的团队或资料库。在更不寻常的情况下,例如,当一个求职者在公司当地或最近参加过另一个职位的面试时,他可能只需要做一次电话面试。

面试你的工程师通常会要求你通过共享的文档编辑器编写简单的代码。他们还会经常提出一系列的问题来探索你所熟悉的技术领域。

接下来,你要飞往西雅图(或任何你要面试的办公室),与一两个团队进行四到五次面试,这些团队根据你的简历和电话面试选择了你。首先你将必须能在白板上写代码,一些面试官还会考察其他的技能。面试官都被分配了一个特定的区域对你进行探查,而且他们之间可能看起来非常不同。在提交自己的反馈之前,他们看不到其他人的反馈,并且在招聘会议之前,他们不提倡提前对这些反馈进行讨论。

“挑刺者(bar raiser)”面试官负责保持面试的高标准。他们参加特殊的培训,并在负责面试的小组之外对候选人进行面试,以平衡小组的面试反馈。如果一场面试看起来非常困难且与众不同,那很可能就是 bar raiser。这个人在面试方面有丰富的经验,在招聘决定上也有否决权。但是请记住:仅仅因为你在本次面试中应对得很艰难,并不意味着你实际上的表现很差。你的表现是相对于其他候选人来判断的,它不是基于简单的“正确百分比”来评估的。

一旦你的面试官提交了他们的反馈,他们将开会讨论。他们将是做出招聘决定的人。

虽然 Amazon 的招聘人员通常非常善于跟进候选人,但偶尔也会出现延迟。如果你一周内还没有收到 Amazon 的邮件,我们建议你发送一封友好的电子邮件来询问。

必要的准备:

Amazon 非常注重系统的扩展。确保你为可扩展性问题做好了准备。要回答这些问题,你并不一定需要有分布式系统方面的背景。请参阅我们在系统设计和可扩展性一章中的建议。

此外,Amazon 倾向于问很多关于面向对象设计的问题。建议查看面向对象设计一章的示例问题和建议。

独特之处:

Bar Raiser 是由其他团队引进的,以保持高标准。你需要给这个人和招聘经理留下深刻的印象。

Amazon 比其他公司更倾向于在招聘过程中进行试验。这里描述的过程是典型的面试体验,但是由于 Amazon 的试验,它不一定是通用的。

Google 面试

关于 Google 面试的谣言不绝于耳,但大多数都是谣言。它的面试其实与 Microsoft 或 Amazon 的面试并没有太大不同。

一位 Google 工程师负责第一次电话面试,因此要对棘手的技术问题有个心理准备。这些问题可能涉及编码,有时需要通过共享文档进行编码。应聘者通常被要求遵守相同的标准,在电话视频面试(phone screens)上被问到的问题与现场面试(on-site)时类似。

在现场面试中,你将与四到六个面试官进行面试,其中一个是午餐面试官(lunch interviewer)。每个面试官的反馈对其他面试官是保密的,所以你可以放心,每次面试开始,面试官对你的印象都是空白的。你的午餐面试官不会提交反馈,所以这是一个问诚实问题的好机会。

面试官通常不会被限定到特定的关注点,我们也无法“结构性”地或“系统”地来回答你什么时候会被问到什么问题。每个面试官都可以按照自己的意愿进行面试。

书面反馈将提交给由工程师和经理组成的招聘委员会(HC),最终决定是录用还是不录用。面试反馈通常分为四类(分析能力、编码、经验和沟通),总分从 1.0 到 4.0。HC 通常不包括你的任何面试官。如果包括的话,那纯属偶然。

若发放 offer,HC 希望看到至少有一位面试官是“狂热的支持者(nthusiastic endorser)”。换句话说,得分分别为 3.6、3.1、3.1 和 2.6 的简历比所有得分都是 3.1 分的简历要好。

你不一定需要在每次面试中都表现出色,你的电话面试表现通常也不是影响最终决定的重要因素。

如果 HC 建议发放 offer,你的 packet 将提交给薪酬委员会,然后再提交给执行管理委员会。由于存在许多阶段和委员会,因此返回决策可能需要数周时间。

必要的准备:

作为一个基于 web 的公司,Google 关心的是如何设计一个可扩展的系统。因此,请确保你准备好了回答系统设计和可扩展性方面的问题。

不论经验如何,Google 都非常重视候选人的分析(算法)技能。即使你认为以前的经验值得考虑,你也应该为这些问题做好充分的准备。

不同之处:

你的面试官不会做出雇用决定。相反,他们会将反馈信息提交给招聘委员会。招聘委员会将给出一个决定,而 Google 高管有权回绝掉这个决定,虽然他们很少这样做。

Apple 面试

就像 Apple 公司本身一样,Apple 的面试程序也没有什么官僚作风。面试官将寻求优秀的技术技能,但是对职位和公司的热情也很重要。虽然求职者是否为 Mac 用户不是先决条件,但你至少应该熟悉这个系统。

面试过程通常从招聘人员的电话视频面试开始,了解你的基本技能,然后是一系列与团队成员进行的技术电话视频面试。

一旦你被邀请进入园区,通常会是招募人员来向你打招呼,并向你介绍整个招聘流程。然后,你将与申请的职位所在团队的成员,以及与你团队合作的关键人物,进行进行 6~8 次面试。

你需要对一对一(one-on-one)和二对一(two-on-one)的混合面试有心理预期。准备好在白板上写代码,并确保你所有的想法都清楚地传达出来。午餐是和你未来的潜在经理一起吃的,看起来比较随意,但这仍然是一次面试。每个面试官通常专注于一个不同的领域,通常不提倡与其他面试官分享反馈,除非他们想让后续面试官深入了解一些东西。

在一天结束时,你的面试官会互相交换意见。如果每个人都觉得你是一个可行的候选人,你将会和你申请的公司的主管和副总裁进行面试。虽然这个决定是非正式的,但如果你到了这一步,是一个很好的迹象。这一决定也会在幕后发生,如果你不通过,你就会被护送出大楼,而(直到现在)你也不会察觉。

如果你参加过了主管和副总裁的面试,你所有的面试官都会聚集在一个会议室里,给你一个正式的赞成(thumbs up)或反对(thumbs down)。副总裁一般不会出席,但如果他们对招聘不满意,仍然可以否决。招聘人员通常会在几天后跟进,但你可以随时联系他/她,了解最新情况。

必要的准备:

如果你知道你面试的是哪个团队,确保你仔细了解了他们的产品。你喜欢它什么?你能改进什么?提供具体的建议可以显示你对这份工作的热情。

独特之处:

Apple 经常进行二对一的面试,但是不要为此感到压力——这和一对一的面试是一样的!

此外,Apple 员工是 Apple 的铁杆粉丝。你应该在面试中表现出同样的热情。

Facebook 面试

一旦被选中参加面试,应聘者通常会进行一两个电话视频面试。电话面试将是技术性的,并且会涉及编码,通常是使用线文档编辑器。

在电话面试之后,你可能会被要求做一个家庭作业,其中包括编码和算法的混合题目。在这里注意你的编码风格。如果你从未在一个有完整代码评审(code review)的环境中工作过,那么找一个必须评审你代码的人可能是个好主意。

在现场面试中,你将主要与其他软件工程师进行面试,但只要招聘经理有空,他们也会参与进来。所有的面试官都经过了全面的面试培训,与你进行面试的人是跟你获得 offer 的几率没有联系的。

在现场面试中,每位面试官都被赋予一个“角色”,这有助于确保没有重复的问题,并且可以全面了解候选人。这些角色是:

  • 工作经历(“绝地武士(Jedi)”):这个面试评估你在 Facebook 的环境下取得成功的能力。你能很好地适应这种文化和价值观吗?你对什么感到兴奋?你如何应对挑战?请准备好谈论你对 Facebook 的兴趣,因为 Facebook 需要的是有激情的人。在这次面试中,你可能还会被问到一些编码问题。

  • 编码和算法(“忍者(Ninja)”):这些是标准编码和算法问题,就像你在本书中会发现的一样。这些问题被设计成极具有挑战性。你可以使用任何你想用的编程语言。

  • 设计/架构(“海盗(Pirate)”):对于后端软件工程师,你可能会被问到系统设计问题。前端或其他专业将被问及与该学科相关的设计问题。你应该开放地讨论不同的解决方案及其权衡。

通常,你需要做好进行两次“忍者”面试和一次“绝地”面试的准备。经验丰富的候选人通常也将接受一次“海盗”面试。面试结束后,面试官在互相讨论你的表现之前会提交书面反馈。这可以确保你在一次面试中的表现不会因其他面试官的反馈而产生偏见。

一旦每个人的反馈都被提交,你的面试团队和招聘经理会聚在一起,共同做出最终决定。他们达成共识,并向招聘委员会提交了最终的招聘建议。

必要的准备:

作为“精英”科技公司中最年轻的一家,Facebook 希望开发人员具有创业精神。在面试中,你应该表现出你喜欢快速构建东西。

他们想知道,你可以使用任何一种选择的语言共同构建出一个优雅的、可扩展的解决方案。了解 PHP 并不是特别重要,特别是考虑到 Facebook 还使用 C++、Python、Erlang 和其他语言做了大量后端工作。

独特之处:

Facebook “一般来说“是从整个公司层面出发来面试开发人员的,而不是为某个特定的团队。如果你被录用,你将参加一个为期六周的“训练营”,这将帮助你在庞大的代码库中不断提升。你将获得高级开发人员的指导,学习最佳实践,最终,在选择项目时,你将获得比在面试中分配到项目时更大的灵活性。

Palantir 面试

不像有些公司会进行“合并(pooled)”面试(你是从整个公司的角度被面试的,而不是针对某个特定的团队),Palantir 是为一个特定的团队进行面试的。有时候,你的申请可能会被更改到(re-routed)到另一个更合适的团队。

Palantir 的面试流程通常从两次电话面试开始。这些面试大约 30 到 45 分钟,并且主要是技术性的。希望你能介绍一些你以前的经验,并将重点放在算法相关的问题上。

你还可能需要接受一次 HackerRank 编码评估,它将评估你编写最优算法和正确代码的能力。经验不足的求职者,比如大学毕业生,特别有可能参加这样的测试。

在此之后,成功的候选人将被邀请到园区,并将接受多达五人的面试。现场面试的内容涵盖了你以前的经验、相关的领域知识、数据结构和算法,以及系统设计。

你还可能得到 Palantir 产品的演示。问一些好的问题,并展示你对公司的热情。

面试结束后,面试官会和招聘经理开会讨论面试反馈结果。

必要的准备:

Palantir看重雇佣优秀的工程师。许多求职者表示,Palantir的问题比他们在谷歌和其他顶级公司遇到的问题更难回答。这并不一定意味着获得一份工作更难(尽管确实可以);这只是意味着面试官更喜欢更具挑战性的问题。如果你在面试 Palantir,你应该彻底了解核心数据结构和算法。然后,集中精力准备最难的算法问题。

如果你正在面试一个后端职位,也要温习一下系统设计。这是这个过程的一个重要部分。

独特之处:

编写代码是 Palantir 面试流程中的常见部分。尽管你可以使用计算机,并且可以根据需要查找资料,但不要毫无准备地走进办公室。这些问题可能极具挑战性,并且将评估算法的效率。充分的面试准备将对你有所帮助。你也可以在 HackerRank.com 网站上在线练习编程挑战。