在国内的现状就是这样的:由于IT行业人员需求量大,而且平均工资水平也还过得去,所以有大批的人才虽然从性格、爱好、综合素质等多方面来看并不适合这一行业,但是出于就业的考虑,也加入了这一行。
在上一家软件外包公司,我参与了3年的毕业生招聘工作,就是说,招聘部门负责面试综合能力,我来负责面试技术。中国的高校发展参差不齐,所以我明白我不能过分苛求应届的毕业生要有某某项目的实战经验。于是乎,我对毕业生的考察以课内的基本功为主。
数据结构:
第一题:没有指针机制的情况下,如何实现链表结构?(只有20%左右的人能够回答出使用数组,其中又有一半的人是蒙的而不知道如何实现。)
第二题:哈夫曼编码的作用是什么?(大约60%的学生能够提供正确的答案。)
第三题:列举出你所知道的排序算法的名称,仅仅是名称就可以?(大约90%的学生回答出了冒泡排序;有70%的学生同时回答出了插入排序;又有20%的学生同时答出了快速排序;在我的印象里,几乎没有人能够提及谢尔排序、归并排序和堆排序等等。)
操作系统:
第一题:请解释一下什么是进程死锁?(令我吃惊的是,大约只有40%的学生能够让我确认他正确理解了进程死锁。)
第二题(如果你正确回答了第一题的话):最常用的避免进程死锁的方法是什么(提示:教材中所讲解过的)?(只有10%的人能够想起来PV信号灯)
第三题(如果前两道都答对的话):请解释一下操作系统的内存分页管理机制?(要求不高,能够提及局部性原理即可,但是只有零星几个人能够通过)
数据库原理:
第一题:请列举出数据库表设计原则中,都有哪几种范式?(大约60%的人能够说出第一到第四范式)
第二题(如果答出第一题的话):其中那一种范式又叫做正规范式?(只有20%的人回答是第三范式,其实说第三范式也不准确,不过马马虎虎就算过了)
C语言:
第一题:在struct中可以定义属性,但能否同时定义函数?(当然不可以,否则不成了class?这道题难住了40%的学生)
第二题:函数能否作为另一函数的参数?(呵呵,我相信很多人听到这个问题的时候都蒙了)
其实我从心里最想问的问题是:你们大学4年都学什么了?
我在上大学期间绝对不是什么好学生,在班里排名中等,逃课作弊不在话下,所以对不用功的学生绝对没有仇视心态。不过,我的同学当中,就算最不用功的学生也会非常用心的去听数据结构课程,因为我们都知道:我将来想干这个行业,就得指着这个吃饭啊。我们公司的生源学校也不全是二三流的学校,也包括了几个211工程中的国家重点院校。
不过,在面试的学生中,有两类人回答问题的结果不错:一是考研失败的学生,因为这些内容他刚刚复习过的(课程年了两遍,效果当然不同);二是工作几年之后又读了硕士的研究生毕业生,因为这些人在读研的时候更清楚自己想要学些什么。
我曾经面试过这样一个研究生毕业生,上面的所有问题对答如流,于是,我稍稍来了一点比较邪恶的:
问:C语言,现在有a, b两个变量,想把它们的值交换过来,有什么方法?
答:比较通常的做法是使用第三个临时变量,不过使用“异或”更有效率。
回答完这个问题之后,我告诉人力资源部门:这个人应该高于普通研究生入职标准2000元的水平进行招聘。后来我就再没有见过这个学生,很遗憾,可能多给2000还是少了点,要不然就是老板没有批准我的建议。
再说说在职人员的招聘。
由于以前的公司是做业务应用系统的,所以程序员需要天天和数据库打交道,SQL语句经常使用。所以在招聘的时候,我可以不太看重程序员对编程语言的熟悉程度,但是SQL语句必须熟练。针对这点,我编了两道SQL语言的笔试题。题目不太复杂,第一道主要是考group by 和case when,第二道主要是考union。我准备给候选人们半个小时的时间来完成这两道题。但是这两道题可是难住了一大部分前来面试的候选人。以至于我在怀疑这两道题是不是太难了?
于是我将这两道题发给了两个同事来做测试,其中一个是项目经理,另外一个是作为初级程序员的一个小女生。5分钟之后项目经理交卷。15分钟之后初级程序员交卷。两个人提供的答案和我的参考答案几乎完全相同。
有意思的是,后来我通过MSN MESSENGER将这两道题发给了我一个正在读研的师妹。大约半小时之后,答案发送回来。其中第二道题的答案思路非常奇特,我仔细的看了之后,发现不仅能够得到正确结果而且比我提供的算法效率还要高一些!非常遗憾,我最终没能说服她毕业之后来到我们公司。当然,这对她个人来讲不是坏事。
说到算法效率,还有一个有意思的故事:
我们曾经有一次给客户开发一个业务应用系统。系统的报表功能中,有一个关于返修率的报表。在系统试运行期间,发现该报表无法得出结果。后来,我发现,程序员在生成报表的后台SQL语句中使用了函数,在当时的数据量情况下,粗略的估计这条SQL语句执行完毕需要80几个小时!I am shocked by the result!
我只得亲自出手在客户现场进行优化。2个小时之后,将报表的生成时间控制在了5分钟之内。
后来,其他的项目组在对该客户进行别的项目时,也用到了返修率报表。当时那个项目组的人员并不太清楚返修率报表以前的故事,所以委派他们组里的一个小女生来开发这个报表。结果呢?新开发的报表平均生成时间在15秒之内!I am shocked by the result again!
很遗憾,最终我没能在我的部门中留住这个小姑娘——她后来被人力资源的人偷偷的卖到客户现场去了。为了此事,我和人力资源的经理直吵到了副总经理办公室。但是木已成舟,也无可奈何了。