Redis面試套路拆解(一)

前言:目前Redis相關(guān)的知識內(nèi)容已經(jīng)成為后端面試的考核??土?,掌握并理解Redis可以為你的面試大大加分哦,另外想要在面試中脫穎而出,靠死記硬背標(biāo)準(zhǔn)答案是不可取的。在本系列中,小黑板將會以面試為導(dǎo)向,串聯(lián)起Redis的相關(guān)知識,幫助大家在面試中牢牢抓住面試官的小心心~

話不多說,我們直接進(jìn)入正題!我們循序漸進(jìn)地模擬一下真實(shí)的面試場景,讀者朋友們也可以嘗試作答,看看面對面試官的“拷問”,你會給出怎樣的回答。

Q1:我看你的簡歷上寫的有用過redis,那你能大概講一下你了解哪些東西嗎?或者講一下你對redis的認(rèn)識也行

分析:這個問題就是最常見的熱身問題了,但是也不可小覷,因?yàn)槟慊卮鸬膬?nèi)容會作為接下來面試官的主要切入點(diǎn),所以一定要回答自己掌握的內(nèi)容,你可以不全了解,但是需要保證你提到的點(diǎn)是你能夠講清楚的,這一點(diǎn)非常重要!并且建議分點(diǎn)作答,會顯得更加有條理性,是很大的加分項(xiàng)!

A:好的,Redis的話其實(shí)有著非常豐富的使用場景,比如可以緩存、排行榜啊、共同關(guān)注列表啊之類的場景下都可以使用Redis

那其實(shí)提到redis首先會有幾個特點(diǎn)讓我印象比較深刻:

  • 第一點(diǎn),redis是單線程的
  • 第二點(diǎn),redis是基于內(nèi)存的,速度非???/li>
  • 第三點(diǎn),redis提供了豐富的數(shù)據(jù)結(jié)構(gòu)

分析:一般來說回答出以上幾點(diǎn)就可以很好的為面試官提供切入點(diǎn)了,面試是一個互動的過程,如何將面試官引入你預(yù)先設(shè)計(jì)好的“陷阱”中是一門學(xué)問,只要準(zhǔn)備好了,不怕你問,就怕你不問,嘿嘿~

Q2:你提到了Redis是單線程的,那它為什么這么快?

分析:這個問題算是redis面試中的高頻問題了,那么如何回答上來的同時體現(xiàn)自己的思考就非常重要了。因?yàn)槊嬖嚬龠@個問題可能已經(jīng)問了幾十個人了,如果你也按照所謂的標(biāo)準(zhǔn)答案來作答,那樣的話是無法給面試官留有深刻印象的哦。回答這個問題首先要講清楚Redis的單線程到底指的是什么?其實(shí)是Redis的核心模塊是單線程的,并不是全部都是單線程的,此外,Redis6.0是支持多線程的,這一點(diǎn)能講出來其實(shí)就是加分項(xiàng)了,說明你有自主學(xué)習(xí)的驅(qū)動力。其次,需要說明核心模塊是單線程的,那么redis是怎么保證速度的,按照這個思路分點(diǎn)回答,并進(jìn)行拓展即可。

A:Redis的單線程指的其實(shí)是指執(zhí)行Redis命令的核心模塊是單線程的,也就是文件事件處理器,主要由四個部分組成:套接字、IO多路復(fù)用、文件事件分派器和事件處理器

redis核心結(jié)構(gòu)圖.jpg

并且Redis6.0其實(shí)已經(jīng)支持多線程來提高性能了。而Redis之所以快主要原因有三點(diǎn)

  • 第一,Redis是基于內(nèi)存的,數(shù)據(jù)都存放在內(nèi)存中,速度非???/li>
  • 第二,Redis的IO模型是非阻塞IO
  • 第三,Redis核心模塊的單線程使得可以避免線程切換帶來的開銷

Q3:既然聊到了IO,那你說一下你對IO模型的了解吧,了解哪些IO模型?詳細(xì)說一下?

分析:IO模型的問題同樣是面試??停蟛糠滞瑢W(xué)在面試的時候可能就會回答IO模型有阻塞IO、非阻塞IO、IO多路復(fù)用之類的,然后把概念一擺,兩手一攤,給面試官的感覺就是你在著跟我背課文呢。這樣的面試自然取得不到好的效果,還是那句話,面試官希望聽到的回答中需要有你自己的思考和總結(jié),這樣你的回答才具有一定的區(qū)分度,很多同學(xué)對于同步阻塞、同步非阻塞IO這些概念性的東西非常的迷糊,其實(shí)沒有那么難,看下去就知道了

A:實(shí)際上IO的過程主要包含了兩個階段

  • 第一階段,等待數(shù)據(jù)準(zhǔn)備好

  • 第二階段,將數(shù)據(jù)從內(nèi)核空間拷貝到應(yīng)用程序地址空間

根據(jù)這兩個階段的不同表現(xiàn)來將IO進(jìn)行分類:

  • 在第一個階段阻塞即為阻塞IO,不阻塞直接返回則為非阻塞IO
  • 在第二個階段阻塞則為同步IO,不阻塞則為異步IO
  • 多路復(fù)用IO其實(shí)是通過輪詢機(jī)制來負(fù)責(zé)多個socke

補(bǔ)充:關(guān)于同步阻塞IO、同步非阻塞IO、異步IO、IO多路復(fù)用等很多初學(xué)者理解起來比較困難,而網(wǎng)絡(luò)上的文章質(zhì)量又參差不齊,很容易誤導(dǎo)讀者,后面貼心的小黑板會專門寫一篇關(guān)于IO的文章,幫助大家在面試中輕松應(yīng)對這道考題

膨脹表情包.png

Q4:既然Redis是單線程的,那么它如何利用多核呢?

A:可以通過開啟多個Redis實(shí)例來利用多核

根據(jù)你拋出的前兩點(diǎn),其實(shí)常問的問題差不多就是這樣,重頭戲其實(shí)在第三點(diǎn),Redis的數(shù)據(jù)結(jié)構(gòu)部分。既有基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)如hash、list、set等,同樣有高級數(shù)據(jù)結(jié)構(gòu)Hyperlogger、布隆過濾器等等。

這些數(shù)據(jù)結(jié)構(gòu)的用法以及底層原理和實(shí)現(xiàn)經(jīng)常會在面試過程中被問到,回答好的話是非常亮眼的加分項(xiàng),在下一回合的交鋒中,面試官又會如何針對這些知識點(diǎn)進(jìn)行考查呢?在回答這些問題的時候又有哪些套路呢?

關(guān)注公眾號【后端技術(shù)小黑板】,發(fā)送“面試套路”,更多的面試套路拆解和知識分享等你喲~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容