在职跳槽上岸经验教训总结贴

avatar 467523
chenchen628
5610
8
楼主毕业以后在🐶家待了四年多,最近半年来接连遭遇org表现不佳,项目被抢,老板跑路等等,看到周围的朋友们纷纷跳槽拿大包,遂萌生去意。

大概从1月中下旬开始刷题,学习系统设计(在狗家一直做产品基本没有分布式的任何sense),2月中下旬开始面试,大大小小公司电面了十多家,3月因为一些个人原因耽误了一个月,4月回来开始花了一周onsite,拿了克鲁斯自动巡航,罗宾侠,井驰和waymo的offer,4月底决定卖身罗宾侠。

说说准备期间和面试的一些经验教训吧,仅供参考:

1. 刷题部分
因为时间并不多,我的策略是按照类别tag刷leetcode medium难度通过率40%以下的题。最后一共也就刷了不到240题,但是基本保证每题经过了自己的思考,甚至多次写不一样的解法。少数需要去查看讨论。后期面试开始以后刷面经会更多,但会在面试前一天随机几个hard难度保持coding手感。

另外同时还用了lintcode的CAT天梯。这个天梯前面几级会相对简单,尽量耐着性子刷过去,正好刚开始的时期也是自己还比较不熟的时期,就当训练把代码短时间内写好的手感,爬到gold以上以后,每一级都是一个或多个类别的题,可以作为一个很好的查漏补缺,验证某个方面你是否有不足的工具。楼主自己在某一级的时候就发现自己写相对复杂的搜索算法时容易想绕,有时候绕太久时间就过完了。于是更着重练习了一下这方面。面试完我也没有能够刷到Diamond4,停在Diamond3无以为继拉,不过后面的题真的有点难(也许是我菜把),感觉面试也不是太好考察。

总的来说从面试经历来看,经过这一套训练之后,算法和coding没有拖我后腿。

2. 系统设计
这个就是我的弱项了,开始准备之前还是很恐惧的。我前后刷了以下这些资源:
买了educative.io
github.com
github.com

首先是建立了对系统设计面试的sense,然后去补了一通知识。我认为这里面有些懒是不能偷的,一些经典的论文还是要自己去读,像dynamo,cassandra,gfs,chubby,paxos之类的论文,自己读过之后还是能学到很多可以复用进系统设计题的东西。还有一些很常用的部件比如MQ,可以去仔细读读类似RabbitMQ或者Kafka的文档(能去用用就更好了不过我没时间)。如果对数据库本身不是很熟悉的同学可能需要多花点时间学习一下这方面,不过我没有特别准备这些。

然后感觉自己对于大部分basic component熟悉了接下来就是刷题了,上面的一个github链接里有一些题,Grokking的课里面也都是练习题,或者是target的公司的面经里找题,在纸上或者白板上写写画画,争取自己能够熟练掌握从需求分析,service设计,load estimation,画大框架,设计数据库schema,利用各种之前学过的component来进行scale或者optimazation,等等,用这些内容自己能说满45分钟,那实际面试中应该你也能讲满这么多时间的知识点。

3. OOD
有些公司面试时architecture轮会考察OOD而不是系统设计。不过这方面我觉得有过几年在职经验的应该不会有太大问题。楼主的工作一直和API和service设计有关,所以没有准备,似乎也没啥问题,也不知道是不是运气好遇到的题不难。

4. 经验轮
这里一定不能有侥幸心理。要不你就不要写进简历里,任何写进简历的东西,不管这个项目是不是只写了一行title,而另一个项目你写了半页纸,面试官感兴趣了也会刨根问底的。所以一定要保证自己对他能够问到的所有项目的细节,甚至包括和他相关的不是你做的东西的大致概念是清楚的。必要的时候你要可以跳起来在白板上给他画一个你做的东西和公司里其他系统的整体架构和交互关系。另外再详细准备一个project,当面官让你自己选的时候当然就选最熟悉的了。再另外就是behavior问题最好准备一到两个类似失败案例的,出现了问题怎么解决的,怎么预防的,还能怎么改进,吸取了什么教训等等。

5. 公司面试风格
克鲁斯家我面的是planning,HM是一个白人小哥,面经验轮的时候问的及其详细,偶尔穿插几个behavior,感觉他们家behavior上比较重视cross team的合作能力,以及遇到问题能够迅速change course的一些心态。总共4轮,2轮coding(一轮比较简单,一轮bar raiser会问到利口hard难度里相对简单的那种),1轮OOD,1轮HM经验轮。他们家所有人从recruiter到HM到team都非常热情,给人感觉非常好,面好一些给的包也还是比较有竞争力的。最终因为离家距离原因没去还是很遗憾的。。
罗宾侠家的面试4轮,之前有前辈总结过了,1轮系统设计1轮coding1轮纯算法一轮经验。安排的各有重点,很有意思。算法轮由于不写码,有充足的时间去讨论一个难度相对比较大的题目,不断尝试优化到最优解。系统设计主要考察对数据库表设计,transaction等的理解,毕竟是金融系统。
井驰家很正统的3轮coding加一轮系统设计。
waymo的算法题难度总体相对偏高一点,但是相对都是码量不高的题,所以想清楚讨论清楚再写。面试官(我自己也是🐶家面官)更想看到你怎么approach这个问题,而不是你是不是能够迅速码出一大堆东西,当然码的好更加分拉。比如我面的时候有一题需要用到并查集,在我提到这里用并查集以后他就让我直接用了,而不需要自己码,虽然一定要码出来也不会多多少。

6. 教训
总的来说这次还是比较顺利的。最大的教训就是面试的安排上还是要更加用心一点,楼主最后没能成功把黑车和空起床的面试安排到其他面试附近,而是往后隔了两周。与此同时我的心态在前面的面试结束后也发生了很大变化,有点提不起继续复习保持状态的劲头,想快点结束整个流程,导致最后并没有能够拿到空起床的大包去帮忙compete。朋友们一定还是好好研究哪些公司的logistics比较慢,一定提早安排。就算像我一样,也一定要冷静下来,把前面给了offer的公司先hold住,甚至让他们先不要出offer,专心复习直到所有想面的公司都面完,让offer一起来,才能够利益最大化。

最后朋友们一起加油吧~
  • 74
8条回复