IT人生

最近这一年,公司的HR和部门经理很少再找我做技术面试了。原因据说是根据统计,我做的技术面试通过率特别低。这个我倒是承认,但是事实上市场上优秀程序员的比率本来就很低。相对来说,我的面试通过率已经是偏高了。当然对这个问题,不同的人见仁见智。你让我把关,我就尽心尽责无愧于人。至于标准是否严苛则尽可商榷。刚好微博上Ben又在谈面试的事情,所以动了一下心思,把技术面试里常问到的一些问题列罗出来供批判。

这个面试一般都是针对资深的Web开发职位,应聘者一般会满足以下条件之一:

应聘者声称有5年或者以上的开发经验
或者,应聘者要求的月薪在12k以上(成都税前)
数据库
有一个很简单的应用场景:某大学的学生选课系统。不考虑选修必修,每个学生可选多门课程,每门课程又有可能有多名老师提供授课。学生在选择课程的同时必须在该课程可选授课老师之中指定一位。请设计一个关系型数据库结构,无需细到字段数据类型,仅关键字段和表关系即可。注意某教师是有可能在同一学期教授多门课程的。

面试时我会提供纸笔供应聘者使用,这里完全不苛求应聘者的ER图可以完全符合规范,仅仅简单的表对应关系即可。但是有一半以上的应聘者没有办法在指定时间内画出能够满足需求的ER模型。即使以提问的方式给予提示也不行。

如果能够做出正确的数据模型,那么一般我会有两个方向。对偏业务类型的开发职位,我会对这个场景进行衍生,比如需要考虑选修必修的情况,需要满足学分要求的情况,以及每门课程存在可用名额的情况。要求应聘者针对这些情况对数据模型予以扩展。

如果是偏infrastructure的开发职位,会简单提供一些报表场景,比如如何从现有模型中取出最受欢迎的教师的排名等等。针对这些场景要求应聘者写出对应的SQL语句,这个里面可以看出很多问题,经受过严谨关系型数据库操作训练的应聘者的基本素质可以体现的很好。同时针对某些场景,要求应聘者设计索引或者提供冗余优化方案。对索引的工作方式有一些基本概念,比如我曾经问一个应聘者:“如果如你所说索引这么好,那为什么我们不在所有字段上建立索引?” 这问题他思索良久最后告诉我从来没想过。另外前不久还问过另外一个应聘者:“对于写操作,非主键索引是不是一定会影响写入速度?” 这些问题不一定要能完全答对,但是要让我能看出你有良好的数据库基础知识来支撑你的“5年工作经验”和“精通各类关系型数据库”。不知是否过于苛责,大家可以拍砖。

Web开发
HTML基础总要有点吧?HTTP协议总要懂点吧?至少能给出几种HTTP Response状态码,了解Post和Get的区别,明白HTTP下状态保持是怎么实现的。Cookie和Session的基本工作原理。不是纯粹前端开发工作的话,基本的js总要可以懂一点吧。做JSF或者Asp.Net WebForm的程序员,多少总应该了解一下viewstate怎么实现的。

这里面的知识点很多,所以问的问题也都不怎么固定。一般是应聘者谈到自己熟悉哪些东西,那么就引申进去多谈一谈。某些问题没有回答好或者细节有瑕疵都不重要,重要的是要能给人信心这是一个对技术有热情,琢磨过问题的技术人员。比如最简单的一个例子,很多web程序员难以回答好这个问题:“一些网站或者论坛的登录框下面都有‘记住我’这样的一个checkbox以保证用户下次访问时无须重新登录,请问这是如何实现的?” 能够比较完美回答好怎么实现这个功能的应聘者数量并不多。最起码不要告诉我把用户名和密码放在cookie里吧?

编程语言与框架
公司的技术路线根据产品不同有很多选择,不过比较多的还是javaEE和.net。这两个方向我都有过一些开发经验,有时可能会针对一些语言特性问一下,但是多数情况下都不会在语言问题上纠缠。

谈到框架,现在Java开发者的简历上,要是谁没写个“精通SSH”简直都不好意思跟人打招呼。所以基本上我会希望应聘者给我介绍一下SSH这仨框架都是做什么的。能用几句话给一个没接触过这些框架的程序员介绍清楚它们是干什么用的,那我觉得基本上就比较靠谱了。再牛一点的,能解释清楚为啥要做IOC,给一个除了IOC,别的解都很丑陋的使用场景;或者能讲讲Spring AOP的两种实现原理,那我就觉得可能这15w年薪大概能找着主了。

当然,一定要写过单元测试。

流程与工具
这个是权重最低的一项了,因为大部分东西都是可以被train的。有过持续集成经验,知道怎么使用svn(能给我普及一下git就更好了),有代码审核经验,能偶尔做做结对儿,对日志监控性能多少有点谱,这要求不高,但是也不低。实在没有,也不影响最终结果。

安全
除了给我自己或者应用安全团队招人,我很少问任何跟安全相关的技术问题。因为我对这个不抱太大期望。如果偶尔遇到一个做过溢出逆向注入XSS……的技术人员,我会马上上21楼把我们的security manager搞下来一起聊,最后把这人从其他团队挖出来。可遇不可求。

味道
整个技术面试,我愿意把它变成一场讨论或者交流,不像HR或者用人经理面试那么严肃。但是味道和感觉这个东西也不可少。一场面试下来,如果应聘者对你提到的任何一个技术问题都没有表现出浓厚的兴趣;如果一个技术人员在8小时以外没有任何对自身技术的时间和物质投资,那么这个人基本上就属于味道不太对。

你可能感兴趣的:(IT人)