北美程序媛个人在职跳槽总结(战五渣版)

b
boter
楼主 (未名空间)

背景

距离拿到offer已经有一个多月,最近西雅图地区疫情爆发,出不了门,正好回顾一下
这段对自己来说很重要的经历。

时间线:想要跳槽的想法始于2018年末,2019年开始陆陆续续地准备。19年末正式开始面试,2020年一月份结束所有面试,签下offer。

动机

1.三年左右对程序员来说是正常的跳槽周期;
2.可以重新议价,工资涨幅大概率会比在原公司工资refresh要高,另外北美大厂里亚
麻福利比较差,如果能跳到其他大厂福利也会提高;
3.不喜欢以及不信任老板
4.在同一个环境呆腻了想换个环境
5.想体验其他公司的culture,学习新的tech stack.

其实入职的时候我就计划在三年左右的时间跳槽,只不过刷题和准备是一项耗时耗力的行为,没有强大的动力很难开始和坚持。2018年末经历了跟老板的一系列drama事件之
后正式下定决心跳槽。后来为什么时间拖了这么久,当时一方面在等I140,想保住
priority date, 中间被check拖了好几个月,另一方面也是多争取一点时间充分准备。

准备工作

目标设定:IT大厂,或者比较成熟的start up(成立不久或小规模start up是给真正的牛人准备的,大公司反而适合新人或者实力一般的选手)。下限:薪资至少要提高。上限:多拿几家offer互相compete把自己卖个好价钱。

面试一般有三个部分:Coding/Algorithm, System Design, Behavior Question. 其中算法的比重随着工作年限的增加而减少。对于我这样2~3年经验的程序员来说,算法的
比重在70%左右,也是准备工作的最大头。

1. 算法/刷题(Leetcode):之前new grad求职的时候刷过一些,也上过某章算法班的课程, 上课对于我的最主要的作用就是对于题目的分类更加明确。这次刷题也是按照分类开始,先按类型刷经典高频题,之后再根据公司的面经针对性地刷题。

我的具体刷题方法是初期被卡住迅速去看答案(传说中的兔派),学习标准解法/思路
,中后期对于见过的题型设定10~20min自己想,还是没思路或者写完有问题再去看答
案。Leetcode的讨论区经常能见到非常高效简洁的解法,能学到很多东西。对于部分
hard类型的题目有时候看讨论区还是不能明白的就去YouTube搜解法,youtube上有很多免费的资源,带着visiualization的解法会更容易理解。每道题我会take note,记录思路重点或者当时具体参考的哪一种解法。这样复习起来快很多。

2. System Design: 这部分比较灵活,大部分系统设计的题目没有标准答案,所以工作中的积累就非常重要。基础知识可以通过上算法班课和Udemy网课获得,youtube上也有一些很好的免费资源。这部分是我的薄弱环节,准备时花的精力也比较少,后来有几场面试挂在了系统设计。也算是这次跳槽过程血(qian)的教训吧。

3. Behavior Question: 这部分每家公司都会问,有些会夹在coding之后花5-10min来
问,有些会专门面一轮(45-60min)。有工作经验且经过亚麻leadership principle熏
陶之后,这部分对我来说最容易。结合工作经验准备几个常见问题的答案,比如most
challenging problem。多面几次之后就基本上可以张口就来(捂脸)。

时间安排:在职跳槽最难的部分就是如何抽出大量时间来准备,战五渣如我自认资质普通,需要实打实花时间做题,也经常犯懒开小差,所以整个过程拖得很长。准备期间我基本上取消了所有的社交活动,把下班和周末的时间都安排给了刷题。6,7两个月工作加班赶项目进度,太累了所以这两个月完全停下来准备的进度。八月开始重启。

娱乐和鸡汤需求:刷题进入状态其实是件很快乐和很有成就感的事情。但是长时间一直使用理工科思维会让我觉得自己变得很像机器,会觉得生活枯燥乏味,难以忍受。所以要能坚持下去适当的娱乐必不可少,这种时候我会选择不费脑的国产剧,综艺,喜剧,vlog博主,游戏等等来调节状态,保持续航。刷题受挫怀疑人生的时候去一亩三分地看看励志帖打一剂鸡血也是必要的。刷题的环境变化也有助于保持心情良好,楼下有几家不错的咖啡馆,在背景略嘈杂的环境我反而更容易集中注意力。总之要用各种方法让自己心情尽量好和觉得舒服,这样效率会高。

面试安排

准备工作:一份最新的简历。一个跳槽理由(绝对不要说上一份工作的缺点)。

如何得到面试机会:在职跳槽比new grad找工作最大的优势在于得到面试机会要容易太多。
1.LinkedIn HR: Linkedin profile页面里有一个按钮是表示open to new job
opportunity. 你点开按钮以后之后HR能看到这个状态(刚刚上去找发现找不到这个按
钮了,不知道是我没找到还是linkedIn改了feature)有兴趣的HR会主动来找你。这个
功能对于在职跳槽来说实在是太省事太好用,我70%的面试机会来自HR。
2.内推:对于有兴趣的公司可以找朋友/朋友的朋友 或者在一亩三分地上找人内推。优点是效率高,如果成功朋友能拿bonus。
3.海投:有兴趣但没有熟人,懒得找内推。个人海投的经验比较少,只投了一两家但也都回复很快,基本上隔天HR就会回邮件过来。

基本面试流程:HR聊天 -> phone interview(一轮算法(45-60min),有些公司表现一
般会加面一轮) -> onsite(4~5轮,每轮45~60min)

不同公司间的时间安排: 首先可以挑几家不是特别想去的公司练手,熟悉面试流程,
让自己进入状态,也可以顺便了解下这家公司,说不准有意外的惊喜。不同公司从电话面试开始到最终出offer的时间不大相同,如果安排紧凑最快可以1~2周,一般来说是3周到1个月左右属于正常。有些公司面试周期极长(比如Google,由于有team match,
整个周期最快3周,最慢可以拖好几个月)。最理想的情况就是把想要去的目标公司的
出结果时间安排到同一个时间段,这样如果拿到多个offer可以互相compete。所以面试流程慢的公司可以先开始。也可以跟HR协商具体的面试时间,比如有些电面可以早点进行,然后再等到其他家也到类似的进度再去onsite。

谈offer

这一步非常非常重要。因为可能一两句话就能多要一年的房租。有compete offer谈价
格会省去很多麻烦事,最终结果也会好很多。对于没有compete offer的情况,就是了
解行业/公司不同level的标准价格,上下限,多去一亩三分地/blind了解行情,谈之前心里有数。本渣渣属于compete offer非常weak略等于没有的情况,参考了很多帖子里
的技巧。

结果

最终跟HR聊过的公司10家,电面以及onsite(运气好电面都过了)5家(其中一家面两
个不同的组所以onsite 6场),拿到2家offer,其中一家是dream company。没拿到的
基本上都是挂在系统设计,也算是一个很大的教训和之后提高的方向吧。

虽然这个结果不能跟手握一把offer的大神们相比,但也算在自己的目标设定的上下限
取了个平均值。个人还是很满意自己这一年来的努力和最后的结果(就是很容易满足)。设定一个目标,踏踏实实地努力,得到看得见摸得着的结果,是我喜欢的pattern。