-
Http版本小區(qū)別
http1.1:長連接
http2.0:多路復(fù)用,二進制編碼格式 -
redisson分布式鎖
image.png -
springaspectj增強后置處理器
image.png
ProxyFactory對代碼進行判斷返回不同代理方法對象(jdk,cglib,Aspectj)
-
epoll小總結(jié)
epoll小總結(jié)
vfs虛擬文件系統(tǒng)+輪詢轉(zhuǎn)為事件響應(yīng)
-
Fegin的負載均衡
image.png
對于負載均衡自帶的配置類結(jié)構(gòu)
image.png -
redis中的zset數(shù)據(jù)類型
image.png
對于zset來說他的底層是一個跳躍表(skiplist)
image.png
從上面的創(chuàng)建和插入的過程中可以看出于宙,每一個節(jié)點的層數(shù)(level)是隨機出來的,而且新插入一個節(jié)點并不會影響到其他節(jié)點的層數(shù)鞭衩,因此乘盖,插入操作只需要修改節(jié)點前后的指針,而不需要對多個節(jié)點都進行調(diào)整退客,這就降低了插入操作的復(fù)雜度。
現(xiàn)在我們假設(shè)從我們剛才創(chuàng)建的這個結(jié)構(gòu)中查找 23 這個不存在的數(shù)链嘀,那么查找路徑會如下圖:
image.png -
spring事務(wù)傳播機制圖
image.png
掛起就是新開一個conn連接對象萌狂,如果不是掛起就用的同一個conn對象就需要到commit()或者rollback()才標(biāo)志該事務(wù)的結(jié)束
image.png
createUser中調(diào)用addAccount方法,在addAccount方法中故意寫個Exception怀泊,幾種情況茫藏,無事務(wù)即autoCommit(true)每一行sql語句自動提交, -
http狀態(tài)碼
image.png -
關(guān)于復(fù)合索引
image.png -
redis過期淘汰策略
image.png
11 mvcc
關(guān)于ReadView
image.png
最新版本鏈trx_id比對然后分類
image.png
對比規(guī)則
image.png
可重復(fù)讀和讀已提交的mvcc關(guān)鍵在于
- 可重復(fù)讀進行多次select霹琼,所使用的ReadView都是第一次select時生成的ReadView
- 讀已提交的多次select务傲,每一次select都會新生成ReadView
生成的ReadView是關(guān)于全庫的
-
進程間通信方式
image.png -
操作系統(tǒng)進程調(diào)度算法
image.png - 內(nèi)存泄漏與內(nèi)存溢出
-
內(nèi)存泄漏
image.png -
內(nèi)存溢出
image.png
-
Redis主從復(fù)制原理
image.png - Redis String類型底層
首先來看一下C語言中的字符串:
就是一個簡單的字符型數(shù)組凉当。
Redis中為了實現(xiàn)方便的擴展、安全和性能售葡,自己定義了一個結(jié)構(gòu)用來存儲字符串看杭。
我們叫它SDS(simple dynamic string)簡單動態(tài)字符串
Redis定義了一個sdshdr的結(jié)構(gòu)。里面除了保存字符串buf挟伙,還保存了free(表示buf中剩余的空間)以及l(fā)en(當(dāng)前子字符串的長度)楼雹。
比如這個sdshdr就表示一個字符串長度為5,剩余空間為5的Redis字符串(末尾的‘\0’不算在長度里面)
相比于C中的字符串尖阔,Redis這樣做有幾點好處:
- 獲取字符串長度的復(fù)雜度為O(1)
由于sdshdr結(jié)構(gòu)中定義了len用來保存當(dāng)前字符串長度烘豹,因此不必像C中一樣遍歷字符串來得到長度。 - 不會造成緩沖區(qū)溢出
C中使用函數(shù)將一個字符串添加到另一個字符串默認是認為字符串剩余空間足夠容納添加的诺祸,但是事實可能并不夠携悯,會造成緩沖溢出。
但是Redis再每一次執(zhí)行字符串拼接的過程前都會判斷當(dāng)前剩余的free是否能夠存下需要拼接的字符串筷笨,因此不會造成溢出憔鬼。 - 減少修改字符串帶來的內(nèi)存重分配次數(shù)
我們直到字符串在擴容或者收縮時會進行復(fù)雜的操作,這些操作會消耗比較多的系統(tǒng)資源胃夏。Redis為了減少這些消耗轴或,采用了一些機制來減少這些操作的出現(xiàn)頻率。Redis使用的是內(nèi)存預(yù)分配方法仰禀,每次擴容都會額外預(yù)留一些空間方便下次擴容:當(dāng)Redis字符串進行刪減操作時不會進行內(nèi)存重分配照雁,多余出來的空間也不會被回收,會留著為以后的添加做準(zhǔn)備答恶。當(dāng)然Redis也提供了一些接口供我們主動釋放這些多余的空間(如果必要的話)饺蚊。
額外分配未使用空間
image.png - 二進制安全
我們知道在C字符串中是以‘\0’作為判斷字符串結(jié)束的標(biāo)準(zhǔn),所以在C中不存在這樣的字符串:
但是Redis中是根據(jù)len來判斷字符串有沒有結(jié)束悬嗓,所以可以存儲這樣的結(jié)構(gòu):
- 兼容部分C字符串函數(shù)
由于buf本質(zhì)上是一個字符數(shù)組污呼,所以一些C中的字符串操作可以使用。
比如用strcasecmp比較兩個字符串是否相等 用strcat將兩個字符串相連
總結(jié)起來就是下面這5點: