北美求职记系列文章

Google

Google 面试也是托学长推荐了。HR 说我的简历看起来很不错,先给我安排了两轮电面。

电面都和 coding 有关,面试官会给你一个 Google Docs 链接,在电话里描述题目后要求你在 Google Docs 上写程序。题目的难度不高,两轮一共四题,都是对基本数据结构的操作,例如给在一个未排序的数组中去掉重复的数字,还有把一个有序数组转成一个平衡二叉搜索树,在一个已排序但有重复数字的数组中查找元素等。

第一轮电面聊天的时候还发现第一轮的面试官是在 ITA Software 做的。正好前几天用他们的产品 Matrix Airfare Search 订到了低价的去土耳其的机票,过了一星期神奇的在面试的时候碰到了这个团队的工程师。当时一下子就兴奋起来,聊了不少和 Matrix 的有关的话题。这位面试官听说中国的机票也能用他们的平台查询,还挺吃惊的。他还提到他们原本想把计算任务放到 Google 内部的计算框架上,但是由于和合作方的合同的限制,没法把一些商业数据放到 Google 的平台里,只能继续用原有的计算引擎。

第二轮电面的面试官是位印度人,虽然我很难听懂他的口音,但是他很耐心,会和我重复描述问题,所以题目做下来也没啥困难。在和他的聊天中得知他除了正业(Youtube)外还在闲余时间研究机器人。

电面结束后第二天收到了 HR 的邮件,邀请我去总部面试。由于当时已经是九月底了,而我十月初打算去土耳其玩两星期,于是只能从土耳其回来后开始准备签证了。Google 的 HR 非常热情,每次回邮件都很及时,经常能在加州时间晚上十一点左右收到她的邮件。她帮我弄来了 Google 的面试邀请信,顺利的过了签证面试。之后另一位 HR 还帮我订好了从上海往返 San Jose 机场的机票,以及三晚的住宿(因为考虑到我需要倒时差,多了一晚住宿,这一点也很体贴)。

Google 给我安排的住宿是 Wild Palms Hotel,在 Sunnyvale。不愧是硅谷的旅馆,每天早上起来吃旅馆的早饭,都能听到有人讨论 Java。在 Sunnyvale 的第二天我坐公共汽车到处逛了逛,考虑到接下来要在加州玩一圈,就办了张 T-mobile 的一个月电话卡(60 美元,包括不限量的短信、通话和 3G 流量,但是这家的信号非常差)。这家旅馆和苹果总部也很近,出门有公交车直达,作为半个果粉自然不会浪费这个机会。

第三天在 Google 工作的学长开车带我去了公司。Google 的园区里有不少免费自行车,没有锁,直接就可以骑。我在 Google 商店买了点礼品,在园区骑车转了一会儿后就开始面试了。

面试一共有四轮,每轮 45-55 分钟,中间有 5 分钟的休息时间。中午会有 Google 工程师带你吃饭。带我吃饭的 Google 工程师也是中国人,了解到这点后我们就知道用中文聊天了。吃饭时间里了解了不少在 Google 工作的优缺点,也一定程度影响了我之后做的决定。

由于签了 NDA,没法在这里透露具体的面试题目。面试主要都是算法题,比电面难一点。除了算法题外我还被问到一个分布式系统的设计题,以及一个多线程相关的 coding 题,后者用信号量很容易解决。其实如果能和面试官好好交流,这些题目做出来应该是没啥问题的。

面完第二周 HR 通知我拿到 offer 了,打电话告之了 offer 的具体细节。Google offer 的邮件附件还包括一份各项福利的介绍,着实吸引人。我还记得 HR 打电话来的时候我正好在三藩 Exploratorium 边上的小湖旁,在湖边美景中听到这样的好消息自然分外兴奋。HR 还告诉我没有限制我的签约时间,可以在任意长的时间后再做出决定,也算是 Google 非常体贴的地方。另外具体的职位会在入职前一段时间决定,HR 的说法是可以根据自己的喜好在一些项目之中选择。

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 好。