我买了一本《The Google Resume》,仔细研读了里面关于写简历和面试的部分。《The Google Resume》可谓是帮了我的大忙,还有这本书作者创办的网站 CareerCup 上面以一个工程师出身的 HR 的视角全面介绍了技术职位面试的细节。依据这本书的建议,我精心写了一页简历,但是前前后后修改了几十个版本。
Google 是我接到面试通知的第一家公司,在 11 月份就开始面试。我收到邮件通知以后,HR 问我哪天有时间,然后给我安排电话面试。Google 的 HR 并没有给我打电话,而是直接安排面试的。由于有时差,所以面试都是在午夜到凌晨之间,所以必须熬夜或者早起了。如果作息不正常,会对自己能力发挥造成很大影响,需要慎重对待。Google 给我安排了两轮连续的面试,每轮一个小时,从北京时间凌晨两点面试到四点。
由于签署了保密协议,我不能透露面试的具体题目。题目的类型都是算法题,还有个算概率的数学题。答题的方式是打开一个 Google docs 页面,你和面试官共同编辑,同时用电话保持交谈。面试官会直接说题目的内容,或者把题目写在 Google docs 上,看完以后回答问题。一般来说是先描述算法,然后面试官会继续追问或者要求证明,最后写程序。程序直接写在 Google docs 上,由于没有语法高亮和缩进,还是挺不舒服的。不管问题会不会,一定要主动和面试官交流,澄清问题,也许是少了什么条件或者理解错误,最忌讳的就是一句话不说自己一直在想,或者上来就写代码。
面试完了以后,大概过了两个星期,HR 发邮件给我说面试结果不错,给我约了个时间打电话。电话中 HR 告诉我说我通过了面试,下一步就是进入 Google 的 Host Match 流程了。在 Google,美国实习生都要有一个 Host,大概是经理(Manager)或者导师(Mentor)的职责。每个面试通过的实习生需要等待有 Host 看中你的简历,然后和你联系,交流以后决定是否接受你。我一直等到一月份,HR 才告诉我说有了 Host 愿意和我联系。和 Host 电话聊过以后,我对他们做的项目还挺有兴趣的,但是我七月份才放假,和他们的计划有些冲突,所以就没有然后了。过了一段时间又有一个 Host 联系我,不过我对他们做的东西实在不感兴趣,所以就拒绝了。后来由于 HR 好像知道我已经在 Google 北京入职实习了,就没再用心给我找其他 Host,所以最终 Host Match 失败。
面试也是通过电话进行的,写代码是通过一个叫 collabedit 的在线编辑工具,许多公司都喜欢用这个东西面试,包括 Twitter 和 Facebook。面试官先问了我一个算法题,挺简单的,我回答出来以后继续追问新的问题,然后让我证明自己的想法,并写代码。写完以后面试官问我做过的最有意思的一个项目是什么,我告诉他是 Continuation***,然后向他介绍了一下。最后他问我用过 Apple 的哪些产品,为什么喜欢 Apple,我就说我用 Mac,为什么喜欢我实在没说出来,因为我也不是特别喜欢 Apple。看来 Apple 果真是一个要求员工都必须是忠诚的教徒式的公司。
Apple 是我自己在网上投递的一家公司,没有任何内推,这种情况下面试通过概率挺小的,毕竟你还是一个外国人。面试完一轮以后,就没有了音信,反复给 HR 发邮件问,说正在进行中,可是进行了很久还是没有结果,所以我知道我是被默拒了。
Twitter
Twitter 是我面试过的惟一一家私有公司(未上市),因此决策权全部都在 CEO 手中。而且未上市的公司资金有限,面试门槛要比面试过的其他大公司高不少。据说 Twitter 发的每个 Offer 都是要经过 CEO 亲手签字的,包括实习生在内。作为一个实习生,Twitter 竟然给我安排了六轮面试,比我之前面试 Hulu 的轮数还多,可见还是比较严格的。
Facebook 一共面试了两轮,两轮之间相隔一个多星期,面试的难度和之前面试 Google(美国)差不多。面试涉及的问题主要是动态规划和二叉树,感觉这两个东西是面试最喜欢考到的了。其中有一轮面试中面试官还是一个中国人,听他说完以后我顿时对我的英语有了信心,最后我和他说了两句中文,他立刻说「I am not supposed to speak Chinese with you.」,真是无语。Facebook 的 Offer 我也顺利拿到了。
去年十二月我还申请了 Google 北京的暑期实习生,由于距离较近,直接去 Google 办公室进行了面试。我一共面试了三轮,其中前两轮是连续进行的。第一轮面试我遇到了很难的组合数学题目,由于思路不对,浪费了不少时间,最终没有答出来。第二轮面试难度也比较大,涉及了C语言字符串处理、动态规划和贪心算法证明,但是我答得还不错。过了几天,HR 告诉我说两位面试官反馈差别较大,于是对我增加了第三轮面试。第三轮面试是一位很资深的工程师,令我惊奇的是他在面试我之前仔细看了我的简历以及我网站上列出的我做过的所有项目,并针对我的简历进行了提问,包括函数式编程的一些内容,以及 JS的 CPS 变换。
过了几天,HR 告诉我通过了面试,但是开始时间是暑假。我联系到 Google 北京输入法组的杨帆学长,希望可以提前开始实习。Google 考虑到我的特殊情况,答应了我的要求,于是我就从今年 2 月开始在 Google 北京实习了。