作为Java资深技术面试官,首先我感觉有必要讲解“面试官深挖问题”的动机,在了解动机的前提下,大家才能更好地准备面试。面试官为什么要在一个点上深挖?两大目的。
 
1 首先是通过深挖,确认候选者是否具备该技术的项目实践经验。
 
这是最重要的目的,因为目前很多候选人,尤其是通过培训班入行的候选人,确实能很好地讲清楚某个技术,甚至还能讲清楚该技术在项目中的实际用法。但是面试官必须要确认,候
选人在之前的项目中,是否真的用过(Spring Boot,分布式组件或其它)技术的,是否真的有过解决(OOM,数据库性能优化等)方面的问题。
 
如果没有,那对不起了,说得再天花乱坠,也只能给出“只懂理论,没有在项目里用过”的评价。
 
2 在确认候选人在项目里用过该技术以后,再通过深挖,明确候选人对该技术的掌握程度。
 
比如在确认候选人在项目里用过Dubbo组件后,再通过提问源码等细节,明确候选人对Dubbo的掌握程度。
 
但是我在面试过程中发现,不少候选人往往只会从技术本身准备面试,比如对Netty,Redis等组件,能准备到底层源码级别,但却不准备该技术和项目结合的说辞。这样在面试准备过程中,就犯了方向性的错误。
 
就拿最常问的Spring Boot方面的问题来举例。
 
第一层问基本概念,比如Spring Boot的常用注解,Spring Boot项目的大致结构。
 
第二层问细节,比如Spring Boot的启动流程,关键注解的细节源码等。
 
请注意,问到这层,仅仅是提问技术,还没有问该技术在项目里的用法,所以只要是候选人在面试前背题,一般都能过。
 
有时候我甚至技术问题方面问得很浅,让候选人能放松下来,更好地回答后面的问题。在此基础上我会问,在你们项目里,Spring Boot框架整合了哪些组件?比如Junit,Swagger等等,请候选人大致说明下。在候选人告诉我用过的组件后,我再细节该组件与Spring Boot框架的整合方式和相关语法。
 
可以这样说,只要是做过Spring Boot方面的商业项目,即这个项目不是自学的,也不是培训班里得到的,一般多少都会整合组件,而且知道怎么个整合法。通过这层提问,我能明确候选人是真的在商业项目里用过Spring Boot,还是仅仅知道理论,或者只是在学习项目里用过。
 
针对其他的技术或组件,基本上也都采用这种层层递进的问法,第一层问概念,第二层问(框架、源码或其它细节),第三层问在项目里怎么用的,在此基础上再顺着候选人的回答,深入提问些该技术在项目里的用法。
 
但是不少候选人,顶多只准备到第二层,即深入到各框架各组件的源码,说明该技术的细节。或者说,不少候选人只知道该准备到这一层。比方说,我见过不少候选人,在说Redis时,很全面地说了Redis的细节,比如集群,失效转移以及选举算法等能很好地说,但当我结合项目提问,比如问你们项目为什么要用Redis,以及根据你们项目的数据量,为什么要用redis集群等项目相关问题,就基本说不上了。这样就无法很好地证明自己在项目里用过Redis。
 
只要面试官资深些,一定不会只停留在单问技术层面,也就是说,你认为准备过的被深挖的点,可能充其量只停留在技术层面,其实还没达到面试官会深挖的“技术结合项目”层面。
道理一说就明白,所以在下文里,我不讲如何在技术层面深挖提问的方法,因为这些问题网上太多,这些知识点大家可以自行查阅。但是我讲下很容易被疏忽的深挖技术结合项目的常见问法。我发现,不少和我一样的面试官,也会采用这种问法。
 
1 问该技术的使用必要性。比如你项目数据库压力是多少?在这个情况下是否该用Redis?或者你们项目为什么要用Dubbo?而不用传统的基于Http的服务调用方式?
总之,只要你简历上写的,面试时说的值钱技术,我都会问使用必要性。我不在乎这个问题听到什么答案,但我关心候选人关于必要性的说辞是否合理。如果不合理,那对不起了,这个项目疑似学习项目或培训班项目。
 
2 既然在项目里用到这个技术,那么就需要解决某个痛点问题,比如使用了MyCAT,拿就需要解决数据库压力大的问题。接下来我就问,怎么解决的?你可以从配置文件,框架,Java语法等方面来说明。
 
这里请注意,我不仅仅关心纯粹的语法,比如我不仅仅关心MyCAT组件通过配置文件实现分库分表的做法,我更关心该技术该组件和你项目整合的方式。比如你项目里用到MyCAT,那我更关心针对哪个大表实现分库,拆分成多少个表,引入MyCAT后如果再遇到全局性的访问表语句怎么办?
 
在问相关问题时,如果候选人在项目里没用过,那么往往就说不上,或者如果是现编,我多从几个角度提问时,往往就会穿帮。但话说回来,其实我问的点是比较普通的,只要候选人用过,那一定能说得上。
 
3 再提问候选人,在使用(Redis或Dubbo或其它技术)时,遇到过哪些线上问题,是怎么发现的,怎么解决的?
其实这个问题是加分项,候选人只要通过前面的回答证明自己在项目里用过,哪怕这个问题说不上也不要紧,但如果回答出了,就能证明自己在这方面能力很资深。
 
4 再串起来问。这是什么意思呢?比如候选人说用了某个技术或组件,总是会解决一类问题。比如用了Redis是解决数据库压力大或高并发的问题,但解决此类问题不大可能只用一个技术或组件,往往会综合使用若干组件,同时引入(监控告警等)各种机制。
 
那我就围绕一个需求点,串起来问这些组件技术和机制的用法。这些问题看上去很高深,但如果候选人真用过,哪怕候选人本身只是初级开发,但多少能说出一点。
 
我在通过上述问题确认候选人是否在项目中用到某些技术时,其实对不同级别的候选人期望是不同的。对于初级开发,我只要求能说出大致的API用法或者文字性描述。对于高级开发,我要求多少知道点技术结合项目的细节。对于架构师,我就期望能说些解决过的实际问题。
 
但是不管怎么说,如果候选人在被问及上述问题时,无法很好地证明自己在项目里用过某些技术,那么我会质疑候选人项目的真实性,进而甚至会质疑候选人整体能力的真实性。一旦面试官有这些质疑后,那么后面的问题就会比较麻烦了。
 
如果大家就遇到只问技术的面试官,哪怕问得再深,都应当感到幸运,毕竟技术问题好准备,网上都有现有的答案。而且Java技术问题该准备哪些方面,比如准备JVM,安全管理等等方面,如果你不知道,多参加几次面试后也能知道。
 
也就是说,准备面试,技术问题好准备,但做到能结合项目证明自己用过该技术,有该技术的(资深)实践经验,这相对来说就不容易了,甚至有些候选人在面试前还会忽略这方面的准备。下面就说下,如何结合项目说明技术的方法,因为如果这方面说好了,面试就能达到事半功倍的效果。
 
1 为你简历上写的每个技术,落实个项目需求,或实际的痛点。比如要缓存会员信息,所以用Redis,因为线上出现过Redis失效,所以用Redis主从集群。其它组件其它技术一样准备。
 
2 网上能找到大多数java值钱技术的源码、使用经验和常见的坑。面试前,你就参照着这些说辞,在你项目中找个例子。
 
举个简单的例子,比如遍历ArrayList等集合,要考虑快速失效问题,你可以说,在你之前项目的xx业务里,出现过快速失效问题,后果是xxx,经过排查日志,后来发现并解决了,同时你再结合底层源码说明快速失效的原因,你这样一说,要比单纯结合源码说快速失效,不知道强多少。
 
其它的技术也一样,比如Kafka有消息重发,或者消息堆积,你就找个项目例子,结合需求,问题,解决方式和底层源码说,这样你就能很好地证明相关技术的项目实践经验。
 
3 围绕(高并发等)点,整合性地准备技术,同样需要结合项目。比如高并发方面需要考虑消峰,缓存和限流等问题,你就结合你项目中的秒杀或其它高并发需求,说下这些技术是怎么用的,引入这些技术后,最后达到了什么样的效果,解决了什么样的问题。
 
其实你如果按照上述步骤准备,不仅能很好地证明你相关技术的项目实践能力,其实你更能全面地准备你所掌握的技术点。
 
最后做个总结。
1 技术好准备,再被深挖也不怕,因为网上有现成资料,有现成说辞和现成答案。
2 证明在项目里用过该技术,这也不难,但事先要准备。如果不准备,甚至会被当成只会理论没实践经验。
3 更可以为值钱的技术找个项目落脚点,以此来证明你掌握的(资深)技术有项目背景。
 

这是我的公众号,其中包含了大量面试文章,同时我自己出了多本Python和Java方面的书籍,会定期在公众号里发书的电子版。请大家关注下我的公众号,谢谢了。

作为Java技术面试官,我如何深挖候选人的技能的更多相关文章

  1. 以技术面试官的经验分享毕业生和初级程序员通过面试的技巧(Java后端方向)

    本来想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,所以就干脆来分享些提升技能和通过面试的技巧,技巧我讲,公司你选,两厢便利. 毕 ...

  2. 顽石系列:Java技术面试

    顽石系列:Java技术面试 JDBC相关 1.Statement与PreparedStatement的区 别,什什么是SQL注⼊入,如何防⽌止SQL注⼊? PreparedStatement支持动态设 ...

  3. java技术面试之面试题大全

    转载自:http://blog.csdn.net/lijizhi19950123/article/details/77679489 Java 面试知识点总结 本篇文章会对面试中常遇到的Java技术点进 ...

  4. 【Java】面试官灵魂拷问:if语句执行完else语句真的不会再执行吗?

    写在前面 最近跳槽找工作的朋友确实不少,遇到的面试题也是千奇百怪,这不,一名读者朋友面试时,被面试官问到了一个直击灵魂的问题:if 语句执行完else语句真的不会再执行吗?这个奇葩的问题把这名读者问倒 ...

  5. Java面试官经验谈:如何甄别候选人真实的能力,候选人如何展示值钱技能

    我做Java方面的面试官也有些年头了,从校招学生到初级开发到架构师我都面试过.从技术上来讲,候选人通过面试的标准可能千差万别,但归结成一句话,就是候选人达到了职位介绍的要求,且相关项目经验达到足量的年 ...

  6. Java技术面试汇总

    1.servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request.resp ...

  7. 8年经验面试官详解 Java 面试秘诀

      作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三 ...

  8. 引用面试官文章 :如何准备Java初级和高级的技术面试

    本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只 ...

  9. 一个资深java面试官的“面试心得”

    在公司当技术面试官几年间,从应届生到工作十几年的应聘者都遇到过.先表达一下我自己对面试的观点: 1.笔试.面试去评价一个人肯定是不够准确的,了解一个人最准确的方式就是“路遥知马力,日久见人心”.通过一 ...

随机推荐

  1. 野指针和free总结超有用的资料

    在C语言项目中,经常会遇到需要程序员手动分配内存的地方.这样做能够节省大量的内存空间,也让程序更加灵活.只要你有一定的基础,那么肯定用过 malloc 或者 ralloc和free的组合.这个组合使用 ...

  2. 【做题记录】[NOIP2016 普及组] 魔法阵

    P2119 魔法阵 2016年普及组T4 题意: 给定一系列元素 \(\{X_i\}\) ,求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 . \[\begin{cases}X_ ...

  3. 算法:九宫格问题--奇数阶魔方(Magic-Square)

    一.魔方介绍 魔方(这里是简称,也可以叫幻方.魔术矩阵,Magic Square)是 n×n 正方形网格(n 为每侧的单元数),里面每个单元格填充了不同的正整数 1, 2, 3, ... , n2,并 ...

  4. OKhttp3的使用教程

    首先在build.gradle下的dependencies下添加引用. implementation "com.squareup.okhttp3:okhttp:4.9.0" 然后编 ...

  5. Zabbix 4.4 离线安装 使用mariadb的踩坑,无法停止服务

    先分享一个网站,之前就没注意过有这个网站,不知道是啥时候开放的.里面分享了N多zabbix的模板. https://share.zabbix.com/ 报错如下 Unsupported charset ...

  6. SpringCloud 2020.0.4 系列之 Bus

    1. 概述 老话说的好:会休息的人才更会工作,身体是革命的本钱,身体垮了,就无法再工作了. 言归正传,之前我们聊了 SpringCloud 的 分布式配置中心 Config,文章里我们聊了config ...

  7. prometheus(6)之常用服务监控

    监控常用服务 1.tomcat 2.redis 3.mysql 4.nginx 5.mongodb prometheus监控tomcat tomcat_exporter地址 https://githu ...

  8. 『学了就忘』Linux基础命令 — 33、管道符

    目录 1.管道符介绍 2.管道符应用 (1)例子1: (2)例子2: (3)例子3: 1.管道符介绍 管道符|,也是Shell命令. 管道符的作用是链接多个命令,把命令1的结果作为命令2的操作对象. ...

  9. selenium截屏操作(也支持截长图)

    1.常用的可能是谷歌和火狐做自动化在抛异常的时候可以截屏保存 from selenium import webdriver br=webdriver.Chrome() br.maximize_wind ...

  10. Part 28 AngularJS default route

    At the moment the problem is that, if you try to navigate to a route that is not configured, you wil ...