也谈谈技术面试

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

面试就是在短时间内对应聘者的经验、能力、潜力进行评估。我一般比较关注这些方面:(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 阅读(3387) 评论(18)  编辑 收藏 网摘 所属分类: [ 法 ]管理思想

  回复  引用  查看    
#1楼2006-04-02 14:02 | Dflying Chen      
有些大的企业还是需要“精通”的人的,他也会帮助员工“精通”,同样会适当考虑员工的职业发展规划。
而大多数的中小企业只需要熟练的工人,能够胜任本职工作即可,他只能帮员工“熟练”,不会想如何帮助员工发展,员工想发展的话只能选择跳槽。

  回复  引用    
#2楼2006-04-02 14:39 | 卫[未注册用户]
我从来没被面试过, 只有面试别人... 哈哈.
  回复  引用  查看    
#3楼2006-04-02 14:51 | Dflying Chen      
@卫
佩服,兄台毕业后就开始创业了?

  回复  引用  查看    
#4楼2006-04-02 15:28 | aspnetx      
如果我们公司的主管也象你这样问就好了
东北这边的面试还是很不正规的

  回复  引用  查看    
#5楼2006-04-02 15:54 | montaque      
其实我觉得面试,第一个问题是你最擅长什么,然后你再问他擅长的内容. 比如设计模式,有些人可能state模式没有用过,其他的倒是很熟悉,你可以问问他他熟悉的,比如工厂,构建,责任连等等
  回复  引用  查看    
#6楼2006-04-02 16:22 | birdshome      
人品好,善学习,有激情,就是比较完美的应聘者了
  回复  引用  查看    
#7楼2006-04-02 16:53 | 大洲      
楼上正解.
  回复  引用  查看    
#8楼2006-04-02 17:07 | Dflying Chen      
确实正解,但是面试好像很难考察出来啊……
  回复  引用  查看    
#9楼2006-04-03 00:46 | 快乐永远      
1.聪明, 2.在岗位上能创造价值 够了


聪明而不能创造价值的,比如那些学院派的喜欢钻些鸡毛蒜皮边角问题而对经常涉及的一些技术含量不高的东西却看不上的那些....不能用.

在岗位上能创造价值而不聪明的更可怕,一般是那些只能或非常喜欢大把大把复制代码的,这些人习惯于遇到问题先问别人.....不能用,缺乏自主解决问题能力.



同意楼主的说法,说自己精通什么什么的....基本上可以喀嚓掉.........


我面试别人的次数跟被别人面试的次数几乎一样(6/7),这里面感觉,面试没有尺的.

反正吹大牛的不要就是了.........

  回复  引用  查看    
#10楼2006-04-03 08:22 | smalldust      
数列的那个问题,真的是不知所云。不知道是不是原题是有格式的?
  回复  引用  查看    
#11楼2006-04-03 10:33 | 装配脑袋      
数列那一道,我编出来怎么不一样?

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

  回复  引用    
#12楼2006-04-03 11:35 | tototo[未注册用户]
哈哈,看来我的确不在适合技术了。不过也没有再去应聘开发了。

问某些技术问题,我最喜欢答的是,在某某地方找下,与某某类似吧,工作中没有用到,所以不了解。

对于WEB界面要求很复杂的,或者某些功能要求短时间难做到的,我都会先想从简化方面入手,努力说服客户用别的解决方案,万一客户很固执,那就会首选商用组件,然后是选开源的。呵呵,自己去研究开发??大概刚工作两年的时候我会去选择自己开发,现在基本上把这个放在最末位了。看来我太懒了,还是老实点去写WORD,visio这些简单的西好,写的东西也是给技术IQ“不发达”的苯人看得,哈哈。。

招人主要看人品,诚实+激情。 技能方面主要看解决问题的方式和能力。
直接问那些教程化的技术问题,还不如提个要解决的实际问题,问他对于这个问题有哪些解决方式,可能会用到哪些技术点,觉得最好的方案的理由,还可以给他加些难题等。。。。。。不过问这些发散性的问题,也要看你有没有这个发散性思维的习惯了。
问这些问题,你也可以从别人的思路那学到很多有用的东西呢。





  回复  引用    
#13楼2006-04-03 12:36 | chill[未注册用户]
关于机试,是不是太武断了一点.
如果用ide,半个小时左右就搞定了吧?
public class Message
{
private string m_message;
public Message()
{
}
public Message(string strMsg)
{
this.m_message=strMsg;
}
public void Show()
{
//打印
System.Console.Write(this.m_message);
}
}
一共花了5分钟写完.
其他就不写了.其他还有什么?

  回复  引用    
#14楼2006-04-14 16:33 | 阿里[未注册用户]
如果我碰到不会的 现在的我会直接说上Google输入某某关键词查找

大部分国内企业需要的只是熟练的代码工人 谈不上研究 也没有研究成果

  回复  引用    
#15楼2006-08-24 11:02 | 刘朝[未注册用户]
看了大家的讨论,,本人也从事asp.net开发,主要常写一些xml.xslt,以及javascript脚本,和 sql代码。本人在北京想换工作,
有意者联系我:13426068632

  回复  引用    
#16楼2007-01-11 14:42 | 无心[匿名][未注册用户]
我的数列解(循环非递归)
protected string process(int N)
{
string[] msg ={ "非法输入", "数据太大,不好处理", "产生异常" };
string retval = string.Empty; ;
if (N < 1) return msg[0];


long num = 0;
long t = 1;
for (int i = 0; i < N; i++)
{
num += t;
t = t * 2;
}
if (num < 1)
return msg[1];
long[] lArray;
try
{
lArray = new long[num];
}
catch
{
return msg[2];
}
for (long i = 1; i <= N; i++)
{
long d = (long)Math.Pow(2, i);
if (d < 1)
return msg[1];
long r = d / 2;
for (long j = 1; j <= num; j++)
if (j % d == r)
lArray[j - 1] = i;
}
long n = 0;
for (; n < num - 1; n++)
retval += lArray[n].ToString() + ",";
retval += lArray[n ].ToString();
return retval;
}

PS:T(1)=1; 应该不是T(0)=1

  回复  引用    
#17楼2007-01-11 14:43 | 无心[匿名][未注册用户]
呵呵,修正一个地方:
数组的类型用int而不是long

  回复  引用    
#18楼2007-01-19 11:36 | wzp[未注册用户]
写得不错。

招人只要招适合于自己公司用的,最厉害的不一定是最好的。




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 364831




相关文章:

相关链接: