技术面试官如何甄别培训班学员?

 我大概做了9年左右技术面试官,主要是面java的,就以这个身份说说如何筛选各种培训班的学员。

    先说如何根据简历上筛选。

    1 看简历上最近的项目,现在大多数培训班,都会让学员别写培训班经历,但最近的项目很难做假。培训班学员,最近的项目不会超过6个月,但项目规模看上去绝对不像6个月能做出来的,比如是xx管理系统,xx物流系统,xx电商系统,而且项目里包含的技术一般都很高大上,比如Spring boot+分布式组件+云。

    2 再看之前的项目和公司。由于培训班学员之前大多没软件项目经历,所以培训班老师往往让他们不改公司名,但改项目名。所以会出现在xx商贸公司做软件项目的情况,也就是说,公司不是软件相关,但项目是软件项目。

    3 再看离现在最远的项目。由于大多数培训班对这些项目不怎么重视,所以这些项目往往会出漏洞,比如同时用到了阿里系和Spring cloud系的组件,或者求职者用到了当时不存在的技术。

    遇到可疑简历,一般先电话面试,而不是叫到场面对面面试。遇到这些疑似培训班简历,我一般先会说,你这份简历看上像培训班出身,你说实话,之前是不是在培训班呆过,如果是,我给你推荐我公司初级开发的岗位,这样你还有机会,否则我就严格问。话说到这个份上,培训班学员一般会坦白,这样我就按初级岗面了,或者干脆转到其他要初级岗的部门。

    如果求职者说没有培训班经历,那我就从如下几个方面问。

    1 问日志怎么输出的,一般项目是用logback+elk,或者其他日志组件,求职者一般能讲清楚日志怎么配置,日志规范是什么。而培训班能讲清楚技术和项目框架就不错了,一般不会顾及到日志,所以不少培训班学员说,就直接用System.out.println输出日志。

    2 问项目发布周期,项目怎么部署的,上线前上线时要做什么事。培训班的学员,大多只是在windows上开发调试,一般不知道在Linux部署这回事,或者不知道项目发布和部署的事情,这方面也能拍查出不少培训班学员。

    3 就问项目是否上线,客户是谁,安装部署在哪个服务器上。培训班学员的项目,大多是没上线。

    4 一般的项目,多少会做些高可用,比如多节点部署,或者是数据库集群,哪怕是最基本的mysql主从集群,或者监控,比如健康检查或业务埋点。这样项目才敢上线运行,否则项目在线上挂了都不知道。但培训班的项目,学员能跑通就不容易了,哪会考虑这些点。

    所以我就问,为了确保项目在线上正常运行,你们做了哪些方面的工作?比如是健康检查,监控日志,或者分布式部署,或者数据库集群等等,你可以找任何一个点来说明。这样培训班的学员大多回答不上。

    5 多结合几个模块串起来问,同时问接口调用安全性方面的内容。比如有求职者告诉我,他做的是基于Spring boot的订单管理模块,那我就问,这个模块的api是给谁调用的,调用时你是怎么做参数检查,参数错误会怎么处理,如何确保参数被篡改,如何做到跨域安全。这些点,正规项目里大概率会考虑到,但培训班项目只要能实现功能,这些点大概率不会考虑到。

    其实用上述方法,我都不用涉及到技术。如果在技术方面来筛选,其实更直接。

    1 问技术的使用必要性。比如培训班学员说项目里用到索引来调优,我就问,你们数据库规模多大,他们说才几百。这种规模用索引干嘛?或者说用了redis,我都不用问缓存穿透等问题,我就说,你们数据库并发量多少?他们说一秒十几次,那么这种场景干嘛还用redis?

    2 问技术使用的常见的坑,比如kafka,我就问,如何防重发,如何处理堆积消息。培训班学员大多只是调用api,这些坑基本不知道。

    3 让结合项目场景,说如何使用redis。比如问键是怎么设的,值用什么类型,如何防内存溢出。一般来说,有实际经验的求职者多少能说点,毕竟项目中用过,但培训班学员,只会基本的api调用,甚至在一些不必要的场景,都会硬塞一些值钱组件。

    4 问技术在异常情况下是怎么处理的,比如redis超时,或参数错误,你们怎么处理。培训班项目一般只考虑正常流程,会忽略异常情况,在真实项目更会考虑异常情况,所以这方面往往也是一问一个准。

    另外说个甄别培训班学员的方法,这也是百试百灵。那就是打断他们的节奏,看他们在猝不及防的情况下的表现。

    培训班的学员一般事先都准备过,所以自我介绍和介绍项目经验时,一般比较流利,谈基本技术时,往往也不会露出痕迹。所以在一些疑似培训班学员面试时,在他们介绍项目时,直接打断,然后问问题,比如问为什么要用xx技术,你项目是怎么上线的,或者问,做项目时你解决过哪些线上问题?

    这些问题只要真干过商业项目,一般都有经历,所以在猝不及防的情况下,很快能说好。但培训班在做模拟面试的时候,往往会按部就班,就像培训班项目不大会考虑异常情况一样,他们不大会处理面试突发情况,所以遇到这些需要零时想的问题,他们往往就不知道怎么回答了。

    本人知道不少同学入软件开发行不易,所以需要经培训班加持。但由于面试官职责所限,所以在面试中不得不甄别培训班学员。至于为什么有些公司不要培训班学员,或者说,甄别培训班学员本身是否合理,这不在本主题之内,所以不再展开讨论。

    不过在写到这里,也得给广大想从事软件开发的培训班学员打打气。

    1 一些不怎么资深的面试官,往往无法甄别出培训班学员,所以培训班里讲述的面试技巧还是有一定作用的。

    2 我在上海,发现程序员,尤其是java程序员,缺口还是比较大的,一些软件公司未必能招到人,所以广大培训班学员,只要你们会基本的增删改查,大厂可能一下子未必能进,但一般的公司往往问题不大,所以培训班给出的以往学员就业的列表,也具有一定的可信度。

    所以培训班学员在求职时,可以不亢不卑,把握好基本的增删改查以及常用技术的API用法,同时对一些值钱技术也别吹太厉害,找份工作应该不大。

    不过说来讽刺,本人一方面是外企和互联网公司的技术面试官,但平时周末,还兼职讲java课,在我的课堂中,也经常要帮助一些零基础的同学找工作。以技术面试官的身份,筛选培训班学员是职责中事,但作为培训班老师,我反倒要教他们如何应对面试。前文既然讲了如何筛选培训班学员,那么这里就讲讲培训班学员如何找工作这个话题。

    1 掌握基本面,什么是基本面,就最初级的程序员进公司干活需要什么技术,比如java方面是Spring boot增删改查。基本面需要通过若干个项目练习,至少知道项目整个流程(比如前端后端数据库)是怎么运行的,开发流程中重要模块时,需要哪些技能。这没话讲,哪怕再小的公司面试,也会问到基本面。

    2 背题。背网上有的静态的题目,比如java异常处理,Spring boot框架等,这个多多益善,同时根据面试反馈结果需要不断背。

    3 融入真实项目场景,结合项目需求准备技术说辞。培训班学员在面试时最大的问题时,由于无法讲清楚技术使用的必要性和场景,所以往往被面试官质疑项目的真实性。这前文已经提到了,比如讲低并发场景下还要用redis。

    这方面,首先当然需要理顺项目的流程,比如处理订单的业务,一开始从哪里接到请求,处理请求时历经哪些模块,最后用到哪些表,用到哪些分布式组件。但是,更要思考“用户是谁”,“技术是否合理”和“异常情况如何处理”这三点。

    具体还是以订单模块为例,要讲清楚谁(哪个客户)调用这个模块,调用方式是什么,并发量多少?这个并发量下,spring boot如何部署以及是否要用redis,同时,如果调用失败,该返回什么信息。虽然很多小公司未必会问这么细,但我让我的学员从项目角度准备好这些问题,这样虽然可能技术未必能说好,但至少不会被质疑项目的真实性了。

    4 结合需求讲技术,比如讲jpa,你就以订单模块为例,讲如何使用api,如何设计业务模型类。再如讲redis缓存,你就说因为并发量高,所以用redis,总之为每个技术找个必须要使用的理由,同时再结合使用场景介绍技术,这样一方面能更讲清楚技术,另一方面能进一步让面试官相信项目的真实性。

    5 同时准备些亮点,比如用索引优化数据库,用缓存提升性能,通过底层源码讲HashMap等,还有JVM调优等。这些技术未必很深,但很多求职者不会说,我的学生说出来了,就是他们的优势。当然,讲这些亮点时,也要围绕项目场景。

    6 刚开始,如果是零基础入行,尽量找些小公司,或者先以外派的身份进银行或大公司,这些公司基本是只要能做增删改查的活就让进,而且面试官本身的能力也不会像大厂那样资深,说难听点,甚至无法排查出“面试技能良好但干活能力一般”的人。

    这里顺带说句题外话,零基础想入行的同学,在挑培训班的时候,培训班本身的品牌是一方面,但讲课老师更重要。

    比如有些老师,本身没经过大厂,本身只会让学员调通api,本身不会讲资深的技能,不会从公司的角度辅导技术以及辅导面试,那么培训班学员的收获可能只是入门级的增删改查了。要找,最好找些有大厂工作经验,或者至少小公司做到技术高管的老师。

    如果注意我上文给出的点,培训班学员甚至可以在不提升技术的前提下提升面试技巧,乃至求职成功率。

内卷把我逼成了“扫地僧”把Github上所有Java面试题都整理了一遍,足足24W字

 

 

你可能感兴趣的:(Java,程序人生,架构,java,spring,maven)