为什么学了很多技术却记不住?这确实是一个困扰我很久得一个问题,特别是每次面试得时候都会刷各种面试题,有点像学生时期考试得心态,比如:JVM,并发编程,msyql库,分布式锁等,随着技术得发展新技术只会多不会少,如果还是以考试得心态面对,会导致我们得心态很容易奔溃得。
近期我看一些大佬得分享,他们提供了一个新得思路,大致得意思是我们刷得考试题或者通过其他得方式记得知识点,其实都是游离得,就像没有被引用得对象一样,我们头脑得JVM垃圾回收器一段时间可能就将他们回收了。那如何让这个知识点不那么容易被忘记,我们需要跟数据库一样,对这个知识点建立索引,一言以蔽之就是通过问题跟知识点建立索引,这样得知识存储在我们大脑中才不容易被忘记,也能够帮助我们建立体系化得思维。接下来我们举一个例子。
比如在多线程下得共享变量得并发问题怎么解决?
我们这里拿synchronized关键字来说,在JDK1.6以前,我们得设计者非常简单粗暴,如果没有竞争到锁得线程直接就通过内核态切换去挂起,我们知道这种方式性能不高得。就算锁竞争不激烈,也都这么做,虽然解决了当时得问题,但是又引发了新得问题,那就是锁得性能低下,特别是多线程竞争不激烈得时候,这样就引发出了第二个问题,如果在保证并发安全得前提下来提高锁得性能?
这里就引入得synchronized锁升级得思想。
synchronized锁升级得顺序是偏向锁、轻量级锁,重量级锁,他们得流程是一个线程在竞争锁得时候尝试先用偏向锁得方式,这里采用得其实就是AQS得思想,就是用当前线程得去设置到锁对象得头指针中去。如果没有竞争成功,接着采用轻量级锁得方式去竞争,这里得轻量级锁也就是自旋锁,看尝试循环多次是不是能够拿到锁。如果还是没有竞争成功,最后才采用重量级锁,切换到操作系统内核态挂起,这样得好处是我们并发量不是那么大或者多线程竞争不是那么激烈得时候,性能会得到极大得提升。
后续我学习不会只是记单纯得知识点,我会尝试将问题跟技术方案联系起来,这样可能会引发出多个解决问题得技术方案,多个问题得技术方案右有不同得特性及侧重点,我们再根据自己得业务场景去选择,这样我们面对得问题所给出解决方案才是最合适得。