面试经验分享平台

将近几年的名企精品面试汇总、筛选、整理,再分享给大家
经验详情
路路的加州Google和Facebook onsite面试经历

之前蝶姐让我写面经,我还羞涩地说,人家都没拿到offer呢怎么好意思写面经呀!于是被责怪心态不对。后来想想是啊,自己也看了一些面经的,人人为我我为人人么,而且就算被拒了也不是什么丢脸的事情,总结经验下次再战就是了。所以就简单记录了一下面试的过程和其他相关的信息,难免疏漏,还望海涵。

===

Google onsite

地点:Mountain View, California
时间:2012年7月16日

上午10点,到Google Building 43的lobby签到,拿到Visitor的贴纸贴在胸口,表明你是今天的Visitor,之后遇到Google的门禁系统时,需要有一名Employee陪同你一起进入。

10点20分左右,之前联系我的recruiter姐姐在lobby跟我握手,带我到了某个楼的小会议室里,而我今天的4场面试都会在这里进行。进入会议室以后,她告诉了我今天大致的流程,要注意的是,如果不出意外,你之后是不会再遇到你的recruiter了,所以有什么需要当面和她沟通的问题在她离开会议室之前就要和她说,但是一般来说不是什么特别紧要的问题都可以之后邮件联系。

10点30分,第一位面试官进入房间,recruiter姐姐就离开了,于是面试开始。我的那间会议室只有一块白板,写起来有些局促。听说有些人面试的时候会有两块,不过我觉得影响不大,要是一整面白板都写不完你的代码,那比较大的可能是你的代码存在可以精简的地方。如果问完他想问的问题,看时间还有一些或者下一位面试官没有到会议室外的话,面试官几乎都会给你时间问问题,我个人感觉问什么不重要,这个环节一来是出于对面试者的尊重让你有机会了解公司文化和技术等等,二来也是打发时间。

11点15分,第一场结束,和面试官say bye,和下一位面试官问好。流程大同小异。

12点左右,第二场结束,和面试官say bye,然后会有一个带你吃饭的工程师。Google Mountain View这边餐厅很多,你可以和他说你特别想吃的菜式,或者就让他推荐。吃饭的时候可以随便聊聊,这个工程师不提供任何feedback,我想大家也都知道了。我当时吃得比较保守,只要了很少的一些菜,然后没有拿那些奇怪的东西,包括饭后奶昔什么都没要。一来是不想吃太饱,会让人容易犯困,毕竟到下午3点前面试就结束了,稍微吃点就可以;二来刚到加州,也有些害怕水土不服,到时候要是吃得身体不舒服一直跑洗手间会很尴尬。吃完饭如果还有时间空余,也许他会带你逛逛整个campus,我记得我当时走了很多路,从一个building到另一个,也玩了很多很有意思的东西。

1点15分,开始第三场,这个面试官先问了一个比较容易的问题。不是算法题,只是单纯的给你interface让你implement一个方法体,所以写得比较快大概10分钟左右吧。之后又问了一题,我说这道题目和之前那个面试官问的很像(几乎是一模一样的题目),他说啊!这样,那就算了。于是把写到一半的题目擦掉,开始坐下来和我聊天。是个很nice的老头子,聊了20分钟之后,他问我要不要去弄点喝的?我估计我们聊了这么久他也口渴了,所以就说好。去会议室边上的mini bar弄了点喝的,回了会议室继续聊。聊了一会儿下一个面试官就来了。

2点,最后一场面试。这一场比较特殊,遇到了两位面试官,我就简称A和B吧。其中A是负责面试我的,而B被称作shadow interviewer,主要是记录面试流程的,B不会影响面试过程。因为这是A第一次当面试官,在Google需要连续做3次shadow interview才可以独立面试,所以有B这样一个类似于supervisor的存在,无视她就行了。由于是最后一场,所以时间稍微拖长了点,正好遇到个数学方面的题,公式我回忆不起来了,在A很大的帮助下才终于得以解决。结束以后和AB两位面试官分别握手,然后由A送我回到今天早晨签到的43号楼lobby,say bye。

然后该回家回家,该找好丽友的找好丽友。全部结束时间差不多在3点左右。

===

Facebook onsite

地点:Menlo Park, California
时间:2012年7月17日

我那天去得比较早,怕堵车,所以9点30就到了。面试开始时间也是和Google一样,10点30。在17号楼lobby等到差不多10点15分的时候,出来了一个之前邮件联系的recruiter,握手问好,告诉我大致流程然后就走了。等到10点35分,出来了一个工程师,带我进了会议室。会议室比在Google的大了很多,白板的大小也有Google两张那么大,但最终我也只用了其中的一半左右的大小。

第一位面试官也就是那个工程师,他说以为recruiter会带我进会议室,没想到竟然没有,因此耽误了七八分钟。于是他简单个人介绍后,出题,做题。先是他设计了一种数据结构,要我来实现,要求不能用任何模板类(Java里面你可以理解成类似java.util这个包里的那些数据结构),在和面试官沟通完细节后,随手写了一个很简单的数据结构,问他okay嘛?他说confirm了一些细节,然后答复可以。于是他又在这个数据结构的基础上,出了一道题目,或者你可以理解成,给这个数据结构的类增加了一个需要实现的方法。于是我思考了一下就开始写,写完他说你写个例子,然后walk through一遍你的代码看看。我就给他walk through了一遍。然后他说有问题,在某些情况下你这个算法复杂度不是线性的,然后举了一个反例。然后我说,哦那我可以改,他说好,你改吧。我就擦掉重新写了一遍,然后他又说,你再walk through一遍,我只能再来一遍。这次终于okay了,不过他说其实你不需要完全重写,只要修改其中一两行就行了。然后就是问答环节,面试官告诉我他还准备了另一道题目没有问,不过时间来不及了就算了。由于开始的时候浪费了一些时间,中间我又写错了一次代码,所以当时还是挺郁闷的。毕竟面试官准备的题目没有答完,不是什么太好的征兆。

11点15分,第一轮结束,他和我说等等会有人带你去吃饭。我说你们这儿吃饭还挺早的啊(昨天在Google是12点多吃的),他一看钟说,对哦才11点15分,食堂都没开门呢!我帮你问问。结果是会有个recruiter带你逛逛campus。然后逛了大约半个多小时到11点45分的时候,我又被送回了面试的那个会议室门口。和这个recruiter姐姐say bye,又迎来了另一个姐姐……这个姐姐是带我去吃饭的,不过后来我得知,由于我的推荐人不在Menlo Park,所以是recruiter姐姐带我吃饭,否则的话一般都是由推荐人带你去吃午饭的。吃好正好快12点10分,于是回到会议室等第二轮面试。这里要说的是,Facebook是先逛campus再吃饭,而且食堂11点45分开始营业,12点15分你要进行下一轮面试,午餐的时间会比较紧凑,尤其和Google先吃饭再逛campus这样的安排相比,所以注意吃饭的节奏,别和漂亮recruiter姐姐聊太high错过了面试时间……

由于上午一面有点受打击,外加前一夜腰扭伤了写白板时各种腰疼,所以整个人情绪比较low,于是外人看起来就是很cool很冷淡的那种。于是recruiter姐姐还说,嗯我看你还蛮镇静的,我见过有些面试者紧张得整个人都在发抖……我也不在情绪上,于是回了个呵呵。倒是逛campus的时候还看到了Mark在玻璃会议室里面开会,姐姐跟我说在这里经常会看到Mark的没什么稀奇。

12点15分回到会议室,进来了第二轮的面试官。听说FB三轮面试,有两个被称作ninja的面试官负责技术面试,另一个负责更general的问题。这一位就有点这个意思,进来什么都没有带,好像连记录的本子都没有带(也可能是我忽略了),上来就问我一些behavior的问题,类似你做过最难的项目是什么,你最欣赏的人是谁为什么之类的。谈了一阵估计看我口语比较捉急,于是说,那我们还是做道题目吧。写下题目,我答完。他指出了一个不符合要求的地方(算法本身是没有问题的,只是题目有额外要求所以要修改,我没注意),然后我改好,他也没有让我walk through,也估计没查那些边界条件之类的错误,就说很不错,很impressive,其他面试者很多都只会用brute force云云,也终于露出了一点真诚的笑容。有些面试官就是这样,你思路对了他就很满意,而有些面试官会比较强调细节,任何overflow和边界条件都要查,看人的吧。这一面还算面得不错,也让我有了些底气。

1点,第三轮,也是最后一轮。按照之前的推测,这一轮也是个ninja,只问了一道题目,也是很简单的。然后和第一个面试官一样,要我自己写test case,walk through给他看。然后代码okay,问我时间复杂度。我先给了一个错的,他问为什么是这个?然后我想了想发现自己弄错了,面到那时候有一些意识模糊了,现在想想幸好FB是三轮,要是连着两天每天4轮,到这天的最后一轮我估计人都要崩溃了。我修改了一下,他说还有问题,你看你那一步的复杂度是多少?然后我又修改了一次,终于改对了。虽然错了2次,但感觉我反应还算及时,他提出问题能马上知道怎么修改。还有再次提醒,遇到有关string的算法时,分析复杂度要格外小心……写完复杂度之后,时间还有空余,就问了问我关于这道题目的数据结构,如何提高效率之类的问题,我和他就站在白板边上,我一边画一边解释给他听,讲得也比较明白,也没有出什么差错。然后1点45分,准时结束面试,送我回到lobby。然后依旧是该回家回家,该好丽友好丽友。

===

面试结果

Google: Offer
Facebook: Offer

其实面完两家我都感觉没什么机会。都是面得磕磕绊绊,而且由于题目都是非常非常简单的类型,所以我觉得不能一次做对,就没法在众多面试者中间脱颖而出。不过之后我和很多人说我面试的经历,他们也安慰我说我自己的感觉是不靠谱的,尤其在我纠结Facebook第一轮没有答完所有题目的时候,程宇告诉我之前耽误了面试时间不是我的责任没有关系的,这在后来看来还是很有道理。总体的感受是Google的工程师都很nice,但能感受到有一些是深藏不露的类型,就是那种你写完白板刚放下笔,他就能笑着从你代码里找到关键错误的那种。Facebook的工程师,怎么说呢,感觉起来就普遍比较屌,不怎么笑,面过onsite的同学一定知道我是什么意思的……或许是我当天腰酸背痛,又情绪低落,也表现得很冷淡的样子,比较符合他们的胃口吧……所以去FB的同学要有心理准备,不要因为面试官的态度影响了自己的心态,还是该要有以不变应万变的定力。

===

面试准备

熟悉我的人都知道我这人没什么长心,我准备面试其实也就占用了我平时不多的时间(前一阵大菠萝A1刷得我超high的好嘛!闭着眼睛都能KO屠夫了好嘛!)。最开始4月份就是看leetcode上面的题目,把它题库里的每一道题目都做了一遍,最后是三四题做不出来或者不想做太烦了(比如数独),然后有七八道是TLE懒得改了,其余一百多道都pass了。这些题目我都是在类似Notepad++这样只提供语法高亮的文本编辑器里面写的,如果你长时间依赖类似Eclipse那种很贴心的即时编译外加快速修复功能,这段时间的练习会让你感到非常痛苦,但是熬过去以后还是有收获。
然后很多人都跟我推荐CareerCup以及GlassDoor,我也就偶尔上去刷几道新题目看看。尤其是career cup上面,面试地点是India的我都不看的,很多都太TM难了。
再后来就是做CodeForce上面的题,没比赛的时候就看看之前的题目,有比赛就参加,参加了大概五六场吧。在来美国前的第二场终于rank到了Division 1,然后最后一场又掉到了Division 2……所以我算法还是很弱的,这也说明了就算是Facebook这样宣扬hacker文化看似对算法要求很高的公司,在面试new grad时也没有那么地严苛。
然后来onsite前一周,看到个面经说他看了Programming Pearls,说每次读都能有新的感受。于是我花了大概3天时间读完了整本书和书后习题答案,感觉是一本好书,就算不参加面试也可以读,会让你对software这个东西有个新的看法。但是反过来说,其实看不看对面试影响也不大,这种属于提升内涵的书籍,不是看一本,看个两三天,就能起到明显效果的。有时间可以看看,没时间了不看也无妨。
其他书的话,我就在4月份电面前看了算法导论的很前面的一部分,大概到红黑树线段树的地方吧,后面也就没在看下去,之后也只是偶尔做到题目需要翻的时候看两眼。掌握好前面那些简单的算法,在面试的时候会更有用一些,因为比较常用,出现概率高。onsite前我还曾纠结过所有n^2稳定排序算法里哪种最好?为什么?这样有些走火入魔的问题……太nerd的东西有时会是亮点,但要是时间紧迫,还是别管这些锦上添花的东西了吧。好比你打三四号位,局势已经逆风了,要先想着做梅肯笛子,而不是红杖一样。
CareerCup那本书,很多人都说面试必看。我觉得么是应该看看,前面介绍面试流程,后面给了许多例题和答案,看起来效率很高,很划算。我还看了一本Programming Interviews Exposed,没有什么感觉,好像是和前面那些书内容重复得比较多,只把书名列在这里,仅供参考。
Design Pattern看了Head First的那个版本,随意翻了翻,背了下一些设计模式的名字。因为在正常写代码的时候,你肯定会用到设计模式,就算是不自知的情况下也会用到,但要你说出名字出来就比较困难,至少对我而言……不过最后也没用上,两家都没问一丁点关于设计模式的问题。
嗯大致就是这样了,经常做做算法题保持一个好状态比较重要,尤其是CodeForce这样定期举办线上赛的OJ平台,能锻炼你在紧迫的时间内完成任务的抗压能力,也能锻炼你写算法一次就写正确的基本功。如果你在大学里搞ACM什么的,就无所谓了,熟悉好自己的resume,锻炼好口语和表达能力或许更有用一些。

其实说到底,我也就面了这两家,之前也没有参加过任何求职面试,而且这也只是我一家之言。如果能帮助到正在或者将要找工作的你们,那我就已经很高兴了。

最后还是感谢一路好友的帮助,你们对我的信心比我自己要充足百倍啊!还有特别感谢程宇的提醒,要不然像我这样被动的人,肯定想不到去试一下Facebook的。

p.s. 两家都签了NDA(类似保密协议)不太方便透露试题,实在感兴趣的同学咱们私下交流吧……其实我已经忘记得差不多了……