留学两年多,刷题过三千——创业维艰,每个人都有属于自己的留学生活(一)

留学两年多,刷题过三千——创业维艰,每个人都有属于自己的留学生活(一)

首先说一下,这篇文章的初衷,是想记录自己的留学生涯,当初想无论进了哪个厂,都会写下这篇文章,只是最后机缘巧合走了创业这条路。但无论我走的哪条路,我都希望以自己的经历,可以给后来人一个借鉴,也是对自己两年多留学生涯的一个总结。其中写了很多自己对于刷题这件事的看法,方法,自己创业的一路过程,和自己的一些人生感悟吧。同时,想尽量去给大家传播一些正能量的东西。


第一年,实习

我是16年 Spring 来美国的,本科是在国内学的软件工程,可以说是标准的科班出身,来美国也是读的CS。刚来就确定肯定不搞科研,因为本科也搞过,但接触后发现自己实在不是搞这东西的料。所以来了目标就非常明确——找工作。那么北美CS找实习找工作考啥?众所周知,没有一个人能逃得过的:

刷题!

有时候回头想想我来美国这两年多,感觉说是留学两年,其实叫刷题的两年更为妥当一些。

当时刚来什么都不懂啊,就是各种打听,在网上找资料,刷题啊,Leetcode啊,公司啊,实习啊。那时候我才知道 Google Facebook 这种公司真的离我们近在咫尺,只要题刷好了,努努力,这种世界一线公司并不是遥不可及。相比于国内Google 相传的10轮面试,找个实习只需要两轮电面。只有极个别的几个公司,否则大多不看GPA,看GPA的Yahoo,Oracle这些公司,现状什么大家也都清楚。题能不能做出来才是王道。然后如果运气好就是一套流程 internship —> work hard —> return offer。

那时候也会在盘算,啥时候能把留学的钱挣出来。既然考刷题,得做Leetcode,那就做吧。

于是来美国第一个月,我就开始刷题了。

一谈到刷题,其实大多数人都是非常痛苦的。的确,一开始真的很难受,即使我在别人看来是科班出身。但数据结构都是大二学的,全部都已经还给老师,一开始看个最基础的链表题都不能理解答案写的什么意思,很多算法根本就是有个概念,具体怎么运行已经完全不记得了。就连树的三种遍历,都需要捡起来重新看。所以回过头看看,和非科班比,仅仅是对于算法数据结构这两门,非科班学一个月,就能赶上大多数的科班出身。因为像我这样的,本科没有搞过竞赛ACM,两年时间不用,已经不记得什么了。我想这也是大多数科班毕业的状态。

我也是这样啊,所以也只能是硬着头皮硬刷硬做啊。按Leetcode右侧给的类别刷,第一个刷的是链表,树。结果发现代码都看不懂,初来乍到也没有人问,就每天找我本科的兄弟。人家是大神啊,最后去清华保研,后来我听别人说在清华也是大腿级别的存在。当时一月中旬来,下半旬就开始刷起来。美国这晚上8,9点,正好国内放假,就开始逮着我同学问,一点点补,链表什么的怎么运作的,先不管别的先把代码看懂再说。真心感谢我那个兄弟,我经常对他说本科就抱你大腿,研究生了还得抱你大腿。有时候晚上8,9点开始,经常他中午起来就凌晨开始,大年初三还在QQ视频给我讲题,给我讲的时候有时候他妈妈进来我真不好意思,人家是纯粹帮我,回家了谁不想多呆呆放松一下,陪陪父母。所以感激一辈子,我说我以后回国,以后去几次北京,请他吃几次饭。今年回国,这也是我唯一一个找的大学同学,因为赶飞机就在机场请吃的饭。

那一个月,刷了100多题,总算把基础数据结构算法补回来了。

所以一开始补这些基础的时候,如果只有自己一个人搞,太难了,有一个能问,真的能快太多了。后来就自己一点点来,刚开始一天就能刷2-3道,非常痛苦,我做题是按类别做的,每一题求一题多解,每道题都在网上找不同的答案,discuss每天看top discussion然后找不同的方法。因为自己基础太差了,所以想每个解法,甚至是写法,都要会。经常有的题能看到7,8种不同的写法,那么这7,8种都理解来一遍,生怕自己落下哪个知识点,但现在来看有用的就那2-3个而已。太多题连看答案都看不懂了,当时还想如果有人能每道题讲一下,这速度不就是飞起了吗。结果发现并没有这样的资源,那时候还认识几个上班了的小姐姐我还和她们说,如果以后有时间我感觉这些题录出来解法感觉会节省很多人时间。只是当时自己太渣,有心无力。

一学期下来,刷题近200,当时 Leetcode 一共也不到400,已经刷了一半了。但大多数是第一个月的100多,后面很多是反复几遍刷。其实第一学期并不能太集中注意力去刷题,一到期中期末,就开始准备考试而放下刷题,安排不好时间,不知道怎么去分配这个时间比。而且弯路走太多了,第一遍,很多解法其实并不是最优而且回过头看其实是不必要的,可能一题有三种写法但掌握一种通用解法就可以了,但大量的时间花在比较和寻找最优解上。

这基本就是我Leetcode刷题的第一阶段,总结来说,就是:“分类-多解-基础-遍数”,不求多,但求精。

五月考完期末,我同学来我这玩了半个月,这也是我在美国留学生涯唯一一次出去旅游玩,以后就再也没有过了。到了七月开始紧张起来了。因为我知道大多数人都卡在了简历关,简历拒的不要太少,同学NYU的找实习投了500+的公司,最后跟我说还有20天学校申请CPT截止才拿到offer。我CMU的同学FB,Google简历拒的更多。我个人认为,有一部分原因,是因为学校的学生的简历,很多都长一个样,大伙上一个课做同一project最后写的也一样,所以区分度真的不大,我同学也跟我说过这点。所以当时就想,怎么在简历方面脱颖而出,我的做法是专攻+精做。首先project必须有区分度,不能四个project四个方向,我自己选了两个方向,专攻web development和iOS,最后我简历是两个web的project 和两个iOS的project。然后就是找项目做,没项目怎么办,自己找。当时在Udemy的网站做了几个,但现在来看,Udemy的东西大多太基础了,没有几个是完整的一个大的项目,入门学技术可以,但做项目,难。

其实CS这门专业,就是自学成才,只有你自己动手做亲自敲代码,才能会。简历也最好是成果,做网站把网站挂上去,做app能在store搜到能下载,做数据分析要有数据量有提升了多少的百分比。我当时做的网站,就自己买了域名最后真正能登陆注册使用,做iOS,上架能下载,其他都是虚的。项目不能水,因为HR都是人精,你项目水不水一看就知道,骗的了别人,骗不了自己。今天水了总有一天会还债。

学CS,绝对的实力才是王道。

等我做完这四个project,已经九月末了,project全是自己一个人做的,那时候真的感觉,我的简历,如果大家都没有实习,我能秒掉90%的人,本科的所有经历荣誉,一律不写,新的开始我要从头做起。web两个project一个注重功能,实现了e-commerce网站,从登陆注册到支付,用php, mysql, html, css, javascript 这些基本技术,但功能全面强大。另一个注重技术,node.js, monogoDB, express框架,Angluarjs这些技术要懂。iOS真的就只有swift一个语言了,database是用firebase这个网站做后台。

前后三个月吧,简历这关算是完毕。

以现在的水平看,其实当年做的真的挺基础的,没有用任何的框架,任何与时俱进的技术。但对于在校学生,没有工业界的打磨,已经是我当年能做到的极限了。至少,比很多千篇一律的学校水项目要强,都是自己认认真真做的,也在其中,真真正正的学到了很多东西。

然后就是刷题,原来刷的又重现捡起来。这个时间认识了一个我们学校的神,真心厉害啊,leetcode 5遍+,见题秒,我亲眼见证了他一天刷100题的壮举。。。真的是几乎没有不会的题,没有他,我刷题中期不可能这么痛快。人家后来基本已经不太刷题了,我问题他就当刷题了。这里感慨一下,有个人在身边,不会马上就解决,这个速度和效率是最快的。很多时候,问到他一些题,他会讲一些他的理解,可能一两句话,比自己刷20,30道都有用,理解马上就上了一个层次。

其实后来我才发现,所谓的上课,不就是变相找个人带吗?把他的深入理解告诉你,他给你一道道讲题,对比自己走一步卡一步,速度肯定飞起啊。

十月份开始,正式天天刷题,每天晚上白天都刷,一遍遍反复刷,到了11月末刷了200道左右,LC当时基本刷完,就是分类+遍数,我深知我不是一个聪明的人,我刷一遍题根本记不住,我只能傻子一样的一遍遍刷,一遍记不住我刷6遍我就能记住了。所以最后问我刷几遍我真的不知道,有的题10遍都有。十一月初找朋友内推了Facebook,找地里内推了Google。那时候还海投了50家公司发现海投真的一点用都没有。Facebook约面试时间直接约到了1月3号,因为12月安排满了,回我时已经11月20几号了。从十一月开始投facebook开始。开始陆陆续续看面经。我没有投太多家公司,因为学校不是很好也没有别的渠道,career fair都是local的公司我一个都不想去。

我只想去Facebook和Google。

那个时候,满脑子都是这两家公司,破釜沉舟,一意孤行。

然后就是疯狂的刷面经。因为Facebook面经很多,题库就那么多题。一开始,我从Facebook最早的2014,2015年面经开始看,但后来发现,每年的面试官不同,每一波面试官不同,所以每年这波人和那波人出题的题型可能完全不一样,比如今年喜欢move zeros,所以这题面经里满天飞,但去年这个时候,move zeros就非常少。所以我就从最新的开始看,每天跟踪新的面经,然后倒着看,到面试的时候,从2016年八月开始到2017一月,所有的Facebook面经,一个不落,我全部看过。做题每个题每个解法,follow up怎么出,这道题有多少种变形,follow up可能是什么答案是什么,都必须会都理解。二轮面试的前一天,我真的不知道看什么了,因为真的感觉差不多都会了。最后就把很多个非leetcode题用eclipse都跑了一遍,稍微难一点的开始写test case,加各种注释。

这阶段是我刷的最多的时候,Leetcode 刷了近400,加上面经,不重复的题应该在700+以上,很多时候,一个follow up就是一道题了,这个大家都懂。这也是我提升最快的一个阶段,从Leetcode 到面经的转变,这个过程前期是很痛苦的。一开始看面经一个onsite 6道左右差不多能做出来的就3道,但主要还是有我那个哥们,不会的他都能搞定。因为Leetcode很多是面经题,但面经题,还是和Leetcode有很大区别的,有些实现题,是很多不会在Leetcode中出现的。这个时候从Leetcode转面经,就是看之前的基础打的牢不牢固了,如果打的牢,可以很快度过,适应面经,如果打的不牢,那就是看啥新题都不会,没有自己能想的出来的。如果遇见这样的情况,我建议大家还是回头去刷Leetcode,补一下做题的基础才是最重要。

当年我找实习,前期就拿到了 Facebook 和 Google 的面试,这也是我最在乎的两家。从来美第一天开始,我就告诉自己一定要去这两家,想抛却以前的一切重新开始。从16年七月份到17年二月份,除了周五周六图书馆12点关,几乎就就没有凌晨4点前回过家。虽然很多人感觉我过的很苦,但至少这两年的留学时光,是我人生最好的两年。

学校不行,刚来时有人说没听过谁去过Facebook和Google,当时我就跟同学说如果以前没有,那我就要做这第一个人。

后来知道是有很多的,就是大伙不知道而已。一个人孤军奋战,学校里同届刷题几乎没有,天天都是一个人,每天晚上固定时间问我同学今天的问题,累了就出外面散步绕着走一圈回来接着奋战。一路走来,很难,但从来没有怀疑过自己。我原本是个很social的人,但自从来了美国,除了刚开始时多认识人,后来就减少一切社交活动,朋友很少。

因为我知道,我想要的,他们给不了。


留学两年多,刷题过三千——创业维艰,每个人都有属于自己的留学生活(一)

留学两年多,刷题过三千——创业维艰,每个人都有属于自己的留学生活(二)

留学两年多,刷题过三千——创业维艰,每个人都有属于自己的留学生活(三)

留学两年多,刷题过三千——创业维艰,每个人都有属于自己的留学生活(四)

留学两年多,刷题过三千——北美留学何去何从,留学生涯感悟

网站:cspiration.com

编辑于 2019-09-24