【面試】我是如何在面試別人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年的碼農,現在任架構師。喜歡研究技術,崇尚簡單快樂。追求以通俗易懂的語言解說技術,希望所有的讀者都能看懂並記住。下面是公眾號和知識星球的二維碼,歡迎關注!

 

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM