2021在职跳槽总结[借号发帖]

avatar 93308
see_you2012
33744
68
纠结了几天,今天终于签好了offer,上来给自己跳槽动机以及最近三个月做个总结,希望在跳槽的各位都能有好运! (PS:这是老公的账号!)

跳槽原因

楼主从毕业开始一直在某著名血汗工厂工作,幸运的是所在的组氛围还有WLB都很好,然后从SDEI升到SDEII也没啥波折,由于楼主事业心不够强以及抗拒刷题(or 懒癌晚期),升完职后一直苟在组里,断断续续刷题但是从来没尝试过投简历。苟在组里的原因是一方面抱着希望能做一个更大的项目升职,另一个方面是自己所在的组只有自己是国人,组里其余人是老美和印度小姐姐,每天都可以锻炼沟通技巧。 去年疫情开始后,组里换了大boss,我也被老板告知要分给我的大项目没有被安排上, 当时想着是时候该跳槽了,于是开始刷leetcode,大概刷了有100来道的样子,但是again由于疫情hc缩减,各家都不招聘了,楼主又开始摸鱼摸了大半年,题也没有坚持刷下去,但是倒是日常无聊看了DDIA那本书。摸鱼摸到今年年初的时候跟老板聊了下职业发展,聊完之后一夜未睡,内心只有一个想法:老子不玩了。

跳槽计划 & 准备
楼主咨询了去年疫情期间跳槽的好朋友,问了她大致投简历面试的timeline和准备过程后,便立即行动起来了。当时已经是过年期间了,楼主预计是到4月中下旬搞定面试。搞清楚自己的时间线后,由于2020年初楼主对数据结构和算法分类别做了总结,以及针对不同算法刷了不少题目(比如图+数组+DP+回溯 etc),有这个基础,楼主花了一天时间recap了一下数据结构,花了另一天recap了一下所用语言常用的数据结构语法,然后就开始火速投简历,总共投了十家多,断断续续收到了7家电面,也顺利进入onsite,但最后由于拿到了想去的offer外加实在太累了, 就取消了一家onsite。

由于在职跳槽,只能下班和周末准备面试,楼主策略如下:
1 - 面经少的公司,直接刷面经,刷完一年内的面经之后,去刷题网找该公司的tag,按照频率从高到低刷一遍
2 - 面经多的公司,基本上只能看最近一两个月的面经,然后去刷题网按tag从高频到低频开始刷,这类公司基本上题目也巨多,所以根本刷不完。。

刷题时间安排如下:
周中: 6点下班,遛狗+吃饭基本上8点前搞定,之后小睡20分钟,接下来就开始打鸡血一样的刷面经刷题到12点
周末: 10点多起来,除却吃饭遛狗开小差时间,基本上刷提到11点多12点

解题策略:
由于楼主时间实在是很紧张,压力也很大,所以在刷题前基本上想清楚了自己要达到怎么样的目的和效果,以下是楼主的总结:
1 - 每刷一道题目,搞清楚考察的点是什么 (比如说是考图还是考数组etc),用什么数据结构,用什么算法
2 - 写题目之前,先写一个high level 的idea,确保idea无误再开始写码,写码的过程中可以顶一个timer, 比如10分钟写完一道拓扑排序,或者bfs dfs,回溯算法之类的,或者15分钟写完一个edge case 多的题目(比如某些滑动窗口题目或者字符串匹配类等等)
3 - 码完之后,在idea之后放上时间空间复杂度,然后接着去看discussion里的top votes 解法,看是不是有更好的解法,楼主对更好的解法的定义是: 1)思路不绕,面试时可以想的起来 2)代码不难写,面试时写的完
4 - 如果一道题目解法比较tricky,edge case过多或者思路贼难想,那就记在小本本上之后复习

以上策略楼主都在尽力执行,但由于时间很紧张,所以记在小本本上复习题目的部分就没有落实的很好,还有一些思路tricky的,楼主也没有过多纠结,基本上遇上了不会的话就认命了。。

面试经验
终于到了考验的部分。电面之前,脸家提供mock interview服务,所以我就约了一个。面完之后内心崩溃到无以复加,原因是那天太累了,面试又紧张,面试官也是新手所以沟通不顺畅,而且使用的codepad背景是黑色的,我也没调indent,coding highlight花花绿绿的看的我头晕目眩,而后楼主成功的被自己写的code 的index 处理绕晕了。。。 面完之后我陷入了深深的自我怀疑。在老公的鼓励下,我打起精神,给自己制定了一个面试策略,并且让老公帮我做了一次mock。

面试策略如下:
1 - 面试前告诉自己千万别慌,不慌的成功率80%,慌得话基本上 < 10%
2 - 面试时第一步重复题目要求,确保弄懂了题意
第二步,问面试官要一两分钟想思路 (这步基本上花几秒钟告诉自己镇定,其次静下心来把思路在脑子里过一遍)
第三步和面试官交流自己的思路,确保面试官理解了
第四步问面试官可以开始写code了么,然后就开始写。楼主写码时是单线程,基本上没办法边写边说,所以闷头写的时候会在关键code block上写个简短注释

有了以上策略,楼主面试的时候就有意识的按照这个流程来lead面试,轻松过了所有的电面。然后进入了第二个考验的part,onsite。 由于Onsite要面系统设计,楼主过去几年工作经验对于系统设计的流程倒是很熟悉,而且楼主的沟通交流能力也可以,但是domain knowlege 不够。准备时间也有限,基本上只有一周时间准备(期间也是正常上班)。于是买了grokking-the-system-design-interview 以及看了一个youtuber 的系统设计视频,基本上了解了大概流程。有以上信息以后,楼主又制定了系统设计速成策略:
1 - 先把youtuber上列出来的各种tech stack 以及市面上对应的产品及其背后实现思路(咋sharding或者partition的)搞清楚(比如Apacha Kafka ; HBase,HDFS Dynamo Cassandra and etc,还有zookeeper,vitness; memcache vs redis; consistent hashing etc,还有video streaming 协议以及chat socket 协议之类的). 这部分十分之烧脑,每次看到晚上12点的时候我整个人都很崩溃,也幸好自己看了DDIA那本书,所以不至于疯掉。
2 - 有了以上基础后,第二个需要解决的问题就是计算scale,楼主真的很讨厌计算这部分(也是我很讨厌grokking的一部分)。这部分计算scale后来我直接简化为根据DAU derive一些简单地计算,而不是像grokking里面一样各种花式计算。。
3 - 会计算scale后就开始design了,由于时间紧张,楼主根本没办法自己写一遍面经里出现的题目,只能自己草草看一遍grokking搞个大概思路,然后硬着头皮上。

好在楼主在当前工作的组里别的没学会,沟通交流练习的很多,组里senior之前也天天把design 挂在嘴边,所以面试的时候就按照自己舒服的方式,从要求开始逐步分析,然后慢慢build 一个high level 的architecture,然后面试官沟通交流,回答面试官问题,并且state trade off 之类的。 所以总的下来,由于沟通顺畅, 除了第一个onsite面得不太好之外,其余的基本上都毫无悬念。

拿Offer时间线:
楼主计划两周内面完所有onsite,所以请了两周假期专心准备。 佛系面试的一家刚IPO的公司,由于面试表现很好,所以顺利拿到offer后,在接下来的面试面完后我都直接跟HR讲手头有offer,希望尽快给结果,所以后面的面试基本上当天面完,第二天或者第三天就给了结果。总体来说,面试的公司除了阅后即焚和脸家,其余的都是刚IPO不久的公司,然后面挂了一家,其余的都顺利拿到了offer。 一番纠结后 (做了大量的研究和挣扎后),还是选择了去脸家闯荡一下,毕竟试都不试就因太担忧直接放弃对楼主来说有实在是有点不甘心。 希望地里的在脸家工作的朋友们多给我一点生存建议! 感激不尽!

最后来谈一下跳槽准备和面试期间情绪管理,楼主其实在电面之前情绪都很稳定,顶多准备面试太辛苦,但是每次辛苦的时候都反问自己,做这件事情到底开不开心,开心的话就坚持下去。到了onsite前因为面试轮数太多,所以面试前都如同上坟。。 后来反复给自己做心理建设,面挂了就挂了,大不了在当前公司接着苟。事实上心态好了后,面试就会容易很多,也不容易出错,所以总结下来,面试只有不紧张,积极和面试官交流,面的都不会太糟糕(比如有一家面试贴了一个维基百科four fours - 让我去实现,楼主刚开始觉得用图,写了然后发现答案不对,后来反过来研究了下例子,发现combination要考虑括号,于是在面试官的hint下又写了个solution,结果离答案近了一步但还是不完全对,后来楼主就接着和面试官交流,过程中灵机一动,在最后几分钟内把正确答案搞出来了,结果这家公司对我的满意度最高,所以never give up)

补充内容 (2021-11-05 07:53 +08:00):
楼主面试完后没多久生了个娃,带娃太艰辛了,产房里楼主还在担心在FB survive不下去,于是后来又加紧面试了狗家,拿到了offer从了🐶
  • 315
68条回复