极客时间已完结课程限时免费阅读

19 | 硅谷面试:那些你应该知道的事儿

19 | 硅谷面试:那些你应该知道的事儿-极客时间

19 | 硅谷面试:那些你应该知道的事儿

讲述:丁婵

时长08:13大小3.76M

一天,一位朋友偶然问我:“听说 Airbnb 的面试一共有七八轮,这是不是真的?”
我回答这是真的,而且告诉他在北京的招人流程也基本是一样的。朋友却觉得没有必要,认为一轮就能面出应试者的水平,弄那么复杂的面试是在浪费工程师的时间。
对于他的看法,我不完全赞同,也不完全反对。其实硅谷的公司大部分都会有多轮的面试,这主要包括了算法编程、系统设计、工作经验等。
首先,我就来说一说,为什么要有那么多轮的面试。
算法编程主要考察编程的硬功夫。现在很多公司都要求现场上机,程序能运行,测试例能通过;还有一些公司使用白板考算法,于是才有了 Homebrew 的作者马克斯·霍威尔( Max Howell )去 Google 面试时无法在白板上翻转二叉树的故事。
系统设计主要是给候选人一个系统设计的场景,根据自己的能力和经验去架构整个系统。系统设计面试通常没有唯一解,侧重的是候选人对不同架构和解决方案的熟悉程度,对方案的优缺点的深入了解。
工作经验面试主要是与候选人聊他做过的项目,深入了解和挖掘候选人的技能树。类似 Airbnb 这样的公司还会有关于价值观和团队协作能力的测试。
这样看来,一轮面试是远远不够的,因为有很多工程师程序写得又快又好,但是在系统设计方面会表现的很差,对一些基本的设计理念和方法知之甚少。
还有一些人,具备基本的系统知识,但想问题不全面,不能自己考虑各种场景的设计需求和异常处理,需要提示才能发现系统的漏洞。
又或者,有的人沟通能力很差,无法准确地表述出问题和答案,如果是平时的工作交流,沟通能力欠缺会给团队合作带来很大的阻力。当然,也有一些人恰恰相反,谈起设计和理论来头头是道,口若悬河,但是一写代码,几乎步步维艰。出了错,也不知道如何有效地调试(Debug)。
也有人说,可以知人善任。特别能写程序的,就让他多写代码,特别能说的,就让他负责沟通相关的工作,这样不就皆大欢喜了吗。
其实,这样做是行不通的。一来,硅谷优秀的工程师大部分能够独当一面,他们能把工作做好,确实需要用到方方面面的技能,这也是效绩评估中考察工程师的基本要求;二来,好的公司和岗位根本不愁招不到人。你说自己代码写得特别好,但还会有很多写代码能力跟你不相上下,但是系统设计比你牛很多,所以你被拒的可能性还是很大。
写到这估计还会有人有疑问:即使这样,那一轮代码面试,一轮设计面试也够了啊,为什么每项需要两轮甚至三轮面试呢?
我的经验是:因为不同题目考察的知识点和解决问题能力的侧重点不同,两轮可以更全面地进行评估;更重要的是,面试官也是人,难免有一些主观看法,进行两轮面试,两个人的反馈意见就可以相互有个参考,比如应试者是不是两轮都出现同样的问题或者失误,对同一领域的不同问题是不是都有正确的见解等。
有的时候,两轮面试官意见相悖,加试一轮的情况也并不少见。此外,有的时候我们因为面试人手不足,也会不停地增加一些新的面试官。这些面试官经验不足,如果他们的反馈成为唯一依据,多少会产生一些冤案错案,进行交叉面试,可以尽可能避免这种情况的发生。
再说说刷题的问题。如果你觉得写程序手生,或者一些基本概念需要复习,刷题可能是有帮助的;但是大多数情况下,除非你是跨领域面试,否则每天的工作就是系统设计和讨论,编写代码,功底不至于完全丢下,如果纯粹靠刷题通过面试,后面工作可能还是会比较吃力。
当然,努力刷题对通过面试肯定是很有帮助的,毕竟大部分公司的题库都比较有限,有些题用了很多次被泄露出去,你来面试前做一遍肯定会占便宜。
说到了题库,我有一点对应试者的小建议。很多应试者在面试结束后,喜欢在网上分享题目。抛开道德层面,这种行为确实是极其“大公无私”的;但如果你拿了 Offer 去泄题,后面不如你的人可能会成为你的同事;而如果你没拿到 Offer 去泄题,后面不如你的人可能因此拿到你想要却拿不到的 Offer。
除此之外,面试官并不像想象的那么好骗,应试者是不是见过题目,面试官其实很容易看出来。有时候我们在反馈面试意见的时候,如果觉得有些题你之前做过但是没说,也会如实反馈。这种意见很可能会影响你能不能拿到 Offer。另外,即使是同样的题,是不是真的懂,有经验的面试官也很容易问出来。
那么,作为应试者,面试官的经验会对你造成什么影响呢?总的说来,越是经验不足的面试官,他可能更容易把思路局限在一个自己很熟的领域,如果你凑巧和他的思路一致,就有可能拿到很好的反馈。如果你提出了一个完全不同的解题思路,面试官反而不能十分理解,面试成绩上有偏差也是可能的。
面试中还有一个潜规则,就是很多题都有难度等级,也就是分梯度的。你解出了第一部分,才会看到第二部分的问题,答出了第二部分,才有机会看到第三部分。
如果一开始你就比较慢,或者解题比较挣扎,可能面试官就会直接放弃你,虽然他在当时没有明确拒绝,但心中已经给了你 NO,所以剩下的时间,即使你觉得自己把第一部分答得很完美了,然而真相是你根本不知道还有二和三,也就不知道为什么觉得自己把题解出来了,最后却拿不到 Offer。
最后说说怎么才能拿到面试机会。
很多人会觉得找人内推拿到面试的机会一定更大,其实并不是这样。别的公司不好说,但是像很多比较热门的科技公司,员工都会收到很多并不熟悉的人的内推请求。比如我自己,平均一周要内推两到三个人。
公司知道这种情况很多,所以内推系统都会设计一个选项“你是否和被推荐者共事过”,如果是,你能不能替他的能力担保?如果没有工作交集或不能担保,即使内推了,你的简历也会得到和普通简历一样的待遇,唯一的优势可能是简历不会丢,处理速度稍微快一点而已。HR 筛选简历的所有条件,并不会因为内推而降低标准。
所以平时具备扎实的基本功和出色的业绩,简历上有闪光点,才是拿到面试机会的关键。真的找人推荐,最好找那些共事过的能为你能力背书的人。
今天,我和你聊了聊硅谷面试的那些事儿,比如硅谷为什么会有那么多轮的面试,面试前要不要刷题,面试过程中与面试官的交流,面试题的难度分级和内推的作用。如何拿到一个面试机会并通过面试呢?其实没什么捷径,好的工作经历、扎实的基本功和一份特点突出的简历,就是工程师成功通过面试的金钥匙。
你有什么有趣的面试故事,也在留言中说说,我们一起分享。我们下次再见。

分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 4

提建议

上一篇
18 | 每个工程师都应该了解的:API 的设计和实现
下一篇
20 | 项目管理中的三个技巧
 写留言

精选留言(9)

  • 图南日晟
    2017-12-26
    在国内面试得努力甄别面试者的水平,稍有不慎就容易被带偏,多轮面试还是必要的
    9
  • songyy
    2018-01-13
    有些(做网站的)公司面试 还会进行pair programming: 面试者和面试官结对来解决一个真实问题,从而感受这个面试者的: 1) 编程习惯; 2) 思维方式; 3) 代码组织能力
    5
  • 二进制之路
    2017-12-25
    个人理解,这个跟很多事情都是类似的,没有绝对的答案。但在不同的公司,面试不同的人,做法肯定是会有差异的。通常来说,面试初级水平和高级资深的应聘者,面试的轮数应该是不同的,后者通常会面更多轮,而前者很多一轮或两轮就完全搞定了,当然硅谷的我不太清楚。做任何事儿应该简单、灵活,能一次搞定就别两次,不确定的时候就多面一两轮。
    4
  • _fenghao_
    2017-12-25
    当然手机北京面试的时候有幸见到安姐啊:)
    2
  • lyjustforfun
    2017-12-27
    您好,面试的知识讲的很棒!请问,您可以讲讲系统设计方面的知识吗?
    1
  • 怀揣梦想的学渣
    2022-03-20
    内推就等于为别人的能力进行担保吧。 如果对方的能力低于公司的预期,也会影响自己在公司内的可信度吗。
  • 码哥字节
    2022-01-20
    有必要多轮,因为面试官也会出现一些主管判断导致误杀
  • mikejiang
    2019-11-13
    面试确实需要多轮面试,但是几轮更合适,这是一个不同公司不同情况的问题。题库的更新是个难题,如何衡量不同题目之间的难度。一种一个方法就是对题目进行变形和伪装。
    1
  • 愚人
    2018-12-23
    以前确实见识过不少单一技能突出的同事,有coding超级利索,而对系统设计毫无思路的高手。也有在设计层面剖析问题时剥丝抽茧,但对编码实现困难重重的设计专家。