找工总结
之前发面经贴的时候,有几个人问我什么时候出个找工经验总结,当时忙着找工作和学业,口头上答应敷衍下去。到了寒假,沉迷游戏,今天在火车上,终于有段时间可以静下心来好好总结下秋招的经历。
先从实习开始,我在去年秋季很幸运地拿到了Uber的Software Engineer Intern,大家实习最主要的目的就是拿到return full-time offer,我也不例外,但是最后结果,在Uber这么一个高return率的基调下,我没有拿到最后的return offer。我当时在选择team的时候,凭着满腔热血选了core infrastructure,但是我只是一个转cs不到1年的菜鸡,当时做出这么一个选择又是有点冲动的梭哈,也有点个人的兴趣方向在里面,想挑战下自己。最后我被分配到Software Network组,这个组主要负责Uber自己的DNS resolver,load balancer,traffic routing和health check。个人感觉就是Uber所有的micro service deploy都需要经过我们组,一个中间键。我的mentor是一个美国人,unc phd,现senior software engineer,我的manager是一个abc,现tech leader manager。小组构成由若干个senior software engineer和一个sde2的abc小姐姐。在第一周三天的orientation后,mentor给了我十分简单的任务,给uber自己的resolver的结果加个filter,三下两下半天就搞定了,但是发现code review要等到下周才可以通过deploy,觉得我的组是一个十分看重代码质量的组,尤其对于一些细枝末节的效率还有函数封装export,test coverage都是十分严格的,每次我的diff都有十几个comments。然后我就开启我的intern正式project,背景是这样的,我们组一直处理的对象都是real production service,目前我们没有staging test environment,组里希望搭建一个自动化测试并且不要影响production service,然后一个想法就是prototype a bridge连通production service和staging service,把特定的几个production service的信息全都实时更新到staging的zookeeper里面去,然后其他组员负责搭建几个prober来用staging的zookeeper来模拟一个production environment。我感觉也不是很难,第二周的时候我就把一个命令行工具版本写出来work了,但是模块化做的很差,接下来4周,mentor让我把命令行转成一个micro service,做好模块化,在第六周尾声的时候deploy了。这时候正好是intern的期中调查,这时候感觉我非常顺利,mentor和manager给的评价也是非常高,return offer也是on the track。然后接下来因为他们没想到我会把project完成的这么快,接下来3周多我就负责哪里需要我去哪里,给组里一个台湾小哥improve一个jerkins check tool。因为每一个micro service要deploy,都要填写相关的配置,我们是用一个git repo来存放所有service的配置信息,然后如果其他组需要更改,就只要提交一个diff让我们审核,我们就写了个python脚本做一个precheck。这几周我的任务就是几个组员觉得要加啥feature,就给我个task,我就去完成,前后做了五六个feature,但是都不是很难的那种。在改进的过程中阅读代码发现有一块有个很tricky的改进方案,然后我就顺便提出并且改进了,发现所需时间从2s变到了0.2s。就在我认为return offer应该十拿九稳的时候,最后几周让我措手不及。我的manager在第八周给了我一个他自己的任务,他负责的project出现了一个问题,go routine太多,tech leader觉得我们有必要减少这么多go routine。然后他就说让我看看,他太忙了,如果我能做一些贡献我就做,做不出来也没关系。我当时就先负责之前说到的那个python project了就没对这个project上心。在我忙完那个python project后,就开始做这个。一开始manager只是让我负责更新load balancer的接口,因为grpc要deprecate之前的api,要去改成最新的api方法,我就花了好多时间阅读这个project代码和grpc的代码,最后就在倒数第二周改好了,花了很长时间。到了最后一周的周一,8月6号,manager和我聊天说,对不起,我们不能给你return as a full-time,但是你想return as an intern么,我就呵呵了,不必了。最后一周我正好也重感冒,我就没怎么去我工位,每天就找个随便的地方划划水,过完了我在uber的最后一周。
当时好多朋友得知我没有拿到return都为我打抱不平,后来仔细想想我也有一定问题所在。
1. 有一次manager找我聊天,问我结束后打算,我如实地和他说我会积极面试,争取多拿几个offer,然后uber一直是我的top choice。感觉我这回答也太真实了,以后坚决不这么实诚了。
2. 在我完成我的intern project和那个python project后,我确实精神上懈怠了,工作效率慢了下来,和前半期比起来是不如的。
3. 最后那个完成了一半的project是我manager直接相关的project,可能是因为我没有出色完成,他对我的评价就跌入谷底了。但是我组里的另一个manager大哥为我说话是,这是一个tier0的project,(uber里的project有个评级,tier0是重要性最高的,在我实习期间刚通过政策tier0和tier1的负责人oncall给钱了)应该由一个senior才能handle住,我一个intern实在是做不太来。
4. 因为uber实习可以填50h,我经常9点到公司然后呆到7点等供应晚饭吃完回家,然后还可以多拿点加班工资,可能会有点不太好的影响。
5. uber决定return的还有一个bar raiser,在最后一周我和mentor聊天的时候,mentor说他是选择了我return as a full-time。我和manager聊天的时候,他说他也选择了我return as a full-time。我问bar raiser为啥毙我呢,manager说他看我的所有diffs,最后的diffs还是有很多comments,觉得我作为一个intern在职期间没有进步。(内心毙狗)但是我也不知道manager有没有说真话,who knows。
这次的实习经历虽然没能拿到full-time offer,但是我也十分感激这次经历,不光自己总结并且吸取了很多教训,希望自己在全职的时候能规避这些我的问题。也是有了uber实习的经历在简历里,我才可以拿面试拿那么顺利,正式没有ddl那么赶的return low ball offer,我可以出去面了一大堆公司并且拿到心中的大包。
感谢大家先看了这么多关于我的实习经历。然后我开始讲下我的找全职经历。
首先背景介绍:浙江大学数学本科,CMU MSBIC,依图+Uber工作实习,圣母大学科研实习,Leetcode AC 250道左右(大多是找实习的时候刷的)。因为我在实习期间一直以为return offer十拿九稳,就没怎么认真刷题,而且加上自己也懒,最后结束找工季的时候Leetcode也就AC了300道出头点。
第一家公司是Pony.ai,当时是猎头介绍去面试的,实习期间通过了电面,然后8.2去的onsite,也是实习期间请假去的。题目都是地里出现过的那些还挺难的题,只不过好玩的是我还被面了一道概率论的题目,我概率密度公式当时紧张推错了,然后凭借直觉蒙了个就对了,得意洋洋hhh。感觉面试过程还不错,聊得都挺顺利的,面完后hr还问我想啥时候做决定,预期薪资多少,我就以为稳了,对她说,cmu有规定,全职offer ddl不能早于11.15,我会在11.15左右决定。然后他家就一直没给我回复。在CMU秋季校园招聘会的时候我还去了他家的booth,hr小姐姐立马就认出了我,还说出了我的名字,还对我说稳的稳的,到最后还是没有给我一个结果。幽怨脸。
第二家公司是FB,在实习期间通过了电面,然后我就把onsite约的很早,因为担心fb的cmu head count少的很快,就约在了8.19貌似。我没有那么勤奋的精神把fb所有lc题目全都ac一遍,我就随便刷了几道找了下手感就去了。onsite三轮全是国人,然后总共做了五道题,感觉自己虽然没有背过完美答案,但是凭借实习刷题的印象还有感觉,都把解法写出来了,并且过了几个edge case都对的,就以为fb也是板上钉钉的事情,就等着offer,然后就可以秀了。然而在9.6,正好uber没有return一周月纪念日,一封拒信砸脸。事后回顾可能是因为自己都是现场想的解法,代码可能不是很clean,而且有可能有些很恶心的corner case没对(fb最喜欢这些)。而且在最后一轮bq面的时候出的题,面试官让我先讲完recursion和iteration的解法,让我写iteration的代码,我当时突然就卡主了,为了完成代码,我问能不能写recursion的,面试官同意了我就改成recursion的了,事后想起来这可能是个坑啊。
来讲下我最后决定去的公司Snowflake,在MSBIC有一个我很崇拜的上一届的学长去了这家公司。我找他内推拿到了面试,先是2轮连续两天同一个时间的电面。据说如果第一轮太差第二轮会直接取消。通过后去onsite,我当时有四轮,最后一轮是和CTO面试聊天,后一天开始的onsite都改成了三轮因为CTO身体不适,还有可能来onsite的new grad有点多吧hh。面试是很常规的算法题+BQ题,难度在medium和hard之间。他家特别有诚意。9月初的offer一直让我到11.15做决定。十分感动并接受了他。要去追星了。
Tigergraph。找拿到offer的同学内推。他家很爽快,应该也是比较缺人求贤若渴的。我说我直接顺路要去onsite,可不可以直接onsite。然后就安排了7轮onsite面试。我到的时候办公室都没几个人hhh。中午吃饭的是和员工们一起吃的,感觉他们都挺有趣的。面试问题也很有意思,不像其他公司单纯考算法。唯一让我很不开心的就是最后一轮VP的面试显得很不尊重人,感觉他比较看不起转专业的人。
Nero。一家做机器人的startup,面试的时候出了一道挺tricky的C++题目,但是因为我不咋会写C++,写的代码仅限于看懂,完全不能跑。然后电面就给我挂了,这家招聘还是很迷的,认识朋友都没咋面题目就拿到offer了,应该是他太强了,直接就想要他。
Cisco Meraki。这家公司还是不错的,只不过我onsite选择了SRE,导致我面试的时候问题非常的不常规,考了我debug nginx,及时自我感觉system design发挥完美,但是还是因为那轮nginx被脆拒了。选对岗位很重要!
Quip。一家和google docs对着干的被salesforce收购的公司,onsite的时候感觉整个公司的氛围还是很不错的。面试都是很常规的算法题,还有一面上机的auto complete。
Pinterest。这是一家我想都没想到会拿到offer的公司,当时一直觉得Pinterest是个小而精特别高冷的公司,感谢当时刚放出岗位的时候学长就直接linkedin上找到我帮我内推,我以为每年pinterest的head count会十分少,就随缘面试,也没有认真准备,没有料到Pinterest今年准备扩张,招了很多new grad,只不过最后我还是没有选择Pinterest,因为Pinterest今年也compete不动,但是包裹还是很大了。
Apple。Media组,电面我直接被一道dp题给脆虐,确实很难想,但是特别有意思,被挂不冤。SimCloud组。一家负责apple的分布式dc的调度的组,onsite学艹7轮系统设计和分布式设计,面到最后累的眼泪水都掉下来了,因为我当时才上15640,导致很多分布式设计我都答不上来,被血拒不冤。Map组。一家SPG下的感觉是做和无人车有关的,本来感觉还挺有希望面进的。但是最后我不知道为啥脑子抽筋,和面试官争执我的想法,而且我这人一急嗓门就大,其他几轮表现还挺好的,最后被脆拒。总的来说苹果是我感觉面试体验十分不错的一家公司,可惜缘分没有到,我们以后江湖再会。
Jingchi。现在改名Weride.ai。电面考了我一道国际象棋跳子,我用了个dfs强算然后就被脆拒了。
Petuum。Eric Xing的创业公司,我投的infra的岗位,但是不知道为啥给我安排的面试都是Machine Learning的面试,导致前前后后约了三次,鸽了好多次,最后我拿到好的offer就withdraw了他家。提到Petuum就不得不提到知乎的回答,懂的都懂。
Dropbox。这家招的人太少了,而且return就占了很大一批,我校园面的时候就已经很多onsite都被撤回了,我就校园面随缘面了下,也没背面经,最后就被拒了,我们那批应该就没有move forward的把。
Rubrik。一家做cloud data management的独角兽,电面+三轮远程onsite面试,题目还是偏难的,最后远程onsite的时候状态不是很好,题目都是勉强45分钟才做出来,被拒了,这家还是不错的,我的几个好朋友都拿到了他家的offer最后十分感动没有选择他,感觉Rubrik伤心太平洋。
Indeed。我本科在那实习的同学帮推的。面试给了一股很舒服的感觉,题目都不难,轻松解决,但是我同学经常吐槽indeed哈哈哈。Indeed的食堂不错,就是给的太少了,而且不给compete。
Linkedin。也是一家我没想到会拿到offer的公司,他家处理的太慢了,而且根本无视其他公司的ddl,这一点让我感觉到十分不舒服。onsite有一轮system design,感觉在十几年工作经验的大佬带着下设计是十分舒服的体验。算法题也有特别难的,但是相对也不要求完美解答,最后居然拿到了offer,只不过当时我已经签了snowflake,而且我这人比较专一,就把linkedin给拒了,错失了湾区最好吃的食堂。而且我match的组是做分布式存储的,我十分喜欢,但是没办法,没在对的时间遇到对的人。
Amazon。2轮OA+一轮电面,而且就是30min讲下oa的思路就拿到offer了。给的太少不去了。据说amazon的社招就会给很多,气。
总的来说,我一路学cs以来都很幸运,从依图的实习offer到CMU的录取再到Uber的实习offer,及时遇到没拿到return这么一个挫折,但是也找到了令我满意的全职。一路走来只有感恩,感谢那些一路上给予我各种帮助的朋友们。
对于找工作,我只有几点关键的经验。一就是要积极找内推,积极地投岗位,投的越多拿到的面试才会越多,我们又不是大牛,hr不会主动来找我们,就跟谈恋爱一样。二就是刷题要积极总结经验,要做一个优秀的机器学习算法,每一次的经历都会让我们获得进步和成长。我总归刷题就300道左右,全职也就刷了50多道,但是感觉面试的时候万变不离其中,大多都能现场做出来。三就是一定要自信,和面试官侃侃而谈,不要闷头写题目,要多和他交流思路。
新的一年即将到来,也希望看到我这篇文章的朋友新年快乐,给你们拜个早年,祝新的一年心想事成!