1. 程式人生 > >《吊打面試官》系列-ConcurrentHashMap & HashTable

《吊打面試官》系列-ConcurrentHashMap & HashTable

你知道的越多,你不知道的越多

點贊再看,養成習慣

本文 GitHub https://github.com/JavaFamily 已收錄,有一線大廠面試點思維導圖,也整理了很多我的文件,歡迎Star和完善,大家面試可以參照考點複習,希望我們一起有點東西。

前言

作為一個在網際網路公司面一次拿一次Offer的麵霸,打敗了無數競爭對手,每次都只能看到無數落寞的身影失望的離開,略感愧疚(請允許我使用一下誇張的修辭手法)。

於是在一個寂寞難耐的夜晚,我痛定思痛,決定開始寫網際網路技術棧面試相關的文章,希望能幫助各位讀者以後面試勢如破竹,對面試官進行360°的反擊,吊打問你的面試官,讓一同面試的同僚瞠目結舌,瘋狂收割大廠Offer!

所有文章的名字只是我的噱頭,我們應該有一顆謙遜的心,所以希望大家懷著空杯心態好好學,一起進步。

回手掏

上次面試呀,我發現面試官對我的幾個回答還是不夠滿意,覺得還是有點疑問,我就挑幾個回答一下。

16是2的冪,8也是,32也是,為啥偏偏選了16?

我覺得就是一個經驗值,定義16沒有很特別的原因,只要是2次冪,其實用 8 和 32 都差不多。

用16只是因為作者認為16這個初始容量是能符合常用而已。

Hashmap中的連結串列大小超過八個時會自動轉化為紅黑樹,當刪除小於六時重新變為連結串列,為啥呢?

根據泊松分佈,在負載因子預設為0.75的時候,單個hash槽內元素個數為8的概率小於百萬分之一,所以將7作為一個分水嶺,等於7的時候不轉換,大於等於8的時候才進行轉換,小於等於6的時候就化為連結串列。

正文

一個婀娜多姿,穿著襯衣的小姐姐,拿著一個精緻的小筆記本,徑直走過來坐在我的面前。

就在我口水要都要流出來的時候,小姐姐的話語打斷了我的YY。

喂小鬼,你養我啊!

呸呸呸,說錯了,上次的HashMap回答得不錯,最後因為天色太晚了面試草草收場,這次可得好好安排你。

誒,面試官上次是在抱歉,因為公司雙十二要值班,實在是沒辦法,不過這次不會了,我推掉了所有的事情準備全身心投入到今天的面試中,甚至推掉了隔壁王大爺的約會邀約。

這樣最好,上次我們最後聊到HashMap在多執行緒環境下存線上程安全問題,那你一般都是怎麼處理這種情況的?

美麗迷人的面試官您好,一般在多執行緒的場景,我都會使用好幾種不同的方式去代替:

  • 使用Collections.synchronizedMap(Map)建立執行緒安全的map集合;
  • Hashtable
  • ConcurrentHashMap

不過出於執行緒併發度的原因,我都會捨棄前兩者使用最後的ConcurrentHashMap,他的效能和效率明顯高於前兩者。

哦,Collections.synchronizedMap是怎麼實現執行緒安全的你有了解過麼?

臥*!不按照套路出牌呀,正常不都是問HashMap和ConcurrentHashMap麼,這次怎麼問了這個鬼東西,還好我飽讀詩書,經常看敖丙的《吊打面試官》系列,不然真的完了。

小姐姐您這個問題真好,別的面試官都沒問過,說真的您水平肯定是頂級技術專家吧。

別貧嘴,快回答我的問題!抿嘴一笑