一位不合格的面试官在这两周让三位同学破防了
最近部门招聘 Java 技术同学; 技术需要两面,我也参与招聘过程并作为第一面的面试官,这两周平均每天一个。但是这两周我却让好几位同学破防了,内心其实也是五味杂陈的,做一下反思也谈一下感想。
一、被破防
第一位面试者: 面试者1已经工作了 6 年,也是熟悉 Java 各种技术栈, 然而面试到最后却不自信的和我坦白说,其实自己 21 年才开始学 Java,以前都是老项目,一直用很老的 Struts2,像 SpringBoot 都用的很少......
第二位面试者:面试者2工作 4~5 年,简历上也写着熟悉多线程以及各种中间件。因为我的一系列问题都答不上,最后明显不好意思地吞吞吐吐说其实这些技术我也用得不多。
第三位面试者:面试者3已经工作 3 年,简历上写着精通xx,并深入xxx;面完最后反问环节,比较诚恳地说,面试官你的这些问题我都没有遇到过,虽然我工作了3年,但是我好像都并不了解,我也不知道我能力就是这样还是因为其他人也这样,还是说平台很重要......
二、多线程
很多同学工作前几年对多线程的应用都比较薄弱,或者没有使用场景,包括我工作前三年也是对线程一知半解。于是我残忍地用多线程作为第一个问题,并以组合拳的方式打得他们措手不及.
场景还原:
- 我:对多线程熟悉吗? (面试者的简历上一般会在简历的技能栏,写上熟悉多线程)
- 面试者:熟悉,项目中有用过。
继续追问
- 我:可以讲一下你在项目中使用的场景吗? (实际想看一看多线程的应用场景是否合理)
- 面试者:有一个项目有用到多线程,当时我使用使用它来做.... balabala
然后我就基于面试者回答的场景进行针对性地开始提问题。
面试者1说他用多线程来更新流程状态,有一次使用 spring 的异步线程出现数据更新丢失,自己自定义了一个线程池解决了。 (显然是一个错误的答案。于是我继续朝着这种错误的思路提出了几个让他不能自洽的问题)
- 于是我说,像这样,如果你定义的线程池,任务出现异常,或者线程池中的任务因为服务重启,亦或者服务挂掉,亦或线程任务超过负载被丢弃;这种情况也会更新丢失吧
- 这个时候面试者明显开始慌了,甚至有一些影响到后续的作答了......
面试者2说他使用线程池做异步回调,获取异步结果使用 callable#get, 超时就直接将线程 shutdown 或者 shutdownNow(面试者对异步获取结果是不熟悉的)
- 然后我针对异步结果的获取如果出现异常进行提问,这个时候面试者也慌了......
面试者3说只是为了想用一下多线程,阻塞队列设置成 0,核心线程和最大线程就设置 10,因为项目没有什么用户量。
- 于是我针对多线程数进行提问,这个时候用户的并发超过 10,这个时候应该怎么办,这个时候面试者也慌了
然后我还准备了其他相关问题
- 优雅关闭有考虑过吗?
- 并发包中的其他工具类有使用过吗,比如 CountdownLatch
- 大任务一直占用线程资源怎么办,堵塞了其他任务呢?
- 异步回调失败怎么办?
- ....
没有使用经验估计都会被我 10 来分钟的线程问题问得手足无措;甚至开始影响到后续的面试流程了。
后来的面试,我不再以多线程的考核作为第一个问题了。
三、问题集
但这些问题我在工作中也实实在在遇到过,所以才会这样针对性的提问!
多线程是 Java 中非常核心的一部分,关于多线程的问题太多太多了......
使用多线程只有当遇到一些问题才会理解深刻,希望你也尽早经历一下这些场景。
如果有一天开始想着,给这些线程池增加一个监控;甚至想尝试去动态修改线程池的任务时,才会有对多线程一些体感。
✒️四、反思录
作为面试官的我的一些反思
- 面试官不应该以刁难、为难的方式去进行面试。
- 面试不是考试,不应该将一些具体的数值知识点,作为面试的考点。
- 面试的氛围不应该太严肃,适当的营造一些轻松的氛围;有时候面试者答不上来会紧张,这个时候适当的缓和氛围是有必要的。
- 重遵每一位面试者,因为他们为这次面试做了大量的准备。
五、心里话
这几天作为技术面试官也想对我面试的这几位社招同学说一下心里话。
其一、不用真诚地坦白你的不足
不用坦白自己不会用; 暴露自己只会 CRUD,基础有多薄弱,公司的环境有糟糕等等。别把这些不足告诉和盘托出,虽然很真诚,但这并不会加分,反而会大大减分。可能会被理解为不自信,当然更多的是为自己的不足寻找外界的借口。希望学会扬长避短
!
其二、回答时的条理性
大多数时候对方并不清楚你的项目,因此你的表述会显得非常关键!
有条理的汇报是在面试中非常重要的。参考金字塔原理,或者smart原则等。 一些思路模板和作答方式:
- 事前、事中、事后。
- 先是什么,后是什么
- 发现问题,剖析问题,解决问题
- ......
通过条理性的答复,会让对方更轻松,也是一个加分项!
其三、理解问题的背后逻辑
有时候对方也并不知道这些技术,但是也一样能提出一些问题,因为所有的技术的应用都会有一套逻辑。
- 因为什么场景
- 解决什么问题
- 达到了什么效果
然后再根据应用过程中提一下通用的技术问题
- 高可用
- 性能问题
- 出了问题如何解决等
解决问题的思路是相通的。 因此面试的问题不应只是一个具体的知识点,而是这个技术知识点背后都有一套类似这样的问题,我也会根据这些来进行提问。 希望能够知道我的套路。
其四、不要胡诌
答不上来,不用乱说;因为这样容易坑自己; 一般我会根据你上一次的回答寻找到关键点再深入追问,如果答不上来,答错了,会让你陷入被动。
可以尝试针对答不上来的问题用以下方式进行回复。
- 这个问题我不熟悉,但是我对相关问题比较了解。(也可以适当往自己擅长的地方引导,展示出来一种积极的态度)
- 这个问题我不熟悉,但我可以通过一些替代方式去实现
- 或者大方说自己不会。(注意:别找各种理由说自己不会)
其五、精进技术
走上技术这条路,就得多精进技术,与时俱进,这个环境确实很卷,面试造火箭,工作拧螺丝,但也确实是敲门砖。
有一些话,我也只能在这里说,也希望这些想继续做技术的同学都能找到自己满意的工作。
另外面试的技巧方式还有很多很多,可以多学一些。这边也给大伙分享一些我整理的企业面试真题,可以点击这里获取到