基础知识漫谈(6-2) 作为面试官的一点心得
上一篇关于面试的谈得太多,招聘只好另起一章。
以当前的现状来看,优秀的毕业生会先被知名的大企业刷过一轮,那么,相对不知名的企业招聘负责人要如何找到适合自己公司的技术人才呢?询问过一些毕业生之后,我总结了如下经验。
1. 招聘会上的招聘材料的准备
一场招聘会上公司林林总总,面试者要了解你公司,只有他晃过去的那几秒钟,一张意义鲜明的海报,就特别重要。
很多海报自己设计得漂亮,公司介绍得高大上,愿景理念口号特别响。有用吗?产品们常说的一个道理,做得好是0,符合用户需求才是1。
那么,面试者的需求是什么?下面列一些关心的点,顺序与关注度相关:
a、提供的岗位有哪些
来看看几个例子,文案一:
Java工程师
必须条件
【必需条件】
(1)清晰的逻辑,深厚的编程功底,熟悉设计模式,掌握Java及其相关技术
(2)对技术研究感兴趣,有较强的学习能力
(3)熟练的英文阅读能力,以便迅速掌握最新技术
(4) 熟悉Java 多线程及网络编程
(5)能够适应中短期出差;
【优先条件】
(1)java 后台服务开发经验
(2)熟悉Eclipse插件体系
(3)擅长JVM之上的其他语言(如Scala,Groovy以及BeanShell等)
(4)学习研究过大量开源软件的源码和架构
(5)丰富的报表开发经验
(6)熟悉Linux/Unix操作系统
(7)有工作流引擎相关的经验
(8)有金融行业或者较大项目设计开发经验
再来看看文案二:
Java软件工程师
熟悉掌握Java语言及面向对象思想,熟悉运用各种设计模式
初始岗位:运行平台开发工程师 、图形化开发工具 IDE 工程师 ,技术支持工程师
这两份出自本公司同一场地不同期的招聘会,相隔时间不过月余,后面这份文案的招聘效果,就要好一些。
招聘会上的面试者时间是很有限的,你写得再长,对方也只会提取招聘文案里的关键字,此其一,如果有个面试者停留下来认真阅读你的文案了,太过精细的内容会吓阻他过来面试,就算这上面的每一个要求他都能满足。
由上,我们可以推论得出,其实,文案二也不够好,好的职位要求文案只需要关键字!
比如:
我们需要:JAVA开发 前端开发 大数据工程师 .Net开发
如果希望加上特定的限制,就应该使用特定的关键字,真要考核也不是靠文案排查,最终还是面试官的事情。担心这样表述很模糊么?想想这个问题,如果一个Java开发者不懂其内涵的基本职责,他通过面试的概率也不高吧?
b、福利待遇有哪些
对薪资有底气的,就放上工资,有年终奖绩效奖的,就放上绩效奖。
住宿补助,电脑补助,交通补助,电话补助,用餐补助有什么写上什么。对于老员工来说,补助在工资里几乎无法觉察,而且,很多补助是你有我有大家有,那有什么写上来的必要呢?
可是,这些钱对毕业生来说,很重要,而且人人都不写,就你写了,这就是优势。
就我个人经验,福利里最吸引人的,是包食宿。毕竟一线城市房租贵。
c、公司行业和规模
这方面就没什么好说的,有一说一,唯有一点要注意:不要灌输情怀!
真情怀不是靠说的,说出来的情怀就是又累又没钱给你。
这对于只是看海报来了解公司的面试人来说,是个负面印象,最好杜绝。
2. 一些面试的小小经验
很多人都经历过一些奇葩面试官吧?当自己作为面试官的时候,请意识到对面的这个人以后可能是你的同事。不装逼,防雷劈。
下面提供一套面试的方法论(主要应用在3年以下经验的招聘),基本能把面试时间控制在5~30分钟,而且,自采用这套方法以来,没有失误过。
一般而言,面试的过程是笔试(可省略)->机试->技术面->人事面。
第一个前提,每一个步骤都要发挥它应有的价值,比如笔试,就应当划分一个严格的分数线,针对招聘目标区分档次。
第二个前提,你和面试者的时间都很宝贵,为了照顾对方的面子而进行下一轮面试其实是伤害,双方都很尴尬的,有这个时间不如提供职业咨询和建议。
在笔试和机试部分,达不到要求的,可以考虑按分数直接谢绝,如果担心误伤(毕竟有些笔试题出题意图就很诡异),可以考虑把分数线降低。
技术面部分,请确定你的招聘目标,是专研技术的研究者?还是走上市场的现场实施?对于不同的面试者,不要提出和你要求无关的问题。
如何筛选问题?对外包面试人提问spring的aop实现原理,就不太合适,因为你不需要他去研究spring,而应当偏重在问题解决上,比如JVM每隔几天就会因为内存溢出挂掉,要要从哪里入手解决。我会把我的问题划分为三个方面:
基础类,框架原理类,框架应用类。
假如面试的是研发人员,基础类和原理类就属于必查,实践类就属于加分项。
基础类问题:
每个类型都可以继续往下细分,这里以基础类作为讲解,我会提三个问题:
1、什么是面向对象
2、说一个你最熟悉的数据结构
3、说一个你最熟悉的算法
第一题是必须题,后面两道都是用于加分。
很简单?说一个事实,在我两省十多所大学四年的面试经验中,这三道题能过滤掉八成的毕业生。来看我怎么提问的:
问题一:
该问题的难度以“吃方法”分野。
之前基本是考察语法和封装性,以及对基本概念的重视程度。在提示之后依然没有意识到自己错误的,坚决不用。
吃方法属于进阶题,看着很简单,对于很多程序员来说就是直觉性就明白的问题吧?其实,这是需要多种能力的:
a、猫吃老鼠,要能理解猫是一个类,吃是一个方法,老鼠是一个类,作为吃的参数;
b、猫吃鱼同理,吃老鼠和吃鱼这两个行为,本质上来说,都是吃食物
c、食物是单独是个接口,老鼠和鱼都是它的实现类。
看,面向对象分析理解,抽象能力,继承和多态的应用,接口和类的理解,具备所有这些,才能快速准确的做好这个吃方法。
问题二:
说一个最熟悉的数据结构,又或者,简单一点,说一下LinkedList和ArrayList的区别。相信很多面试者都遇到过这道看上去很蠢的题,网上有很多答案,他们说的基本都没错,但是,按这些答案来回答,不会给出很高的评价。
这样提问:为什么LinkedList查询会比ArrayList慢?又或者,如果java没有提供LinkedList,你要如何实现出来?
这里考验的能力有两个,两者有其一,都可以打出高分。
1、对于需求的理解能力
2、阅读源码的兴趣和能力
链表的定义是“表由一系列结点(链表中每一个元素称为结点)组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域”。
把这一段话当成需求,那么,名词有:表、结点、数据域、指针域。
同时又能得出它们的包含关系,表里有多个结点,结点里有数据域和指针域两个部分。
完成了这一部分分析,自然就能设计出对应的LinkedList类。查询为什么会慢呢?查询对应的是get方法,get(i)自然是要从头结点的指针域迭代i次,取出对应结点数据域,这个迭代过程导致了慢。
无论是通过自行分析还是阅读过源码懂得这个道理的,都说明具备一定能力或潜力。
问题三:
说一个最熟悉的算法?
其实这里考验的是多个层级:
1、是否有认真准备面试
2、数理逻辑水准
3、算法水准
拿最常见的排序算法说事。
能说出任意排序算法原理,说明至少有认真对待面试。
能说出快排、桶排、堆排等复杂一点的排序算法,并且能指出得到最差和最优结果的输入,这一部分,需要面试者能在脑中模拟算法运行,根据算法本身的原理,来解释为什么快和慢。
有认真学习过算法,理解时间复杂度本身是什么概念。
举个例子,一个算法的平均时间复杂度是O(1),另一个是O(n),真正执行的时候,前者会比后者快吗?
答案是不一定,因为我压根没提输入是什么。
如果不能理解O(n)描述的是趋势,那么,对算法的理解就还未入门。
又比如,如何计算一个归并算法,比如T(n)=T(n/2)+n/2的时间复杂度。这一方面考验了算法,一方面又考验了在校时的学习能力。
框架原理和应用类问题:
面试官需要明白,框架问题回答不上来,并不说明对方比你差。
每个人的专精方向是不一样的,框架这种事,也就是个工具学习和经验的问题。用业务相关问题问同行的老鸟,能够理解,来问毕业生和新手,问并不使用该框架的老鸟,就很莫名其妙。
对于这种情况应该如何考察呢?
框架不一样,思想有相同。
1、询问对方最熟悉的框架
2、询问框架使用中遇到的最困难的问题
3、有没有阅读过框架源码,解释一下框架某部分功能的实现原理
对于自己最熟悉的框架的了解程度,能说明面试者的真实水准。
有些新手使用框架的时间都很短,那么,可以换个方式出题,比如:“你知道spring的依赖注入吧?假设spring没有这种功能,让你来写这个,会如何写?”
依赖注入并不是什么黑科技,了解反射理解面向对象的程序员,都能答出个一二三四。
总结
公司和员工是双向选择关系,应聘者大可不必把自己放到“求”职的低位,面试官也请勿趾高气扬。
不管招聘还是应聘,无非就是了解自己和对方的需求,然后展现优势,而已。