面试整理

这篇文章主要整理一下最近这段时间面试的一些心得体会,主要结合当前所在的公司环境,以技术面试官的角度,尝试整理一些能够评估候选人能力的清单。

背景

目前所在的是一家传统金融公司,职位是web后端开发,主要技术栈是java系。参与面试3年左右的开发人员,该职位薪资福利比不上一线公司的水平,但超过大多数中小型的互联网创业公司。公司内部各个部门职责分明,功能的开发和评估需要由专门的团队评审之后才能继续进行下去,日常工作主要是围绕实现业务提出的需求,除了编码之外,也需要通过邮件、电话和各个专业团队沟通问题。
在这样的环境下招聘时评估的内容跟互联网面试方式不能直接拿来用,根据近半年陆陆续续的尝试,不断调整了面试内容和方式。

基本要求是确保候选人能够快速融入团队

对于业务强相关的技术部门来说,基本要求是能完成业务部门提出的需求正常评估工作量按时完成,并保证代码质量。这一点不光是技术过硬就能保障,还需要根据当前公司、部门的组织形式熟悉相关的流程和业务背景。

那么面试的考察点就明确了:确保候选人能够在已有的知识体系下,快速融入团队——能够根据业务需求推进功能上线,并保证稳定性。

面试的内容从三个方面考虑

考察方面主要有三个方面:技术、业务、态度。 如果候选人之前的工作经验刚好能够匹配公司的技术栈、业务场景、类似的组织架构沟通环境,就说明他能够很快能够融入团队,如果能够解决当前团队的技术难点,从工作能力的角度考虑,那肯定是最合适的人选。不过这种几率很小,目前还没遇到过,因为公司现在正在做技术化转型考虑,很多互联网的人员参与面试,对公司的业务场景和组织架构都不太熟悉,而对业务比较熟的,技术能力更偏向于传统的java开发流程,基础知识相对较弱。技术没问题的情况下现在看下来,上手估计要1个月,综合还是以技术能力的考察为重点。

关于态度方面,主要是明确候选人的期望和公司是否匹配,包括加班、福利、团队协作方式、工作(业务)内容。公司文化相关内容的传达也很重要,主要看对方工作背景,比如公司规模、开发流程是否相似、离职原因等方面,不太好量化,但双方要坦诚沟通,一般入职1个月不到就离职的基本都是这一块沟通出了问题:)

技术的考察按照当前主流的分类来看,有几个大的方面:

  1. 基础知识:计算机科学相关的知识是否扎实。疑难问题的解决方案需要基础知识作为保障,最基本的几块是:操作系统、基本的网络协议、数据结构和算法、数据库。包括如下几个部分:
    • 操作系统考察进程、线程、内存模型、并发问题、IO、基本的shell命令
    • 网络包括tcp/ip协议、tcp协议、http协议
    • 基本数据结构和并发的数据访问问题,可以结合算法题目进行考察相关基本功
    • 数据库的锁机制、事物和隔离级别、索引
  2. 相关领域的专业技能:编程语言(java)、框架(springboot/cloud)、前后端交互相关的http协议细节内容、分布式扩展能力和高可用方案(nginx、redis、eureka、DB)
  3. 沟通协调能力:问题的推进能力,沟通方式、描述问题的方式

  4. 管理能力(自我管理和团队管理):开发进度和风险评估能力,如:

    • 任务列表管理
    • milestone设定
  5. 工程能力:一般的招聘贴上都没有明确提到这一点,面试的时候基本是通过工作经验或者问一些工作环境推断的。可以结合候选人的工作背景,问一些日常的工作方式,高级技术人员需要理解当前工作中的技术架构和开发流程,难点和改进方式。能体现出候选人的技术栈广度和实际应用能力,如:
    • 工具使用:Git实践、Maven打包、springboot的启动方式
    • 开发流程、多个业务版本同时开发、灰度发布
    • JVM调优、SQL调优、GC log文件分析

对于业务部门来说最重要的部分是领域专业技能点是重点,web的专业技能也是最容易量化的部分,其他方面根据深度可以进行不同的评估,对于1年左右需要基础扎实;3年左右需要熟悉开发流程;5年需要具备一定的工程能力,解决技术难点;7年能够主动推进项目进展,解决内外部block的地方。

技术面试的内容需要考察验证

技术面试相对来说容易量化,但是简历包装、现场baidu面试题的情况也时有发生。在跟候选人交流时,要注意回答问题的流畅程度,问题是否能恰好达到候选人的技术瓶颈,当然这需要跟候选人有类似的工作经验和技术背景,才能有较好的把控。
提问的方式及考察的内容,主要有:

  1. 80%的技术问题应该是明确的。不明确的问题不仅无法保证面试的质量,也会无故的浪费时间。除了可以考察候选人技术水平,还包括理解能力、沟通能力。
  2. 给定一个错误的背景,观察候选人是否可以发现问题。考察候选人的诚实度,是否会根据猜测、过多的凭感觉回答。
  3. 根据工作背景提问相关的细节。考察深入程度,引申相关问题,推断候选人在团队中的定位。
  4. 算法题目。适当的算法题可以过滤掉不少1年当3年用的程序员,考察候选人对技术的热情程度。
  5. 给定一个宽泛的业务场景,让候选人进行推演,比如:web页面上的一个按钮如何从点击到展示内容的。考察专业能力。

其他考察方面

以上准则在大多数情况下应该优先考虑,但不是绝对的,总会有一些对某些方面比较突出的候选人,一个健康的团队人员的技能分配应该是有层次的。这个层次有平级层次和深度层次。不同水平的人在一起,能让日常工作更容易分工协作,也有利于知识在团队的传播,更加自然的将技术传递下去。同一技术水平的人,在其他地方可以互补,提高团队的稳定性。所以有些技术之外的因素也可以加入评估标准中,包括:

  1. 沟通能力比较强、表述清晰
  2. 学习能力强,技术面比较广
  3. 某一技术点有自己独特的感悟 这些考察点需要面试官本人有较高的职业素养。

对求职者的建议

没人能在1小时的沟通中,决定别人是不是一个“合适”的人,但是在工作中,我们必须互相做出决定。有时候面试失利可能是跟面试官聊不到一块去,但是作为求职者,我们要在这1小时之内尽力表达自己,所以不要含蓄,对自己的要求、优点、缺点都可以尽力说出来。日常的积累也是很重要的,如果你有一份坚持了3年的技术博客、一个超过100个star的repo、在Stack Overflow上较高vote的问答帖子,我想没人会忽略这些隐含的亮点,主动说出来即可。

results matching ""

    No results matching ""