马克2016找工季总结, 拿到g和f,从了facebook

avatar 156076
bumbing
76823
146
毕业1年,从7月开始找工作到现在,历经2个多月,经历了高开低走,然后峰回路转,终于拿到心意的f和g的offer,思索再三决定从了f,下面写一写对面过的所有公司的感触,还有这一路准备下来的感受,已经整理出来的一些system design资料

1. 面试公司
简历挂: Amazon, Amazon A9, Palantr, Pinterest
Phone: Uber(面过,组没了), indeed, Twitter(还在面), BloomBerg(不面了),
Onsite: VMWare(给了口头offer但被收回), LinkedIn(不打算去onsite了), Two Sigma(进行中)
Offer: (按时间先后顺序)Microsoft, Arista, VMTurbo, Facebook, Google

楼主之前是ee转了ce, master期间一直在做computer network,毕业去了这个领域最大的那家,感觉大家对我这种非纯cs的都不太面算法,系统的知识问的特别多,有种英雄无用武之地的感觉

7月第一家面试是Microsoft, 他家一直在通过hiring event招人,楼主抱着去试试,反正还有人报销就当是旅游的心态,飞到了西雅图,微软给包酒店,包一天75的饭补,以及打uber的钱。整个redmond感觉就是微软的天下,很安静又什么都有,体验很好。
说一说面试,他家的hiring event是4轮,上午的从7点半就要进去,楼主这种3点睡10点起的显然只能参加下午场,每一场大概能有20多个人(通过率大概是20%到30%,微软真是狂发offer)。然后下午场先给你个lunch boxer,里面的东西还可以。在一个很小的屋里面试,然后每轮面试官45分钟,中间休息15分钟。有一个特色的每一轮的反馈直接会给下一轮的面试官,然后直接能影响到下一轮。具体看下面的例子。
微软考的题真心不难,算法基本在medium难度,lz面的azure,里面的烙印也是乌央乌央的,4轮3个烙印,一个abk。其中有一轮,大哥出的题是LC22,通过讨论,大哥建议我用backtracking/dfs的解法,我那时候还没开始刷题,对这种操作型题目没有自信,就找了一个dp的解法,大哥一直在质疑,说你这解法对么,我就一直在举例给他讲,到结束的时候终于解释清楚了,大哥连代码都没让我写,连连说,我还没有见过人能这么解题的,问题也没让我问,就走了。我也不知道他是要黑我还是夸我。下一轮来了个经理,就跟我说:听说你算法很牛逼?我说:还行还行,也不行。我比较喜欢算法blabla。然后经理聊一聊简历就出了道tree的hard题,感觉这一轮经理受到上一轮反馈的影响,直接上了难度。
面试的体验还不错,但是发offer的体验让楼主直接从粉转黑。拖沓,傲慢,流程之繁杂,以及到现在还没报销下来。
4轮顺利通过后的2周后,hr突然打电话说有offer了,问了楼主的期望值,楼主说了现在的工资,说不能比现在的低。然后lz很开心的又等了2周。。。(期间hr貌似被外星人抓走了,怎么联系也联系不上)。然后hr又打来电话,发了让楼主大失所望的offer(1point3acres.com)。东拼西凑只比楼主目前的offer多出1千,城里人真会玩,还跟我说福利怎么怎么好,西雅图放假怎么怎么低。然后楼主说手头还有其他的offer,然后hr也毫无兴趣,argue以后也是一分钱没涨。2周deadline后楼主直接拒掉。
总的来说他家对new grad待遇很好,对跳槽的人待遇很差,内部流程很差,面试之后的体验很差,主要是靠卖情怀招人。

第二家,arista。这家是朋友面挂后,楼主也去找recuriter,然后安排了面试。他家电面是题库,基本准备过的都能过。那是楼主刷题不是很6,电面那轮出了很多小错误,但是大哥还是放我过了。onsite也只有2面,第一面经理,题目是设计rate limiter,楼主就用producer consumer的套路搞定,第二轮是vp,面的设计hashtable,楼主用java写的(他家是硬件公司,vp其实想让我用c写。。。),基本点都写出来后有跟vp介绍了刚看的redis源码里amortize rehash的方法,vp非常满意,当场发了offer,让经理又留了我一个小时说他们公司怎么怎么好blabla。后来又邀请我吃了一次午饭,介绍了他们三个组的工程师,以及他家的代码是怎么写出来的,感觉他家是个很engineer driven的公司,对ee转专业的同学是非常好的选择。
最后发下来的offer也是超过了大多数公司,仅次于f和g。硬件公司里已经很不错了,整体流程也是经理一个人一直在follow,没有那些乱七八糟的。

第三家是uber, 他家的经理主动通过linkedin找到我,然后说先安排电面,电面了到merge two group of intervel现场编译写test case,时间还是很紧的。楼主答出来后就杳无音讯,然后就爆出和didi合并的消息,后来经理告诉我整个组都没了,问我对别的职位感不感兴趣,然后就没有然后了。

第四家是VMware NSX(网络), 他家是hr通过linkedin找到我的。 OA出的题简单无比,4到选择题,2道算法简单的不得了,medium偏easy原题。
然后是电面,题不难,大哥干了10多年底层,算法真是不行,连radix sort都不知道是啥。但是一提起来他们用的软件open vswitch两眼发光,然后楼主并不感兴趣,也没太深入了解过。面试的时候问我why vmware,我心想是你们hr让我面的,但是实在找不出理由,就说不想做用c写的operating system了,想做更上层的东西,大哥非常尴尬,估计他们也是做的底层。
然后顺利拿到的onsite,他家的campus坐落在stanford附近,位置非常好,里面装修的也很不错。面的4轮全是烙印,1轮算法(lz就写了个union find大哥就震惊了,做网络的都没见过算法么)其他都是各个方面的基础知识和工作经验。面完hr进来说发offer。然而过了1周lz问为啥还没消息,他们说楼主面的很好,技术很好,就是太年轻了。。。。。然后就再见了。。。对他家也是无语了

第五家是linkedin,对他家的面试体验也是差的不行。7月中他家的recuriter在linkedin上给lz发了inmail,然后楼主回复以后就被外星人抓走了。然后又过了一个月楼主找朋友内推,依然遇到的同一个recuriter。这个recuriter是个烙印,打电话的时候明显不是很耐烦,上来就问我现在的公司是不是宣布大裁员了,然后说我们只招非常聪明的人,明显在鄙视楼主。
然后电面楼主在15分钟闲聊 + 网断了耽误了9分钟的情况下依然bug free做出了2道题(一道medium偏easy一道偏hard),然后等了2周杳无音讯,之后就收到了那个傲慢recuriter的邮件,说 马克啊,我离职了,我的同事会follow up的。然后面完到现在同期的公司都出了offer他家还没安排onsite。。他家以后要并进m,估计更次了。。

然后是f,f家的流程非常快,recuriter也是反馈的很及时。找朋友内推后1周就收到了面试安排,然后从onsite到offer也只用了3天。第一面是个硬度小哥,人很nice,说话的时候自己都紧张。就像大多数面经一样,做了3道题,每次都写点例子测试下,顺利结束面试
onsite的时候他们走的是new grad流程,只有2轮算法1轮behavior,3轮里有2个中国大哥,他家的算法上手很容易,但是follow up很多,比如一道很简单的往一个2d matrix放n个地雷的问题,可以直接用random number generator生成,但是问题有二,1,概率分布不均匀,2,可能循环很多次,效率差,于是lz就从augmented binary tree说到knuth shuffling, 又说到reservoir sampling,解决了这两个问题。我觉得能说到augmented tree应该是个hire,说到后2种就可以strong hire了
三天后他家发了new grad的标准包,和g对比再三决定从了他家

最后是g,电面的题就是个简单的搜索问题,和面试官讨论了bfs dfs以及union find的方法,15分钟做完,然后基本一直在讨论follow up,并没有第二道题。然后第二天hr热情洋溢的打来电话,说约onsite,估计第一轮面的很好。
onsite的时候由于楼主已经拿到f家,轻装上阵。这次又是因为lz是computer engineering的原因,只有2轮算法,生下三轮问了很多系统相关的东西。比如concurrency hashtable如何上锁(感觉这轮给的no hire,因为这轮完全没问算法),2-phase commit之类的。第二轮的俄罗斯大哥问了个比较难的dp,楼主现场想了个解法,用非常简洁的办法给出了转移方程,大哥当时折服了,说比他的解法更好。代码都没怎么让写。下午的两轮也是顺风顺水,一个web crawler设计+ood design(第一个问题答太快,给了很多follow up的方法比如bloom filter和tenary search trie,白人小哥第二轮看我不太会直接各种提示放水了,楼主也顺利都接住了所有提示)。另外一轮也是白人小哥,30分钟答完2道算法就开始开心的聊天。这三轮后来都给了strong hire。

然后是indeed电面,这时候lz已经拿到offer,加上大哥电话过于不清楚,加上serialize tree这道题没有准备,就挂了,也是这次唯一一个题没做好挂掉的

2. 如何准备

2.1 算法
很多身边的朋友问我算法怎么准备,我只能回答一个字:“直接刷题”。楼主之前听过xx算法的高级算法课,感觉课还不如附送的ladder管用,(ladder是真好用)。然后又听了各种各样的算法课,(13年夏天啃掉了算法导论,听了mit的算法,算是打了比较扎实的基础),还是推荐算法挺princeton大爷在coursera的公开课,这门课深入浅出,基本lz答的80%的follow up都是从这学到的。
至于刷题,楼主刚毕业找工作的时候刷了100多道,以medium为主,工作半年后每天晚上刷2道hard作为思维训练,然后这次找工作刷了300道,一些典型的可以用多种解法的题用所有方法刷一遍,大概不到500次不一样的提交吧。我的经验就是,如果平时没事做,就去刷hard,对找问题解决问题,写更整洁的代码都有很大帮助,如果是着急面试,就多刷medium,把基本功练熟,面试基本不会考到hard的原题,就算考到了也未必能考到你准备的那些,还是要把基本功练扎实,比如写个bfs dfs unionfind或者sweep line可以不过大脑。然后就是不一定要会写,但是尽量多了解些高级的数据结构,这样follow up不至于没的说,比如segment tree,binary indexed tree, tenary search tree, Boyer-Moore, Manacher等等,可以上princeton大爷的课,也可以去geeksforgeeks或者topcoder看文章
(再次推荐下princeton大爷的课,不光是视频,他的书有电子版, 里面的专门各种数据结构和算法的源码(algs4.cs.princeton.edu),比如谷歌一道原题是如何设计迷宫,就可以直接从这里看到代码
总的说,hard题和高级算法结构需要总结,是一种长期收益;medium和模板是熟能生巧,想拿起来随时可以拿起来,是一种短期收益。面经是针对性很强的东西,是一种很有用的功利性的收益,如何取舍看大家各自处于什么阶段

2.2 系统设计
楼主大概只有30%的系统设计,基本都是靠平时积累。看过xxxx的系统设计,也看过各大公司的技术博客,主要是平时多看吧,没事的时候就看一看。

zhuanlan.zhihu.com
mitbbs.com
hiredintech.com
blog.gainlo.co

以及各大公司的技术博客和xxxx的系统设计

以上就是楼主的总结,一路看回去,面试真是个很累的事情,要打电话发邮件,要准备面试,还要请假去面试,每天刷题刷到夜里2 3点,周末就2天完全在刷。然后刷到300题的时候看到题就想吐了,因为所有的方法都不过是翻来覆去那些东西,只是外衣变了,有时候还特麻烦,看着都恶心了,也得坚持刷下去。。。然后behavior也是,不知道自己说的好不好,但是每次都重复说一样的东西,自己都听烦了。。。以后面试知道了自己的斤两,那些小公司或者不打算去的也不会随便去投了

还有一点,就是当时楼主面试的时候,因为手头上有很多pending offer,感觉这公司无所谓吧,就开始高冷作死,更人家说,你看微软给我offer我都不去,估计这点让人家也没招我的信心,导致vmware最后把口头offer收回。教训就是永远不要和recuriter装逼,所谓求职者,就是要求,不要放弃跪舔面试的公司的机会,绝不能像楼主一样装逼作死。

如果大家有什么问题 我会在下面一一解答

补充内容 (2016-9-21 01:50):
补充下算法的准备,如果更喜欢看中文资料,可以去搜索“夜深人静写算法”这个专题的blog,我觉得也写得深入浅出,适合在平时没事的时候积累
  • 444
置顶回复
收起
avatar 156076
bumbing楼主

是那本书,那本书有一个优点,就是每个方面只讲必要的东西,过于深入的细节都没有太讲。。。但是还是太多了。。。我觉得还是看面啥公司,有针对的看一看就好吧,比如面硬件的公司,尤其是写c的,就要去了解下一个program在内存里是怎么构成的,static变量存在哪,stack在哪heap在哪blabla;面pure storage就去看看memory和disk。。。。然后多线程,设计hashmap我觉得还是有必要看一看的

amazon.com
amazon.com
avatar 156076
bumbing楼主

准备os的确是很麻烦,因为很繁杂,我是刚来美国的时候花了2个月通读了一本cmu入门神书叫做introduction to computer system, 打了些基础。看你的情况应该没时间这么绕路准备,建议多了解下多线程,死锁,linux系统的相关知识,比如kernel和user space的区别,像pure storage,我猜可能还会问一些virtual memory和disk的知识,network也可能需要看一看socket和tcp吧,好像网上没有特别好专门针对性上的课

amazon.com
amazon.com
146条回复