作为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. 2021.7.29考试总结[NOIP模拟27]

    T1 牛半仙的妹子图 做法挺多的,可以最小生成树或者最短路,复杂度O(cq),c是颜色数. 我考场上想到了原来做过的一道题影子,就用了并查集,把边权排序后一个个插入,记录权值的前缀和,复杂度mlogm ...

  2. Git新建本地分支

    作为一名码农,Git的使用就像家常便饭,时时刻刻都要用到. 通常我们在开发或者调试某个功能的时候,一般会从主分支新开一个单独的分支仅供自己使用,当我们开发完成后在提交合并请求给管理员,管理员进行代码审 ...

  3. cf 12B Correct Solution?(贪心)

    题意: 一个数a,一个数b. 现在要将a的每一位上的数字重新整理,生成一个新的不含前导0的数a'. 问a'是否等于b. 思路: a上每一位的数字从小到大排序,找到最小的非零数和第一位交换. 代码: c ...

  4. VS2013快捷键及技巧 / 智能插件

    复制/剪切/删除整行代码 1)如果你想复制一整行代码,只需将光标移至该行,再使用组合键"Ctrl+C"来完成复制操作,而无需选择整行. 2)如果你想剪切一整行代码,只需将光标移至该 ...

  5. Swift-技巧(一)缩放并填充图片

    摘要 直接操作图片来实现它的缩放或者填充多余空间,首选 UIGraphicsBeginImageContext 函数来实现,它就相当于一个画布,你甚至可以用它来涂鸦. 最近有一个需求,就是将图片先等比 ...

  6. 问题解决:补充安装c语言的库函数和系统调用man手册

    问题解决:补充安装c语言的库函数和系统调用man手册 ​ 今日份麻麻~上课时大家的Ubuntu都可以通过man查到关于stat的库函数,但是我的Kali查出来是这样: ​ 询问老师之后得知需要去安装相 ...

  7. IDM使用教程:利用IDM下载百度网盘文件

    IDM是什么 其实我使用IDM下载器只是为了方便网页版百度网盘直接下载大于40M文件而已,大家知道文件过大必须打开客户端才能下载,这点对于我的破电脑感觉很烦躁,每次要等待它慢悠悠打开,然后动用我的超级 ...

  8. Jmeter二次开发实现自定义functions函数(九)

    在Jmeter->选项->函数助手对话框中我们可以看到Jmeter内置的一些常用函数,但考虑到测试过程中的实际情况,我们经常需要在脚本引用或者实现自定义的函数.那么如何在"函数助 ...

  9. shiro session返回问题

    /** * 3.会话管理器 */ public DefaultWebSessionManager sessionManager() { CustomSessionManager sessionMana ...

  10. css--元素居中常用方法总结

    前言 元素居中是日常开发和学习中最常见的问题,同时也是面试中经常考察的知识点,本文来总结一下这方面的知识点. 正文 1.水平居中 (1)子父元素宽度固定,子元素设置 margin:auto,并且子元素 ...