最近做面试官的经验心得

公司最近想找个初中级java,一到三年的那种,老大安排我筛简历+一面。老实说市面上找工作的程序员,工作经验在这个年龄段的比较多,每天都有五六十封简历过来(小公司大佬勿喷),但是陆陆续续招了一个多月了,仍然没有招到合适的,期间当然也有那种我们觉得合适但是最终没谈拢的,不过大部分来应聘的人员还是存在一些明显的问题,无论是简历还是面试。网上现在大多都是面经,所以今天我想以一个面试官的视角给大家谈一下,找工作中要注意的问题。

先说说简历,因为要筛的简历实在是太多了,攒一个周六周日,周一一来打开邮箱就是二三百的简历,我又没有那么富裕的时间去专心干这事,就只能给自己提炼一套快速筛简历的办法。到现在为止,基本上一个简历我看到的第一秒钟就会决定删掉还是留下来继续看看。先说一个事情希望大家不要喷我,我对那种之前只在外包公司工作过的简历pass的很快。这是我们长期面试以来的经验,同样也是简历反映出的事实。如果一个开发人员三年只做外包项目,基本上他的技术深度和广度都会受限。因为他们往往更注重于如何快速实现业务,而不是说如何让系统架构更合理,性能更好,而且如果不对一个项目做深入持续的跟踪对接,很难去找到自己以前代码中的一些不起眼的隐患和问题。

外包公司有没有技术大牛?当然是有的,所以我筛简历不只是看外包公司,但如果是下面这种情况的简历,我几乎不会去看你的项目经验而是直接删掉:外包公司而且不写自己擅长的技术。就是那种自我评价或者技术擅长里面随便几行就一笔带过的这种。我可以告诉大家一个面试的潜规则,面试的时候,面试官基本上都是对着你的简历问。因为说实话,java发展到现在,技术栈太宽广了,什么都有,如果真的是从头问到尾,那少说俩小时起步,而且你能那么有自信你啥都会么?简历什么都不写,面试过程会非常尬,我还得榨干脑汁的去想问题,然后问了你还得说你不了解这方面,我问你了解啥,不知道。一句话,连自己会什么都不知道,或者不想写的人,没有什么让你来面试的必要。

所以要么,你之前的公司是家不错的产品公司,要么你是外包公司,那你对自己的技术介绍一定要仔细。基本上这两种简历都可以活下来,然后稍微看下项目经验,用的东西差不多,就可以给人力安排面试了。那下面就进入到了另一个重要环节,面试。说实话,直到我开始面试别人以后我才明白,面试里面到底有多少坑。诚然,对我们程序员来说,技术能力是面试中最重要的,但这里有个逻辑,技术大牛也不是可以无所顾忌,技术一般的人也并不是说一定被pass。

面试一般都是你先去,联系前台,前台联系人力来接待你,注意,从这个瞬间开始,人力的考察就已经开始了。甚至于在这之前,人力的考察就已经开始了。那就是面试约的时间跟你来的时间。一般而言,人力跟你约的时间,都是他们真正想要你到的时间,迟到固然不好,但是相比迟到,你提前一个小时去也好不到哪去。尤其是约下午面试的,IT公司一般都有个午休的时间,12点到2点直接,我们人力经常就是约2点半开始面试,这时候你提前1点半过来面,没准人家刚准备趴一会,你来面个试,当然你来了我也得跟平常一样去面你,但是与人方便就是与己方便,能注意的细节一定要注意。或者是下午有两个面试,一个两点半一个四点半,然后四点半的三点来了,这时候刚好两点半的那个还不错,面试时间就会久一点,那你这个时候除了干等着,还能干啥。守时不仅仅是不迟到,不早到太久也是重要一面。

除了守时,人力会从你跟她简单的言谈举止中判断很多东西,例如你说话是否清楚,精神状态,言谈交流能力,基本上人力会有个大概的第一印象。这个印象很重要,具体为什么就不展开说了,总之大家一定要注意,但凡你是准备到这家公司入职的,从你进门开始,就是面试的开始。

然后基本上就是填表,等待安排面试。填表这个事我也想稍微说一下,字要尽可能的清楚,而且该填的都要填仔细,别填错。我倒是不太看这个,但是如果你表上有明显的错误,我们老大就会判断你这个人做事不够仔细,填个表都填不对,这不是能力问题,这是做事习惯。填完表人力就会过来找我告诉我人在哪,然后我就会过去敲下门进去。进去之后,我会跟面试者有个初次的接触,这个接触也能很快的看出一个人的社交习惯。大部分人都会跟你很礼貌的说下你好然后稍微站一下,当然也有那种坐在那特别淡定的回头看你一眼的,给人一种领导等待检阅我报告的感觉。

我还是那句话,我确实是在招程序员,不是招文秘。但是程序员依旧只是公司的普通职员,仅此而已。我不希望大家因为自己的工种就产生一种莫名的不一样的感觉,我可以跟其他员工不一样,不用那么在乎一些职场的条条框框。事实上,一个不听话的优秀程序员,跟一个听话的普通程序员,我更可能倾向于后者。在其位谋其政,将军有将军的当法员工有员工的当法,等你混到那个级别了你可以特立独行随心所欲,在此以前,公司需要的员工不是个性,公司需要的是效率,你必须能很好的与人沟通协作,才能更好的发挥出整个公司的动能。如果你觉得公司的人都是傻逼你可以单干,那请你去创业,类似的大佬当然是有很多很多的。但如果你觉得你的能力不足以支撑你像一只雄鹰那样翱翔天空,那请你在鸡圈里的时候就不要整天扑棱翅膀。

说多了,礼貌性的过了以后我会让你简单的说下自己之前的工作经历。很多公司可能愿意让你做自我介绍,我倾向于比较直接一点,毕竟你的个人信息在应聘表里都已经有了我自己可以看得到,没必要让人再啰嗦一遍,所以我都是直接让人介绍自己的工作经历。其实这是我考察的第一个点,首先根据你介绍的思路,说话的语速,整个人的状态,我能快速对你的思维类型做一个分类。

人,都是有自己性格标签的,内向的,开朗的,思维活跃的,思维缜密的。从一个人介绍自己工作经历开始就能看出这个人是属于哪一类型。这里我着重强调一种,因为我们毕竟是做开发的,所以你内向一点害羞紧张一类的,我是不在乎的,相反这说明你重视。但是我很讨厌一种,那就是不在乎的。整个面试过程中都会给我一种你爱要不要我就这样的感觉,既然你这么不在乎了你来面试干啥呢?锻炼自己么?这当中有一些代表人物,对我问的面试题还表示很不屑。

说实话,大家去面试的时候都会遇见一些可能说开发中用不到的问题,例如spring的IOC的概念。如果你也有这种想法,我只能说你永远都停留在一个初级java开发的层次上。面试官问你的问题,除了前面我说的你简历上写的以外,就剩下他们公司或者他工作中实际遇见过经常使用的问题。我在面试中必问的两个问题,spring的IOC与AOP,有些人就理所当然的表示我就是知道个概念,原理没深入了解过,因为用不到。用不到么?用不到只能说明你接触的业务少,或者叫做简单。我举个例子,众所周知spring的依赖注入在装配阶段,只能装配实现类而不能装配接口,那么如果一个接口有多个实现类,注入会发生什么现象?你会说我没见过,实际开发中也不会有这种问题。

那么假设现在有个DataSource接口,他有两个实现类,一个MongoDataSource,一个MysqlDataSource,我需要你在A平台用mongo,B平台用mysql,同时service代码用一套,你怎么做?你告诉我在service注入两个bean进去,然后A平台写一套代码B平台写一套代码么?这当然可以,那如果有十个平台十个数据源,你需要写十个service,就因为spring注入只能注入一个实现类?如果你不理解整个IOC容器的工作原理和流程,不理解spring中的Bean到底是个什么东西,spring为什么要设计这么个IOC容器,你怎么解决这种问题?

类似的还有AOP,很多人说这个没用,或者用过的我问他们怎么用,就是用来做事务。方法上加个注解就完事,那叫用过么?切面逻辑,切入点,通知这些基本概念都不知道,你怎么理解并运用如此强大的面向切面编程?对于这部分人来讲,IOC不重要,AOP也不重要,设计模式,JVM更不重要。很多人反感面试官问诸如此类的看似跟开发毫无关系的问题,而实际上呢?这些问题只不过是跟你的开发没有关系,跟我们的开发很有关系。以设计模式为例,如果你有个商品定价逻辑,现在你想要让商品定价关系发生变动后通知另外一个模块,你如何去实现类似的功能?去跑到商品定价的代码里面去注入一个service然后再调用个方法?很多人都这么回答,相当于把一个以解耦为目的的spring硬生生的用成了一个强耦合性的框架。

类似的问题还有很多,这里就先不展开讲了。例如面试常问的JVM,多线程等等并不是说用不到,只是说用的频率比较低,但是你给自己的定位是什么呢?如果你只能解决那种大家都能解决的问题,那你又凭什么要求自己拿一个高级java开发人员的工资或者职位呢?高级的意义不在于他搬砖的问题比你强多少,而在于遇见一些疑难杂症别人都束手无策的时候,他立刻能提出解决思路或者方向,这个能力,不是凭空说来的,全靠你对java底层的一些基础的理解。所以我希望大家面试的时候,首先心态要端正,人家问什么我们就答什么就可以了,不会只能说明我们自身有问题,而不是问的有多苛刻。我也知道有些面试官喜欢刁难人,但那种公司,不去你也没损失什么,不是么。

继续说面试。其实一旦到了面试,有个很重要的问题就是,大家简历一定要写好。前面我一再强调,基本上我是会主要问你简历上写的东西,所以简历,一定要实事求是的写。你会什么就写什么,会到什么程度就写什么程度。例如很多人喜欢写自己精通tomcat,我问他tomcat的核心组件有哪些?答不知道。我想可能我问的不清楚,我就问,server.xml里面注册了哪些组件?答曰注意看过。那你告诉我你这个精通是精通了些什么呢?把一个war包扔到webapp目录里,然后执行下命令启动成功就算成功了?server,service,engine,host,connector这些概念都不知道,启动流程的源码都没看过,哪来的自信说自己精通tomcat。

我为什么强调简历不要夸大,因为这些问题,如果你不写,我不一定会问。你只写个熟悉tomcat的配置,那我顶多问问你tomcat配置文件里面都改过什么,如果你要写熟悉tomcat调优,那我肯定就要问题你tomcat常用的调优参数,注意别再拿jvm的调优参数当tomcat的调优参数了。如果你要写精通tomcat,那我肯定会问你tomcat组成,启动,集群,session,并发,调优一类的问题了,我们自己一定要对自己写的东西负责,类似还有spring,你要是写熟练使用,那我顶多问问bean的注入方式啊生命周期啊作用域啊,IOC,AOP一类的概念性的,如果你写精通,那我肯定是要问IOC容器的实现原理,applicationcontext跟beanfactory的关系区别联系,如何自定义bean的注册加载过程,如何动态注册bean,AOP的实现原理,AOP如何获取方法返回值,springboot启动流程。所以说会就是会,不会就是不会,会多少算多少。你没写,我问了你不会那可能不是你擅长的,如果你写了还不会,我就会在心里觉得你这个人不靠谱。

另外就是大家在讲述自己过往工作经历或者项目到时候,一定要具体。因为除了技术能力,小公司里也很侧重另一块,业务能力。这个业务能力在面试中,着重体现在一个人对自己过去做过的项目的描述。公司是干啥的,业务上主要负责哪块,实现了哪些功能,负责哪些模块,解决了哪些问题,用到了哪些技术,这一块说的一定要有清晰的思路,这样才能体现你的业务理解能力。三年左右的有些人有带小组开发的经验,试想你作为一个小组长,你连自己负责的业务都说不清说不详细,你是怎么给手底下的员工安排任务的。

面试的整个流程,当然首要考察技术实力。毕竟我们都算是个技术工种。但是技术能力一般,但是业务能力强的人,在我这里是有几率获得二次面试的概率的。当然有额外的条件,额外条件很苛刻,首先你的逻辑表达能力,一定要清晰。因为你技术实力一般的话,招进来基本上前期我是主要会让你负责一些业务逻辑的开发,开发业务逻辑就必然经常会和产品啊商务运营这些其他部门的人打交道,跟非技术部门的人沟通交流,表达能力就显得尤为重要。好的沟通表达能力能大大提高你的工作效率,避免一些因为沟通交流上的误区导致的不必要的工作失误。

其次,学习能力。这点在刚毕业一年左右的人身上尤为重要,因为如果你工作三年了,学习能力强的话你技术实力肯定不错,但是工作一年左右的小伙子,技术上多少还不算很完善,这个时候学习能力就显得尤为重要。如何考察一个人的学习能力?阅读的书籍,知识面的广度深度,对一些底层原理性的东西的掌握,尤其是网络和数据结构。对于刚刚毕业不久的人来说,我经常会问一些数据结构和java基础的东西,毕竟这些也是你曾经学习的,而且也是每个优秀程序员所必须要掌握的,你工作久了可能会稍微遗忘,但是刚刚毕业,这方面基础的实力是体现你学习能力的重点。底子越厚,后面成长越快。

再其次,解决问题的思路和能力。面试中我会经常性的针对他们以前是业务场景提出一些问题,看他们实际的解决思路,典型的基于redis的缓存击穿,消息队列的数量上限,还有一些刁钻点的技术问题,例如大家都知道垃圾回收可达性分析,那如何写一个永远不会被gc回收的对象?synchronized关键字修饰静态方法跟普通方法有什么区别?双重锁的单例模式一定线程安全么?另外就是一些具体的业务逻辑。类似的问题,其实重点不是考察你答的对不对,而是考察你分析,解决问题的思路,蒙出来的答案可能对,但一定不是我想要的。

整体而言,大家简历一定要充分展现自己的技术实力和擅长的东西,面试一定要注意基本的社交礼貌,态度不卑不亢即可,毕竟本身面试就是一个双向的选择,我选择你的同时你也在选择公司,再者就是大家一定要对自己有自信,哪怕你技术实力可能没有那么优秀,但如果你身上展现出其他的优秀的软实力和发展潜力,还是可以找到心仪的工作。当然最重要的还是自己的技术实力,不得不承认的一点,技术大牛永远是不愁工作的。

 

你可能感兴趣的:(Java)