也谈谈技术面试

今天看到首页有几篇面试相关的文章。面试是我最近想的很多的问题,有所思,有所得,从小部门面试的角度谈谈所思所得吧。

面试就是在短时间内对应聘者的经验、能力、潜力进行评估。我一般比较关注这些方面:(1)品格;(2)经验;(3)解决问题的能力;(4)技术特长;(5)潜力。面试时间一般为1小时,笔试+机试+面谈。

下面结合偶常用的一份C++/C#程序员面试题谈谈体会。

面试题一般分为34部分。第一部分是自我评估,第二部分是上机编程,第三部分是领域相关的东东,第四部分是考查能力与潜力的选做题。

1)自我评估

自我评估一般有三道题:

a)请估计你的编码量,在合适的选项上画上√。(机器生成的代码不算)

b)你使用过什么源代码管理工具?(只使用过一、两次的不算,可多选)

c)你习惯使用什么样的开发工具/IDE?(可多选)

主要考查个人经验和品质。如果这一部分胡填瞎吹,在后面会露馅。这里面还能看出一个人解决问题的能力。有一个哥们折腾了半天,问:这个√我在“插入”(word)怎么找不到啊!(偶想:不会copy嘛!)。这种哥们,显然解决问题的能力不强,可以直接拒之。可能会冤枉他,但冤枉的概率很低。

一般来说,偶觉得需要评估拟采用语言及其相关语言的编码量,比如招聘c#程序员,偶一般评估其java, c#, sql, vb.net的编码量。有时候这哥们不会c#javasql很熟其实也不错。

IDE和源代码管理工具评估大概能评价一个人的技术风格。比如,用dreamweaver的侧重于页面,用visual studio的侧重于后台,linux下用vi, emacs, cvs的具有一定的黑客特质,用kdevelop, eclipse/cdt的侧重于实用主义。

2)机试

一般来说,就一个hello world题。主要考察基本的OO设计及编码风格。下面是原题:

C#版:

a)写一个类Message,该类具备以下成员:

·一个名为message,储存消息文本;

·一个方法Show(),打印消息文本;

·一个构造函数,根据传递的字符串,初始化消息文本。

·其它你认为需要的东西

b)调用Message的实例,打印“hello world”。。

C++版:

a)写一个C++Message,该类具备以下成员:

·一个名为message,类型为string(或char*)的私有变量,储存消息文本;

·一个方法show(),打印消息文本;

·一个构造函数,根据传递的字符串,初始化消息文本。

b)写一个程序,通过调用Message的实例,打印“hello world”。编写make文件;make;运行程序。

大家写出来的结果真是五花八门,精彩之极。能在1小时内写出实现功能的C++应聘者不到50%C#的高一些。在10分钟内写出,并且写的让人看的很舒服的,大概只有20%,没有一年的编码经验是写不出很漂亮的代码的。

以前常用一个较难的题:界面上有一条线段,鼠标在线段的附近点击,写一个算法,判断是否会选中线段。发现效果不好,一般人在一小时内搞不定。

3)领域相关

这个和应聘的职位相关。如果招聘网络程序员,偶会让他讲讲几种IO的区别,抓几个包分析分析。如果招聘Asp.Net Web程序员,偶会让他讲讲DataTable, DataSet, DataAdapter的角色与功能。如果他说不会,用NHibernate什么的,那就让他谈谈这方面的体会。这种题目相对开放。主要考查他有没有相关领域的开发经验以及经验的深浅。到这里,不出大差错的话,差不多就可以录用了。当然,如果应聘者较多,就需要比较选择题的成绩了。

4)选做题

选做题是非常开放的题目。基本上分模式、算法、库的考查。

C#版的如下:

(a) 谈谈你对facade模式的理解与心得

(b) 谈谈你对.net framework的理解与使用心得

(c) 想产生一个数列:T(n) = T(n-1),n,T(n-1)T(0) = 1

比如T(3)1,2,1,3,1,2,1

T(4)1,2,1,3,1,2,1,4,1,2,1,3,1,2,1

不用递归有什么效率高的算法吗?

C++版的如下:

(a) 谈谈你对facade模式的理解与心得

(b) 谈谈你对C++ 程序内存管理的理解与心得

(c) 谈谈你对C++ 标准库的理解与使用心得

(d) 想产生一个数列:T(n) = T(n-1),n,T(n-1)T(0) = 1

比如T(3)1,2,1,3,1,2,1

T(4)1,2,1,3,1,2,1,4,1,2,1,3,1,2,1

这些问题很开放。有些人上来能谈的有条有理,这个人大概在这些方面进行过思考过。如果一上来不知道怎么谈,可以诱导他,慢慢的谈出他在这方面的经验、心得和体会。比如谈.net framework,可以问问常用的类,谈谈framework的结构,你觉得什么地方好用,什么地方不好用,怎么选择、试用、使用、扩展第三方库?

对于“精通”。一般来说,在简历中写精通的人90%都是吹牛,直接拒掉冤枉的概率只有10%。就算一个人是真正的精通,那也不是企业最需要的人。企业最需要的是能解决问题,有思路的技术人员,其次才是精通某项技术的技术人员。《.NET方向高级开发人员面试时应该事先考虑的问题》中的题目,一半偶不会用来面试人,一些可能放在选做题里面,一些可能放在领域相关题里面(假设我要招聘这方面的开发人员),一些是用来考察一个人的品质是否诚实,权重不会很大。当然,偶招聘的一般是一般开发人员,不是高级开发人员。:P 不过,对于高级开发人员,偶一般也不会面试这些,偏架构的一般会从《企业应用架构模式》,《without ejb》中选题,还有就是开发过程。偏技术的可以给他一个问题让他解决,或者给他一段IL汇编代码,让他看,或者在可上网的条件下问他一个现实中可能出现的非常刁的问题。


面试(技术面试)别人是一个很恼人的问题。不知大家有什么心得体会?
posted @ 2006-04-02 13:09  xiaotie  阅读(4386)  评论(18编辑  收藏