程序员求职之道(《程序员面试笔试宝典》)
21世纪的前10年是IT技术迅速发展的10年,嵌入式技术、互联网技术等蓬勃发展,程序员,尤其是高级程序员可观的薪水以及程序员巨大的发展潜力使得越来越多的人选择了程序员作为未来的职业。同时,由于计算机技术自身博大精深,涉及的知识面很广,企业在给程序员开出高薪的同时,对他们的专业素养也提出了非常高的要求。每年九月份开始,各大IT企业开始招兵买马,招贤纳士,无数具有计算机专业背景的学生都希望在招聘季能够进入自己渴望的企业,自己喜欢的行业,并且领取一份可观的薪水,寻找一份这样的工作成为每一个求职者的终极目标。但是这些企业的招聘人数毕竟是有限的,像Google、Microsoft这样的行业巨头,每年在中国的招聘计划可能只有区区几十人,如何能够鹤立鸡群,从众多求职者中脱颖而出是每一个IT求职者所渴望的。
通过调查发现,虽然IT业在不停地炒作新概念,例如SOA、云计算等,而且各大IT企业的工作重心也可能大不相同,有侧重互联网开发的,也有侧重嵌入式系统开发的,还有侧重应用性软件开发的,但是在对求职者进行面试笔试时,他们却达到了惊人的一致,都会特别看重求职者对基础知识的掌握能力,重点考核他们的计算机基本知识,包括C/C++、数据结构与算法、操作系统、计算机网络、大规模数据处理等,毕竟这些具体技术问题是有客观答案的,而且计算机技术之间往往都是相通的,这些基础题型几乎是固定的,不管求职者之前技术水平如何,只要能够在找工作前将这些知识理解,做到融会贯通,以不变应万变,必将能在求职中找到一份理想的工作。
董哥,男,中国科学院计算技术研究所2012届硕士研究生,现就职于北京腾讯搜搜。
1、抛砖引玉
找工作的过程是综合实力较量的过程,一个好的offer背后凝聚着无数辛勤的汗水,需要你勤奋,坚持,积累、付出与表现。我以过来人的身份介绍一下自己找工作的经验,希望对师弟师妹们有所启发。但需要注意的是,完全掌握做到了这里提到的几点并不意味着你一定可以拿到一流的offer,我仅是抛砖引玉,点播你,启发你而已,如果想在找工作时得心应手,需要你平时不断积累和总结,领悟其中的真谛。
2、心态决定一切
对于找工作,心态很重要,找工作之前,一定把心态端正。二十年寒窗苦读,几千个夜晚与孤独为伴,最重要的一个目的是找一份理想的工作,从而实现自身的价值,因而我觉得,我们至少应该像准备高考那样,全身心投入到找工作的准备中,将之前所学知识重新温习整理,以便将所有能力能够最大限度地发挥出来,进而向面试官充分展示自己,推销自己。
3、冰冻三尺非一日之寒
关于找工作前的准备,有两个因素直接决定着你是否能最终被录用,一个是项目,另一个是基础知识,这两个中任何一个被面试官相中,均可能拿到offer。
对于项目,不在多而在精,一般的项目,例如普通的管理系统、网站等,面试官几乎不用耗费脑力,一眼就能看到底,没有什么好讲的,最切合也最能引起面试官兴趣的项目往往是与他现在的领域相同或相近,解决的问题的确具有一定的难度且提出的解决方案具有一定的创新点。但遗憾的是,对于大部分毕业生,项目的深度往往不够,毕竟想在研究生短短的两三年时间里面成为这方面的专家,还是比较有难度的,所以这个时候就全靠你的基本功了。
基本功基本上可分为以下几个部分:编程语言,数据结构与算法,操作系统和其它小知识点。对于编程语言,个人认为C语言是必须掌握的,很多公司把C语言作为必考项,例如微软,另外要在C++和JAVA两种面向编程语言中选一个,主要知识点是面向对象编程中的一些基本概念,如:虚函数、构造函数、析构函数、拷贝构造函数等。有一些题目已经成为经典,是必须、一定、非要掌握的,例如:(C++语言)虚函数是怎么实现的?构造函数可以是虚函数吗?为什么鼓励将析构函数设计成虚函数?对于数据结构和算法,这是面试的重点,很多公司基本上只考算法与数据结构,比如微软四面全是写算法(几乎占面试题目的90%左右),这就需要大家平时多积累,多练习。尤其对一些基本数据结构和算法,要非常清楚,比如:单链表反转,Trie树,两个数组交并差集等;对于操作系统,主要掌握Linux里的一些基本概念,比如线程,进程,内存管理,文件管理等,这些也会在面试中出现,一定要好好复习。最后是一些其它知识点,比如设计模式(单例,工厂模式等),编译原理(程序从编译到运行要经历的几个过程)等。
4、修炼程序员之“葵花宝典”
找工作过程中,一些经典的题目,一定要反复推敲,很多题目来自固定的那几本参考书,大家应该好好琢磨这几本书中的题目:
(1) 面试指南类书籍
面试指南类书籍是非常基础的书籍,里面的题目比较经典,常常以笔试或者面试题的形式出现。虽然对于进入好企业帮助不大,但是应付一般的小企业,这本书可以作为一定的参考。
(2) 《编程之美》
这是一本实战书,任何找过工作的人都知道,很多笔试面试题直接来自该书,值得各位找工作的应届生反反复复地阅读和讨论。此外,该书中有些题目难度过大,从找工作角度考虑,可暂时不看。
(3) 《编程珠玑》
该书分为一二两本,但从找工作角度考虑,第二本可暂时不看。第一本书主要是软件设计思想,书中的例子已经成为百面不厌,百考不厌的经典题目,比如数组循环移位,随机采样算法等。
(4) 《算法导论》
大师级的书,几乎是找工作必看,该书对各种常见算法有很深入的讲解和详尽的证明,并对每个算法的起源,动机和求解过程有较多的涉及。
(5) 《深入理解计算机系统》
该书从程序员的视角介绍了计算机系统。几乎囊括了计算机的各个技术,包括数据表示、C程序的机器级表示、处理器结构,程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、网络编程和并发编程等。该书中提到的一些知识点,常作为面试题目出现,比如Linux信号量,虚拟内存管理等。
(6) CareerCup.Cracking.the.Technical.Interview.Ed4.2010
该书尚未在中国大陆发行,但在网上可找到非常清晰的电子版,本人在此留下一个链接:http://ishare.iask.sina.com.cn/f/12828753.html,仅作为学习之用,请勿用于商业目的。该书中的题目全是常见题,相对于上面基本书,其题目更新,技巧性更强。据说,有人借助此书拿下hulu(hulu是美国最知名的视频网站之一)的offer。
5、八面玲珑
关于找工作的技巧,这个主要介绍两点,一是回答问题的技巧。对于项目,主要回答点应该是遇到的挑战和解决问题的思路,对于算法问题,要从复杂度高的算法逐步向复杂度低的算法过渡,第一眼见到题目,可先将自己想到的思路说出来(比如O(n2)复杂度),然后不断优化(比如O(nlogn)复杂度),最后尽量得到一个最优的算法(比如O(n)复杂度),这时候可能要在纸上写出来,一旦你没有了思路,应该主动要求面试官加以提示。另一个是交流技巧,这里指的是同学之间的交流,这一点非常重要,每当前一个同学面试完后,应该主动跟他交流,主要打听一些个人收获和心得,尤其是别人的失误,应该尽量避免,因为面试官一天要面试众多的求职者,很可能会对不同的求职者提出相同的问题。
6、多多益善
最后是offer的选择。offer原则尽量多拿一些,以便给自己留一些选择的余地,至于怎么选择offer,这是个人的问题,每个人侧重点不一样,因人而异,但我觉得适合自己的就是最好的,没必要和别人进行比较。
技术的更新永无止境,作为一名即将毕业的学生,要时刻保持清醒的头脑,不断地学习,不断地充实自己,只有这样,才能在激烈竞争中不被淘汰,二十年寒窗苦读,最重要的一个目的是找一份理想的工作。梦想马上就要实现,希望学弟学妹们再接再厉,像准备高考那样准备找工作!