程序员面试

来源:互联网 发布:英文论文润色软件 编辑:程序博客网 时间:2024/04/20 07:28

因工作需要前段时间大概面试了10人次左右的开发人员,主要是 Unix下C/C++程序员。说一下面试的一些经历和心得,有些确实是我之前没有预料到的。我并没有什么面试经验,四年前毕业时面试过一次,此后没再被面试过也一直没有机会去招聘。所以当我第一次面试别人的时候还是有点紧张的,很担心自己能不能在几十分钟的时间里面判断出一个人是否合适。

首先应该说面试的时候应聘者是处于劣势的,先不说自己是来找工作的,算是“有求于人”。从技术上讲,面试官通常是问跟工作内容相关的问题,或者是他自己擅长的领域这对应聘者也是不公平的。所以作为面试官应该注意对方的反应,不要想到什么问什么,对方不了解或者明显不可能回答的问题就不要问,非要问到对方哑口无言以证明自己水平高其实不但没有意义也是没修养的体现。另外面试时提问题,如果对方回答不出来,或者回答错误,除非人家主动请教其实是没有必要去纠正甚至解释的,这样浪费时间,对于应聘的人来说理解这一两个问题也提高不了什么实际水平。当你需要拒绝一个人的时候,你需要让他明白你是在拒绝他,最好不要说让他回去等通知之类的话,直接说他不适合这个职位人家也能接受,但是作为面试的主导者,有义务让面试愉快地结束。

大部分情况下,面试时问的技术问题都是工作中要用到的知识和简历的交集,就是工作中要用到的简历上也写了的才会去问。只要你会的东西都可以写在简历上,但是最好不要夸大其辞。很多人简历上出现的最多的就是“精通”,无论是C++还是unix都是精通。其实这是比较忌讳的,特别是C++这种复杂的语言,技术细节多不胜数,别人随便一个问题都可以把你难倒。而且如果你写精通,但是连基本的问题的回答不出来的话会给人不诚实或者说不知天高地厚的印象。我大概面试了有5个“精通”C++的人,但是下面几个问题没有一个人全部答对:

1、T是一个class,T a=b;和 T a; a=b; 有什么不同?
2、重载T的赋值操作符时参数和返回值分别是什么?
3、class T1有一个char成员变量,class T2有一个char成员变量还有个void f();成员函数,在4字节对齐的情况下,sizeof(T1)和sizeof(T2)分别是多少?
4、class T
{
public:
void f1(){...}
void f2()const{...}
 
};
问f1和f2的区别?
 
 

我个人觉得这算是C++基础的基础了,如果连这些问题都搞不清楚的话你说精通真的是惹人笑。可事实就是,理解这些问题的人都不会说自己的C++很强,他们会知道这门语言的最大缺点就是太多细节了。unix也是,有个人说自己的兴趣和特长就是做unix的底层开发,并且号称对多线程、进程通信都有相当的经验,可是连unix内部命令和外部命令的区别,fork的返回值等都弄不明白。

简历要写的诚实,面试时也一样,不会的问题就直接说不会,不要避重就轻,想转换话题蒙混过关。精明的面试官会换个话题这时你已经失败了一半了。遇上喜欢钻牛角尖的,非要打破沙锅问到底,最后你还是要说一句“不知道”把气氛弄尴尬之余也是留下了不诚实的印象。相反,如果一开始就说自己不懂,并主动请教,面试官至少会觉得你这人诚实、好学。除了对于技术问题要诚实外,你还应该表现出对这分工作足够的诚意,没人愿意找一个半年就会离职的人,所以你应该让对方知道你为什么离开上一家公司,为什么来这里应聘,你愿意在什么环境下工作等。

除了诚实之外就是自信,我有两个鲜明的对比,同样都是一半以上答不上来,第一个是神情黯然直接主动放弃,说他回去学习学习再来;第二个却显得很自信,说对这份工作很有兴趣,是自己喜欢的行业,高手这么多过来也能学到很多东西,并且表示对薪水要求不高,最终录用了后者。有时候并不一定能找到那么多技术基础好的人,对于刚毕业不久的人,只要有足够好的心态和学习能力其实也是很好的。面试时切忌骄傲和自卑,骄傲的人往往不会塌实做事,自卑的人通常难以沟通。只要有选择的余地,都不会要这两种人。

另外对于薪水,我个人认为如果是换行业的话能持平就不错了,如果是同行业的话肯定要有所进步,所以你要是不好意思开口要多少工资的话就告诉对方你现在的薪水吧:)

当然有时岗位确实跟自己不合适,比如对方只想找一个有点技术基础的新手,做一些技术含量不太高的活慢慢培养,而你无论水平还是经验都已经过了“菜鸟”的阶段,这时就趁早撤吧。。。

原创粉丝点击