声明:本文首发微信公众号【菜鸟要飞】,如有转载,请标明出处!
前几天从非技术的层面分享了我最近一次跳槽面试的经验,感兴趣的可以看看——工作三年后,才敢向大厂跳槽......其中提到了面试官往往喜欢从面试者简历上展现的某一个技术点对其深入考查,今天则分享下面试官是如何深入“虐”我的。
我的技术面试是从简历的第一句话开始的:扎实的Java基础,熟练掌握常用的设计模式。相信很多读者的简历,关于技术方面的描述都是从这句话开始的。
面试官有点匆忙但又一副全副武装的神情,完全没有按照常理出牌,拿到简历后,没有自我介绍环节,直接进入正题。
“看你对设计模式掌握的还不错,说说在项目中常用的设计模式”
“用到过单例模式、观察者模式、工厂模式、适配模式、动态代理模式等”,其实我在实际开发中,至今没写过任何的设计模式,这些模式在项目中确实用到过,只不过由架构组封装好,我们业务部门只需要调用。但面试前我把单例模式反复敲了很多遍。所以又补充说,“但在实际项目开发中我使用最多的是单例模式,其余基本上是在研究开源项目时学习过的”。
果然,面试官就朝着我设想的道路大步而来,“那你说说,单例的几种实现方式”
此时我有点暗自得意,这个问题很对此时的我来说很easy,于是开始了我的表演,叭叭叭讲了一会,还从加载机制上做了分类,并介绍了各自的优缺点。
面试官随后拿出纸笔,说到“手写一种你在项目中使用的实现方式”。
于是,我假装思考了几十秒,开始手写代码,尽管我已成竹在胸,但还是表现出很吃力的感觉,以免让面试官看出来我是准备过的。感觉自己真是个机灵鬼呢。
面试官针对这个双重检查锁的单例开始了一轮狂轰,几乎对每一行代码都进行了考查。为什么对变量加synchronized而不是对方法加;为什么使用双重检查锁等等。
对这两个问题因为紧张回答的有点语无伦次,很多细节也都忽略而过,但最后还是绞尽脑汁的总结一下:同步锁和双重校验都为了保证即使在多线程下也能保证实例的唯一性。自我感觉有点心虚,偷偷瞟了一眼面试官,只见他点了点头,我还是有点窃喜的,心想单例这一块应该过关了吧,我一个做Android开发的,掌握这些应该很不错了。
又见他不紧不慢的问到,“那为什么单例的变量要用volatile修饰呢?”,看那个样子,他的表演才刚刚开始.....
我心里是一万个曹尼玛,真的连第一句都不放过吗?幸亏我了解过这个知识点,战战兢兢的说道,“volatile是轻量级的同步锁,能够保证变量的可见性”
“恩,在new实例的时候不是使用过synchronized进行同步阻塞,为什么还要使用volatile保证可见性呢?”
我的内心开始有点慌乱,实在不知如何回答,空气突然有点安静,但内心依旧告诉自己,不要轻易说不知道。于是又重复了刚才的总结,“也是为了保证变量的唯一性。”
面试官似乎不愿意放过我,说道,“你刚才也说过了同步锁和双重校验就是为了保证实例的唯一性啊,那他们是不是重复了,volatile没有存在的必要吧。”
此刻,我开始咒骂自己,真是手贱啊,为什么写这种实现方式呢?但话说回来,尽管在面试前这种实现方式我研究了不下于十次,但真的没有认真了解过volatile在这里的真正作用,此刻我也怀疑volatile是不是多余的。我不得不委婉的说道,“这个点我有点遗忘了。。”
面试官仿佛总能记住我回答过的每个关键词,接着问,“刚才你说到volatile的可见性,那你能具体讲解一下可见性的含义吗?有什么作用?”
好吧,这特么是到java内存模型了吗?我最终还是直截了当的说出了那三个字——不知道。我内心有点气愤,我就是个做Android的,java基础问这么深,至于吗?于是面试官将视线转移到简历上,开始寻找下一个技术点........
当然,上面的面试场景中,关于面试官考查的方面绝对真实,而“我”的回答为了迎合氛围做了调整。事实上我回答的还算可以,volatile的在单例中真正作用我还是知道的,而且考查的技术点从java内存模型延展了java的内存分配再到jvm虚拟机最后延续到jvm的回收。虽然在很多方面回答的都有缺陷,但不至于完全懵逼的地步,毕竟我准备了很长时间。
就是想告诉大家,大厂面试官的面试套路基本如此。每个技术点都会深入考查,直到你或者面试官自己不会为止。还是那句话并不是面试官为难面试者或者炫技,只不过想考查面试者的技术深度。
那技术的深度又怎么定义呢?也不少大牛说过,研究源码或原理的时候不要太在意细节,很容易钻牛角尖,要抓住技术的关键点。但哪些属于细节哪些属于关键点呢?对每个人都不一样吧。我个人来说,在平时的学习中,在java层面只要看不懂的地方都是关键点,就是一层技术深度,我会尽可能的去研究,直到实在啃不动就先放放。相信有读者和我有类似的同感,一个知识点当时不明白,等过段时间再看就会恍然大悟。经过一段时间的坚持,在技术深度上也会有所积累。
总之,简历是你最好的复习大纲,简历上展示的技术点一定要做深度复盘,否则你会被虐的怀疑人生。
欢迎关注我的公众号:【菜鸟要飞】 ,面试宝典、学习路线、源码分享等等你来学