北大“女学霸”,3 个月内拿取硅谷10 家顶级科技公司offer!_第1张图片



经过 3 个月精心准备,我拿到了 Google,Facebook,Netflix,linkedin,Snapchat,Roku TV,Amazon,Signal,Wealthfront,Toyota Research Institute 一共 10 个硅谷公司的 offer。airbnb 结果还没出,uber, dropbox 面试体验不好,最后 onsite 直接 withdraw。Soundhound intuit HR 自己说他们待遇不 competitive,所以也 withdraw 了。最终大概率在 LinkedIn Staff 和 Netflix 之间选一个。

背景:

本人 13 年北大毕业,本科读的是信息管理与信息系统专业,和图书馆学是一个系。我的数理能力肯定不是顶尖,高考是靠语文英语拉分的。后来追随男朋友(现在的老公)来美国读了 UCSD,强转计算机专业。我 13 年刚刚入学 UCSD 的时候,连 terminal 也不会用,从本科算法课,操作系统课开始一点点补。来美国上了第一个 quarter 之后,靠老公对我的冬令营,刷题补习,拿下了 Apple,Facebook,Amazon 的暑期实习。14 年暑假选择了和老公隔壁组的实习,因为深知自己计算机水平完全不够,只是会刷题,想和老公近一点,能帮助指导,减少我不必要的压力,同时增加拿到 return offer 的概率。14 年暑期实习表现的很好,实习的 project 也被选上 org 最佳。实习结束后,高高兴兴拿到了return offer。于是我在 Apple 一呆就是四年。

出发点:

在 Apple 工作的四年里,结交了很多好朋友,深交了几位知己。第一年 exceed,RSU refresh 了工资的 60%,升职成功,超过预期,短暂高兴过头觉得自己是人生赢家。工作更加积极努力。第二年 exceed,股票比前一年多给了一万,基本符合预期,短暂高兴过后是平静。工作依然卖力积极。也在这一年,我鼓励老公跳槽升职成功,他顿时包裹丰厚,把我狠狠甩在了后面。也听说身边很多同学,升职跳槽成功,真心为他们高兴,努力就有收获。当时我完全没有考虑跳槽,因为这年的项目特别好,我觉得是一个非常好的机会。所以,我同样卖力工作,怀着孕,但是丝毫没有懈怠,代码量还是组里前三。18 年 7 月份开始休产假。宝宝出生后 7 周我就回去上班了。不久 review 就出来了,第三年 exceed,股票再比前一年多给了一万,感觉有点失望,不是说钱少,而是感觉我再怎么比组里其他人努力,但是基本上都差不多了,再没有惊喜,大锅饭,可预测性太强。同一年,老板也想升职加薪,因为项目带的好,“编出来” 好多 head count,招了 5 位新成员,其中有一位来自 cisco,强推 CI,新成员狂写 unit tests,搬到了 Apple Park。我们组从原来的家庭小作坊的温馨和谐,其乐融融,变成了企业式经营,所有人都来 “新官上任三把火”,我觉得弄得效率很低。

所以,对我来说:

1、组里项目已经成熟,和老板交流后发现明年的项目并没有什么意思。

2、组里人太多,马上就要 re-org,我虽然基本知道我的新老板会是我在组里最要好的朋友和导师,但是,他刚刚变成 manager,肯定要适应,我的升职肯定会受到影响。

3、我想再生个宝宝,那样,基本上最新两年升职没戏了。于是,在 18 年圣诞,我就下定决心,准备跳槽。

准备过程:

说干就干!我打开了网站,一切还是那么熟悉与陌生。当时宝宝只有 4 个月,所以,我的时间比较零散,周中基本上每天 1-2 个小时,周末一天会有 3-4 个小时用来学习。以下按照我的个人经历。你要是能全职准备,或者基础扎实,其实应该很快。

1、热身期(1-2周)

我先开始按照通过率高的开始刷,只挑 easy 的刷,增加信心,找回感觉。这样刷起来很快,我刷了两个周末就刷了 60+道。但是刷到后面感觉没有意思,碰到会做的会做,不会做的还是不会做,没有任何实质进步,再这样刷下去没有意义了。

2、学习期(1周)

于是我开始系统性看书,我老公一直是推荐算法导论,但是我觉得翻译不好,看得不大明白,一看就困。

我在 UCSD 做过算法和操作系统的助教,算法我强力推荐我老师的书,浅显易懂,看起来快。

我觉得基础知识一定要打好,面试的时候,除了 FB,感觉别的公司多多少少还会,不是说考,而是交流的时候,会涉及一些平时的工作的,或者是基础知识。特别是,有的时候我做题很快,面试官没有准备,就会问一些临场的问题,那就什么问题都有可能了。但是只要打好基础,系统性有个全面的了解,一般碰到没有听过的东西,我直接就说我不知道,好像也没有任何麻烦。但是,要是问到基础性的问题,说不会就不太好了。反正到处都是雷,打好基础能最好的帮助避开这些雷。

3、突飞猛进期(1 个月)

学习结束之后,我开始分类攻克,按照数据结构和算法,拿出几个常见的类型,一类一类的看。包括树,图,dfs,bfs,recursion,linkedlist,hashmap,priorityqueue,等等。按照频率,一道一道刷,理解,掌握方法,融会贯通。在此我推荐一下前几年和老公一起写的书。我们都是强推以质代替量。保证理解,能考虑为什么这道题要这么做,是先有方法再有题目,而不是一味的做一道题,想一个方法。一道题做了,做一道类似的题,举一反三一下。掌握解这种类型题目的方法。得问问自己为什么这道题能用这个数据结构或者这样做?有没有别的方法?

对此,我还是推荐一定主攻 leetcode 前面 150 道题,基本上要是全部会就无敌了已经。要是保险,再刷刷每个类的高频题强化一下。LeetCode 都相当经典,高频题肯定也是好题,面试官平时面来面去也就这么几道题,比如我自己基本上就面一道和自己 project 相关的题。他们选考这些题是有原因的。比如可以考多个知识点,或者对一个知识点考的很全面,或者对代码质量要求比较高,或者有多个解法发散思维等等等等。所以都是好题,值得理解。

与此同时,我刷我刷我刷刷刷,一道一道一道刷。

4、瓶颈期(依个人了,看什么时候会有这个 “aha” moment,方能进入无所不能)

刷着刷着,就又进入了,会做的还是会做,不会做的还是不会做。瓶颈期来了。。这个时候,我不再那么奋力什么每天刷几道几道了。我开始看做过的题目,开始总结,做笔记。很累,很失望,知道自己到瓶颈期了,再刷题已经没有质的飞跃了。总结,做笔记,看笔记。开始模拟面试。一开始,绝望,觉得刷了这么久,白板一来又脑子空白了,不知道自己在说什么。没关系,总结经验,继续模拟。我开始花更多的时间去思考,而不是做题目。开始花时间去想明白。

看了一下,我这次一共刷了 200 道,包括前面的热身的60道。

5、无所不能期

我开始一天天进步,不知道什么时候,经过几次模拟面试,我老公说我可以毕业了。我自己并没有意识到。于是我开始广投,开始了我面一个进一个,面一个进一个的旅程。

6、阿弥陀佛无欲无求期

开始了我漫长的 onsite,更多的是我想看看,逛逛不同公司的文化。而且能省去午饭钱。基本上在所有的公司,我都会说,在我现在这个阶段,我真得是无欲无求,我只想找一个适合我的公司,你们也找适合你们的 engineer




结语:

至此,我要感谢所有在这个过程当中支持过我,帮助过我的恩师们。尤其万分感谢那些帮我内推,传授经验的大佬们。大家不惜自己的时间来指导帮助我,受到大家的雨露,让我茁壮成长,我真得感激不已。感谢我老公的帮助和鼓励,感谢爸妈帮我照顾我可爱的宝宝,感谢宝宝让我更有动力,努力向上。

作者:roger-shen

链接:https://leetcode-cn.com/circle/article/BCRG4D/


推荐阅读

金三银四季,阿里工作10多年Java大牛的“心得”,献给迷茫中的你