sony LED TV# Living
L*Q
1 楼
为期3个月的找工作全面结束,在本版收获颇多,得到不少朋友的帮助,所以俺也来分享一点儿经验,希望能对还在找工作的朋友有帮助。注明一下,俺的经验是找software engineer,应该不太适合找research工作的朋友。写的有点儿乱。
----------背景-----------
CS fresh phd,网络方向,东部学校,专业排名20多,phd其间无intern经验,以前也没工作过。算法设计和编程是俺的小爱好,没找工作前偶尔也玩玩。
----------找工作情况-----------
最终决定去google。
自己乱投、认真投以及朋友refer,一共申请30多个公司,全是software engineer职位。拿到21个phone interview,cancel掉其中的3个。剩下的18个phone interview拿到13个onsite。这13个onsite俺去了8个,cancel掉5个。8个onsite里面7个出了结果,另外1个上周搞的还没消息。7个已有结果的onsite拿了3个offer,被拒4个。Facebook的onsite我表现甚至超过google onsite。所有编程题全写的挺好,面试官也认可。design题我没见过,但我给的solution居然和facebook在用的几乎一样,七八个步骤只有最后一步略微不同。但是没想到facebook把俺拒了,无缘。
-----------简历---------
俺没intern和工作过,所以找工作之初花了大力气准备简历,以便能获得尽可能多的关注。首先,fresh的同志,即便是phd,也尽量控制在2页内。我参加过3次学校的job fair,观察过20多个hr看别人简历,极少有人会仔细看第二页,更别说第三页第四页,第一页都只留意看前半页。所以,我简历第一页前3个section分别是objective、highlights和technical skills,然后才是education和experience啥的。publication之类的放最后,占了我半页纸,不过没多少公司care这个。
------------策略---------
我从最初就target google和facebook,虽然从没想过真会拿到。但是这样能促使我认真去准备,不抱侥幸心理,因为去年找intern侥幸心理让我吃了亏。我从一月中旬开始准备,复习以及练习coding。一月底开始投了几个不太想去的公司,拿来练手。觉得准备的过得去了,才开始找朋友refer了google、facebook和其他几个公司。所以当我真正开始面google和facebook的时候,已经练习了挺久,而且已经onsite过4个公司了,面试经验还算有不少。我知道有朋友上来先投google,结果很快就挂了。其实面试经验很重要,第一个onsite就能拿offer的可能性还是比较低的。别的不说,当你面了10个公司后,口语也会有很大提高,面试时候跟人寒暄、扯淡、闲聊都会从容不少。
-----------面试问题------------
我面的公司太多,大的小的都有,所以被问到的东西乱七八糟,总结起来包括这些:编程、找他们code的bug、算法、open的design问题、C++、OS、networks(从
application layer问到link layer接近10个protocol)、概率、组合数学、智力测试、research和behavior问题。个人觉得,编程和算法最重要。自己做的方向都要准备一下,免得被人问倒了就太难堪了。比如我是网络方向,除了把网络书复习了一遍,还把IP, TCP, MPLS, ICMP, DNS, HTTP, UDP, VPN这些protocl最主要的RFC看了一遍(对大多数朋友这事儿完全没必要)。另外一些小公司会问很多编程语言细节,只有极个别会考数学。
-------------准备过程--------------
前些天版上大牛报google offer,说做了600道编程题。我没那么夸张。我认真做了150道左右,都是些版上常讨论的题。我先在纸上写,然后敲进电脑。有online test的,我就去test;没有的,我就自己写test。同时也看别人的code,有时候能帮助自己提高coding能力。最重要的一点:一定要练习白板coding,这个和在电脑里写code很不同。我觉得拿圆珠笔在纸上写最难,因为很难改。其次才是白板coding,白板上可以擦了修改。所以我都拿圆珠笔在纸上写。到我去面google和facebook的时候,白板coding可以一遍写完基本不改,面试官没怎么找出bug(实际上可能有bug)。无他,完全是熟能生巧
------------面试技巧-------------
第一,沟通,多微笑。恐怕没多少人会喜欢跟一个难以沟通、板着张脸的人共事。面试我的一些面试官,主要是老印和几个中国人,板着脸,态度差,跟我欠丫钱一样。
第二,编程题不要听了问题就立刻写code(除非面试官明确让你立刻写)。听问题,如果有不确定,就问面试官,避免一声不吭自己在那儿想一堆assumption。自己有assumption的话明确告诉面试官。确定正确理解问题和明确问题的scenario后,在白板上画个例子,解释自己的idea和逻辑流程。然后开写。这样的好处是方便面试官理解你的思路,同时也能避免写code时候出现错误。写完后告诉面试官,你要检查一遍。最好找几个test case实际过一遍(嘴里叨咕着test,以便让面试官知道你在干啥),包括invalid的参数,special case,正常case。这样才是一个完整的cycle。
第三,多思考有没有啥潜在问题。面那些热门公司时候,如果他们的题简单过头了,那就要小心了,一定会有啥考点的。举个例子,我onsite google时候碰到一个朋友也去onsite,他的一道编程题是让写n的阶乘。这玩意儿也太简单了吧。对,简单,也不简单。肯定会问overflow的,因为阶乘增长非常快。我觉得比较好的写法是定义一个LongInt类表示很大的整数,然后overload运算符。在计算阶乘的function里面就是拿这个LongInt type做运算。
-----------资料-----------
我用的是版上流行的题和programming interview exposed这本书。我觉得挺重要的一点:简单题要流畅写完无bug,难题搞不定关系不大。这就像高考,简单题是一定要拿下的,难题尽力而为。简单题如果歇菜或者写的不流畅,让人觉得你准备不充分或者水平不高。难题是大多数人都搞不定的,那你即便没能写完整,也可以理解。反过来如果难题搞定简单题歇菜,会给人一种基础不牢的感觉。
----------心态----------
找工作也是个心理考验的过程。紧张、焦虑和不安是很正常的。最重要一点:面完一家,就当啥都没发生,继续准备下一家,别在那儿干等。我去年找intern吃过大亏。客观讲,今年我心态比去年好太多了。除了最开始的几个面试,其他都是面完就没感觉了,赶紧准备下一个。只有在最后等待google时候比较紧张,毕竟那是我最想去的。
最后,祝愿每位还在找工作的朋友拿到心仪的offer。如果你有耐心看到这儿,非常感谢。
----------背景-----------
CS fresh phd,网络方向,东部学校,专业排名20多,phd其间无intern经验,以前也没工作过。算法设计和编程是俺的小爱好,没找工作前偶尔也玩玩。
----------找工作情况-----------
最终决定去google。
自己乱投、认真投以及朋友refer,一共申请30多个公司,全是software engineer职位。拿到21个phone interview,cancel掉其中的3个。剩下的18个phone interview拿到13个onsite。这13个onsite俺去了8个,cancel掉5个。8个onsite里面7个出了结果,另外1个上周搞的还没消息。7个已有结果的onsite拿了3个offer,被拒4个。Facebook的onsite我表现甚至超过google onsite。所有编程题全写的挺好,面试官也认可。design题我没见过,但我给的solution居然和facebook在用的几乎一样,七八个步骤只有最后一步略微不同。但是没想到facebook把俺拒了,无缘。
-----------简历---------
俺没intern和工作过,所以找工作之初花了大力气准备简历,以便能获得尽可能多的关注。首先,fresh的同志,即便是phd,也尽量控制在2页内。我参加过3次学校的job fair,观察过20多个hr看别人简历,极少有人会仔细看第二页,更别说第三页第四页,第一页都只留意看前半页。所以,我简历第一页前3个section分别是objective、highlights和technical skills,然后才是education和experience啥的。publication之类的放最后,占了我半页纸,不过没多少公司care这个。
------------策略---------
我从最初就target google和facebook,虽然从没想过真会拿到。但是这样能促使我认真去准备,不抱侥幸心理,因为去年找intern侥幸心理让我吃了亏。我从一月中旬开始准备,复习以及练习coding。一月底开始投了几个不太想去的公司,拿来练手。觉得准备的过得去了,才开始找朋友refer了google、facebook和其他几个公司。所以当我真正开始面google和facebook的时候,已经练习了挺久,而且已经onsite过4个公司了,面试经验还算有不少。我知道有朋友上来先投google,结果很快就挂了。其实面试经验很重要,第一个onsite就能拿offer的可能性还是比较低的。别的不说,当你面了10个公司后,口语也会有很大提高,面试时候跟人寒暄、扯淡、闲聊都会从容不少。
-----------面试问题------------
我面的公司太多,大的小的都有,所以被问到的东西乱七八糟,总结起来包括这些:编程、找他们code的bug、算法、open的design问题、C++、OS、networks(从
application layer问到link layer接近10个protocol)、概率、组合数学、智力测试、research和behavior问题。个人觉得,编程和算法最重要。自己做的方向都要准备一下,免得被人问倒了就太难堪了。比如我是网络方向,除了把网络书复习了一遍,还把IP, TCP, MPLS, ICMP, DNS, HTTP, UDP, VPN这些protocl最主要的RFC看了一遍(对大多数朋友这事儿完全没必要)。另外一些小公司会问很多编程语言细节,只有极个别会考数学。
-------------准备过程--------------
前些天版上大牛报google offer,说做了600道编程题。我没那么夸张。我认真做了150道左右,都是些版上常讨论的题。我先在纸上写,然后敲进电脑。有online test的,我就去test;没有的,我就自己写test。同时也看别人的code,有时候能帮助自己提高coding能力。最重要的一点:一定要练习白板coding,这个和在电脑里写code很不同。我觉得拿圆珠笔在纸上写最难,因为很难改。其次才是白板coding,白板上可以擦了修改。所以我都拿圆珠笔在纸上写。到我去面google和facebook的时候,白板coding可以一遍写完基本不改,面试官没怎么找出bug(实际上可能有bug)。无他,完全是熟能生巧
------------面试技巧-------------
第一,沟通,多微笑。恐怕没多少人会喜欢跟一个难以沟通、板着张脸的人共事。面试我的一些面试官,主要是老印和几个中国人,板着脸,态度差,跟我欠丫钱一样。
第二,编程题不要听了问题就立刻写code(除非面试官明确让你立刻写)。听问题,如果有不确定,就问面试官,避免一声不吭自己在那儿想一堆assumption。自己有assumption的话明确告诉面试官。确定正确理解问题和明确问题的scenario后,在白板上画个例子,解释自己的idea和逻辑流程。然后开写。这样的好处是方便面试官理解你的思路,同时也能避免写code时候出现错误。写完后告诉面试官,你要检查一遍。最好找几个test case实际过一遍(嘴里叨咕着test,以便让面试官知道你在干啥),包括invalid的参数,special case,正常case。这样才是一个完整的cycle。
第三,多思考有没有啥潜在问题。面那些热门公司时候,如果他们的题简单过头了,那就要小心了,一定会有啥考点的。举个例子,我onsite google时候碰到一个朋友也去onsite,他的一道编程题是让写n的阶乘。这玩意儿也太简单了吧。对,简单,也不简单。肯定会问overflow的,因为阶乘增长非常快。我觉得比较好的写法是定义一个LongInt类表示很大的整数,然后overload运算符。在计算阶乘的function里面就是拿这个LongInt type做运算。
-----------资料-----------
我用的是版上流行的题和programming interview exposed这本书。我觉得挺重要的一点:简单题要流畅写完无bug,难题搞不定关系不大。这就像高考,简单题是一定要拿下的,难题尽力而为。简单题如果歇菜或者写的不流畅,让人觉得你准备不充分或者水平不高。难题是大多数人都搞不定的,那你即便没能写完整,也可以理解。反过来如果难题搞定简单题歇菜,会给人一种基础不牢的感觉。
----------心态----------
找工作也是个心理考验的过程。紧张、焦虑和不安是很正常的。最重要一点:面完一家,就当啥都没发生,继续准备下一家,别在那儿干等。我去年找intern吃过大亏。客观讲,今年我心态比去年好太多了。除了最开始的几个面试,其他都是面完就没感觉了,赶紧准备下一个。只有在最后等待google时候比较紧张,毕竟那是我最想去的。
最后,祝愿每位还在找工作的朋友拿到心仪的offer。如果你有耐心看到这儿,非常感谢。