作者:lzprgmr
链接:www.cnblogs.com/baiyanhuang
只要是招一个技术人员,不管是初级的程序员还是高级软件工程师,技术上的考核都必不可少。很荣幸作为面试官参与过公司的一些技术面试,从中也体会到了一些东西。 首先,我觉得技术面试是需要讲究技巧的,不是随随便便拉一个技术不错的人就可以,因为面试的过程是双方相互交流的过程,你需要给对方营造一个轻松的气氛,并在不断的提问与回答的过程中,进行“合理的引导”,“适时的追问”与“正确的判断”。
所以我觉得一个公司的技术面试需要有良好的经验传承,不光光只是留来一些题库;也不光光是一句要相互尊重,你代表公司的形象;更重要的如何去主导一场面试,全面、准确的了解对方的能力。一个新的面试官在上场前需要培训一下如何去做到这些,最好能新老搭配带一下,这样,我觉得才是最靠谱的,也是我们之前做的不够好的地方。 一般情况下,软件公司招人总会对这三个方面的能力做一下考核,一是编程语言,二是数据结构与算法,三是系统设计。 编程语言 语言是工具,是一个程序员每天都要使用的东西。在我看来,考察编程语言,不仅能考察一个人对一门语言的理解程度,也能反应一个人的对待知识的态度 - 你会怎么看待一个有10年C++经验但却对这门语言所知甚少的人?恐怕是安于现状,不求甚解。 针对被面者熟知的语言与库来考察其对语言各个特性的了解与应用,最后,让被面者写个程序看看其对这们语言的操控程度。 数据结构与算法 工作5、6年,在我以前的项目中,需要用到数据结构与算法的机会不是很多。我也曾经怀疑,考察算法是不是有必要。那么有必要吗?
我是这么说服自己的: 的确,有些项目,涉及更多的只是调用第三方库去堆彻代码,实现业务逻辑,没有太多的机会去直接的、明显的应用算法,但如果因此而自我设限,难免沦为平庸。
算法,其实考的也是一个人思考问题的套路,一个人的创造力。说句俗气的话,不管你现在做的是什么,如果你具备了这种思维方式,你总能找到地方应用它。或许,以前你所认为的那些没有意义的事情,只是因为你选择了没有意义的方式去完成它而已。 考察一些初级数据结构与算法的概念,别考的太深太偏。准备一些具有“可伸缩性”的算法题,看看被面者如何分析问题,如何分析算法复杂度,以及如何用其选择的语言实现算法。 系统设计 这个主要是考察被面者在面向对象软件设计方面的能力,一般针对高级一些的职位。 可以先了解一下被面者对面向对象设计的基本概念与原则的了解,然后让其谈谈他之前项目中做过的设计;并准备几道可以逐步深入的设计题让其当场设计。哦,别忘了问问他为什么这么设计。
需要注意是,要了解面试者真实的实力,你必须要好非常好的临场应变的能力,善于从面试者的回答中提取有用信息并加以追问。 另外,因为现场面试需要耗费双方很多的时间与精力,所以针对上面三个方面,最好能先进行一下电话面试,做一个大概的了解,这样可以避免不必要的耗费 - 所以,做好电话面试也就非常重要有了:你需要做成尽量准确的判断 - 来,还是不来。