全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

Redis中l(wèi)ist底層的實(shí)現(xiàn)方式與區(qū)別【pytho面試題】

更新時(shí)間:2021-04-02 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif


(1)問(wèn)題分析

考官主要想考察應(yīng)聘者對(duì)Redis數(shù)據(jù)的理解和拓展,有沒(méi)有深入的去理解過(guò)數(shù)據(jù)庫(kù)。
(2)核心問(wèn)題講解
列表對(duì)象的編碼可以是ziplist或者linkedlist。
ziplist是一種壓縮鏈表,它的好處是更能節(jié)省內(nèi)存空間,因?yàn)樗鎯?chǔ)的內(nèi)容都是在連續(xù)的內(nèi)存區(qū)域當(dāng)中的。當(dāng)列表對(duì)象元素不大,每個(gè)元素也不大的時(shí)候,就采用ziplist存儲(chǔ)。但當(dāng)數(shù)據(jù)量過(guò)大時(shí)就ziplist就不是那么好用了。因?yàn)闉榱吮WC他存儲(chǔ)內(nèi)容在內(nèi)存中的連續(xù)性,插入的復(fù)雜度是O(N),即每次插入都會(huì)重新進(jìn)行realloc。對(duì)象結(jié)構(gòu)中ptr所指向的就是一個(gè)ziplist。整個(gè)ziplist只需要malloc一次,它們?cè)趦?nèi)存中是一塊連續(xù)的區(qū)域。
linkedlist是一種雙向鏈表。它的結(jié)構(gòu)比較簡(jiǎn)單,節(jié)點(diǎn)中存放pre和next兩個(gè)指針,還有節(jié)點(diǎn)相關(guān)的信息。當(dāng)每增加一個(gè)node的時(shí)候,就需要重新malloc一塊內(nèi)存。
(3)問(wèn)題擴(kuò)展
獲取當(dāng)前同時(shí)還會(huì)問(wèn)Redis數(shù)據(jù)庫(kù)有幾種數(shù)據(jù)類(lèi)型,然后深入去問(wèn)比如有沒(méi)有深入了解過(guò)Redis,說(shuō)說(shuō)Redis里面list的底層實(shí)現(xiàn),說(shuō)說(shuō)set數(shù)據(jù)類(lèi)型為何支持去重等等,是一類(lèi)拓展的問(wèn)題。
(4)結(jié)合項(xiàng)目中使用
說(shuō)說(shuō)你做過(guò)的項(xiàng)目里哪些地方用到了Redis數(shù)據(jù)庫(kù)。
為什么要在項(xiàng)目中使用Redis數(shù)據(jù)庫(kù)。



猜你喜歡:

redis緩存原理與實(shí)現(xiàn):為什么redis可以做緩存?【python面試題】

如何用redis緩存廣告數(shù)據(jù)?【Python面試題】

python編程(redis操作)    

什么是整型?怎樣理解Python的整型?    
黑馬程序員Python+數(shù)據(jù)分析培訓(xùn)

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!