p3_力扣.png
1.String.intern()
p3_InternTest.png
2.可重入鎖:一個線程中的多個流程可以獲取同一把鎖洽沟,持有這把同步鎖可以再次進入睡陪,自己可以獲取自己的內(nèi)部鎖(暫時模糊理解下)
p3_可重入鎖_synchronized.png
p3_可重入鎖_reentrantlock.png
3.基于Synchronized和ReentrantLock可重入鎖局限性分析
p3_可重入鎖_synchronized局限性.png
p3_可重入鎖_reentrantlock局限性.png
4.LockSupport
LockSupport的park()和unpark()方法底層調(diào)用unsafe類的park和unpark方法镣丑,分別使當前線程的許可證permit設(shè)置為0和1命辖,注意多次調(diào)用upark不會使permit累加练链,即permit最大是1
p3_lockSupport.png
5.AQS
定義:抽象的隊列同步器
基于ReentrantLock對AQS的源碼深度解讀
ReentrantLock里有屬性Sync担败,Sync繼承自AQS讯壶,架構(gòu)如下
p3_lock_AQS架構(gòu).png
AQS是所有關(guān)于鎖的實現(xiàn)機制的上層建筑(頂層設(shè)計)雪情,有一個子類sync,并通過cas控制state控制鎖的開放和關(guān)閉鸭巴,把沒有搶到cpu時間片的線程加到內(nèi)部類node隊列(CLH隊列)里眷细,實現(xiàn)機制類比map
image.png
image.png
AQS這個類的內(nèi)部類node的屬性說明
image.png
image.png
AQS源碼分析
image.png
image.png
image.png
6.spring4和5的aop順序
spring45_aop順序.png
7.Spring循環(huán)依賴
定義:多個bean之間的相互依賴,形成了一個閉環(huán)鹃祖,比如A依賴B溪椎,B依賴C,C依賴A
通常來說恬口,如果問Spring容器內(nèi)部如何解決循環(huán)依賴校读,一定默認指的是單例Bean中,屬性相互引用的場景祖能,即scop只能是singleton不能是prototype歉秫,否則報錯
p3_循環(huán)依賴.png
p3_循環(huán)依賴_test.png
對構(gòu)造方法注入的Bean不能解決,setter注入的方式可以
8.DefaultSingletonBeanRegistry的三級緩存养铸,解決循環(huán)依賴問題
p3_循環(huán)依賴_三級緩存代碼.png
p3_循環(huán)依賴_三級緩存代碼說明.png
p3_循環(huán)依賴_三級緩存流程.png
p3_循環(huán)依賴_三級緩存流程2.png
p3_循環(huán)依賴_三級緩存流程_getSingleton.png
p3_循環(huán)依賴_三級緩存流程3.png
9.redis
查看版本 redis-server -v 或者登錄后 info
登錄狀態(tài)下的幫助命令 help @數(shù)據(jù)類型
redis的命令不區(qū)分大小寫雁芙,但是key區(qū)分大小寫
linux的redis版本穩(wěn)定的6.0.8
10.數(shù)據(jù)類型
p3_redis數(shù)據(jù)類型.png
String
p3_redis數(shù)據(jù)類型_string.png
Hash
p3_redis數(shù)據(jù)類型_hash.png
list
p3_redis數(shù)據(jù)類型_list.png
Set
p3_redis數(shù)據(jù)類型_set.png
p3_redis數(shù)據(jù)類型_set_抽獎.png
p3_redis數(shù)據(jù)類型_set_點贊.png
p3_redis數(shù)據(jù)類型_set_共同關(guān)注的人.png
p3_redis數(shù)據(jù)類型_set_可能認識的人.png
Zset
p3_redis數(shù)據(jù)類型_zset.png

11.基于redis實現(xiàn)的分布式鎖(上傳原因,倒敘展示)
p3_killLunch10.png
p3_killLunch9.png
p3_killLunch8.png
p3_killLunch7.png
p3_killLunch6.png
p3_killLunch5.png
p3_killLunch4.png
p3_killLunch3.png
p3_killLunch2.png
p3_killLunch1.png
p3_RedisConfig.png
p3_RedisUtils.png
12.redis占用內(nèi)存不設(shè)置或者設(shè)置為0钞螟,在64位操作系統(tǒng)下不限制內(nèi)存大小兔甘,在32位操作系統(tǒng)下3G,一般生產(chǎn)配置為物理內(nèi)存的四分之三
修改redis占用內(nèi)存:修改配置文件maxmemory或者通過命令config set maxmemory 100*1024,單位字節(jié)
查看redis配置筛圆,config get xxxx
查看redis全部信息裂明,info
查看redis內(nèi)存(配置和使用)信息,info memory
如果redis內(nèi)存打滿太援,報錯oom
13.redis緩存刪除策略:
1.定時刪除:過期時間一到就刪除闽晦。優(yōu)點是數(shù)據(jù)的實時性很高,缺點是cpu需要時刻監(jiān)督redis數(shù)據(jù)的過期時間提岔,cpu很忙
2.惰性刪除:如果未過期返回數(shù)據(jù)仙蛉,發(fā)現(xiàn)已過期,刪除碱蒙,返回不存在荠瘪。優(yōu)點是相對前者降低了cpu的壓力,缺點是對內(nèi)存不友好赛惩,有可能把已經(jīng)過期的數(shù)據(jù)還存在redis里占用內(nèi)存
3.定期刪除:
image.png
14.redis緩存淘汰策略
p3_Redis內(nèi)存淘汰策略.png
哀墓,生產(chǎn)建議配置allkeys-lru
15.LRU算法(最近最少使用),核心是哈希鏈表
p3_LRU_node.png
p3_LRU_DoubleLinkedStructure.png
p3_LRU.png
p3_LRU_Test.png