应聘者
我叫小志,是一个毕业3年的Java后端开发,在一家传统银行的研发中心负责主要的研发岗位。虽然这份工作并不是很忙,给我的薪水也算不错,但是用到的技术都是比较落后的,而且银行都比较保守,所以迭代速度也没那么快。
身边的同事大多数也都是比较安于现状的,有一些新的技术也不乐于尝试,甚至有些老员工就是每天摸鱼,从早上混到晚上。
最近和一个前同事聊天,他之前和我水平差不多,后来跳去了国内的一家互联网大厂,在他的怂恿下,我决定尝试换一家公司。
于是我准备了一份简历,投递了几家我有意向的大厂。我还是比较有自信的,一方面我有几年银行的开发经验,而且我那个前同事水平还不如我呢,都轻轻松松拿到了P6+的Offer。
很快我就接到了第一家面试邀约。打电话过来约我的是一个大厂的面试官,他问我什么时候有空,想要和我约一下电话面试的时间。我想都没想,直接约了当天晚上。
我还挺佩服大厂的效率,这么快就约面试了。面试之前为了保证有一个好的心情,我出去看了一场电影,《半个喜剧》,演的还不错。
到了晚上开始面试了,很久没面试了,但是我丝毫不紧张,毕竟我并不是初出茅庐的学生了。
面试官一上来让我做自我介绍,我也没什么准备,就简单说了一下自己的经历以及最近做过的一些项目这样的。
这时候我才知道,面试我的部门是一个互联网金融相关的部门,面试官似乎对业务比较感兴趣,可是这明明应该是一场技术面试啊,为什么上来就问我一些和信贷、支付相关的业务呢。
这些东西我接触的并不多啊。虽然工作中都是做这些业务的开发,但是我只负责其中一个模块的功能实现,哪能对整个业务了解的那么清楚啊。
所以我简单的应付了他一下,友善提醒他问我一些技术问题。
面试官还挺识趣的,接着问我一些和我做过的项目有关的问题,但是我感觉问的这些问题都太偏了,或者说有些问题根本不是我该考虑的呀,还有一些场景我根本没遇到过让我怎么回答。
比如都是这样的问题:
你们为什么要使用消息中间件,技术选择是怎么做的?对其他消息中间件对比过吗?
你们和上下游系统之间的交互,怎么解决数据一致性问题的?超时了怎么办?
你们的数据量有多大,峰值QPS是多少?
这些问题我平时都不太关心的呀,所以我基本没怎么回答。
可能是他也发现自己问的问题太偏门了,所以转而问我
你对Java基础知识掌握的怎么样啊?
这种问题让我怎么回答呢,我能说不好吗?肯定是说还可以啊。
接着他开始问我一些和并发相关的问题,上来就是Java内存模型,我向来不爱背概念,所以这个我回答的不好。
他又追问我一些和锁原理有关的知识,但是我平时工作的时候很少直接用到并发编程,所以和面试官说了下这个情况,让他问一些其他方面的问题,毕竟并发在工作中直接用到机会确实不多,面试官也表示理解。
接着他开始问我的知识,都是我上大学时候一些知识,都是很基础的东西,我现在基本都忘的差不多了。先问了JVM,又问了集合类,最后还问我和异常有关的东西。
但是这些知识很久没有复习了,也不是太能想的起来的,但是我还是对于一些知识根据我自己的印象回答上一些关键字的,虽然不是很顺畅,但是我觉得我回答的还可以的。
这段关于Java知识的问题问了挺久的,接着有大概4-5秒的沉默,接下来的事情我万万没想到。
"我们讨论一道概率的问题吧" "要不然我们轻松一下,脑筋急转弯你怎么样?" "你平时看书吗?最近在看什么技术书籍啊?" "那你平时的时间都做什么呢?打王者荣耀吗?那你什么段位啊?"
这个面试官问的东西越来越让我摸不到头脑,这都是什么鬼问题。后来他似乎听出我言语中的不满了。然后就又简单的说了几句就结束了这一场莫名其妙的面试。
面试官
我是Leo,在家时我是一个技术宅,在工作时我是个后端技术专家,业余时间我又是一个技术博主。
今天收到一份同事推荐的简历,看到候选人是某个985高校毕业的,并且在国内某大型国有银行做过后端开发,很适合我们部门,于是满怀期待的想要约一下候选人的面试 。
电话打过去之后,很顺利,约在了当天晚上的面试。这位候选人答应的如此爽快,看了最近应该也接到了很多其他公司的面试,一定是准备非常充分。晚上面试的时候一定要想办法争取下这位优秀的候选人。
晚上面试的时候,候选人做自我介绍的时候好像有点紧张,有一点点不是很流畅,但是我还是听懂了他是负责银行信贷系统的业务开发的。
正好我们部门也有信贷相关的业务,于是我想着问他几个业务上的问题,一方面看看他适不适合我们这个部门,另外也看下他是不是一个懂业务的技术开发。这一点我认为还是很重要的,我们本次要招的是一个高级Java开发的岗位,要求要懂业务。不懂业务的业务开发不是个好开发。
不过不知道是不是传统企业内部体系的问题,候选人好像对自己负责的业务的上下游了解的并不是特别多。只是对自己负责的模块还有一些了解。
我面试的时候,从来不会事先准备题库,都是根据面试者回答的情况,从他的回答中摘选出我感兴趣的点追问下去。
大多数情况都是从业务问到技术选型,问到技术架构,再问到如何解决遇到的技术难点,再过渡到一些技术细节,进而问一下Java基础知识。
所以,业务上问过了之后,我问了一些关于项目的内容,主要是想考察下这位候选人有没有钻研精神,我们不喜欢那种只会用,而不去考虑为什么用的人。
但是由于候选人回答的并不好,只能转而问一些他可能比较擅长的就是工程开发内容,那就是Java基础知识吧。
因为面试一个3年的,有丰富经验的开发,所以我会比较关注一些比较高级一点的知识,比如并发编程、JVM等。
什么是Java内存模型synchronized的原理JVM运行时区域有哪些?GC算法有了解吗?如何判断一个对象可回收?了解Java的类加载机制吗?
但是候选人说这两部分内容平时工作中接触的不多。有些问题还能回答上一些,而有些问题好像面试者对于一些名词都比较陌生,比如"双亲委派"。
虽然这些日常开发用到的不多,但是这些都是很基础的知识,一旦线上出现故障,不了解这些知识只能是个无头苍蝇。好吧,没用过的我不问了,那集合类一定用过咯。先来个开胃的吧:
你知道HasMap和concurrentHashMap的区别吗?不知道啥是concurrentHashMap?那HasMap和hashtable的区别呢?平时只用了一些ArrayList。那说说ArrayList和LinkedList的区别呢?
额、额、、额额、、、我本来还准备问一些和并发包有关的,比如CAS、COW之类的,看来也用不到了。
气氛越来越尴尬,作为一个面试官,我必须保持冷静,保持微笑,保持礼貌!
试图问一下面试者自己觉得自己对Java中哪部分了解最多吧。
异常有几种类型?工作中遇到过哪些运行时异常异常应该如何处理?
额、还是回答的不是很好吗?可是面试时间才过了20分钟,我不能就草草的结束啊 ,那样对他太不尊重了,我还是要尽力挖掘下他的潜力。
那我们讨论一道概率学的问题吧。
假设有一个村子,所有夫妻约定如果生出一个女孩,就停止。如果生出一个男孩,就继续生,直到生出女孩位置。那么估算下,很久很久以后,这个村子的男女比例
概率学的问题有一个好处,就是候选人可以多些时间思考,这样又过了大概5分钟。
作为一个面试官,我代表的是公司形象,我不能笑,更不能哭,我要坚强。怎么样也得再坚持5分钟,凑够半小时的面试时间。不然会给候选人留下不好的印象,甚至阴影。要不然我们出一个脑筋急转弯吧?
上课老师抽查背课文,小猪,小狗,小猫都举手了,老师会叫谁?
…. ….
OK。时间差不多了,问下候选人有没有什么问题要问我吧。
我都准备好要回答他我们的部门是做什么的,主要用哪些技术之类的了。
但是结果候选人说没有了…
好吧,在对候选人表示感谢之后,在尴尬中结束了这次尴尬的面试。
本故事纯属虚构,如有雷同,纯属见鬼。不过呢,作为一个面试官,是想通过这样的故事,有一些建议给到大家:
1、珍惜面试机会,一定要做好准备再参加面试。
2、不管是什么程度的技术人员,最基础的技术知识还是要了解的。
3、不要只闷头做业务,还要没事儿回顾下自己的技术,千万不能荒废。
4、如果是业务开发,要对自己负责的业务以及上下游相关业务非常了解。
5、别试图蒙混过关,在我这,没这可能。最后,祝大家都能拿到满意的Offer。