总结下最近跳senior的经历

avatar 67380
wza13579
20842
35
背景
北美大厂干了5年,原本是senior test岗,转senior码农。 前前后后从决定跳槽到离开花了6个月,下面会详细介绍跳槽的步骤。主要针对有若干年工作经验想跳senior的人,大神们可以忽略。

时间线
21年12月开始刷题
22年01月开始投简历
22年02月开始电面
22年03月开始virtual onsite
22年04月定offer
22年06月准备离职

跳槽原因/忧虑
无外乎就是impact不够,钱不够,再或者是想去体验下不同的公司。我之前的组都还行,想做什么自由度都很大,但是manager换了几轮后就不行了,开会太多,做的都是些没人用的东西。
如果你有以下忧虑,完全可以不用担心的跳槽:
● 我想在本公司升到senior再跳,会容易一点
○ 职位基本靠你面试情况来定,不一定你在本公司是senior,在其他公司也给你senior,我就有好几个downgrade。
○ 如果面试面的好,普通sde也能拿到senior的offer
○ 要自信,我见过挺多的普通sde在公司内部晋升很慢,但是水平很强,跳出去就是senior了
● 我在公司办绿卡,能不能跳
○ 如果你还是perm阶段,建议还是早点拿到pd,毕竟有了绿卡就可以不用担心身份问题
○ 如果你140 approve了,可以跳槽,不过有些人也会等approve了之后180天,因为理论上公司可以在approve的180天内revoke,但是非常罕见
○ 如果你file了485, 那请等180天。因为180天后换公司不需要重新file 485,只需要file一个485J证明你换了新公司就可以了
● 在职跳槽太累了,我没有那么多时间
○ 可以分为不同的阶段
■ 刷题阶段:工作日刷2~3道,双休日刷5~8道,其实压力不是很大
■ 面试阶段:这是最辛苦的阶段,基本上每天都要有1,2个phone或者是1个onsite
○ 想想看拿到offer后的两个月可以天天挂机划水,其实也是值得的了

刷题准备
基本就是leetocde了,可以按分类刷个2个月。一开始可能会有点累,如果你之前刷过一遍的话,上手就快了。说到底就是那些东西:DP就是找公式。binary search就是low, high, mid。Tree就是BFS, DFS遍历。Kth problem就是heap。图就是最短路,union find和topological sort。backtracking就是用递归。

System design准备
主要看这个网课: educative.io 和苏联专家的youtube:youtube.com 另外如果有机会的话,尽量shadow或interview senior岗位的面试,你可以学习到如何面试,尤其是如何evaluate面试者,这点非常重要。因为当你知道怎么样的面试才能pass之后,你就知道该如何回答面试官了。
如果有时间可以看Designing Data-Intensive Applications, 我之前也看过,但是工作中用不到的部分很快就忘了。另外你如果没有系统设计的经验的话,可以多参加公司内部其他组的design review,毕竟自己看书得来的和实际应用还是有差别的。我本人的经历就是,所有知识我都懂,但是一旦面试官问细节或corner case我就答不上来了,因为毕竟没有相关经验。

Behavior准备
Behavior的问题无外乎就那么几个,你可以准备几个项目或经历,然后往上套就行了。
● Most challenge problem
● Miss the deadline
● Deal with teammates
● Mistake you made
● Alternative solution
● Etc…
解答方式也很简单, 1) 描述situation, 2)介绍你怎么做的, 3)说下impact
有些公司还会问你项目经历,大致上也这么回答就行了

公司选择
一般分为这么几类:练手公司(1~2个即可),正常公司(大部分),dream company(一部分)。
你可以根据你的兴趣爱好或者是工资待遇来对这些,具体工资待遇可以查levels.fyi
● 练手公司
○ 那些你基本不会去的公司,但是最好也是找正规一点的,毕竟也要为后面面试积攒经验。也不是说不会去,万一钱给到位了还是可以去的。
● 正常公司
○ 大部分公司,这些公司都可以申一遍,不要怕挂,以面代刷
● Dream company
○ 建议放在最后来面,当你拿到了几个offer之后,面试会更游刃有余

工作申请
我基本上是走的错误路径,大家可以直接跳到最后一步,也是最高效的。
● 网申
○ 大部分都鸟无音讯,石沉大海,而且会让后期refer你的人refer不了,非常不推荐。
● Recruiter reach out
○ 可以联系下之前联系过你的hr,或者是去linkedin上ping人。缺点是有时候你找的那个公司的hr并不负责你的职位,需要多次尝试
● 内推
○ 内推也看情况,有时候也会石沉大海,但是比网申要好。进阶版的内推就是,如果有公司你非常想去,可以让给你内推的人直接ping hiring manager,阐述下你的优点,效果非常好。毕竟相当于有一个在本公司工作的人给你背书。
● Hiring Manager reach out
○ 直接联系hiring manager。效果也非常好,我大部分的面试都是这么来的。因为在LinkedIn上标注要hire的人大部分确实要招人,而且是去他们组。你可以在LinkedIn页面搜索: XX Company manager hiring来找到这些人。不过有些manager不会回或者没下文了,对于没有给安排面试的公司,可以隔3,4天去找个新的manager

面试安排
● 面试一般分为如下几步:recruiter chat, OA(optional), take home assignment(optional), 电面, virtual onsite, 加面(optional)。
● 建议先尽可能把所有公司的recruiter chat聊完,先锁定你的面试机会,因为有些公司像coinbase,最早的电面都要2,3个礼拜之后,加急也不行
● 电面可以不用请假,block自己的calendar然后去面就行了
● Onsite会很累,所以当你有多家公司的onsite的时候,你就需要自己判断哪些公司是可以放弃或者暂缓的了,不然所有公司都面的话会让自己过于疲惫,有段时间我天天在onsite,累的要死,导致面的都不好

面试准备
· Recruiter chat: 基本没啥难度,就聊一下你为什么跳槽,为什么选择他们家公司,你对新公司看中哪方面,薪资期望
· OA: 能跳尽量跳,就和hr说你timeline很tight,没时间OA。实在不行就地里看下面经
· 电面:大部分公司在地里都有面经,看一下就好了。部分公司像robinhood会请第三方公司来面试,我的建议是跟hr申请要公司自己人面试。因为第三方面试公司太正规太形式化了,他有自己的一套评分体系,如果coding没跑出就是挂,不管你逻辑对不对或者是其他方面再优秀。面试不是很人性化。少部分公司会在电面的时候会加点system design,但不会很难,毕竟时间有限。
o 电面很容易被黑,因为只有一个面试官,一切都是他说了算。为了不被黑,需要做到以下几点
§ Ask clarification question
· 包括一些边界值,null/empty的处理,corner case,这样就不需要写完代码之后再来加corner case的处理逻辑
§ 面试中要多和面试官沟通,把自己的想法和他说
§ 先说自己的思路,和面试官确定可行后再开始写代码
§ 边写边说, 每一行代码的意思都要表达清楚,或者加注释
§ 写完后用几个testcase walk though一遍你的代码,确保面试官听懂
§ 然后要问是否有follow up question
o 如果你做到以上几点还是被黑,并且按要求完成了coding。那就请使用自己的权利向recruiter 申诉面试官,不止是为了你,也是为了别人。换个角度思考,如果这个面试官之前就被人举报过,那你就不会遇到他了,也就不会挂了。
§ 向recruiter申诉的时候可以说明自己已经完成了以上几点,并且留意面试官是否有些不专业的举动,比方说过早结束面试。你可以要求重面或者是让其他engineer review 面试官的notes
§ 被黑还是有些概率的,我面了15家公司,有3家都被黑过。最后1家给加面,1家给onsite,1家没消息。
· Virtual onsite
o 现在onsite可以分成一天或者两天完成,如果你面试不多的话可以分成两天,不然的话一天会比较节约时间。
o Coding: coding基本上就靠基本功和面经。有些公司像facebook还有leetcode题库。
o 主要难点就在于system design,像我们大部分时候如果system design挂了,就会被downgrade。System design如何准备已经在前面讲了,下面介绍一下临时抱佛脚的方法:
§ 先在地里查面经,一般来说一个公司就这么几道题
§ 找一个大神朋友来帮你mock interview一下
o 有些公司还会让你聊下具体的项目,可以准备一个自己参与过的大项目,主要准备一下
§ 这个项目的背景
§ 当初是怎么design的,design中有哪些alternative,为什么没采用
§ 项目中遇到过的技术难点以及如何解决的
§ 项目的impact,如何衡量项目成功与否, metrics

谈Offer
· 练手公司。 如果拿到了offer的话,基本上报一下其他公司的compete offer,他们就知难而退了。
· 被downgrade了。大部分公司薪资待遇是跟着level走的,downgrade的话基本钱也不多了。亚马逊除外,如果被downgrade了,还是可以在工资上谈回来的。其他公司的话没什么太好的办法,可以要求加面。
· 拿到第一个offer的时候,可以先把它谈高了然后再和其他公司compete。 可以谈的点有
o 你即将vest的股票,你因为要离职所以拿不到,可以要求增加signon
o 你现在有的benefit而新公司没有,比方说401K match
· Offer compete,我也没什么太多的经验,就把offer互相丢给另一个公司,看最后谁给的多吧

其他
· 晚上睡不着: 这个不管是你主动跳槽还是被动跳槽都会遇到,主要还是给自己压力太大了。不过这是好事,说明你是个有责任心的人。其实只要放轻松就好,但是真的很难。唯一的解决办法就是先拿到一个offer吧。
· 转岗:我是test,主要时间都是在写代码,所以转纯码农还适当容易一些。如果你想转PM, SDM的话,可能还是在公司内部转容易些。毕竟在自己的组干活干的久了,什么都懂,转岗也会轻松很多。
  • 713
35条回复