一、提问之前的准备
首先,最重要的是,你自己一开始就应该想清楚:
1. 需要新员工完成什么样的任务?
2. 怎样的人能完成这样的任务?
3. 哪些途径和方法可以发现这样的人?
只有明确这些根本性的问题,才能正确高效地完成面试。
二、提问的原则
假定你对上一节的三个问题,已经有了清晰的想法,那么接下来就可以设计如何提问了。
有一些提问的原则,是你应该遵循的:
* 每一个面试问题都有明确的目的。你不仅自己了解,还能向其他面试官解释清楚。
* 多提一些开放性(Open-ended)的问题,而不是那种用Yes/No就可以回答的问题。这样做使你有机会与面试者展开讨论,并且提出后续的问题,尽可能多地了解对方。
* 不要问宗教、家庭、健康、个人隐私等方面的问题。
* 不要问太复杂的问题。因为面试者没有太多思考时间,所以无法周全地回答,你也就无从判断他的能力了。
三、与职位相关的问题
为了确认面试者是胜任的,你可以问一些与职位相关的专业方面的问题。(不过通常来说,一次面试不足以看出一个人的专业能力。)
比如,你的招聘职位是系统管理员,你可以问"如何快速地在50台机器上部署Linux?"(提示:正确答案不是刻录50张安装光盘。)
另外,你还应该向面试者了解他的过去,因为过去是未来的最好预测依据。不过,提问的重点不要仅仅是他过去的成果,更要关注在当时的环境中,他是如何决策和实施的。
四、考察综合素质
因为人是会发展的,所以某种程度上,面试者的综合素质要比他的专业能力更重要。
所以,具体的技术问题(如何调用API、什么是设计模式、
编程语言的语法等等)可以少问一些,更应该关注面试者的事业心、对工作的热情、进取心、自律能力、毅力等方面。
下面是一些典型问题:
Why did you get into development?
你为什么
开发软件?
How many technical books did you read in the past year?
去年你读了几本技术书籍?
What was your favorite technical book in the past year? What did you learn from it?
去年你最喜欢的技术书籍是哪本?你从中学到了什么?
What websites do you read regularly, related to development?
平时你经常访问哪些编程类网站?
Do you maintain any open-source projects?
你有自己的开源项目吗?
Do you code in your spare-time?
业余时间你编程吗?
Do you love programming, or do you do it for the money?
对于你来说,编程是一种爱好,还是一种谋生手段?
Have you accomplished anything important in your career yet? Do you want to?
你的职业生涯之中有什么重要的成就?它是你主导的吗?
What would make you feel that you have done something important?
什么事情会让你很有成就感?
五、考察理性思维
某些情况下,你可能需要了解面试者的分析判断能力,看他能否全面地思考问题、客观地评价自己。
那么,你可以依次提出这样三个问题:
What's your favorite programming language? Why?
你最喜欢的编程语言是哪种?为什么?
If you could add one feature to your favorite language, what would it be? Why?
如果允许你为这种语言加一种功能,你会加什么功能?为什么?
If you could remove one feature from it, what would it be? Why?
如果允许你取消一种功能,会是什么功能?为什么?
这里的重点是,让面试者从正反两方面评价一件自己熟悉的东西,看看他的思维是否片面。答案无所谓对错,只要面试者有一个明确的立场,能够从正反 两方面说出令人信服的辩护理由,就可以了。比如,某个软件的口碑不好,但是面试者说他很喜欢,而且说得出一大堆理由,清楚地解释了这种软件的优点和缺点在 哪里,这样就很好。
你还可以把这些问题,套用在其他东西上面,比如操作系统、文字编辑器等等。
从程序员到架构师
前两天跟着项目经理参加了一个面试。虽然不是第一次参加面试,但是还是有点紧张:)
我觉得我们面试的题目已经基本的不能再基本了,但是还是找不到一个合适的人。现在真的成了一种普遍的困境,很多人找不到满意的工作,很多公司找不到满意的人。
闲话不多说了,说说我们的几个题目吧。同时也说说对即将参加面试的兄弟的建议,从一个面试者的角度。
第一个题目:自我介绍。
自我介绍,几乎是每个面试的必备的题目(99%以上)吧。但是,我仍然遇到非常多的人连这个题目都“不准备”。我说的是“不准备”,而不是“准备的不好”。这个题目要准备的出色,是比较难的。我们是外企,我知道很少参加外企面试的 兄弟参加外语会紧张,特别是刚开始。所以会出现这样的开头:“Thank you for giving me this oppertunity. It’s my honor to talk with you. The following is my self-introduce”。没关系,面试官会理解你,但是,你要背熟,至少要背完。我遇到过好几个连自我介绍都没有背完的,你说怎么会有心情继续!
通常,很难靠自我介绍给你加多少分。但是自我介绍给你减分却非常快,快得出乎你的意料。第一,如果自我介绍没有准备充分,说明你对面试不够重视,当 然面试官也会觉得自己不受重视;第二,如果自我介绍没有条理,说明你的总结能力不够;第三,如果自我介绍和简历里面有哪怕一点点的冲突,说明你的人品有问 题,不够成熟,或者不够细心。一般来说,说明自己的姓名,年龄,
工作年限。再说一下上一家公司就职期间的一两个项目就好了。项目这块是重点,不要云山雾 罩,如果你里面有太多的术语,面试官多半是不了解的,除非你们在一个非常相近的领域。说的越简单易懂越好。
第二个题目:你最近在读什么书?或者你毕业后都读过哪些书?
这个是很难作弊的题目。你读过什么就说什么,千万别吹嘘。如果真的没读过也就说没读过好了,如果读得一知半解,自己衡 量,碰上面试官读过那本书可能会以为你不诚实,或者至少自学能力差。人文类的书也可以说,但是只提一句,看面试官的表情再说。如果面试官一脸茫然,见好就 收,不要企图用这个时间向面试官灌输你关于
文艺复兴的认识。多说一些经典的书,当然前提是你要多看书。或者你实在没看过什么书,也可以说经常上的网站和论 坛或者邮件列表。CSDN这个年头最好不要重点提,因为大抵专心做事的没有多少时间泡在上面。
第三个题目:你认为OO和面向过程的区别是什么?(OO有哪些特点?)进而,多态是什么意思?能不能写一段代码展示一下多态?
这个题目的关于多态的部分是我们项目经理的保留题目,所以别人跟他一起面试通常会跳过这个题目。或者问完了OO的特点,就转过身用期望的眼神看着他?他也就知道该自己了:)。这个问题很基本,OO的特点基本上都能回答上来。至于和面向过程的区别,却比较难回答,但也很难出错:)仁者见仁,智者见智。
多态,我觉得是OO里面一个很基本的概念了,从某种程度上过去我们有些过于强调多态和继承,甚至有说法说理解了多态就理解了OO。写代码的部分,能完全没有错误的很少。不过也减不了多少分,但是要是完全没有体现多态就不好了。
到此为止基本上是个
分水岭,如果前三个问题答得好,后面多半不会为难你了。如果答得特别不好,后面的也不会为难你了。
第四个题目:你最熟悉的设计模式是什么?能不能随便找其中一个画个
类图或者序列图或者协作图?
这个题目我几乎每个面试都可以问。因为几乎每个人的简历里面都回写上“熟悉OOD”,后面紧跟着“和设计模式”,下一条则是熟悉UML。对于大多数 人,所谓的熟悉设计模式不过是Factory(而且是简单工厂,而不是GOF所说的工厂方法或者抽象工厂)、Singleton(千刀万剐的设计模式,被 最广泛误用的模式之一)、Observer(因为jdk里面有Observer和listener)、MVC(好有名啊,但是你问到C的几种用法和适用情 况就傻眼了,所以我也几乎从来不问)、Visitor(不知道为什么这个也这么出名)。
画类图,绝对不是要求背过GOF的书上的原图。只要差不多能反映模式的含义即可,因为我也记不清楚那么多经典图。顺便会问一下这个图里面的几个箭头表示什么。以经常被选中的Factory为例,要能看出返回的是接口(不管是那种工厂模式,除了简单工厂)。
第五个题目:OO的设计原则能说上几个?随便找其中一个说说。
这个题目用的比较少,一般是前三个题目答的比较好,所以有兴趣继续聊聊稍微深入的话题。或者前面的问题时间太短,用来占用时间:)OO的设计原则有很多,也不要求局限于bob列出的OCP、DIP、SRP等等。像什么面向接口编程啊、封装变化啊等等都可以说。可是就这样能列出一两个的很少,能进一步说两句的就更少了。
说了半天,我希望这是我们公司遇到的特殊情况。如果国内的程序员真的这么不禁面,实在是一个不好的事情。我曾经跟国外的一个实习生一起做一个项目,他所表现出来的素质比我不知道高多少。我们公司虽然在软件行业没有什么名气,但是开发实力在全球还是很靠前的。公司正在把很多的开发移到中国来,但是从我们的面试情况看却很不乐观。
本回答被网友采纳