首页 > 程序人生 > 程序员面试技艺 > 北美求职记(三):Facebook
2014
11-11

北美求职记(三):Facebook

我在今年三月份投过一次 Facebook 的暑期实习,被告之已经招满了,接下来校招时会再联系我。七月份的时候我又在网站上投了一次开发职位,还麻烦一位在里面实习的学长帮我内推了。八月一位 HR 联系我安排第一轮面试电面安排在了九月。

Facebook 的 HR 也很负责,她在电面前几天打电话和我聊天,介绍 Facebook 的基本情况,以及面试流程。第一轮电面结束后的情况分三种,如果面试表现很不错,那就直接获得了 onsite 的机会;如果面试表现一般,面试官不确定要不要,就会再加面一轮;如果面试表现不好,就可能直接被刷了。除此之外 Facebook 的 HR 比较体贴的一点在于给中国人安排的第一轮面试官很有可能也是个中国人,降低了语言上出现问题的可能。

HR 的电话里还提到 Facebook 入职后有六星期的 bootcamp,可以熟悉各个项目和团队,具体的项目是 bootcamp 结束后自己选的。问了一下在那工作的朋友,做出的选择一般都会被满足,因为 bootcamper 的选择分布还算比较平均的。

Facebook 电面和 Google 差不多,是在 collabedit 上进行的。也是面试官在电话中口述题目,我在网站上写代码。老实说这个网站的体验不怎么样,面试过程中出现过几次我这边写的代码没在面试官那里出现的情况。好在面试官比较有经验,一发现有问题就会提醒我刷新页面。

第 一轮电面我做了三个 coding 题,题目都不难,但是要求 bug free。电面的面试官抓 bug 的能力着实厉害,找出了两个我一开始没发现的 bug。好在他提示说有 bug 但没指出的情况下,我把它们都修正了。面试题目难度和 Google 的电面难度差不多,都是对数组、二叉树和字符串的基本操作。第一题是把一个字符串中的 %20 都转成空格,第二题是按层打印一棵二叉树,第三题是找出两个有序数组里不同的数字(类似求集合的异或)。程序正确后面试官还会问一些优化方面的问题,例如在不同的情形下应该使用哪一种算法

面完后第二天收到 recruiter 的消息说我拿到 onsite 的资格了,具体的时间会在十一月通知我。

Facebook 给我安排的酒店是 Palo Alto 的 Sheraton。酒店门口停着不少出租车,面试那天的出租车司机还是用 Square 收的钱。我的面试正好赶上了他们的 University Day。这一天的安排是上午三轮面试,中午吃饭,下午逛一圈公司以及三场讲座。我的第三轮面试还出了点茬子,面试官一直没出现,HR 只能先带我去吃中饭。中饭结束后 HR 带着别人边逛公司边介绍,我只能继续我的第三轮面试了。

Facebook 校招时本科生和硕士生是统一级别的,面试只包括算法题,不会有设计题;而博士生则高一级,面试的时候还会有设计题。三轮 onsite 面试包括一轮 jedi 和两轮 ninja。jedi 面主要是让面试者介绍自己的项目经历,了解面试者的技术专长和偏好,不过面试官也让我做了一个简单的 coding 题。ninja 面各有两个 coding 题,题目难度都不大,和电面差不多。但是与电面不同的是,面试官会深入问一些细节的问题,例如代码里生成了多少个新的对象,有没有办法优化等,有一个问题 还要求我用一种算法实现后,再用另一种完全不同的思路实现一次。(onsite 面试是签了 NDA 的,这里就不方便透露具体的题目了)

面试完之后有三个讲座,第一个讲座介绍了 Facebook 总体的工作环境。第二个分产品和后台两个讲座,同时进行所以只能选一个。我一开始选择了后台开发,不过当时突然对产品有了兴趣,就去听了产品的讲座。一位 负责 Events 开发的工程师结合这个产品介绍了下 Facebook 内部产品开发的流程,例如新特性是怎么出来的,如何测试等。最后一个环节是几位刚从 bootcamp 毕业的员工和我们分享他们在 Facebook 中工作的感受。

University Day 结束后,参加活动的每位学生还收到一个包装精致的礼物。拆开来后是一块两面分别刻着「Move fast and break things」和「Proceed and be bold」的玻璃砖。我还是很喜欢这个礼物的,这也一定程度上影响了我最后的选择。

面试完第二天 HR 从我这里要了三位 reference,包括他们的职称和联系方式,接下来 HR 会联系他们询问我的情况。Facebook 的动作也很快,第二周就给我发了 offer。有意思的是,offer 邮件的 welcome package 最后一页建议面试者在入职前熟悉一下 Unix,还推荐了几篇文章和两本书。

Google 和 Facebook 的 onsite 是在同一星期面的,前后只隔了一天,收到 offer 的时间也只差了一天。package 方面, Facebook 比 Google 的要好不少,但是 Google 的 HR 说可以 match Facebook 的 offer。去之前我想过如果两个 offer 都拿到,那就去 Google。但是到了这两个公司,和几位面试官以及在里面工作的朋友深入聊天后,最终还是选择了 Facebook,因为它规模更小,应该能有更多的锻炼机会。

另外我了解到的 Google 和 Facebook 的面试流程都是先由各位面试官给你打分,例如分 strong hire / hire / weak no hire / strong no hire 四档(不一定完全一致,比如可能会多一档 neutral)。同时要写下关于你的面试情况的报告。再接着由 hiring committee 讨论要不要给你 offer,以及 package 如何。有亮点(某位面试官的 strong hire)很重要,一个 strong hire 和几个 weak no hire 会比平庸的清一色的 weak hire 好。

编程技巧