长,慎入:Microsoft, Pinterest, Airbnb, Google面经及面试感

原帖地址:mitbbs

答应过一起刷题的几个兄弟,在这把我这几个月骑驴找马的经历简单写一下。也算是给
本版的一个小小回馈吧。毕竟在本版的这些日子里面,从公司选择到面试再到offer谈
判,真的是收益良多。希望其他人,特别是有一定工作经验的同行,能从我的经历里面
得到些帮助吧。

先简单说说背景:PhD毕业将近9年,最近几年在目前的公司做一线manager,属于活多
钱少的典型,还要不断跟日益增多的印度同行斗智斗勇。靠近14年底的时候开始觉得目
前的职位已经索然无味了,大部分的时间和精力浪费在跟local的和remote的印度同僚
们相互扯皮,而不是产品和团队上。于是开始断断续续在本版看面经和公司评论,希望
锁定几个有前途而且文化符合我喜好的公司,同时开始刷 leetcode找做题的感觉。

一开始的时候还是比较想继续走management这条路的,具体原因后面会说。后来发现市
场上manager的职位非常有限,而且很多职位对管理经验的年限还有着非常严格的要求
,所以找工作的初期并不是很顺利。一些感兴趣的职位跟recruiter聊过以后就没有下
文了,而大多数同意面试的公司自己又不是很感兴趣,所以一直进展不大。后来决定把
搜索范围扩大到senior level software engineer 机会才渐渐多了起来。陆续面了
Microsoft, Pinterest, Airbnb 和 Google 四家公司。其中 Microsoft 和 Google 的
职位是manager, Pinterest 和 Airbnb是Software Engineer。最后拿到了 Microsoft
, Airbnb 和 Google 三家的offer和准offer。

Microsoft
第一个选择面 Microsoft是因为它是第一家同意我面 manager的公司。当时觉得刷题时
间太短 (到面试的时候leetcode都没有完全过一遍),面 engineer没有把握,就选择了
自以为对 coding要求低一些的 manager职位。面试的时候才发现完全不是这么回事。
Phone screen 是VP直接面的,聊了半小时过去的一些项目就直接让onsite了。Onsite
是从早上9点开始的,见了一个 印度Principal Dev Lead, 3个 白人Principal Dev
Manager, 还有一个国人大哥忘了问 title, 但是估计也是 Principal level的。每个
人上来都是直接问一道 coding 和一道 system design 或者 machine learning 相关
的题 (国人大哥除外,跟我聊天聊了一个小时,赞一个)。最后再问一些和people
management, project management相关的经验。 Coding 题都不难,没有leetcode原题
但都是leetcode 中等偏下难度。倒是都写出来了,但明显写得不是太熟练,被挑了好
几个bug。面试的时候好像在时间上卡得不是太紧。每一个都是等我完全做完题再带着
到下一个面试官的office里面去的。有时候面试官不在office 还要等。就这样一直折
腾到下午5点半才又见到电面我的VP。然后就是一个多小时的behavior questions 并要
求现场写一些 email啥的。感觉聊得不太好,主要是现在的公司跟Microsoft在处理事
情上的风格实在是太冲突了吧。果不其然,面试结束后第三天通知我给offer, 但不是
manager, 而是同级别的engineer。当时觉得不甘心,同时觉得不讨未来老板喜欢(就
是面试我的VP),在没有其他offer的情况下咬咬牙据了。

Pinterest
Pinterest 是找以前同事内推的。同事现在已经在Pinterest做到了manager, 发展很不
错。内推的时候给我说了一大堆好话,以至于一个电面就给了 onsite,而且还在
onsite前专门打电话给我详细介绍了一下Pinterest的文化和发展前景。真的是受益匪
浅呐,在这大大地赞一个。可惜我自己不争气给搞砸了,想起来还真的不好意思,希望
不要影响同事的 credibility才好。
Pinterest 是我非常喜欢的一个公司。其实在刚开始申请的时候对它还不是太了解,后
来在面试前有针对性地做了一些研究以后对他们家的前景越来越看好。具体理由版上已
经有了很多讨论,就不再复述了。面试的头一天是在湾区著名的御食园吃的饭,贪爽点
了比较麻辣的菜。结果回到旅馆肚子疼了一夜,直到凌晨三点到union square 的
wallgreen 买了止痛药才勉强睡过去。不过当时已经知道凶多吉少了。第二天到
Pinterest总部,印象非常好,非常有艺术气息的装修,让人十分放松。先跟推荐人还
有以前的另外一个同事一起吃了午饭,然后直接进入主题。面试的时候遇到了一轮白哥
哥 coding(白妹妹shadow),一轮非常漂亮可爱的国人妹妹聊culture, 两轮国人大哥
一轮coding一轮system design, 最后一个印度人manager做sale talk。凭心而论,题
目都不难,leetcode中档吧。 可惜我一整天脑子都比平时慢半拍,题做得磕磕碰碰的
。还有一道题其实用DFS做很简单,不知道我哪根筋出问题,非想用一个很复杂的方法
做到最优,浪费了大量的时间才说服面试官我的解法更好。结果不出意料地在面试完后
一个星期接到电话直接挂了。想想真可惜了这么好的面试阵容。

Airbnb
Airbnb是和Pinterest背靠背面的。当时由于Pinterest面得不好的缘故,压力非常大。
在这要大大赞一下我Airbnb的recruiter, 他是我见过最好的recruiter, 没有之一。每
一轮面试,包括电面完了以后,他都给我提供非常详细的反馈,比如说code写的不错,
面试官对我聊天的某个细节印象深刻等等。在面试的当天早上,当他得知我头天的
Pinterest没有面好,还专门花了半小时陪我逛Airbnb总部大楼,让我放松下来。面试
的安排上也尽量做到technical 和non-technical session 间隔开以便我有时间放松。
Airbnb面试需要强调一下的是coding不用白板。电面是在一个类似于leetcode 的网站
上直接写code (有一些关键词高亮,但没有函数auto completion 和报错提示), 而
onsite则是给你一台有eclipse的电脑,要求编译通过并能通过面试官提供的测试例子
。我电面碰到的是一个白人小哥,刚毕业没多久,code题算法很简单但是比较考一些
edge case的处理。过程中聊得很开心。反馈回来说小哥直接给了strong signal, 免第
二轮电面onsite。Onsite总共有7轮:两轮culture fit, 两轮 coding, 两轮system
design, 一轮 project deep dive。 过程就不再累述了。Coding 题非leetcode 原题
但属于中等难度。System design 主要是结合Airbnb网站自己的feature 来问。中间有
一个插曲:我第一个coding 的面试官来晚了15分钟,后来又花了大概10分钟setup 电
脑,题目出得也比较偏,以至于我最后没能完成code。好在我面试之后及时把情况反映
给了recruiter, 他调查属实以后,加上我其他几轮的表现不错,给我争取到了加面两
轮的机会。加面过程比较顺利,第一轮是白哥哥manager 问culture fit 和 behavior
question, 顺利过。第二轮直接上来考coding, 超水平发挥,写了大概80~90行程序一
次编译运行通过。得到两个strong signal后拿到offer。

Google
面Google的经历可以说是一波三折。刚开始通过两个朋友内推 software engineer职位
, 第一轮电面遇到map组的小印,上来就是leetcode 原题,直接描述最优解然后开写
。写到一半的时候问是否见过原题,老老实实回答说见过。马上叫停,换题。第二道题
是leetcode上的简单变体,又问是否见过。又老老实实说没见过原题,但见过类似的。
无奈让我继续写。30 分钟的时候两道题都做完了。小印说就准备了两道题,然后开始
随便聊天,比较Google和现在公司在ML项目开发工具上的异同,聊得很开心。小印说是
”One of the best interviews”。接下来面试完一个多星期没有一点消息,当时觉得
有可能被小印给黑了。后来recruiter 重新联系才知道小印给了很好的反馈。然后给了
两个选择,一是继续面 software engineer, 免第二个电面onsite; 二是转面
Manager, 还有一轮google hangout interview 才能 onsite。选了二。第二轮面试是
台湾manager大哥,上来先是一道巨简单的coding 题,我还在寻找trick的时候被告知
没有trick,只要求5分钟内写出bug free code。手忙脚乱在5分钟内写完,被告知OK。
然后是一道 System design, 要求很细,包括计算读写rate, 存储空间大小等等,最后
是people management 和 project management 问题。第二轮面试完后很快收到反馈:
onsite。Onsite 是在面Pinterest和Airbnb后一周进行的。上飞机之前接到Pinterest
据电,心情非常低落。到SF一下飞机又接到Google recruiter 电话,告知面试的职位
close了,但还是希望对我进行一次 general 的面试。在这里简单说明一下,G家面
manager 好像跟面engineer流程不太一样。Engineer都是走 general的面试,然后再
team match。但manager 则是跟职位相关组直接面试。面试前一天吃晚饭的时候觉得很
悲愤,最想去的三个公司一个悲剧,一个前途未卜,最后一个干脆连职位都没了。但一
想既然来了,就做100%的努力去争取一下1%的可能吧。第二天的面试进行得异乎寻常地
顺利。见到了两个亚裔Engineering manager, 两个白人 Director。面试偏重复杂系统
的需求分析和系统设计,应该都是他们日常工作中碰到过的实际问题。Coding都是很简
单的题目,但要求在短时间内写出bug free code。由于申请的position 取消的缘故,
最后一轮跟hiring director 面试被临时取消了。面试完开车回三藩机场的路上接到
Airbnb加面的通知,算是另外一个好消息吧。Google 面试完后一个星期左右接到
recruiter 电话,告知面试反馈很好,但手头没有合适的职位,只能慢慢给我找 team
match。当时Airbnb加面已经顺利完成并被告之会有 offer。Google recruiter 知道后
比较着急,叫我一定等她,同时给了一个potential package 的大概数字。后来发现这
个package跟 Airbnb recruiter 猜到的数字一模一样。呵呵,看来湾区的公司大家都
是知根知底的。后面的发展就比较顺利了,又电面了一个director顺利拿到support
letter愿意接收,但已经签了Airbnb只能遗憾作罢。

回顾过去几个月骑驴找马的经历,虽然面试的公司不多但还是慢慢积累了一些经验。在
这跟大家分享一下,希望对后来人能有一点点帮助吧。

1. Manager vs. Engineer。我是比较想继续走management这条路的。我有一些很
senior的朋友不愿做manager。 一是因为engineer职位相对较多,稳定且以后跳巢容易
;二是因为底层的manager 大多是付出大于收益的,感觉不是很划算。而且还有一些人
心中还保留着技术至上的想法,更愿意把时间和精力花在研究新技术上。从我个人经验
来说,感觉底层的manager其实是很关键的一个群体,国人在各大公司相继失守跟底层
manager的缺失不无关系。底层的manager确实没有太多权利,但在hiring和
performance review两个环节往往能起到一定的作用。Hiring 不用多说了,直接关系
到公司的人员构成比例。在performance review 环节,大多数公司都大同小异,会在
不同的部门间有一个所有manager参加的calibration,而且每人一票。这个时候烙印往
往能做得很团结, you scratch my back and I scratch yours,从而为整个群体争取
到最大利益。而反观国人,经常是满屋子烙印manager里面零星点缀的几个,根本就是
一场打不赢的战争。所以我一直都在周围的朋友中大力劝说他们有机会出来争取
manager职位。只有形成优势才能保障本群体的最大利益。也只有在底层的manager里达
到一定的数量基础才能产生更多的高层管理者,从而进一步扩大群体利益。

2. 交流是面试的重点。很多人都指出来过,面试其实是一个面试官与被面试者相互
交流的过程。在算法,设计等硬功的基础上,很多面试官更看重面试者是不是能通过与
自己的交流和沟通系统地分析和解决问题。毕竟面试是要挑出将来和自己一起工作的最
佳人选。如果交流得当,是可以从面试官那得到很多帮助的。所以面试的时候一定要把
握好每一个和面试官交流的机会。比如上来先感谢一下面试官百忙中抽出时间面试自己
,在提前知道面试官姓名的情况下,做功课了解一下面试官的背景喜好,在回答设计问
题时给出多个备选方案,分析利弊并根据面试官喜好推荐最终方案等等小trick往往能
在面试中起到意想不到的作用。

3. 刷题是面试的基础。借用一下模板: 刷题不是万能的,但是不刷题是万万不能的
,当然已经在行业里混出一定名头的除外。其实我对刷题也是深恶痛绝的,认为它绝不
代表一个人的真实水平。但现在整个行业就是这个样子,做题还是相对公平的一种能在
短时间内选人的基本手段。所以建议无论面什么职位,level,最基本的题型还是尽量
熟悉一下。我刷题主要集中在 leetcode, 在两个月内做了3遍。临近面试的时候到本
版看一些新题查缺补漏。刷题的时候主要集中在把题型做熟,力图能举一反三,而不是
多做题上。事实证明,面试过程中几乎没有遇到过原题,但大多数面试题都能在
leetcode里找到相似的解题思路。

4. 千万不要忽视recruiter的作用。这次能顺利拿到A家offer,recruiter可以说起
到了至关重要的作用。从面试安排,到面试反馈,再到为我争取到加面机会(A家是一票
否决的),还有后来的offer谈判,recruiter都帮了很大的忙,让我及时了解每一步的
结果。比如面试完后每次recruiter都会给我电话,告诉我有几个strong signal, 几个
OK signal等等。我有什么问题和想法基本上也直接和recruiter说(当然这是个例,不
建议随便采用)。Recruiter 不能直接决定是不是能录取你,但他们在整个过程中起协
调作用,所以在整个过程中的影响绝对是不容小视的。