likes
comments
collection
share

一位不合格的面试官在这两周让三位同学破防了

作者站长头像
站长
· 阅读数 2

一位不合格的面试官在这两周让三位同学破防了

🔊 最近部门招聘 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,这个时候应该怎么办,这个时候面试者也慌了
一位不合格的面试官在这两周让三位同学破防了

然后我还准备了其他相关问题

  1. 优雅关闭有考虑过吗?
  2. 并发包中的其他工具类有使用过吗,比如 CountdownLatch
  3. 大任务一直占用线程资源怎么办,堵塞了其他任务呢?
  4. 异步回调失败怎么办?
  5. ....

没有使用经验估计都会被我 10 来分钟的线程问题问得手足无措;甚至开始影响到后续的面试流程了。

后来的面试,我不再以多线程的考核作为第一个问题了。

📜三、问题集

😄但这些问题我在工作中也实实在在遇到过,所以才会这样针对性的提问!

多线程是 Java 中非常核心的一部分,关于多线程的问题太多太多了......

一位不合格的面试官在这两周让三位同学破防了

使用多线程只有当遇到一些问题才会理解深刻,希望你也尽早经历一下这些场景。

序号问题
1一定要遇到线程池过载,任务被直接丢弃的情况: 线程池丢弃了任务,业务没有办法被执行了,这个时候就可能各种问题出现,比如数据丢了,并且很难找回来。这样你就会想方设法的完善你的功能了。
2一定要遇到线程任务异常,然后还没有任何日志的情况:这样你就会发现异步任务变得不可控,于是需要用各种方法去证明任务是执行的,并让它更加可控
3一定要经历服务重启/宕机,线程队列还有任务情况: 然数丢了,下次你就会考虑数据如何不丢了
4一定要对核心线程数、最大线程数、线程队列有参数调优过程。这样会发现,有时候设置再大的核心线程数性能也并没有明显提升。
5一定要经历 CountdownLatch 一直被阻塞的情况,这样你会谨慎得使用 CountDownLatch,并且用好它
6思考这样一个问题:线程池注册了优雅关闭,如果线程任务中的依赖 bean 也注册了优雅关闭,那么如何保证关闭先后顺序

如果有一天开始想着,给这些线程池增加一个监控;甚至想尝试去动态修改线程池的任务时,才会有对多线程一些体感。

✒️四、反思录

作为面试官的我的一些反思

  1. 面试官不应该以刁难、为难的方式去进行面试。
  2. 面试不是考试,不应该将一些具体的数值知识点,作为面试的考点。
  3. 面试的氛围不应该太严肃,适当的营造一些轻松的氛围;有时候面试者答不上来会紧张,这个时候适当的缓和氛围是有必要的。
  4. 重遵每一位面试者,因为他们为这次面试做了大量的准备。
一位不合格的面试官在这两周让三位同学破防了

🔊五、心里话

这几天作为技术面试官也想对我面试的这几位社招同学说一下心里话。

其一、不用真诚地坦白你的不足

不用坦白自己不会用; 暴露自己只会 CRUD,基础有多薄弱,公司的环境有糟糕等等。别把这些不足告诉和盘托出,虽然很真诚,但这并不会加分,反而会大大减分。可能会被理解为不自信,当然更多的是为自己的不足寻找外界的借口。希望学会扬长避短


其二、回答时的条理性

大多数时候对方并不清楚你的项目,因此你的表述会显得非常关键!

有条理的汇报是在面试中非常重要的。参考金字塔原理,或者smart原则等。 一些思路模板和作答方式:

  1. 事前、事中、事后。
  2. 先是什么,后是什么
  3. 发现问题,剖析问题,解决问题
  4. ......

通过条理性的答复,会让对方更轻松,也是一个加分项!


其三、理解问题的背后逻辑

有时候对方也并不知道这些技术,但是也一样能提出一些问题,因为所有的技术的应用都会有一套逻辑。

  1. 因为什么场景
  2. 解决什么问题
  3. 达到了什么效果

然后再根据应用过程中提一下通用的技术问题

  1. 高可用
  2. 性能问题
  3. 出了问题如何解决等

解决问题的思路是相通的。 因此面试的问题不应只是一个具体的知识点,而是这个技术知识点背后都有一套类似这样的问题,我也会根据这些来进行提问。 希望能够知道我的套路。


其四、不要胡诌

答不上来,不用乱说;因为这样容易坑自己; 一般我会根据你上一次的回答寻找到关键点再深入追问,如果答不上来,答错了,会让你陷入被动。

可以尝试针对答不上来的问题用以下方式进行回复。

  1. 这个问题我不熟悉,但是我对相关问题比较了解。(也可以适当往自己擅长的地方引导,展示出来一种积极的态度)
  2. 这个问题我不熟悉,但我可以通过一些替代方式去实现
  3. 或者大方说自己不会。(注意:别找各种理由说自己不会)

其五、精进技术

走上技术这条路,就得多精进技术,与时俱进,这个环境确实很卷,面试造火箭,工作拧螺丝,但也确实是敲门砖。

一位不合格的面试官在这两周让三位同学破防了

有一些话,我也只能在这里说,也希望这些想继续做技术的同学都能找到自己满意的工作。

另外面试的技巧方式还有很多很多,可以多学一些。


🎬六、忆往昔

面试者3真诚坦白后,好像看到了自己的影子,他又何尝不是当初的我呢?

那一年,为了校招,奔跑于各个校招会场;参加各种笔试面试......

  • 很多大厂也不会到我们学校去,因为学校不行,于是大老远跑到了其他学校去面试;后来才知道并理解,大厂招聘看学历; 所以当年的努力其实只是一片绿叶。
  • 听了再多的课程,背了再多的面试题,学了再多的demo,但被一道算法题卡得死死的,确实很难受。
  • 满以为答得不错,结果两个周过去了也没有音信,心仪的公司始终是进不去的,意难平。
  • 学习再多的技术,最终都是 CRUD,然后水煮青蛙;大多数业务开发经历都是相似的。
  • .......

感叹的、抱怨的、可惜的、意难平的都太多太多,说不完,道不尽。

一位不合格的面试官在这两周让三位同学破防了

不管怎么样,好好吃饭、好好睡觉,好好生活!