1. 程式人生 > >【面試】我是如何在面試別人Redis相關知識時“軟懟”他的

【面試】我是如何在面試別人Redis相關知識時“軟懟”他的


事出有因



Redis是一個分散式NoSQL資料庫,因其資料都儲存在記憶體中,所以訪問速度極快,因此幾乎所有公司都拿它做快取使用,所以Redis常被稱為分散式快取。

一次我的一個同事讓我幫他看Redis相關的問題,我看到了他使用了Hash資料型別,其實它就對應Java裡的Map。同事要往裡存十幾個key/value對,於是他就像使用本地Map一樣,連續的呼叫了十幾次的put操作。

哎,我只好心理默默的想著,以後再招聘時,一定要加強Redis的考察力度。


記一次面試



我:Redis想在都成了標配了,幾乎每個寫程式碼的人都用過,那你說說Redis的全名是什麼?

他:Redis不就是它的全名嗎?其實會用不就行了嘛,我不關注這些。


(我心裡真想一腳把他踹飛,你不會還有理了咋地,不過一向“有內涵”的我,這次要好好地“軟懟”他。)

我:哦,沒關係,其實好多人都不知道它的全名。Redis有一種資料型別叫做String,即字串。Java裡也有個資料型別叫String,它們一樣嗎?

他:應該一樣吧,我平時寫Java程式碼都是直接把一個String型別給存進去的。

(Redis是個中介軟體,用C語言寫的,和Java沒有關係的。)

我:是嗎?其實除了Java外還有很多語言可以操作它,比如Python。當然也可以把一個Python裡的String儲存到Redis裡,這沒有問題吧。

他:是的,沒有問題。

我:那你說Redis裡的String到底是對應Java裡的String,還是Python裡的String呢?

他:這個。。。

(哈哈,小樣,讓你逞能,現在不NB了吧)

我:哦,沒關係,其實好多人都不知道它到底是哪個語言裡的String。

(其實Redis裡的String壓根就不是個字串,那它是個什麼呢?)

我:Redis裡有個資料型別Hash,你用過吧。

他:用過,和Java裡的Map很像。

我:如果往Hash裡存一個key/value,你怎麼做?

他:就像Map一樣,呼叫put方法把key/value存進去就行了。

我:那存10對key/value呢?

他:呼叫10次put方法不就行了嘛。

(瞧他得瑟那樣吧)

我:那要存100對,難道就呼叫100次put嗎?

他:這個。。。

我:哦,沒關係,不是每個人都會去思考這些問題的。

(我還真見過有人連續呼叫幾乎二十次的,那麼為什麼不能這樣做呢?)

我:Redis支援事務嗎?

他:支援啊。

我:那你說說Redis事務是什麼樣子的?

他:就是多條命令,要麼都執行,要麼都不執行。

(哎呦,可以呀,竟然回答對了。拜託,任何事務都是這樣的好不好,原子性嘛)

我:假如我要執行3條命令,執行到第2條時出現了錯誤,那事務會回滾嗎?

他:肯定會呀,不然還叫事務幹嘛。

(哎呦呦,又NB起來了)

我:是嗎?Are you 確定?

他:這個。。。

我:哦,沒關係,一般情況下也不會有人去使用Redis的事務。

(Redis的事務命令是“真的事務”嗎?出現錯誤時會回滾嗎?)

我:如果Redis是單節點,向它傳送命令總能獲取到資料。如果Redis是叢集,會有很多節點,如果向A節點發送命令,發現數據不在A上而在B節點上,此時會怎麼樣?

他:Redis應該負責返回我請求的資料,既然我向A發的命令就應該由A負責。

我:是嗎?你的意思是要A去B上幫你取資料嗎?

他:難道不是嗎?

(Redis是如何處理資料不在本節點這樣情況的呢?)

我:好吧,這個問題你可以回去想想。

(明明就是井底之蛙,非要擺出一副自己看到了宇宙邊緣的樣子。)


(END)


作者是工作超過10年的碼農,現在任架構師。喜歡研究技術,崇尚簡單快樂。追求以通俗易懂的語言解說技術,希望所有的讀者都能看懂並記住。下面是公眾號和知識星球的二維碼,歡迎關注!

 

       

&n