四个月的跳槽准备终于结束了,收获7个offer, 分享一下心得

avatar 307011
一次就好
49201
78
在某司摸爬滚打了四年今年因为manager的器重拿到了一个好的项目在我完全没有要求的情况下成功被升了senior。并且破天荒拿到了一笔不错的Refresh,但是还是想出去看看,所以7月份就开始准备面试, 到十月底圆满结束。

当时master毕业的时候并没有什么机会面试,因为机缘巧合进了现在的公司,所以一直很遗憾没有体会过其他大厂的面试。

一直觉得wfh很适合面试所以想在回office之前搞定,所以从七月就开始准备,工作日十点前,八点后刷题,周末集中刷。因为leetcode都1500+题,太多了不知道从何下手,就选择先根据这个list把每种数据结构都熟悉一下:seanprashad.com。每次做完我都会把不同解法用notion记录下来,notion上的table特别好用,可以插入页面和link。再熟悉完这个list之后我就开始准备简历了。

因为我只有一个公司的经验,之前没有实习所以如果按照正常的写法简历写出来非常单薄。我好好思考了一下这四年做的project发现大概可以分成三个不同阶段,project的scope越来越大,自己的role也越来越重要。按照这个思路改出来的简历非常清晰,后面面试的时候也方便面试官问问题。跟毕业时候写的简历不同的是,这次加上了各种数据体现每一个项目的在real world的impact, 并且对于每一个number背后的经历都非常熟悉,在被问到对应的问题的时候不会不知所措。

这次投了特别多公司,因为刚开始都没什么回复,所以就在linkedin上各种apply,然后突然hr开始集中电话找,每天邮件和hr call多到爆炸。因为确实很久没有面试了,各个方面都很生疏,hr call一开始都说得磕磕巴巴的,但是因为每天都能联系三四次,所以不到一周大概就知道要说些什么,问什么问题,后面就越来越应对自如了。

因为一直都不太能静下心来,做题的速度也比较慢,所以最开始找了一些不是特别了解或者不太想去的公司的OA和电面练手,让自己尽快进入状态。一开始确实挂了一些OA和不少电面,都是没有准备到的知识漏洞,在发现问题之后赶紧找了一些类似的题查漏补缺了一下然后继续面剩下的。在拿到onsite了之后才意识到还应该准备system design。虽然平时干的就是backend方面的工作,也确实参与设计了不少platform,但是一个小时时间内要针对一个完全陌生的领域给出一个让面试官信服的方案真的还是非常难的。因为我不是科班CS出身,所以很多平时用不到的LB,DNS,Gateway, Reverse Proxy 等等知识都不太了解,一开始遇到了夹杂一点top k的问题,完全没有概念这是什么,应该用什么技术实现,只能根据需求现推,好在那个面试官非常友好,并没有因为这个难为我。从那以后我就意识到除了刷题,系统设计真的还是非常重要的,尤其我这次基本都target 的senior职位,基本每个公司的onsite都会面。然后我就开始了一周系统设计的突击。

以下是我准备的时候用到的材料

Grokking the System Design Interview
比较时候最开始拿来了解每个系统,每个都涉及了back-of-the-envelope calculation, 然鹅实际考的时候面试官大多不在乎,有几次因为情况比较复杂耗时比较久,面试官不耐烦让我略过走下一步,所以感觉其实真正面试的时候的侧重点跟这个有一点出入, 大概知道计算方法即可。

amazon.com
偶然逛amazon发现一个国人大佬写的系统设计的书,内容比想象的还要好,虽然不是特别深入,但是足以应付大部分面试,尤其是对于答题步骤的总结。

Gaurav Sen Youtube channel
这个印度小哥的频道真的很厉害,不管是基础知识的讲解还是对于复杂系统的拆解都讲的很好,重点是非常有激情,下饭神器。跟着这个频道学到了不少。

youtube.comYoutube channel
这个俄罗斯大哥的频道讲的更好,虽然数量不多,但是每个视频都是经典,尤其是top k的lambda architechture的设计,我反反复复看了五六遍才消化。每一秒都是干货。

amazon.com
这本书基本每个总结系统设计的人都会提到,确实非常好,对我来说略有点干,而且有点太多深入了。如果有更多的时间可以好好拜读一下,会收获更多。尤其是database transaction 部分, 如果能早点开始看的话应该Roblox的系统设计就不会fail了。

每次准备一个类型的时候我都会去看上面这些source里面都分别怎么设计的,然后总结一套能够说服自己的方案,重点看怎么画图,然后每个component选择的理由和tradeoff。

面了不下十次system design我大概follow的这个思路。

1. Functional Requirement - 和面试官确认他想要什么样的系统,到底哪些是这一个小时需要cover的
2. Non Function Requirement - 一般需要探讨scalability,avaliability, reliability, security
(optional) back-of-the-envelope calculation - 可以问一下面试官感不感兴趣,但是至少需要知道qps,会影响后面的设计

3. High level architechture - 画图,跟面试官确认思路
4. Component breakdown - 解释每一步的细节, 为什么选择这个技术/framework/trade off
5. Final review - 看看有没有single point failure, 有没有面试官想进一步探讨的部分

因为virtual onsite 没有办法现场白板,所以合适的online tool 非常重要,能够帮助面试官快速理解你的方案。我尝试过以下一些方式
1.zoom whiteboard - ipad 直接画图,比较慢,手写容易看不清楚, 不推荐
2.hackrank whiteboard - 体验一般
3.google doc + google draw - 可以用电脑分屏然后share 屏幕,文字和画图可以无缝切换,ok solution
4.whimsical.com - 这个和lucid chart 都很不错,主要是可以自动用箭头链接两个模块,省不少时间,后来我都愿意用这个。

准备面试的过程真的非常累但是很值得,越准备越觉得自己原来这么多都不会,之前在公司真的应该多学学。因为太累身体吃不消,每次面完试都会剧烈头痛,早上起来胃疼,吃不下早饭但是因为要面试一天不得不强制塞进嘴里喝水咽下去。晚上做梦的时候都会梦到自己在做题,在面几个dream company之前晚上更是紧张到睡不着。但是每次有好消息传来的时候,都非常有成就感。已经很久没有这么专注的做一件事了,不论结果怎么样都让我变成了更好的自己。

7月初到10月底,大概总结一下, 这次的情况

OA fail : Dropbox

Phone interview fail :
Uber, Affirm, Snap, Square, Robinhood, rivian

Onsite fail:
Roblox, Stripe

Offer: Zoox, Applovin, Rubrik, Linkedin senior 加面到 staff, Tiktok 2-2, Google l4, Airbnb senior

最开始面的时候几个公司给的都没有现在的TC多,所以虽然拿到了offer但还是有点小担心,觉得可能这次可能要陪跑了。没想到越到后面事情越来越精彩,从某个公司开始,offer越来越有意思,有些给超大的base,光cash部分就是现在的TC, 有些虽然已经拒了但因为有紧急project一周后又短信联系给了远超预期的股票。选offer的过程一点也不比面试简单,因为每个公司的业务方向都不一样,面试体验都很好,所以我真的纠结了超久超久,不知道哪一个才是真正适合自己的。最后compete来compete去,终于在十一月初选了一个比较符合职业发展的team和较高的TC。

最后大概比现在涨了30%的TC。之后会发生什么,完全预测不到,但是想到会有全新的挑战和认识更多厉害的前辈就觉得自己这四个月真的非常值得。

最后有几点经验分享,也是下次跳槽时候我会注意的地方:

1. leetcode 还是坚持刷刷,不一定是为了跳槽,训练思维也很重要。在准备跳槽的时候我经常会把做题的思想运用在工作中,给出了几个非常有创意的solution。而且如果一直在锻炼思维模式的话,其实跳槽的时候会轻松很多,临时抱佛脚刷题不想再尝试了。

2. 面经很重要,尤其是小公司,这次fail的公司里有很多其实是面经提及过但是没有好好准备,结果真的考到了。

3. 工作的时候要多问为什么,尤其是一些技术难点要知道为什么困难,面试会被问到,hm尤其会很感兴趣。

4. 如果不是科班出身的话,建议上网课补补distributed system的基础,能更好应付系统设计。

5. 不用安排太多公司,package 相近的面试流程差不多的安排到一起好compete。这次我面了太多公司,后期非常疲惫,并且有些公司提交得太晚,结果没来得及面非常可惜。compete offer 非常重要,我最高的offer比最低的多73%。

6. 劳逸结合很重要,不要老熬夜,身体真的吃不消,就算是面试期间也要坚持锻炼身体。

这次的跳槽就先告一段落了。有很多很多收获,还有很多很多的遗憾,希望以后有机会能够做得更好。

在职跳槽真的不容易,大家要善待身边这么苦逼的小伙伴 😉。
  • 1215
78条回复