前两天有位朋友去应聘百度测试开发工程师,面试完自我感觉还行,手撕算法、手撕 SQL 都写出来了,八股也回答的不错,但被通知没通过一面。所以朋友就有点不解,于是就跑来问我原因。
从上面的聊天记录可以看出,面试官的反馈有两个未通过的原因:
- 自我思考力一般。
- 学习能力一般。
题外话:这也太较真了吧?
有人可能会觉得,这面试官太较真了,能力技术够用不就行了吗?干嘛还要求这、要求那的。这不是就是面试造火箭,工作拧螺丝吗?
这两年大厂的招聘现状确实如此!为什么呢?
因为大厂的岗位就那么多,而全国所有的开发者都想进大厂。
为什么?薪资高、待遇好啊。随随便便找一个大厂的工作,每年至少能拿大几十万,这种薪资待遇,是其他行业很罕见的。
这个时候你就会发现,一个关键岗位的名额,来应聘的都是各路大神,名牌学校、高学历就不用说了,各种耀眼的工作/实习经历,各种技术和中间件也都是聊如执掌。
那么,这个时候问题来了。我面试了 10 个人,只招 1 个人,但 6 个人都答上来了大部分问题。那这个时候,如果你是面试官,你会怎么选?你会选谁?
了解了上面的处境,你就知道为什么这两年大厂面试要如何严苛了。
聊回正题
那怎么理解上面的那两个问题呢?(自我思考一般和学习能力一般)
下面,我来分享一下我的见解。
① 自我思考力一般
指的面试时,回答八股都是“标准”答案,没有自己的思考在里面。例如,当面试官问你,为什么 CurrentHashMap 不能插入 null 值,但 HashMap 却可以?
这个时候,你只回答了,因为 JDK 源码里面强制规定了,CurrentHashMap 的 key 和 value 为 null,就会抛出空指针异常,所以 CurrentHashMap 不允许插入 null 值,但 JDK 源码里没有对 HashMap 进行这样的规定,所以 CurrentHashMap 不能插入 null 值,但 HashMap 却可以。
那你说这个问题你的回答对不对呢?
当然是对的,但这种“标准”答案,大家都知道。所以这样回答就不能体现你的思考和技术优势了。
那要怎么回答呢?这就要求你回答问题的时候,不要浮于表面,要把更深层次的原因说出来,例如,CurrentHashMap 是给多线程下使用的,而多线程下使用时,没办法证明 null 是因为本身就没设置值为 null,还是因为设置 null 值,所以为 null。这个问题,这就是二义性问题。
也就是说二义性问题,在并发环境下没办法被证明,然后再举例说明,为什么没办法被证明?这样才能让面试官知道,你是真的搞懂了这个问题。
类似的问题还有很多,例如,什么样的场景下索引会失效?
如果你只是照本宣科的说了哪些烂大街的“标准”答案,在遇到 XXX 时会失效,在遇到 YYY 是会失效,这就是思考力不足了。
你要回答遇到这些问题更深层次原因,为什么遇到 XXX 就会实现的底层原因是啥?这些失效的场景之间有没有什么共性?这些共性问题的原因是啥?等等,这才是这个问题的关键点,搞懂问题背后的核心原因才是关键。
所以只知道“标准”答案,应聘中小型公司还行,大公司就有点不够打了。
② 学习能力一般
这一项是指你的专业技能水平一般,你会的技能,其他应聘者都会。例如,Java 中的 Spring Boot、MyBatis、MySQL、Redis,这些都属于基础技能,来应聘的人里有 10 个人,但 11 个人都会的这种技能,这种技能大厂肯定是不买单的。
所有公司都期望你会的技能是超越了日常工作中所有的技能的,例如,微服务 Spring Cloud、中间件 MQ、ES、Netty、Dubbo 这些,这些才是面试中能打动面试官的点,也是 Java 中的核心技术了。所以如果你想从事 Java 这一行,一定要把最核心的技术搞懂,这才是你的核心优势。
小结
面试不是只准备“标准”答案就够了,需要你掌握答案背后深层次的原因才行;学技术不是工作中够用就行了,最核心的技术会对你找工作有巨大帮助的,所以 Javaer 从业者,一直干、一直学才是正确的姿势。进一步有一步的欢喜,学会本身就是意义,又何必在乎用没有被用到呢?
本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。