歡迎光臨
每天分享高質量文章

我是如何在面試別人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是如何處理資料不在本節點這樣情況的呢?

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

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

    已同步到看一看
    赞(0)

    分享創造快樂