楠哥的帖子只在一亩三分地和我个人的某个人迹罕至的博客发表,转载、引用请注明作者、出处。谢谢。原帖发于http://www.1point3acres.com/bbs/thread-125808-1-1.html
好久没有在地里发干货了,趁着跳槽之间的gap,来总结一下跳槽这段经历。
##背景介绍
可能对这个id熟悉的人,应该已经了解我基本信息了。简单说来就是川大本科,哥大Master,都是CS专业。毕业后于2013年初入职微软,据这次跳槽正式离职工作总计两年零十天。2014年11月Google电面,12月Onsite,2015年1月拿到Offer,3月入职(为什么战线拖了这么长,后面会解释)。工作地点在Google Seattle。
##跳槽起因
因为Master是在纽约读的,所以跳槽最本质的原因是长期以来心中都有着一个声音,“要找机会回纽约去生活”。而跳槽的导火索,则源于微软组里的Re-Org和2014年的大裁员。Re-Org之后,原来的老板H换到别的组了,新来的老板S和原来老板的风格完全不一样,而且很多事情的思路也与原来老板相左。最最重要的是,新老板并不是那种愿意为手下人的职业生涯考虑的类型,所以总感觉在组里的发展受到限制。
其实我一直很享受在微软的感觉,原来的老板H对我也很好,入职10个月就给我升到了60级,而且答应1年到1年半之内升到61级。可是Re-Org之后,老板S有一次提到“三年内你会升到下一级的”,而且从平时的工作中也可以看出丝毫没有给我安排有助于我成长和发展的工作。前后两个老板的反差,让我萌生了跳槽的想法。就在这时,微软开始了有史以来最大规模的裁员,虽然没有波及到我,但是不安全感萦绕在每一个人的心头,自然刷题和跳槽就成了一种自我解救的手段。2014年9月,正式开始查资料、刷题、看面经。
##跳槽准备
跳槽和刚毕业找工作有稍许的不同。好处是,毕竟不是第一次找工作了,知道应该把有限的经历放在什么地方;坏处是每天白天上班,晚上刷题,还有生活上的杂事,很累也很容易放弃。分几部分来说说我的准备过程:
###简历准备
我的简历基本上完全重写了一遍,原来写在简历上的project全部都用工作之后的project替代了。因为本文不是简历写作的攻略,所以我就不展开说了,重点推荐一本书,the google resume, 也是CtCI的作者写的,我前前后后看了多遍,感觉里面的思路非常不错。作为跳槽的简历,注意不要透露Confidential的信息。有的正在进行中的project,应该注意不要透露更多的细节。也应该避免过多的使用缩写和专有名词,有的时候在一个公司干的久了,难免会把简历写成工作报告。
另外,工作一段时间后,对于经济上的投入相对学生时代变得不是很敏感,而对于时间上的投入则变得分秒必争。所以简历写好了之后,在网上找了一个改简历的服务。网申很多类似的服务,价格不等,一般几十元的大多是从HR的角度帮助修改,100-200元这个价位的就可以找到experienced engineer帮忙修改了,我觉得后者要更有用一些。
###算法题准备
算法题仍然是这个level面试的关键因素,曾经听说过这个级别的职位,一般说来算法题决定hiring decision,设计题决定package如何。算法题的准备最关键的其实是“恒心”两个字。工作之后,每天在公司工作8个小时,晚上再回家刷题确实是一件非常辛苦的事情,但是如果像我这样没有做过什么ACM的同学,算法题还是要花时间去准备的。Leetcode我准备的主要材料,网上还有一些类似的算法课,甚至是专门针对面试的算法课可以去听一听。在准备的过程中,刷题的遍数是一个方面,总结归纳是另一个方面。在前期可以强迫自己每天做N道leetcode,后期就可以每天做1类leetcode题了。至于CtCI和其他的材料,可以作为leetcode的补充,但是如果leetcode还有一多半没有写过,我觉得完全没必要去分散精力。
###设计题准备
从来没有准备过设计题,所以在网上找了很多资料。网上最多的说法是说去看大公司的Engineering Blog,我相信会有一定作用,但是问题是,我在准备跳槽的过程当中,算法题的准备已经花去了我大部分的精力,毫无头绪的看技术博客,非常的没有效率。所以,我只是简单的看了一些这类题目的作答技巧,其中有一个Harvard的课的最后一节,大概两个小时(连接是 https://www.youtube.com/watch?v=-W9F__D3oY4),我觉得对我的帮助特别特别的大。网上也有别人做过重点推荐,我觉得如果没有什么时间,就认真看一看这个会起到非常大的作用。全部准备完之后,在网上约了一个小时的Design mock interview,一个session大概可以mock4个题,有很全面的feedback,很适合面试前突击。
###联系Recruiter,投简历
因为最开始的想法是回纽约,所以所有的职位全部都是选择的NYC。
Google和Facebook刚好在2014年5月份左右有Recruiter加我的LinkedIn,当时来回发过几封邮件,所以当我准备跳槽时候,给他们发过去简历,很快就安排了面试。
Amazon比较特别,因为和Microsoft同在Greater Seattle,所以一年当中会不断地有Recruiter给你发邮件,当时刚好接到了一个组的邮件,号称要做High Confidential Project,所以决定面这家。
LinkedIn的面试来自于同学的推荐,并不是内推,而是LinkedIn让我的同学去面试,他无意跳槽,就把我介绍给了那个Recruiter。所以如果你打算跳槽,多问问周围的同学说不定会有意想不到的机会。注意,我说的是同学,不是同事。
进入十月份,因为一些原因Seattle成为了我的候选地点之一,于是我找同学内推了Apple Seattle,我自己还投了Twitter Seattle,以及NYC的Square和Dropbox。结果连电话面试都没有接到。
##面试经历
一共面了4家,都拿到了onsite。
Google整个面试流程拖得非常长。电面是纽约的一个工程师打电话过来的,两个题目都很简单,之后安排了纽约的Onsite。Onsite一共五轮+一轮吃饭,每轮45分钟,每轮1题,全部是算法题。Google的面试题第一个特点,就是题都是自己编的,没有在别的地方看到过。Google面试的第二个特点就是题目编的都不是严谨,很多时候面试官也没想的很完善,你如果提出来了感觉是非常好的加分。其实我觉得,Google题目整体难度不高,基本是Leetcode上的中等题目的水平。但是因为是新题,所以相比Leetcode上面见过的题,可能会有一些陌生的感觉。
Facebook电面只有一轮,题目不算简单,我答的也不好,但是没想到竟然给了onsite。Onsite两轮算法,一轮Design,一轮behavior+Design。设计题没答好,算法题感觉难度基本是Leetcode上面较难的一部分题目,可以明显的看出面试题是从Leetcode上面改编的。design没答好,最后没offer是自然。
LinkedIn安排了两轮电面,每一轮都有两个人。电面都是Leetcode原题。在纽约Onsite,一共五轮(onsite当天早晨5点才到纽约,紧接着面试我也是够拼的),其中两轮behavior,一轮Design,两轮算法。除了design和其中一轮behavior以外,都是两个面试官。算法题基本全部都是leetcode原题,design题也非常简单。只是不知道为什么最后没有发offer。
Amazon收到邮件后,安排了一次电面,电面直接和Hiring Manager进行,问了一道很简单的算法题和很多behavior的题目。紧接着安排了Onsite,奇怪的是,onsite也没有什么很难的算法题,事实上,应该说onsite也没有什么算法题,一共5轮,一轮behavior,一轮纯算法,两轮OO Design,一轮System Design。
所有面经的具体题目,用小号放出。
##Offer选择
无奈一共只有两个Offer,Amazon和Google,没什么好选择的。其实两家的base都没有我在Microsoft的base高,不过Google的annual bonus和stock高一些,而切Google毕竟是包括我在内的很多码农向往的地方,所以最后选了Google。在地点上,Google当时可选Seattle,NYC和MTV,我自己都不敢相信,两年来心心念念的NYC,我却在最后放弃了。留在Seattle,但愿我不会后悔。
##H1b与绿卡 H1B Transfer应该是每一个第一次跳槽的人都很关心的问题。先来说一下流程,基本流程是你拿到新公司的Offer,确认接受Offer,公司进行背景调查。北京调查后公司开始为你办理H1B Transfer。(H1B Transfer办理前,公司会首先提交一个LCA application,一般这个公司可能不会告诉你详情,但是很多公司的Immigration System里面会有显示。)公司首先提交H1B Transfer Petition,从USCIS收到Case Number,理论上来讲,这个时候你就可以通知现在的雇主你打算换工作了,因为即便现在的雇主当时辞退你,你也可以直接到新公司上班,不需要等到你的H1B Case被批准。如果新公司帮你办理的是Premium Processing,那么你的Case会在15日内被批准,如果是Regular Processing,那么你需要等1个多月到若干月不等,具体要看当时USCIS公布的处理时间。无论需要等多长时间,一旦你拿到了Case Number,都不影响你到新的公司入职工作(有些公司有自己的Policy除外)。还需要特别说明的是,我在网上查到的资料显示,你在H1B Transfer提交申请的整个过程当中,你的现任雇主不会知道H1B Transfer这件事情。具体到我个人,直到我的H1B Case被批准,我的现有雇主都不知道我要换工作这件事情。
现在越来越多的公司开始为刚入职的员工办理绿卡了,所以,跳槽的过程当中,绿卡自然也是一个重要的考量因素。绿卡的详细过程可以参见W大多年前写的关于绿卡的系列文章,我在这里就跳槽相关的事情简单解释一下。楼主的老雇主M和新雇主G都从入职第一天开始办理绿卡。(事实上,可能对于1-2年工作经验的同学,为了增加offer的吸引力,即便像Amazon这样的公司,也愿意提供绿卡。)绿卡办理大体上分为三步,PERM,I-140和I-485。对于中国大陆出生的同学来说,要经过一个大致5年的排期过程,排期一般发生在I-140和I-485之间,所以基本上前面两步视公司律师的配合程度,一般情况下在一年-两年之间可以完成。排期的时候,你进入Queue的日期,叫做Priority Date,是按照PERM的提交日期进行计算。跳槽的时候,一旦进入新的公司都要从头再来,这是无法改变的,我们能够做的是,进入新公司从新开始办绿卡时,继续使用以前的Priority Date,这样就可以保证排期的等待时间不会因为跳槽而增加。为了达到这个目标,我们就要等待I-140批准后(不是递交之后)再辞职,这也就是为什么楼主跳槽从拿到offer到最后入职经历了两个多月的时间。I-140现在审理时间为4-6个月,其实也是可以办理Premium Processing的,但是微软的政策是办理Premium Processing需要Manager批准,所以我就老老实实的等了5个月。
##离职与感谢 作为码农,其实我觉得我在处理人际关系上,很不在行,但是辞职的时候,基本的感谢我觉得还是要说出来的。提前两周辞职,这是行业内通知现有雇主的一个比较常规的时间。和Manager说了我打算离开之后,老板问我这是最后的决定,还是可以有商量的空间,因为已经下定决心换个地方,所以选择了离开。很快,Group Manager(老板的老板)来到我的办公室,问我为什么离开,愿不愿意留下来,知道了我已经决定离开后,问我将来要去哪里。我见过无数的例子,从M跳到G会被当天要求离开,所以我没有向Group Manager透露我的去向。比较意外的是,他说根据Microsoft Policy,如果我不愿意透露,我要在三天内离开Microsoft,所以我比原先计划的离职时间提前了几天,结束了我在Microsoft的征程。
在三天的Buffer里,告别自然是我的主题。和组里每一个帮过我的人说单独的说再见,给打过加到的人发邮件和thank you note,其实还是很伤感的,毕竟一起工作了两年的时间,各种情绪夹杂在这两年的时光里,很长时间心情都很低落。另外,这也是建立network的一个重要时间,虽然大家不在一个公司工作了,但是IT业如此跳槽频繁,谁能知道你现在有过一面之缘的人,会不会将来成为你的同事,甚至是你的老板呢?特别值得一提的是,原来的老板H,在我已经明确告诉大家我要在三天内离职之后,来到我的办公室,告诉我我可以进入他现在的组里工作,希望我能留下来。对于这样的邀请,我甚至在某个瞬间就心动了,所以,这也是对所有跳槽的同学的重要一课,如果你对现在的工作内容不满意,而你的老板又丝毫没有调整你工作内容的意向,说不定和别的老板聊一聊,你会有意想不到的机会。
##写在最后 离职的时候,我的心里其实并不是对于未来的期待,也不是对于能够去更好的公司的欣喜,而是一种不舍、失落和些许恐惧交织在一起的感觉。对于微软两年来的时光,有过快乐,有过挫败,有过激动,也有过委屈,而离职的刹那间,却只能想到各种各样的遗憾。很多曾经计划好的code还没有写,很多一直想做的performance improvement因为新的feature一直没有动手写,很多known bug,因为有workaround,就放在那里一直没有动他们。离职的时候,自己才知道,以后那些熟悉的代码再怎么样都和我无关了,很快新人会接收你的component把它们改的面目全非,甚至会说以前的owner把这个地方写的如何如何差,而这些说不定真的只是当时的technical limit。可能这就是打工吧,完美主义在这里是行不通的。
工作两年来,随着年龄的增长,自己也逐渐成熟起来,对于很多事情,再也不是情绪化的对待,取而代之的是对于自己做的每一件事情的反思,以及对于很多事情的释然。对于工作,曾经功利的想抓住每一个崭露头角的机会,而现在不再去追求一时的成功与失败,而是希望自己的技术和实力能够稳步的成长。对于生活,不想再继续把自己的快乐建立在别人的认同之上,只想认真的把我喜欢的事情做好。而对于感情,早已不知道是因为喜欢某些特质而喜欢一个姑娘,还是因为曾经喜欢一个姑娘而从此都在寻找那样的人,夜深人静时只是不断地告诉自己真诚与善良终会有好的结果。
新的工作,新的环境,希望这是一个新的开始。