本科学材料,读研学CS找工作总结,强烈推荐!

CS找工作总结
从去年7月份开始准备,到今年5月底确定下来,我找工作断断续续也有个快一年了,现在回想起来还是有些东西想分享出来,给后来的人做个参考,毕竟在准备的过程中还是看了前人的心得面经之类的东西的。

1. 背景

zju材料本科,考研转至cs,无acm和各种编程大赛经验,无实习经验,无nb开源项目经验(这个我倒是一直想来着,不过后来有点懒就荒废了)。找实习时一个offer也没拿到。找全职前暑假准备了两月。拿到hulu yahoo baidu taobao 知乎 华为,推掉了一些面试笔试,被google china 网易游戏 有道拒了。快毕业时又开始找美国的工作,投了google facebook,都拿到offer。

2. 国内

作为一名小菜,和大牛是完全不能比的,大牛能靠平时的积累就秒杀掉面试题,而对一般人来说,2月左右的突击则是非常必要的。我亲身证实了这个道理,实习的时候根本没准备,面试的时候其实都是不难的题,但一问三不知,被bs也是在情理之中的事。而用暑假准备两个月后基本就挂了很有限的几次(google china 网易游戏 我是不知道为啥就挂了,有道那天真的是脑子一团浆糊,自己的问题),推掉好些面试笔试后也还是拿了好几个offer。因此面试前的突击准备是非常非常非常重要的。

国内的面试题范围很广,从算法到语言细节操作系统都有考到,可以分为算法和非算法来说。国内的算法题难度倒还是有一些的,但一般公司并不会要求你白纸写代码,这真的省了非常多的功夫,只用描述一下思路就能够过关,这一点比起国外来真是简单太多了。我之前主要是通过找题库+经典算法来准备。题库主要是何海涛100题(但其实不到100)+编程之美(有些题太难了不太可能出现我觉得)+编程珠玑,另外有时候还会在网上搜一些别的题库,但那都是扫扫就过了,经典的题目之前说的3个其实基本都涵盖了,网上的主要是查漏补缺加训练灵活应用用的。经典算法还有蛮多,在这里不太能一一列出,我所准备的最难的算法大概就是kmp,后缀数组,动态规划这一级别的,网络流凸包之类我就直接pass了,想着如果面试要是真碰到了我就直接说这可能和啥相关但我不会。国内算法题出现比较难的可能性大些我觉得,因为不要写代码,所以做题的时候还是要尽量地举一反三,总结出碰到什么类型的要怎么做,比如碰到数组相关的题了,那可以先试试hash,排序,归并(我当时总结过的,但是现在一下子可能说不全),一般题目也就做出来了,很多时候是完全没思路,如果想到个开头那基本就解决一半了。但要记住并不是碰到难的做不出来就挂了,面试过不过还要看别人的表现的,所以我觉得主要还是专注于经典的算法就可以了,过于难的花太多时间在上面不值得。保证每天都看看题保持状态。

非算法题的话主要有语言细节,操作系统,海量数据处理。选好一门语言然后精通它,在面试时最好不要说我什么语言都很熟(除非你真的是大师级的)。以我为例,我用的是c+python,如果碰到有人问我很深入的c++问题or java我就直接说我不太会这个你换一个。c的话深入下去要看蛮多os和汇编相关的知识,python的话我也看过源代码,再加上网上流传的题目训练,语言问题倒是不大。同理如果你用java,那么jvm jit等这些应该也都必须有所涉猎。操作系统方面就把恐龙书拿出来很快地过一下重点吧,太细节的肯定不用,一些经典算法(银行家,cache)加上关键概念就够了,再加上网上查漏补缺。海量数据处理听起来倒是蛮nb的,但其实真的不难。不外乎就是几类的题目,总是用什么hash,bloom filter,cache,多机器归并等的方法来解决,网上有个帖子有关这个的,讲的比我详细多了,大家可以搜下,这类问题真的是最不用担心的,看起来难只是因为接触少,引用我面google时一个interviewer的话就是It's just technology, not magic.

3. 国外

鉴于在国外找工作的人还不多(这也是我写这个的目的之一,希望大家多多往海外发展,这样中国人多些也好玩些),我还是先讲下一般的流程。一般国外找工作投简历最有效的方法就是找人内推,网投虽然也不是不可能,但是大多数简历都会直接被剔除(我简历就非常地不convincing,我觉得如果网投的话肯定没戏),如果自己没有认识的朋友在想去的公司的话,那么去linkedin or mitbbs上找人求内推也不是不可能的事,但一定一定要注意自己的言辞,因为别人没有一定要帮你的理由。过了简历关后一般会有一个短的hr talk,大概地考察一下你的兴趣啊语言之类(因为我简历不够好,fb还要我做了一个在线题),接下来就是电面,加州和中国的时差真的很痛苦,不是半夜面就是清晨非常早面。电面过了后公司会安排你飞过去做onsite,一般来说是中午或下午开始面,会有4-5个人左右来面你,每轮都是45分钟,中间有没有break取决于公司(fb只有3轮,google不加lunch interview有4人,都没有break)。面完后你就回去等消息吧。据说在onsite后也有可能电话加面的,但我没有碰到。如果你表现够好,拿到了offer,还有另一个要操心的问题就是工作签证,详细的大家可以google,我简短说下。每年的4.1号开始申请下一年的工作签证,像今年4.1开始申请的就是13年的签证,这几年都比较难签,工作签证有限额,这几年比较紧张,一般2月就满了,如果错过了当年的签证,那问题就有点大了,因为公司一般不会将你的offer保留一年等下一年的4.1再帮你申请工作签证。对于中国人来说想在硅谷找工作的话,基本只有fb和google两个选择,ms和amazon这两个大公司不国际招人,中国人投原则上只能投中国的office。google虽然中国也有,但也国际招,这也是我只投了这两个的原因。对于小的startup来说的话,更不太会国际招人了,因为需要就不多,国际招成本又大些。

接下来讲讲面试题,其实真的不难,只是把中文换成英文了而已。还是题海训练方法我主要做了careercup 150 + mitbbs jobhunting版 + leetcode.com(题目和online judge)+ glassdoor careercup 这些网站上别人报的面试题。每题都一定要白纸手写代码(vim or eclipse其实问题也不大,但像vs那种有提示的就绝对不行)!如果你做500题(手写检查加输入电脑运行),那其实哪个公司的offer都是轻松拿的(我估计只做了300道左右)。fb招master没有设计题,google有但也是设计一个带最小值的stack这样,所以只用考虑算法题,别的全都可以54。如果一个算法难到5分钟无法解释清楚思路,那它基本不会出现在面试中。一定一定一定要专注于基本的经典题,不要把太多时间花在难题上。想知道大概是什么程度的就去我说的题库看看就知道了。

面试要多好的英语?这个问题很难回答,我在国内找工作的时候大摩电面是英文的,那讲的真叫一个惨不忍睹,但是元旦出国玩了10几天,回来再准备面试时感觉就还不错了,后来面试时真的几乎没有因为语言问题觉得难以沟通过。一般来讲电面要难一些,因为只能通过声音交流。你需要在专业领域能听懂对方(这个其实大多数人都行)和表达自己的看法 就好了(可以在准备时一个人尝试解释算法)。总的来说我觉得应该不是大问题。

4. 心态

这是最最最重要,最容易忽视的一点。我从实习时面试忐忑不安到后来觉得任何面试都都很简单,最重要的原因不是因为准备了多少多少题,而是面了这么多,我知道了面试大概的套路,怎么和面试官交流,怎么表现我自己。怎么样养成好的心态这个问题很难用语言解释,我觉得可能也无法用语言解释,多来几次不重要的面试演练一下应该是最好的方法。总结起来大概就是自信,诚实,不要恐慌,把面试官看成平等的人,表现好你自己,突出优点,不用掩盖缺点。

ps. 在准备时也要调整好心态,不要有过高的期望,这不是说要没有动力而是如果期望太高容易让人太过紧张烦躁,脑子里只要想着怎么准备这件事,尽量不要想如果拿到offer了怎么办,如果找不到工作怎么办这样的问题。


你可能感兴趣的:(未来工作)