我的求职总结(EE找码农工作,已搞定Amazon,在等Google的feedback)

avatar 119744
sj1456
31618
50
由于之前Amazon已经发了offer,deadline也快到了,所以不管这次Google on-site结果如何,都不想再继续折腾,Amazon or Google。求职季到此结束,所以,是时候写点东西回报地里了。{:4_110:}本人NYU-POLY,EE专业,作为一个转行的,感觉自己的求职之路还算挺顺利,希望自己的经历经验能对各位尤其是非CS的各位有所帮助。

一。
首先必须感谢一亩三分地和米群,当然也得感谢LeetCode和CC150。充分利用上述资源十分必要,而且感觉这些已经足够了。

二。
觉得有必要介绍下自己的准备情况,也算给大家涨点自信。
前面说了我是EE的,所学课程,包括本科的课,都没有什么和计算机相关的。去年暑假决定开始自学CS,为了毕业好找工作,也就是那时候我才写出了自己第一个Java的hello world程序。自学Java我是优酷上找的马士兵老师的视频,边看边自己码,视频专辑链接如下youku.com。一个暑假后也算掌握Java的基本语法和常用类了。后来有个教授给面子进了他实验室,帮phd们一起做一些他们与research相关的demo,如手机app、网站啥的,边学边干也是收获不少。到了今年三月份开始刷题准备找工作。CC150真是本神书,有空一定要从头到尾看一遍,包括题目之前的内容。我觉得最重要的章节有:1,2,3,4,5,9,11(每道题我都过了3遍);比较重要的章节:8,10,13,14,16,17,18(每道题过了至少一遍);剩下的感觉可看可不看。我LeetCode在过完上述重要章节第一遍后开始刷,Java两遍,C++半遍(有些公司强制C++也是醉了)。LeetCode第一遍是在Eclipse上写的,因为好些函数还都没用过或记不住;第二遍直接在LeetCode页面上写,然后你会发现其实自己一个字母一个字母地写完一个程序还挺有成就感的,第二遍时,把不是自己做出来的题目手写记在本子上(一定要默写,这个过程也算是对on-site时在白板上写的演练),没事儿的时候看两眼。刷题的过程虽然痛苦,但绝对是一个自我提升的过程,很好地帮你理解和学习各种数据结构及算法。一开始有可能绝大部分题都需要去读答案,会很郁闷,但题目套路真的就那么几种,慢慢就能自己想出来、写出来了,要坚持,不要碰到一题不会就扔下打dota去了,看答案,然后自己默写出来。

三。
在我看来,可以对影响找工作的因素们进行如下排序:
运气 > 智商(逻辑思维或数学的天赋)> 努力程度 > 计算机项目经历 > 英语及交流能力 > 外貌。各位请千万别看了前两点就灰心,首先,这是事实,其次,谁说咱运气就一定差了,小弟我能找到工作绝对靠的就是第一点,再次,毕竟我们还是能够通过第三点来大大提升自己的竞争力的,这可比找女朋友容易多了,因为后者基本只能靠经济实力和外貌来保证。所以在继续努力刷题的同时,没事儿多做点好事攒攒人品也很必要,这不,来写个总结也算是为Google的feedback攒人品,求有奇迹发生。

四。
关于公司招聘,有一种说法是9、10月会机会多一点,也是听前辈说的,不确定真假。我年底毕业,所以大概8月中旬就开始各种找人内推(有找我认识的同学,还有就是上面提到的两个论坛),尤其是大公司,因为大公司招聘流程耗时长,投晚了可能就没坑了。虽然自认为准备地还远远不够,也只好硬着头皮上了,因为你永远不可能准备好。所以我的建议是LeetCode过了一遍了,就开始投吧,当有人联系你之后,效率会大大提高。我还准备了好长一个target companies list,打算能找的内推都找完了再挨个儿网申,没想到Amazon给offer还挺快,所以事实上我基本都没有自己网申过任何公司,求职季就突然结束了。{:4_105:}

五。
关于简历,我也是听其他前辈说的,就是要尽可能的满,不能有空行(比如education和experience之间有个空行之类的),因为这样有可能HR会认为你没的写了,为了凑满一整页才加的空行。还有就是和软件无关的项目,获得的奖和课外活动这些都要忍痛舍弃,原因和前面一样。至于怎么添加有价值的东西进去:一,写一些Personal Project,没有就瞎编,比如我自己写过一个论坛之类的;二,还写不满就在之前的project中多加几条,最好带一些数字,比如多少多少数据多少多少毫秒;三,一定要适当吹牛逼,项目简单没关系,吹出来高大上的东西就行了。

五。
上题。感觉自己碰到的都不难,每一家的题都记不太清也记不全了,就把能想到的写在下面吧:
1. 给两个排好序的数组,等长,找中位数。(二分法,每次比较两个数组中间的数,小的数组左半部分砍掉,大的砍掉右半边。O(lgn))。Followup:如果不止两个数组,有m个怎么办。(我只能想到O(mnlgm),就是维护一个size为m的堆或者叫priorityqueue);
2. 给两个数的byte形式(0,1序列),问这两个数是不是有且只有只有一位不一样。(简单bit operation,两个数XOR一下,然后一位位看是不是只有一个1);
3. 给一个字符串,让去掉元音字母。(太简单,不多说,java的话记得用StringBuffer);
4. 实现一个自己iterator,有自己的hasNext()和next()方法,要求给一个数组如[2,5,3,4],要输出一个数组为两个5三个4[5,5,4,4,4]。(给该iterator里设一个变量index,index没超原数组长度hasNext()就返回真,每次next()输出index所指数的下一个,如果index所指的变为零了要index += 2);
5. c++里struct和class的区别;
6. 什么是函数的overwrite和overload;
7. 什么是set,怎么实现没用重复元素的;
8. 什么情况下用BFS,什么情况用DFS;
9. 给你两个点,写程序求交点。(很简单,感觉主要考察面向对象的思想和代码结构的整洁);
10. 判断链表是不是有环。(CC150经典题,快慢指针不解释);
11. 删除一个链表的倒数第四个点。(先把一个指针后移三个,然后和head一起往后移动,直到靠后的指针到结尾,删除靠前的指针);
12. 用25,10,5,1分四种硬币凑n,列出所有组合。(CC150原题,不同的是不只要求总共的组合,还要一一列出来,确定某一种硬币使用个数,然后递归);
13. merge k sorted array。(priorityqueue,O(knlgk));
14. copy带random指针的链表。(用hashmap记录已经新创建的点);
15. Two sum,找出数组中sum为给定target的两个元素(LC原题);
16. 判断字符串是不是回文;
17. 一个公司要存一堆电话,如何存能够使“判断一个号码是不是已经存在”的操作最快。(我说用trie tree,他说要是内存装不下那么大个tree咋办);
18. 一个巨大无比的字典文件,给一个输入单词字符串,怎么样找出字典里所有包含那个输入字符串的单词。(大概是分布式系统的东西,当时面的时候还不会);
19. 如何用两个queue实现stack;
20. 如何找出一个数组的最大值和最小值。(有没有操作次数少于2n-2的方法);
21. 如何在不用加和乘操作符的情况下实现对一个数乘以7的操作。(左移三位再减自身);

六。
其实找码农工作远没有想象的那么难,小弟我算着本科四年和研究生两年都没怎么上过计算机的课不还是会有offer,大家要有信心。不过有句话,“有些人的努力程度之低,根本轮不到去拼天赋”,题还是要刷的,贵在坚持。
最后祈求Google那边会有奇迹发生,另外祝在找工作或者将要开始找工作的各位都能好运不断、捷报频传!{:4_112:}
  • 58
50条回复