一天,一位朋友偶然问我:“听说 Airbnb 的面试一共有七八轮,这是不是真的?”

我回答这是真的,而且告诉他在北京的招人流程也基本是一样的。朋友却觉得没有必要,认为一轮就能面出应试者的水平,弄那么复杂的面试是在浪费工程师的时间。

对于他的看法,我不完全赞同,也不完全反对。其实硅谷的公司大部分都会有多轮的面试,这主要包括了算法编程、系统设计、工作经验等。

首先,我就来说一说,为什么要有那么多轮的面试。

算法编程主要考察编程的硬功夫。现在很多公司都要求现场上机,程序能运行,测试例能通过;还有一些公司使用白板考算法,于是才有了 Homebrew 的作者马克斯·霍威尔( Max Howell )去 Google 面试时无法在白板上翻转二叉树的故事。

系统设计主要是给候选人一个系统设计的场景,根据自己的能力和经验去架构整个系统。系统设计面试通常没有唯一解,侧重的是候选人对不同架构和解决方案的熟悉程度,对方案的优缺点的深入了解。

工作经验面试主要是与候选人聊他做过的项目,深入了解和挖掘候选人的技能树。类似 Airbnb 这样的公司还会有关于价值观和团队协作能力的测试。

这样看来,一轮面试是远远不够的,因为有很多工程师程序写得又快又好,但是在系统设计方面会表现的很差,对一些基本的设计理念和方法知之甚少。

还有一些人,具备基本的系统知识,但想问题不全面,不能自己考虑各种场景的设计需求和异常处理,需要提示才能发现系统的漏洞。

又或者,有的人沟通能力很差,无法准确地表述出问题和答案,如果是平时的工作交流,沟通能力欠缺会给团队合作带来很大的阻力。当然,也有一些人恰恰相反,谈起设计和理论来头头是道,口若悬河,但是一写代码,几乎步步维艰。出了错,也不知道如何有效地调试(Debug)。

也有人说,可以知人善任。特别能写程序的,就让他多写代码,特别能说的,就让他负责沟通相关的工作,这样不就皆大欢喜了吗。

其实,这样做是行不通的。一来,硅谷优秀的工程师大部分能够独当一面,他们能把工作做好,确实需要用到方方面面的技能,这也是效绩评估中考察工程师的基本要求;二来,好的公司和岗位根本不愁招不到人。你说自己代码写得特别好,但还会有很多写代码能力跟你不相上下,但是系统设计比你牛很多,所以你被拒的可能性还是很大。

写到这估计还会有人有疑问:即使这样,那一轮代码面试,一轮设计面试也够了啊,为什么每项需要两轮甚至三轮面试呢?

我的经验是:因为不同题目考察的知识点和解决问题能力的侧重点不同,两轮可以更全面地进行评估;更重要的是,面试官也是人,难免有一些主观看法,进行两轮面试,两个人的反馈意见就可以相互有个参考,比如应试者是不是两轮都出现同样的问题或者失误,对同一领域的不同问题是不是都有正确的见解等。

有的时候,两轮面试官意见相悖,加试一轮的情况也并不少见。此外,有的时候我们因为面试人手不足,也会不停地增加一些新的面试官。这些面试官经验不足,如果他们的反馈成为唯一依据,多少会产生一些冤案错案,进行交叉面试,可以尽可能避免这种情况的发生。

再说说刷题的问题。如果你觉得写程序手生,或者一些基本概念需要复习,刷题可能是有帮助的;但是大多数情况下,除非你是跨领域面试,否则每天的工作就是系统设计和讨论,编写代码,功底不至于完全丢下,如果纯粹靠刷题通过面试,后面工作可能还是会比较吃力。

当然,努力刷题对通过面试肯定是很有帮助的,毕竟大部分公司的题库都比较有限,有些题用了很多次被泄露出去,你来面试前做一遍肯定会占便宜。

说到了题库,我有一点对应试者的小建议。很多应试者在面试结束后,喜欢在网上分享题目。抛开道德层面,这种行为确实是极其“大公无私”的;但如果你拿了 Offer 去泄题,后面不如你的人可能会成为你的同事;而如果你没拿到 Offer 去泄题,后面不如你的人可能因此拿到你想要却拿不到的 Offer。

除此之外,面试官并不像想象的那么好骗,应试者是不是见过题目,面试官其实很容易看出来。有时候我们在反馈面试意见的时候,如果觉得有些题你之前做过但是没说,也会如实反馈。这种意见很可能会影响你能不能拿到 Offer。另外,即使是同样的题,是不是真的懂,有经验的面试官也很容易问出来。

那么,作为应试者,面试官的经验会对你造成什么影响呢?总的说来,越是经验不足的面试官,他可能更容易把思路局限在一个自己很熟的领域,如果你凑巧和他的思路一致,就有可能拿到很好的反馈。如果你提出了一个完全不同的解题思路,面试官反而不能十分理解,面试成绩上有偏差也是可能的。

面试中还有一个潜规则,就是很多题都有难度等级,也就是分梯度的。你解出了第一部分,才会看到第二部分的问题,答出了第二部分,才有机会看到第三部分。

如果一开始你就比较慢,或者解题比较挣扎,可能面试官就会直接放弃你,虽然他在当时没有明确拒绝,但心中已经给了你 NO,所以剩下的时间,即使你觉得自己把第一部分答得很完美了,然而真相是你根本不知道还有二和三,也就不知道为什么觉得自己把题解出来了,最后却拿不到 Offer。

最后说说怎么才能拿到面试机会。

很多人会觉得找人内推拿到面试的机会一定更大,其实并不是这样。别的公司不好说,但是像很多比较热门的科技公司,员工都会收到很多并不熟悉的人的内推请求。比如我自己,平均一周要内推两到三个人。

公司知道这种情况很多,所以内推系统都会设计一个选项“你是否和被推荐者共事过”,如果是,你能不能替他的能力担保?如果没有工作交集或不能担保,即使内推了,你的简历也会得到和普通简历一样的待遇,唯一的优势可能是简历不会丢,处理速度稍微快一点而已。HR 筛选简历的所有条件,并不会因为内推而降低标准。

所以平时具备扎实的基本功和出色的业绩,简历上有闪光点,才是拿到面试机会的关键。真的找人推荐,最好找那些共事过的能为你能力背书的人。

今天,我和你聊了聊硅谷面试的那些事儿,比如硅谷为什么会有那么多轮的面试,面试前要不要刷题,面试过程中与面试官的交流,面试题的难度分级和内推的作用。如何拿到一个面试机会并通过面试呢?其实没什么捷径,好的工作经历、扎实的基本功和一份特点突出的简历,就是工程师成功通过面试的金钥匙。

你有什么有趣的面试故事,也在留言中说说,我们一起分享。我们下次再见。


戳此获取你的专属海报

评论