作为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. 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接建立---三次握手、tcp连接释放---四次握手)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105516090 学习课程:<2019王道考研计算机网络> 学习目的 ...

  2. 新手使用python以及pycharm看过来

    前言 随着互联网时代的进步,人类与计算机之前的沟通交流越来越便捷,自此交流的媒介--编程语言吸引力更多的人学习,今天我们就来谈谈当前市面上最火的编程语言 1.文件的概念 什么是文件夹.文件 其实是操作 ...

  3. 变量命名网站 Codelf

    程序员最头疼的事情除了头发以外就是给变量或函数命名,一开始学编程语言的时候还可以 abc.a1.x2 等方式命名,等到工作过程中开始真正的项目开发时,如果还是这样随意的命名,即使同事可以忍受你的 ab ...

  4. /etc/passwd 和 /etc/shadows 详解

    linux操作系统上的用户如果需要登录主机,当其输入用户名和密码之后: 首先在/etc/passwd文件中查找是否有你的账号,如果没有无法登录,如果有的话将该用户的UID和GID读出来,此外将此用户的 ...

  5. ansible主机组配置及秘钥分发

    ansible主机组配置及秘钥分发 ansible主机组文件位于/etc/ansible/hosts文件中 1 hosts主机经常使用到的变量为: 2 ansible_ssh_host #用于指定被管 ...

  6. 简单的SQl时间序列生成,每次时间间隔10分钟。

    create table #timeseries(Times datetime not null) go declare @firstdate datetime , @lastdate datetim ...

  7. 测试开发【提测平台】分享14-Vue图标Icon几种用法并利用其一优化菜单

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 回归主线更新,由于本次知识点只有一个,就不给思维导图了,在上系列测试平台开发实践中主要学习了页面直接的转跳方法和远程搜索的如何做,最终实现 ...

  8. 后台大哥请进一步:使用Visual Studio编译scss和souce map实现前后端的完美结合

    title: 后台大哥请进一步:使用Visual Studio编译scss和souce map实现前后端的完美结合 date: 2020-06-28 sidebarDepth: 2 tags: win ...

  9. [hdu7062]A Simple Problem

    称序列$\{a_{1},a_{2},...,a_{n}\}$​的答案为$\min_{0\le i\le n-k}(\max_{i<j\le i+k}a_{j})$​​(特别的,若$n<k$ ...

  10. [hdu7026]Might and Magic

    (以下默认$A_{0},D_{0},P_{0},K_{0}$都为非负整数) 显然存活轮数$S=\lceil\frac{H_{0}}{C_{p}\max(A_{1}-D_{0},1)}\rceil$​​ ...