不为有趣之事,何遣有涯之生
不失其所者久,死而不亡者寿

技术面试面什么 面试官篇

技术面试面什么(面试官篇)

本篇文章主要谈的是作为一个技术面试官,我们要明确面试的目的以及相关的面试技巧。要知道你面试候选的人同时,候选人也在考察公司。要招聘优秀的人才,必须要学会在尽可能短的时间内让候选人对公司产生兴趣,即便哪些目前还不适合的候选人。

本篇文章会简单的从面试最终目的,硬技能面试,软技能面试,面试流程与节奏四个方面谈一谈自己的一些见解和经验,希望对大家有用。

面试最终目的

找到优秀的人

首先一个目的就是找到优秀的人才。这个目的大家应该不反对,但是可能存在疑惑,什么是优秀的人?大家对优秀都有的不同的定义,100个人心中有100个哈姆雷特可怎么办?

如果我们都找文能提笔安天下,武能上马定乾坤。那自然是最好的,但不可能所有层级的人要求都一样。那此处优秀的定义是什么?技术深?技术广?学习能力强?

我觉得大家可以聚焦于一点:对团队有用的某些方面水平超过目前团队中大多数人的人。这里的关键词有有3个:有用,某些方面,大多数。

有用:团队目前或接下来需要做什么项目,需要什么样的技能和人才?
某些方面:按要求执行的,沟通协调的,文档编写的,质量把控的......
大多数:硬技能看职能岗位,软技能看整个部门

找到合适的人

找到优秀的人是好但是并不是所有优秀的人都适合公司目前的发展需要。所以找到优秀的候选人后还要看其是否合适。

合适是指候选人适合公司,公司也适合候选人。要不候选人水土不服,要不公司暴殄天物。

比如:产品处于市场验证期,找一个CMMI大师合适吗?找一个分布式架构师合适吗?找一个大数据分析专家合适吗?

面试官要清楚目前公司业务发展阶段是什么?下一阶段的主要工作是什么?公司整体处于哪个阶段:初创期,扩展期,发展期,稳定期。不同阶段需要的人才肯定是有所差异的。差异主要体现在两个方面:价值观和技术观。

价值观:加班文化VS效率文化,严格职级管理VS扁平化,任人唯亲VS任人唯贤,一切以挣钱看起的VS有社会责任的

技术观:技术栈的深度和广度,技术偏好方向,对技术的客观看法等

硬技能面试

技术水平面试等级要求划分

首先我们要按照一定的标准对硬技能进行等级划分。题外话:为什么德国制造或者瑞士制造的质量很好?主要还是他们对待生活的态度,这两个国家的人都奉行生活是具体的,产品质量也是,所以他们的生产标准都严格规定了达标的各种数值。借助该思想,我们划分好等级后,也要具体定义下,怎么才是符合某个水平等级。下面是各个等级的水平要求:

  • 初级:以我们内部技能评价表来评定的话,对应岗位或公共技能至少一半达到2的水平
  • 中级:以我们内部技能评价表来评定的话,对应岗位或公共技能至少有4项达到3的水平
  • 高级:以我们内部技能评价表来评定的话,对应岗位或公共技能至少有一项达到4的水平,岗位专业技能基本在3的水平
  • 经理:以我们内部技能评价表来评定的话,对应所有技能至少80%达到2以上的水平,岗位技能和软技能至少有2项达到3的水平

我们部门内部把每项知识技能分为5个熟练度,1 了解 2 掌握 3熟悉 4精通 5大师,每级别的描述如下:

  • 了解:接触过该类知识,也有使用过的经验,但没有深入学习过

  • 掌握:系统性学习过该类知识,并且能够运用在工作中,完成开发工作

  • 熟悉:经常性的使用该类知识,对其原理或源码有一定的了解,能够很熟练的运用该类知识高效的完成任务,基本的坑都遇到过,熟悉各种环境下的使用并且有信心解决任何该类知识在使用过程中遇到的问题

  • 精通:对该类知识如数家珍,熟知底层原理并能够修改扩展源码,现在发展以及未来方向都有自己的认知,并且发表过与该类知识相关的论文、书籍、软著、专利等。

  • 大师:创造出与该类知识类似的体系,有一定数量的追随者

硬技能的面试技巧

参考公司内部的笔试题
  • 面试官通过答题弄清楚候选人技能水平分布:基础、架构、数据库、工程思维、算法等
  • 面试官自己要对题目考察目标和答案很熟悉
遵循评定表
  • 只提问2以上级别的知识点,重点问3或4的
  • 附带考察候选人的自我认知,绝大多数候选人会高估自己的技能水平,越没工作经验高估的可能性越大

由浅入深
  • 先2后3再4的顺序来进行提问
  • 每个技能点至少准备3个初级问题,3个中级问题,3个高级问题

这里简单的举两个例子:

  • 考察java基本数据类型问题,可以设计如下由浅入深的问题:

    1.请介绍下java中基本数据类型以及它们的使用场景
    2.为什么定义了这些基本数据类型后还要定义包装类?
    3.包装类和String类有什么相同点吗?
    4.包装类是否重写了equals方法,为什么?
    5.请问我使用Integer定义两个数字,它们值都等于100,使用 == 和equals方式分别比较它们是否相等?
    6.导致上面结果原因是什么?如果我把值都改成200呢,结果会发生什么改变?
    7.我如何验证上述结果原因?
    8.哪些包装类是带缓存的?默认值是多少?
    9.我是否可以改变缓存值区间?怎么做?

  • 关于mysql索引的考察,可以设计如下由浅入深的问题

    1.请简单说下mysql常用索引类型
    2.组合索引使用时有什么需要特别注意的?
    3.为哪个表哪个字段需要添加索引有什么依据吗?
    4.能为较长的varchar类型字段建立索引吗?建立哪种索引?
    5.在你之前开发经验中,你还有哪些索引使用规范?
    6.一般我们是如何查看一条sql语句索引有没有起作用的?
    7.有没有了解过为什么添加索引可以加快查询速度?(数据结构B树和B+树)
    8.二者有什么区别?(可以给一个例子让其画出来)
    9.结合树的特点说说,为什么推荐使用自增ID来做索引?为什么不使用红黑树、hash树?

识别死记硬背
  • 追问细节:有些候选人会很笼统的介绍一些项目经验或技术点,有点也会在网上刷个题背一下知识。这个时候就需要追问一些实现细节或者源码细节来考察

这里举一个spring框架例子,考察时可以设计如下问题:

1.请说下Springboot相比较Spring来说,你认为的最重要的三个特点是什么?
自动化装配(以规约大于配置思想,做到了很多功能模块的自动化装配)、内嵌容器化(可以独立以jar包方式运行无需外部web容器支持)、开发运维化(基于一些devops思想做了一些endpoint来支持监控管理化)
2.请问springboot的自动化装配技术,哪些技术来源与spring体系,哪些是自己新增的?
3-N:对上文的模式注解、模块装配、条件装配知识点进行具体有层次的提问
拿模块装配为例子可以继续提问:自定义的模块装配有几种实现方式? 自动化注解方式和selector接口编程的方式这两种比较各有什么特点?我们如何选择? 可以各举个spring中实际实现的例子吗?
最后你还可以问候选人在使用Springboot框架可有对其功能做过自定义的扩展?根据具体回答,灵活追问

再举一个JAVA中函数式接口例子,一般采用如下问答来追问候选人是否了解相关细节:

提问:请问什么是java中函数式接口?
回答:只定义了一个抽象方法的接口。(如果你也是这个回答,很遗憾肯定是不及格的)
追问:可以有默认方法吗?
回答:可以的
追问:可以有多个默认方法吗?
回答:应该也可以的
追问:那如果再加个静态方法呢,还是不是函数式接口了?
回答:额.....好像~应该是的吧?
追问:那再加默认hashCode方法呢?再加个默认equals方法呢?再加个clone方法呢?

  • 变更条件:如果面试官本身对细节也不是很熟悉,那么可以尝试变更一些条件,让候选人来回答在变更条件之后,应该如何解决,实现上会有什么变化。如果是网上刷题的或不真正理解,一般很难回答上来。

这里举一个Srping注解相关的例子,比如问完开发过程中常用注解后可以继续这么追问:

项目中常见的注解@Controller @Service 是否可以互相替代?为什么?

再举一个关于密码学例子,问完常用的密码加密算法后可以这么追问:

考察完常用加密算法:MD5、SHA、AES 、RSA、ECC后,继续问下为什么加密时大多数情况选择前面2种?

  • 实际场景问题解决:可以构建一个需求场景,看候选人是否会灵活使用相关知识点进行实际问题的解决。最推荐这种方式,不仅可以考察候选人技能掌握情况,还能考察候选人的实际经验和灵活应变能力,沟通能力等。该点对于面试官的要求比较高,面试官需要在平时项目中多总结积累这方面的经验才能构建出合适的需求场景。

这里举一个事务管理的例子,问完事务管理和@Transaction注解相关知识后,可以设计一个业务场景:

假设服务层有2个服务A和B,A是很重要服务,B不是很重要,A服务中需要调用B服务,需要满足万一B服务发生异常时,A服务自己提交事务,B服务事务失败即可。请问如何设计这2个服务?怎么去调用才能满足上述要求。

更多对面试题目的解答就不在这里展开了,后续会放在单独的文章里与大家分享

软技能面试

软技能的面试分为四个方面:心理成熟度考察(判定候选人的心理年龄),学习能力考察(能否成为骨干的重要参考指标),主观能动性考察(项目协作,可培养性中重大参考指标),认知能力考察(领导力,带头人潜质重要参考指标)。

心理成熟度

软技能面试首先一点就是要考察候选人的心理成熟度,这个相当重要。
一般把心理成熟度分为4个等级:幼年、少年、青年、成年。一般只招募少年以上的候选人。

  • 幼年 : 不知道自己不知道
    碰到问题只会求助,而且描述不清楚问题,分不清自己与世界、人与人、岗位和岗位之间的边界
    问题例子:你们几个人之间是如何分工协作的?
    招募标准:该层级的一般直接淘汰

  • 少年: 知道自己不知道
    能够准确描述自己的问题,也尝试自己思考和解决过了;少年缺少的是专业技能而不是问题意识
    问题例子:你经历的项目中,有没有遇到让你刻骨铭心的困难,你是怎么解决的?
    招募标准:看其工作年限和技能水平,判断其学习曲线,结合团队缺人程度来决定

  • 青年:知道自己知道
    一般是团队的业务骨干,知道自己碰到的是什么问题,也往往能够解决;有不错的主观能动性
    问题例子:你过往的经历中,最有成就感的事情是什么? 答案偏向个人的就是,如果是答案是团队或他人,那就是成年了
    招募标准:价值观和性格没问题,一般就可以招募

  • 成年:不知道自己知道
    知道的已经悄然融入日常行为中,不需要刻意强调或让别人知道,思考问题的角度从自己到了和自己与自己相关的人
    问题例子:你心目中最理想的工作环境是什么? 答案偏向待遇、氛围、学到东西就还是青年;偏向做有意义的事,改变帮助他人,改变世界是成人
    招募标准:还犹豫什么?你应该担心对方来不来

学习能力

  • 询问对方学习习惯:国外一手的论文、文献、官方文档 》书籍 》收费视频 》
  • 询问对方知识输出:个人网站/博客》公共博客》云笔记》电脑笔记》无
  • 根据其工作年限,目前技能的水平,估计出其学习曲线

直观能动性

  • 询问所在岗位技术栈与趋势
  • 询问热门技术与趋势:比如人工智能、区块链等技术理解和自己认知
  • 询问在之前团队牵头做过哪些有利于团队事情,要具体落地的

认知能力

  • 询问社会热点问题:阿里月饼事件、国际化和全球化争论、中美贸易战原因和趋势
  • 准备一些元认知考察题:博弈论、概率性思维、黄金思维圈

面试流程和节奏

一般硬技能合格软技能不合格的不允许录用,反过来软技能合格硬技能有点欠缺的可以根据实际情况进行录用。
硬技能的培养时间成效比较快,通过规范和培训能在短时间内有效提升。软技能很难通过培养短时间能胜任某些工作。

初试时间

  • 下限:初级 30分钟以上 ,中级 45分钟以上, 高级 60分钟以上 ,经理 90分钟以上
  • 上限:时间上线最好不要超过建议的二倍

面试流程

  • 初级以下:技术经理级别一轮面试过即可
  • 中高级:初始通过后,由CTO复试
  • 经理以上:CTO面试后由CEO复试

何时中止

  • 连续4个方面的知识点都没有的达到对应等级水平时即可中止硬技能面试
  • 连续6个方面的知识点都达到对应等级水平时即可判断候选人硬技能基本达标,其它知识点可以留在复试时由其它面试官进一步核实

其它

  • 初试面试官与复试面试官合理分配考察知识点深度与难度
  • 初试硬技能为主,复试软技能为主

总结

每个公司都有自己独特的考察方式,我谈及的面试方式未必适合你,但是我想要表达的是千万要重视企业对人员面试这一环节。公司的成长和发展离不开优秀的员工。一个公司天花板除了外部因素所在行业和趋势外,内部因素中和公司优秀人才的多少密切相关。招聘在企业发展过程中都是一个长期重要的事情,所以专业优秀的面试官可是吸引专业优秀人才第一道保障,你说是不是?

未经允许不得转载:菡萏如佳人 » 技术面试面什么

欢迎加入极客江湖

进入江湖关于作者