你是想搞C++还是Java?选定一门语言后,多看一些这方面的书。C++,不用说了,《Effective C++》,《More Effective C++》,《Inside The C++ Object Model》等等。Java,最好能看点虚拟机相关的。尤其是Java虚拟机的内存管理。以及多线程、线程池、设计模式等。问题来了:学C++好还是学Java好呢?语言争论每天都在发生,真的好无聊。建议按照方向和兴趣来选择,不靠谱的说:如果是想做大型游戏开发、底层研发、系统研发、驱动研发等等,就选用C/C++。如果是想做网站开发、网络研发、上层开发、Android开发等等,就选用Java。顺便说一下,有空可以学学Python。
学好算法。这个有两条路,最好是并行,那就是看书和做题。看书的话,主要有《算法导论》、《算法》(Robert Sedgewick著)、《算法竞赛入门经典》、《挑战程序设计竞赛》找一本认真看,认真思考。证明过程可以不看,但是算法思想最好能懂,以及实现,最好能在纸张上写出来。复杂度总要知道吧?研一的时候,我就把算法导论上的很多算法,都自己亲自coding了下。特别复杂的数据结构,比如红黑树、B树,没空就别搞了。互联网面试一般都不要求的。主要是排序、查找、简单DP、贪心、图算法和搜索。 根据身边同学的面试经验,二分搜索和快速排序,是面试常备了。看书的时候,如果有 时间,可以思考几个问题:这个算法的时间空间复杂度,各是多少?如何分析?工程实现里,都有哪些trick?如何加速?这个算法可能用在哪些方面?有哪些应用?你比如说吧,求交集的算法,就广泛用在倒排索引、新浪微博共同关注、计算Jaccard系数等 等上。除了看书,还有就是很重要的:刷题啦。主要有poj,zoj等。找一个网站,认真刷一些题目,踏踏实实的,别浮躁。
如果实验室比较牛,基本上忙项目就足够累死累活了;不过做了相对给力的项目,对于找工作,还是有很大帮助的。基本上不用怎么愁了。 如果老板这儿没项目呢?如果实验室比较水,那就尽量去实习。大公司的实习经验很能给简历加分。如果老板不让你出去实习。既然实验室很水,说明自由时间 比较多,那还是可以干很多事。比如说,github上就有很多开源项目,你可以选择一两个著名的,阅读源码,然后尝试自己也参与进去。说几个我比较感兴趣的开源项目吧:redis,spark。
如果能在读研期间做到这里的一点或者几点,到时候甚至不需要翻《编程之美》或者leetcode就毫无压力啦。 最后说几点个人感受。算法牛,项目牛,长得又帅,又精通很多语言,这种人,是不多见的。也就是说,你想拿一个好offer,一般只要有一两点突出,就可以了。互联网面试,个别面试官,一般都是要考查(考查?考察?这两个词有什么区别?考察是调研、研究、分析的意思)算法的。你研一的时候准备,看书做题,总比研三的时候抱佛脚来的好吧?况且,算法的学习,也不仅仅是为了面试吧?可能是受益终身的。或者,吹牛皮装逼作为谈资,也是可以的。别轻易说。到时候,你会发现,选择比你想象的多。也有可能比你想象的还少,为什么?就看你有没有做到我上面说的这些了。