转行cs一年,从一无所知到拿到FB summer intern
这是一段很神奇的经历。因为一年前,我连java都不会写,唯一的计算机相关经历是大一在国内大学修过的公共必修--计算机基础c语言(也早已忘光)。现在竟然拿到fb internship offer,也算是世界真奇妙了。
简介一下我的背景:本科是国内top10大学环境系, 研究生是美国top50大学土木环境系。呐,可想而知毕业之后求职不顺利啦。也不是最厉害的名校,还读这么个专业,你懂得。。美国研究生毕业后在这边做了两个绿色建筑方面的实习。实习的时候上司也对我都蛮好的,要正式full-time offer就不给了>.<, 说不sponsor国际学生。。总之就是各种纠结,各种求面试,再各种悲伤了一年吧,决定转行计算机。。
-------------打开新世界大门的分界线----------------
那是在去年二月,我突然发现有个学校cs系研究生申请接受本科不是cs系的学生,录取后只要求第一学期修一些cs本科必修课,我觉得很适合我的情况,就申请啦。14年2月申请完,我就想着,那就赶紧读一些课程做准备吧,这样9月开学就可以刷题啦,想想就棒棒哒 ^ ^
从14年2月申请完到8月底学校开学前,我在coursera,edx,udacity还有一些学校的cs系公开课程网站上物色了一堆课,最后上完的有python和java的入门课程,UC Berkeley的61B data structure, Princeton的Algorithm 1、2。包括作业和project都认真做了。在学的过程中感觉自己逐渐有点入门,每天都特别开心!感觉找到了真爱@@
到7月algorithm学到一半的时候,我上了第一次九章!!(额,所以这里的潜台词是,我后来又上了一次,因为此时太弱,各种似懂非懂)。九章的两次经历放在下面的框框详细阐述,此处先跳过。
--------------真的开始刷题的分界线----------------
转眼就到了14年9月,开学啦,就正式开始刷题啦!刷题的标配就是cracking the coding interview和leetcode嘛(当然还有可爱的lintcode)。我当时根基非常浅薄,马步还没扎稳也没法练九阴真经啦,就开始慢慢看cc150。
我当时看好慢,每一章的流程是:先看完一章的所有内容,理解一下,把主要的解题思路和好的优化的方法记在本子上,整理一下。然后把题目复制到eclipse里面,一道一道自己写一遍,包括test cases。然后再跟书上的写法对比,看看人家怎么写的(每次一对比都会觉得,人家怎么就这么聪明,我怎么这么蠢-。-)然后把书合上,自己在eclipse上重新写一个比较优化的算法。
呐,时光飞逝,就这么缓慢地把cc150刷了两遍,就到了12月了。。期间我又上了一次九章的课(也是在后面详述),当然这次有了刷题基础就感觉好多啦,深深感觉九章的课特别有用!当然,此时已经有一些可爱的小伙伴得到了offer。。我不管他们,谁让我是菜鸟呢,也没法太早面啊。。所以我是去年12月才正式开始投简历<3
-------------边刷题边准备面试的分界线--------------
啊,其实对暑期实习来说,12月也不算太晚,反正我就接到了一些大公司的面试,比如amazon,fb,google之类。那我特别菜鸟嘛,怎么搞到这些面试的呢,找人refer呗^ ^。九章的某位老师就帮我refer过哈哈,特别有用,立刻拿到面试了!哎呀,所以要脸皮厚,各种找朋友帮忙推,就会有面试哒(反正我是把朋友圈轮了一遍,各种厚脸皮求小伙伴帮忙)。
有了面试机会刷题效率会立刻得到提升的!!反正我以前有时会偷个懒呀,今天少刷几题呀。。有面试了就觉得不会!因为不准备的话分分钟深跪不起。。>.<我也是从这个时候开始怒刷leetcode,开始是按难度做的,先easy,再medium。然后再一遍easy,medium。再接着从高频到低频刷hard。(额,高手肯定不像我这么搞。。因为我比较菜,预感在面试前也刷不完hard,就只能先把高频做了)
结果面试的时候人品大爆发,遇到的所有题我都刷过(额,也有变体啦,不过蛮类似leetcode原题)!那人生中第一次面试(Amazon)就过了。。第二次(FB)也过了。。我就懒得面第三个了,之后面试就推了。。
因为我面的两家都拿到offer,hr都对我蛮好哒,交流也很顺利。印象比较深的是fb的recuiter,特别卖萌,效率奇高,秒回邮件,打电话的时候态度也特别好。那我就愉快地接了offer,现在各种期待暑假啦!
(啊,这里需要说面经吗?我也不懂规矩。。额,需要的话之后补吧。。)
课程帮助
我在九章上了两次课。
-----第一次------
第一次是14年7月,当时刚上完data structure和algorithm,完全没刷过题,整个人都特别蠢!上了九章才开始对刷题有系统认识,大概知道了怎么准备,每一类题目的模板是什么,怎么系统性的整理刷过的大量题目,传闻中特别变态的dp是什么鬼(额,原谅我,之前真的只有闻名不曾见面)。。总之大大提升了我的信心,感觉未来的道路都明朗了起来!哈哈,段老师也特别逗,上课一直都很开心,也学到好多解题套路。我每节课都有记笔记啊,上完课看着厚厚的笔记,感觉拿offer指日可待嘛^.^。
那为什么还要上第二次呢?因为我第一次上九章的课的时候,本人特别水,题目也没有刷过,虽然感觉大概懂了一些基本思路,但是毕竟没有自己做过这些题,感觉是没有真正搞懂啦。类似于内功造化不够,武功招式学一堆也没有很大威力-.- 所以一直想着等内功提升一点再上一次!
-----第二次-------
所以等到14年11月,我刷了一遍cc150,就第二次来上九章啦!此时我已经对刷题有了比较切身的体会,对各路题目不能说理解很深刻吧,大概是怎么回事还是知道的。此时正是最适合上九章的时候(我个人感觉啦)!所以第二次课程学到的知识记得特别清楚!我印象最深的是DP,四种类型讲得好清楚,我之前一直云里雾里#-.-
FB面试里就问到了九章课上讲过的题!而且对方问我能不能优化的时候,我立刻想起段老师曾经说过:n都不满意只能logn啦,想想二分法呗,怎么把现有的去掉一半可能(大概这样,记错了不要骂我)。我就因为这句话想到了优化的办法,解释了一下,面试官就很开心的给我过啦!啦啦啦,上课认真听讲就会有好报的 :)
准备建议
啊,这个不是在第一段里讲过了吗。。。
就是刷了两遍cc150和两遍leetcode,在前期和中后期上了两次九章算法的课,就得到啦!!
九章的课在入门阶段和提升刷题技巧阶段特别有用!因为入门的时候什么都不懂嘛,老师就可以给你指引一下方向,怎么准备啊,什么事刷题啊。。中后期就是看他们具体怎么解得,九章的算法永远比我自己写的好!我每次写完一道leetcode就跟他们的解法对比一下反省反省,想想人家怎么这么聪明>.<
(额,还有一个,我当时想着要攒人品,准备面试到等面试结果期间每次吃饭给20%小费,以及多做好人好事 ^.^)
Read full article from 环境系萌妹子的逆袭
No comments:
Post a Comment