4YOE跳槽,8个Onsite面试全部拿到Offer

avatar 110174
tong-1324
46183
89
本人硕士毕业以后在西雅图某养老大厂工作了四年多,今年夏天由于工作和生活上的一些新的变化,萌生了跳槽去外面看看的想法。从最开始准备到最后谈offer,得到了地里无数的帮助,所以想写一篇经验帖回馈一下地里。

先说结果,这次非常幸运,我一共面了八个onsite,全部拿到了offer,分别是
Google L5
Airbnb L5
TikTok 2-2
Snap L4
Facebook E4
DoorDash E4
Bolt (没有具体等级,但是看包裹应该是对标其它L5的包裹)
DeepMirror (没有具体等级,公司还很早期)

我的时间线大概是
八月: 集中精力大量刷题 + 申请 + 跟recruiter聊天/安排面试
九月: 每日一题保持手感 + phone interview,OA + 学习 system design
十月: 刷面经 + onsite + team match + 谈offer

展开说说准备的过程,首先是刷题。我工作以后就几乎没有再碰过leetcode了,刚刚开始有点不知道从何入手,随便乱刷了几天以后,我发现leetcode有一个新功能叫Learn,在Explore下面,专门有一个叫Learn的区域,整理了一些常见的算法,包含了教程和题目。我看了以后感觉对我帮助很大,就决定按照集中精力只刷Learn。我自己的感觉是刷完一个topic之后,基本能把这个topic吃的很透,而且从易到难,很合适学习的过程,也能看到一个算法不同的应用,可以举一反三,对我有很大的提高。每个题目我除了自己写以外,一般还会花些时间看看讨论区高票的几个答案,花些时间学习他们的算法、写法。我大概花了一个月的时间按顺序刷完了Learn下面所有的topic,其实这里面基本涵盖了绝大部分的常见题型了,真的很有效。之后一个月,因为要开始学习system design,抽不出那么多时间刷题了,我就雷打不动每天参加Daily Challenge,用那一到两题保持手感。直到临近onsite,我再开始大量按照面经刷题。面经主要有两个渠道,一个是地里,一个是leetcode上面公司的tag。我根据大量的比对发现,对于大公司来说,比如F和G,地里面经和Leetcode Tag的重合度是非常非常高的,一个比较高效的方法其实是直接打开leetcode公司页面,按Frequency排序,刷前面三十到五十题左右。对于小公司,地里经常会有更全面细致的面经,多花些时间看地里的面经会很有帮助。

再说说System Design。这一块是我最开始比较虚的,之前从来没有系统学习过,工作里接触到的也有限,面试经验更是为零。因为时间有限,我主要用了两个学习资料,我觉得非常适合想快速上手的零基础小白。一个是大家常常提到的Grokking the System Design Interview这套教程,里面有介绍很多常见系统怎么Design,也有介绍很多分布式系统里常见的概念,非常适合快速上手。另一个是一个俄罗斯大哥的Youtube频道,可以搜索UC9vLsnF6QPYuH51njmIooCQ,里面讲的非常深入,比较了很多常见的设计的pros and cons,提到了很多面试时候可以具体用的策略,而且这个频道里的视频数量非常少,但是个个都是精品。这两个教材是我花了最多时间在上面的,而且都是反复看过几遍。其它我有接触了解到的还有:DDIA(如果时间充裕的话非常推荐,我只简单看了关于Database的几个章节,觉得写的很好),Scott Shi视频(地里很多人推荐,可惜我知道的时候已经很晚了,没有机会细看),Youtube上搜索System Design出来的其它一些视频(很多都是印度博主讲的,可以刚开始准备的时候作为入门教材可以看看,但是我自己感觉真正面试的时候碰到的问题会深入很多,还是俄罗斯大哥的视频对面试的帮助比较大)。

除了Leetcode和System Design,还有两样东西是需要专门准备的。一个是Past Experience(除了FG基本都有专门一轮甚至两轮),一个是Behavior Question(基本所有公司都有专门一轮,或者甚至渗透在每一轮里问)。我个人的经验是,千万不要觉得自己对项目很熟悉,或者觉得自己沟通能力很好,就去free style这两个环节。一定要好好花时间专门准备。原因有二,一个是这两个环节都非常重要,特别是对于Senior Level的面试,我个人了解到的情况是这些轮的结果甚至比tech轮还重要。第二个是,其实面试官问的一些问题是有字面以外的意思的,如果你提前做过准备,不容易跑偏。对于Past Experience,我大概花了一天的时间专门整理准备,以及跟队友Mock了半天。我自己拿了一个非常复杂的项目出来,把里面每个模块都整理了出来,自己画好图,写了一些简单的介绍。我准备的这个项目很大,面试的时候基本来不及介绍完所有的模块,只能根据面试官兴趣展开讲一两个。我一般面试的时候会问面试官介不介意我直接screen share我画好的图和介绍,这样比较节省时间,所有碰到的面试官都同意了。我自己感觉这样效果还挺好的。对于BQ,我主要是从过往工作里准备了六七个故事框架,对着网上一些常见BQ问题练习往里套。BQ问题列表网上有很多,YouTube也有一些讲解的,没有哪个给我留下了特别深的印象,大家可以多搜搜看看。如果大家身边有大公司的BQ面试官就更好了,可以请他们给你说说BQ里的问题重点到底是什么。

准备的过程大概就是这么多,然后说说我面试里总结下来的一些实战经验。这一块可能比较杂,我就列点来说吧。

1. 心态非常非常重要。这个既包括面试里碰到不会的题目、不友好的面试官、各种突发状况时候的心态,也包括整个跳槽持久战从开始准备到最后谈offer时候的心态。我最开始头两个面试的时候心态非常糟糕,其中一个是DoorDash面试,Coding第一轮一道很简单的题目我没有最后跑出结果,BQ轮碰到了非常严厉的hiring manager,各种质疑和打断我的回答,SD轮是我的第一场SD面试,我答的一塌糊涂。几乎整个面试过程我自己感觉都很不好,心里一直都在有另一个声音在哀嚎。更糟糕的是面试完这种情绪更强烈了,想了特别多,觉得几个月努力可能都白搭了,感觉自己要全聚德了,还跟队友EMO了很久,当时一度负面情绪爆炸。我自己的调整方式是,其实我准备面试以前一直都有坚持跑步的习惯,临近开始面试的时候为了抽出更多时间就中断了跑步,当时负面情绪最严重的时候,决定重新去跑跑步舒缓一下,结果非常有效,感觉运动完整个人压力小了不少。所以还是需要劳逸结合一下,不能把自己困在一个情绪当中。另一个拯救我的是,虽然我自己感觉特别糟糕的表现,没想到隔了一天他们就来给我发offer了,虽然是E4,但是带给了我极大的鼓舞。我回想了一下,感觉其实可能有的东西我自己感觉很糟糕,但是这种感觉本身、或者揣测面试官的态度,其实都是没有意义的。有可能我感觉糟糕,面试官其实觉得还行。也有可能相反,我自己感觉不错,面试官觉得我很糟糕。这些都是说不准的。所以面试的时候,以及面试完了,千万不要多想。面试的时候尝试把精力全部集中在题目本身,控制住自己别去想有的没的。面完了更要往前看,抓紧时间准备下一场。希望每个人都能找到合适的调整自己心态的方法。

2. 沟通交流的能力非常重要。我看了很多经验分享贴,提到了各种怎么刷题怎么设计系统,但是很少人提到面试里面沟通交流能力的重要性。我上面推荐的俄罗斯大哥的youtube视频里,他有一句口头禅,叫“Remember the interviewer is your friend”。我觉得说的非常好。系统设计里跟面试官交流的重要性不需多言。但是我想说的是,不仅是对于系统设计轮,其实对于coding轮和其它所有面试轮也是一样的。在coding拿到题目大脑一片空白的时候,不要慌张,其实你离正确答案很近很近,因为坐在你对面的朋友TA的脑海里就有正确答案。你可以通过跟TA讨论交流来逐步找到答案的。一般来说我不会直白的说“Can you please give me some hint”。我会尽量我能分析的东西先分析一遍,比如最暴力的解法是怎么样,或者比如我感觉这道理能有DP来做,或者我感觉这道题的难点在哪里,类似的我当时的第一感受,然后进一步说说我觉得哪里可能比较困难,一般这个时候面试官都会很自然的给你一些反馈或者提示,尽量顺着面试官的思路去想,如果能有新的思路就最好了,没有的话就继续沟通交流。我整个面试下来大概有两三次拿到题目头脑一片空白的时刻,但是最后都成功跟面试官“交流”出了答案。越是有了这样的经验,到后面我就越不怕coding题了,因为想着最差也能去“交流”,整个表现得越来越好。

3. 碰到面经题的时候不要想太多。这个是我一个特别后悔的点,我在这个坑里反复摔了几次。我有两三轮都是碰到了面经原题,然而面试官出得题得形式或者具体问的东西又跟面经略有出入,我当时大脑都飞速运转,心想会不会面经里问的是follow up,于是我尝试着,解决当前问的同时,为下一问“留一手”,这就导致了我写的算法或者设计有一些解释不通或者奇怪的地方。其中有一次被面试官当场看出来并且指出来了,质问我为什么会这么写,我支支吾吾解释不出来,他就没问follow up,直接换了下一题。其实本身我正常去做应该完全没问题的,又是面经题,按理说本来应该是送分题了,结果变成了我的表现不足的点。希望大家碰到面经题的时候也不要去想面经,仔细读题,focus在当前看到的题目上,千万别想“留一手”啥的。

4. 对面试的时间投入要有正确的预估。我原来对于面试的概念就是面试本身,包括phone interview和onsite。但是其实整个面试的流程还包括了一些其它步骤。在schedule面试以前,一般都会有一到两轮的跟recruiter的电话谈话,在所有面试完了以后,还会有很多轮谈话,包括跟recruiter聊offer,跟hiring manager和组员聊天。所有这些都是很画时间和精力的。需要对整个过程有个正确的预估。

最后再推荐几个我非常喜欢的帖子/资料。

关于面试准备:
instant.1point3acres.cn
instant.1point3acres.cn

关于选组:
instant.1point3acres.cn

关于谈包裹:
instant.1point3acres.cn
youtube.com
  • 1476
89条回复