来美一年job hunting总结(EE转CS, 已定Amazon)

avatar 137570
MavLee
22779
51
苦等一个半月后,终于接到amazon offer, 最后选了AWS S3,努力工作争取以后给同胞们内推。对于EE转CS的我刚来美一年能找到这样的工作实属幸运,果断从了。
三个月的求职季应该结束了,自己也要写点东西和各位朋友共勉,希望大家相互学习交流。

首先感谢一亩三分, mitbbs, 算法面试群(229623621),这些资源里都会有很多热心的朋友发布内推消息,解答各种面试问题,真的是提高自己,帮助他人的好地方。
其次应该感谢 leetcode, cc150, 有了他们你面试才更有底气。 计划发工资之后第一件事就是donate $100给leetcode, 希望他们越办越好,尽量低调,不要进面试官的黑名单。

一 本人背景
很多朋友的背景要比我厉害很多,本人属于半路出家,希望能给正在求职路上和还在学习的朋友一点鼓励和帮助。
国内普通学校EE本科,后考研调剂到北邮软件工程,入学后得知有合作培养的出国机会,抓住机会就来了美帝。
在本科的时候自己其实就很喜欢编程,陆陆续续参加了数学建模,电子设计,也打算往软件方向发展。阴差阳错考研调剂到软件工程,从此开始专业搬砖。Java, database, operating system, XML, network programming, data mining....总之一通乱补各种CS基础课程,狂练编程能力。后来到导师实验室开始正式接触商业项目,j2ee, ios mobile, 让自己对整个软件设计开发流程和规范有了相当的认知。
来美国后又学了algorithm, design pattern, software engineer, 这真的是苦逼的一年,感觉国外的课程压力很大,也因为这样逼着自己读了一遍《算法导论》设计模式什么的,这为以后找工作面试打下了很好的基础。因为面试主要就是算法+OOAD+项目经验。

二 找工刷题过程
我13年8月来到美国,其实我开始接触找工作从13年9月份就开始了。 刚开始来还处于兴奋期,突然学校有了秋季招聘会,很多企业到学校去介绍,收简历,面试。自己便匆匆做了第一份英文简历(到最后发现简历其实还蛮重要的,里面的措辞造句,细节之处很能体现出你的用心程度,建议大家自己检查几遍之后让同学,导师,学校的career center都改一下,做到最适合你的,最适合你投的职位的简历)
在job fair上和微软的员工聊得很开心,最后我也没有想到他们回去就给了我phone interview的机会,因为第一次搞这种面试,没什么经验找来学长给我讲了很多,最后终于拿到了on siter的机会。那时真的感觉很意外,于是赶紧刷上leetcode, 结果最后刷了不到40题就去面试了,结果可想而知,语言方面加上技术准备不足,被完虐了{:7_204:} 。白白旅游一圈自己也涨了不少经验,最可贵的是认识了别的朋友。
14年初,在老师的帮助下去了一家德国公司实习了半年,做c/c++ unit testing. 在美国找工作发现如果你简历上没有实习经历,很难有公司会给你面试机会,所以大家要尽量丰富自己实习经历,一来能尽快了解工作节奏,环境,二来能提高一下技术,最重要的是让你的简历变得很漂亮。

14年8月计划硕士毕业,从六月份开始就让自己好好进入状态,开始刷leetcode, cc150.过去的朋友都讲leetcode不刷三遍以上最好别去面试,刚开始不太理解,到了后期才知道lc的重要性啊。刚开始刷题很慢,有时候思路没有上网看别人的答案,同时自己也开了个技术博客开始记录一下思路过程,方便以后提高复习(blog.csdn.net 这里奉上我的博客,里面有所有leetcode java, c++的解法,以及总结,不是很完美但是希望能帮到大家,其中也引用了很多牛人博客的观点)。过了两个月总算用java过了一遍,然后因为很多公司还要求c++, 自己又开始用c++刷,感觉这个过程很重要。1,能够对c++ STL,和java 有更深的认识和了解,同时对于数据结构和算法你也会有自己独特的收货,毕竟刷题的目的是训练你的思维过程,强化数据结构和算法在各种问题下的应用,并不是单纯的记住答案。这样以后面试才能举一反三,灵活处理问题。用于自己还是偏向于用Java, 第三遍开始分类用java刷,当时由于要赶微软14年的校园面试,逼着自己8天又把leetcode过了一遍,array, string, heap&stack, linkedlist, binary tree, sorting&searching, DP, Greedy, backtracking, graph algorithms, divide & conq, math以及细节智商题。基本上所有的面试题就这些分类了,而且有很大的规律可找。 本来计划要是有时间再学学python, 用python刷一遍,还没实施offer已经到了。不过以后肯定还要用pthon搞一遍。整个6-8月的过程,自己很详细的把cc150也过了一遍,里面会有很详细的思路,知识点,除了技术方面,一些语言措辞也是值得我们学习的,毕竟面试的过程你要和面试官不断交流,不说能讲出地道的英语,最起码让人家感觉你在专业用语这块很蛮专业。

三 面试经历
MS -- phone interview, onsite interview(3 rounds), college campus interview
amazon -- onsite group interview
others phone interview: google, ebay, hp, Capital One, Goldman Sachs
很少见到能一次面试搞定工作的,除非个别牛人,所以建议大家还是多多面试,积累经验,上传面经,多攒人品,尽量内推。
关于behavior questions 也要好好准备,常见的十几种问题要熟练,自己最好把每个问题都用自己的故事来回答,在你的story中突出你遇到了什么问题,用了什么技术,如何解决的,体现了你的什么品质。这样的回答应该算是比较完美了。
tech questions就多多刷题,多做项目,积累经验吧。

这里尤其说一下amazon的group interview, 整个要持续一天,三人一组,用你最习惯的语言和环境开发。上午给你发题,十页左右的描述,要好好和组员沟通,尽快把该用的数据结构和算法弄清楚,然后把自己的思路捋好,之后面试官会逐一问问题。除了把自己的部分做好,其他的team member也要尽量帮忙,因为面试官会考察整个过程你的表现。如果组员是中国人那就更应该多帮了啊,大家是合作而不是竞争。要是阿三的话,那就随便吧,别让他把你坑了就好。
group interview比较适合那些项目经验比较多的同学,反而感觉算法不是特别重要。整体的设计,结构,细节,编程风格和习惯,比较考察一个人的综合编程能力。典型的几种设计模式自己要熟悉,常用的java 类库,多线程都要熟,一些特殊的corner case自己要想全面。

另外一个onsite要注意的就是dress code, 一般的high tech公司面试 business casual(chino或西裤+ 带领代扣的shirt)就可以了,金融的就都上suit吧。当时自己第一次面微软就二了,直接破洞牛仔裤+运动外套就去了,感觉十分和周围环境十分不搭。

总之面试当中存在太多因素决定了你的结果,我们能掌控的就是自己准备好,做好你自己就够了,再多攒点人品,你的运气就来了!!!{:7_187:}

最后把记住的题奉上~~
1. search a 2D matrix, (leetcode)
2. intput-- wabcdxyz,abcdxyz output-- abcdwxyz
what function?write code. 个人理解应该是输出所有input string中出现的字符,并升序。
3. Give you a C++ file, remove all the comments in this file. write the function you preferred. 当时自己给的方法是用regular expression
4. Reverse linked list, (leetcode, cc150)
5. Permutation Sequence (leetcode)
6. Given two rectangle class instance, return overlap rectangle. 返回重叠矩形。麻烦的是有不少corner case
7. How to implement hashmap, stack...
7. 还有一些是java 的基础概念,这里提供一个115道常见java 题的链接,方便大家学习。javacodegeeks.com

求职路真的不好走,找一两个朋友和你一起,坚持,努力,不妥协,希望大家都能早日拿offer, 走上人生巅峰。{:7_168:}
刷题虽易,面试不易,且面且珍惜。
  • 56
51条回复