有好多朋友问硅谷公司招工程师的基本流程。作为应聘者, 我试过Facebook, Google, Yahoo, Oracle, 均拿过offer; 作为面试人员, 面试过不下于300余人, 清楚大概流程, 做此短文, 希望对于希望去硅谷工作的朋友, 或正在准备面试的朋友, 或正在设计招人流程的创业公司有所启发。经验有限, 如有毗漏, 请指正。
面试机会
在硅谷, 最容易获得招人的机会是熟人推荐。就是目标公司的某某人是你的朋友, 你让她给你做一个内部推荐。Facebook大概60-70%的员工是通过这种方式雇佣的。Facebook最早期的一大拨中国籍工程师都是我做内部推荐面试进来的。熟人推荐对于求职的朋友还是公司相对成本都要低。对于求职的人, 可以通过熟人了解公司内部的真实情况; 对于公司, 熟人的推荐让求职人的质量得到一个背书。也是介于此, 我收到过不下200多个推荐的请求, 但我决定做的推荐不到100, 其中有12个朋友成功了, 每个成功的推荐公司给5000刀的奖金。做内部推荐的员工应该对自己的推荐有所筛选, 不能一味为了推荐奖金来一个推一个; 否则, 很快你的名声要烂掉。
这里讲一个我自己的故事。我找到的第一份工作是通过2005年在Chicago的KDD大会上和Yahoo 数据挖掘部门的一个技术总监陶瓷获得的面试机会。开会的闲暇时间, 我在展厅里面瞎晃荡, 和各个booth的人聊天, 聊几句后提提我正在找工作, 问他们有没有合适的机会; 到了Yahoo的展厅之后, 和该技术总监聊了一会之后我们就去到酒店的大厅中找了块干净的地板坐下来, 开始面试。对几个大的问题探讨了算法上的设计, 貌似他比较满意。之后他让他的一个工程师在第二天做了一个电话面试就把我飞过去了。这里想说的是你如果想找工作, 试试在你”未来同事未来老板”出没的活动, 场所之中, 认识他们, 让他们对你感兴趣, 然后通过他们做内部推荐。
另外的几种方式就比较常规, 如集中性的校园面试, 通过网站完成Puzzle提交简历 (成功率极低), 在各种编程大赛中出类拔萃被发现。
还有的就是公司主动出去挖的人, 这属于高端人才, 我挖过一些资深的工程师; 这些人往往不容易动, 如果你是这种人的话, 恭喜你, 你不需要读这篇文章。
流程
绝大公司的流程都是因为上述的途径(内部推荐, 学校面试, 网站申请等等)开始对一个简历产生兴趣, 然后让Recruiter联系, 做一个摸底性质的电话面试, 然后是2-3个电话面试, 最后就是到场面试4-6个人,大多数公司是一轮。
Recruiter的电话面试
这个了解是双向的。聊聊应聘者的一些经验和背景, 他们感兴趣的方面, 为什么换工作, 对这份工作有什么特别的要求等等; 聊聊公司的一些基本情况, 尤其是公司文化等等, 现在空缺的职位, 还有对面试人希望有的基本要求。
电话面试
一般是30-45分钟。我通常是花40分钟让对方做两道题, 然后花5分钟让她问问题。一般做完第一道题, 我会问自己, 要不要做第二道; 不管如何, 我一定腾出这5分钟让对方问一些关于Facebook的问题。这是对对方一个起码的尊重。由于是40分钟两道题, 不能太复杂, 一般是编程集中但设计没有太多挑战性的问题, 比如翻转单向链表 (reverse a singly linked list), 可以换itereative或recursive的要求来写, 中间问很多问题。通过像https://sync.in/这样的网站, 我们双方打的字都可以里面看到。
第一个电话面试后我需要在一个内部工具写上我的反馈, 可以建议后面的一个电话面试可以更加关注哪些方面。
现场
一般见4个人 (2005年我在Oracle见了10个人…), 每人45分钟. 其中有2.5人会集中在coding上面进行考察, 0.5个人考察culturual fit, 1个人专注design。典型的coding问题应该网上都能查得到, 这里就不提了。但要注意的是不是所有人都能适应white board coding(在白板上写程序), 最好事先练习练习。Cultural fit是通过问问对方以前的经历, 解决过的问题, 来发觉她的做事风格。最后我们想得到的一个判断是她能不能get shit done。Design主要是某个大系统的设计, 比如如果让你来做Facebook News Feed, 你会怎么实现, 需要哪些构建, 数据如何传输; 你的设计会有什么样的优点和缺点, 等等。每个人都有不同的实践, 这是OK的, 但这中间的交流可以体现一些设计思想的厚度, 这才是面试的目的。Design能力考察的权重对于不同职位不同, 比如backend要多一些, frontend要少一些; 刚从学校出炉的要轻一些, 做过很多年的要重一些。