在上一篇内容中,我们介绍了什么是CountDownLatch,但是还不足以应付面试,面试的时候,经常性的会问CountDownLatch的实现原理。
那么在这里,我先普及一个观点,就是回答某项技术的实现原理时,你脑子得有自己的一套回答框架,不然会被面试官问的哑口无言的。
你是不能全按照面试官的节奏来的。同时掌握了这套回答框架,也非常有助于快速吸收和理解知识。
好,我们来模拟一下,面试官来问我问题时,然后你看我怎么回复的。
面试官:有了解过CountDownLatch的实现原理吗?
我:CountDownLatch就是薄薄的一层,底层是借助AQS(抽象队列同步器)来实现的。
就这句话就够了,剩下的就是看面试官会不会继续追问,不追问,这道题就过了。
也即是:先从更高维度的视角去回答问题先。
但是为了说出上面这句话,我的确是去看了CountDownLatch的源代码了,只是我会用「从细到粗」的方式去看去梳理的,最终一定是浓缩出,一句话,几句话这样的。
不然,你就不算理解了。且一直陷入在细节中,面试时回答问题时,又经常想不起来。这个是很正常的,太细节的东西,不太容易被很好的引用出来。
如果是一两句话的,那就简单许多了,容易记忆,也非常有利于去做复习。
再加上很多面试官水平也一般,他自己也不知道或者想不起细节,因此一般高维度的回答,就过关了。
那如果遇到了一个有点料的面试官,他继续追问:那CountDownLatch内部具体是如何使用AQS的?
我:就覆写AQS的两个方法就可以了,一个是为了线程安全的减1,一个是为了唤醒线程。
到了这里后,你就可以稍微讲一下细节,比如是使用无锁编程CAS去减一的,避免脏数据。而当减到0的时候,唤醒线程。
剩下的都是AQS本身自己的实现了。
这就是全部的答案,再深入下去,则是AQS本身的原理问题了。
你也可以采用我上面的方法去理解AQS,提炼出关键句,关键词。
感谢你的阅读,希望这个方法对你有用。