相信很多同学在面试找工作的时候 都会遇到一些困难,不知道HR会怎样提问,这里我用我自己的HR经历 给大家分享一下。

一般我会问面试者一下几个问题。

1、首先我会让面试者谈谈自己的情况,介绍下自己做过的项目以及负责的模块

这块一般会被当成开场白,因为泛泛介绍一下以后通常还会深入探讨细节。不过有一个人例外,他直接在这个阶段就打动我了。

他当时除了介绍他的项目和模块是干嘛的,还拿张纸给我画了他们的代码业务流程图,从哪个模块调用哪个模块,哪个系统调用哪个系统,先做什么再做什么,还包括了如果哪步出问题,他们是怎么处理的,有条有理,思维严谨,虽然没有涉及什么高级技术,我当时就下定决心这个人要了。后来入职的半个月也充分证明了这是我最正确的选择之一,他总能提前干完还一直缠着问还有没有活干了,比很多老员工效率要高。

在这个环节,我觉得面试者应该把之前所有的紧张不安的情绪全部稳定下来,因为我相信这个问题,面试者应该已经做好了充分的准备,并且应该要有足够的勇气跟自信来回答这些问题。

2、简单的介绍完毕,接下来我就会面试一些项目中的细节方面,比如这个项目的客户是那些人,项目的具体用途。

这个阶段就有人被淘汰了,有的人表达得结结巴巴,不懂如何描述,或者前后不连贯,想到哪算哪,最后对他的项目干嘛用的还是一头雾水。感觉就是个照猫画虎干死活的,我肯定这样的人和产品需求人员沟通一定会出大问题,误会和返工少不了,因为他没法表达清楚他做的项目的业务。要不就是 这个项目就是他伪造的经验。

我的java交流群659170228

3、接下来我会就他用过的主流框架问些细节。

一般先问持久层,不外乎是hibernate mybatis或者jdbc,用jdbc的,先来解释下他们是怎么开启事务的,统一配好就不管了呢,还是会按需调整事务的特性。工作几年的我一般不再问事务有什么意义,一年以下的我会问事务有什么用,没有会怎么样。结果令我很意外,那些做了半年多项目的实习生们,只有一个人答对了,事务能保证一致性,出错会回滚,其他人都是些什么能让条理更清晰啊,性能更好啊......少年们,事务对于使用数据库的意义就像盐对于炒菜一样重要好不好,做为一个做了大半年增删改查项目的人,请不要老拿:我们就是做功能的,原理不清楚来应付。弄懂事务的意义10分钟就可以了吧。

当然也有人记得那个经典的银行转帐的例子来讲事务的作用,我很刁难地问了一个:如果出帐的帐户和入帐的帐户不在一个数据库里怎么办?然后就没有然后了

然后我会问的一般还有,事务开启了,有什么办法在事务过程中,出了异常也不回滚数据库操作。这个问题答不上来也没关系,因为需要这么干的时候不多,在分布式系统里可能会有这种需要。我主要是观察对方的反应,我最欣赏不知道的反应是立即请教怎么样能做到,最讨厌的反应是说不会有这种需要的,脸上带着一副懂这有什么用的不屑。

hibernate可问的问题还挺多的,但我不会问些什么save和saveOrUpdate有什么区别,我觉得这真是八股,一共就两方法,一个保存不了换一个试试就解决了,百度都不需要。我更想问,怎么样在代码中动态控制延时加载的效果,怎么样用hibernate实现只查一张表的部分字段而不是整个表get出来,这些对开发质量更有实在意义。

其他的问题也不一一描述了。

4、三大框架的高级用法我不会怎么问,我不需要你深入研究透这个框架,当然如果你真的研究透了绝对加分。我更希望你用得清晰,用得明明白白,而不只是“别人这么用的我也就这么照抄了”。

比如对于初级开发人员我有个喜欢问的很简单的问题是,你从你的控制层,调service层的一个保存数据的方法时,service一般会返回什么类型的值。有的人回答boolean,有的人回答String,boolean的我会追问那如何获得保存后的数据库记录主键,String的会追问保存失败以后应该返回什么。这个问题确实太简单了,做法很多,但是我想看的是对方的思考方式是否有条理,合理,而不是逮着什么方便就怎么写。有的新手会对着自己的代码想,这样写好吗,换个写法是不是更优雅合理,有的人却是能实现就行了,让他想想其中的道理时,就真的一头雾水。

这个问题我最讨厌的回答是:太久了,已经忘了。这你都能忘你还能记得什么!你的项目真的是你做的么?

最喜欢的回答:我们封装了一个返回结果的基本类,里面有一些处理结果标识和通用的异常定义,不同的方法会返回不同的子类,子类中定义了调用端所需的各种信息对象DTO。没有人类似这么答过,我自己YY而已。

5、接下来是知识广度,从缓存到集群到分布式调用,nosql,MQ队列,maven、svn,看他们对这些技术了解多少,也许因为项目经历所限,你没机会用过这些技术,但是随便上一些技术网站,都能了解到现在流行什么,这些技术是为了解决什么问题存在的,你看这些技术也说明你注意到了一些问题的存在。视野开阔的人,说明他的求知欲强。也许应聘者很多关于各种技术的回答是错的,但是我能看出来他是想过还是没想过,是有自己的一套认知还是胡说八道。你说错没关系,我们团队里有懂的人,他以后会给你把观点改正过来,但是想都没想过,差距就显而易见。如果面试者了解一些分布式,大数据方面的知识 那么他就会在我这里加分不少。

我隔壁办公室的一个项目经理招人的时候和我最大的差别就在这,他要那些尽可能答得正确的,懂得多的,有经验的,因为他们团队没有架构师,全靠程序员的知识准确性保证质量,他得依赖招来的人的知识准确度。我不缺解决问题的人,尤其不缺依靠搜索引擎就能解决问题的人,我只要你能够思考问题就行。