日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期...

發(fā)布時間:2025/3/11 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

無論是在實際工作中還是在面試中,HashMap 無疑是使用頻率最高的知識點之一,所以我們需要搞懂每一個關(guān)于 HashMap 的知識點才行。

哈嘍,大家好,我是老王,歡迎來到 Java 面試突擊,我們今天來開始第 6 期的內(nèi)容。

本期的問題是:HashMap 為什會導致 CPU 運行 100%?這是一個比較常見的經(jīng)典問題了,但是有很多人讀者朋友給我反饋,尼瑪,看文章根本看不懂啊?Sun 公司都不知道這個問題的原因吧?不,是 Oracle 公司都不知道這個問題的原因吧?面試官怕也不知道這個的答案吧?

咳咳,作為一個很正經(jīng)的面試官,我覺得這個問題一點都不重要,重要的是你不知道答案啊。好的,下一位面試者請進,您先回去等通知吧。

為了避免這種尷尬的事情發(fā)生,今天我們來好好聊一下這個問題,畢竟技能再手,才能吊打面試官不是?

正文

這個問題相關(guān)的知識點,有以下幾個:

  • HashMap 的底層數(shù)據(jù)結(jié)構(gòu)是什么?

  • 什么是哈希碰撞?如何該解決這個問題?

  • 什么是擴展因子?它有什么用?

  • 還有對 HashMap 源碼的理解,為什么 HashMap 會導致死循環(huán)?

  • 視頻版答案

    視頻內(nèi)容如下:

    圖文答案

    1.HashMap?的底層數(shù)據(jù)結(jié)構(gòu)

    先來說 HashMap 的底層數(shù)據(jù)結(jié)構(gòu),看過 HashMap 的源碼我們就會發(fā)現(xiàn),JDK 1.7 和 JDK 1.8 HashMap 的組成是不同的,JDK 1.7 HashMap 的組成是數(shù)組 +?鏈表的形式,而 JDK 1.8 新增了紅黑樹的數(shù)據(jù)結(jié)構(gòu),當 HashMap 中的鏈表長度大于 8 時,鏈表結(jié)構(gòu)就會轉(zhuǎn)換為紅黑樹,如下圖所示:


    2.哈希碰撞及解決方案

    所謂的哈希碰撞指的是不同的值,經(jīng)過哈希之后得到的值確是相同的,這種情況就叫做哈希碰撞或哈希沖突。解決哈希碰撞的常用方法是:開放定址法和鏈表地址法,而?HashMap?采用的就是鏈表地址法。它的實現(xiàn)原理就是將?HashMap?中相同的哈希值以鏈表的形式存儲起來

    3.擴展因子

    擴展因子也叫加載因子或負載因子是 HashMap 中的一個屬性,如下圖所示:假如數(shù)組的默認長度為 10,擴展因子為 0.5,那么當數(shù)組超過 10*0.5=5 個時,HashMap 就會擴容為之前容量的兩倍,所以說擴展因子就是用來判定 HashMap 是否滿足擴容條件的。

    4.HashMap死循環(huán)分析

    HashMap 導致 CPU 100%?的原因就是因為 HashMap 死循環(huán)導致的,那 HashMap 是如何造成死循環(huán)的?接下來我們一起來看。

    以 JDK 1.7 為例,假設(shè) HashMap 的默認大小為 2,HashMap 本身中有一個鍵值 key(5),我們再使用兩個線程:t1 添加 key(3),t2 添加 key(7),首先兩個線程先把 key(3) 和 key(7) 都添加到 HashMap 中,此時因為 HashMap 的長度不夠用了就會進行擴容操作,然后這時線程 t1 在執(zhí)行到 Entry<K,V> next = e.next; 時,交出了 CPU 的使用權(quán),源代碼如下:

    void transfer(Entry[] newTable, boolean rehash) {int newCapacity = newTable.length;for (Entry<K,V> e : table) {while(null != e) {Entry<K,V> next = e.next; // 線程一執(zhí)行此處if (rehash) {e.hash = null == e.key ? 0 : hash(e.key);}int i = indexFor(e.hash, newCapacity);e.next = newTable[i];newTable[i] = e;e = next;}} }

    那么此時線程 t1 中的 e 指向了 key(3),而 next 指向了 key(7) ;之后線程 t2 重新 rehash 之后鏈表的順序被反轉(zhuǎn),鏈表的位置變成了 key(5) -> key(7) -> key(3),其中 “->” 用來表示下一個元素,當 t1 重新獲得執(zhí)行權(quán)之后,先執(zhí)行 newTalbe[i] = e 把 key(3) 的 next 設(shè)置為 key(7),而下次循環(huán)時查詢到 key(7) 的 e.next 為 key(3),于是就形 成了 key(3) 和 key(7) 的環(huán)形引用,就導致了死循環(huán)的產(chǎn)生,如下圖所示:

    HashMap 發(fā)生死循環(huán)的一個重要原因是 JDK 1.7 時鏈表的插入是首部倒序插入的,而 JDK 1.8 時已經(jīng)變成了尾部插入,有人把這個死循環(huán)的問題反饋給了 Sun 公司,但它們認為這不是一個問題,因為 HashMap 本身就是非線程安全的,如果要在多線程使用建議使用 ConcurrentHashMap 替代 HashMap,但面試中這個問題被問的頻率比較高,所以在這里就特殊說明一下。

    小結(jié)

    HashMap 是非線程安全的,以 JDK 1.7 為例,當多線程并發(fā)擴容時就會出現(xiàn)環(huán)形引用的問題,從而導致死循環(huán)的出現(xiàn),一直死循環(huán)就會導致 CPU 運行 100%,所以在多線程使用時,我們需要使用 ConcurrentHashMap 來替代 HashMap,但只有懂得其中的因果關(guān)系才能吊打面試官,好了,本節(jié)內(nèi)容到這里就結(jié)束了,我們下期再見。


    上期中獎名單:皮卡皮卡、一步、好好學習、談笑、包子有話要講。

    以上中獎的朋友,請加我的微信:GG_Stone 領(lǐng)取獎勵。

    【END】

    近期熱文

    ?
    • 面試突擊 005 | Redis 是如何實現(xiàn)高可用的?它的實現(xiàn)方式有哪些?

    • 面試突擊 004 | 如何排查 Redis 中的慢查詢?視頻實戰(zhàn)篇

    • 面試突擊 003 | Redis 如何實現(xiàn)查詢附近的人?

    • 面試突擊 002 | Redis 是如何處理已過期元素的?

    • 面試突擊 001 | Redis 如何從海量數(shù)據(jù)中查詢出某一個 Key?

    • Java面試詳解(2020版):500+ 面試題和核心知識點詳解

    關(guān)注下方二維碼,訂閱更多精彩內(nèi)容

    朕已閱?

    總結(jié)

    以上是生活随笔為你收集整理的HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美日韩三级在线观看 | 成人在线观看免费高清 | 色一情一区二 | 新超碰97| 精品国产成人av | 91av在线网站 | 亚洲女优在线观看 | 黄色免费在线看 | 性xxxx狂欢老少配o | 激情片 | 亚洲黄色在线观看视频 | 少妇扒开粉嫩小泬视频 | 无码成人精品区一级毛片 | 中国一级片黄色一级片黄 | 中国大陆毛片 | 尤物视频在线观看国产性感 | 日韩人妻精品中文字幕 | 强行挺进白丝老师里呻吟 | 变态另类一区二区 | 亚洲少妇xxx | 黄网在线 | 91在线免费观看网站 | www.久久伊人 | 国产精品蜜臀 | 大地av| 亚洲中文字幕在线一区 | 99r在线视频 | 羞羞羞网站| 福利所导航 | 欧美一级片在线看 | 日韩精品久久久久久久电影99爱 | 久久夜色网 | 日韩精品无码一区二区 | 男人av网站 | 密臀av一区二区 | 99久久精品免费看国产 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 成人污污视频 | 精品国产精品三级精品av网址 | 一区二区高清视频 | 美女爱爱爱 | 少妇高潮惨叫久久久久久 | 精品国偷自产国产一区 | 色无极影院亚洲 | 北岛玲av在线| 黄色小视频在线 | 九九热视频精品在线观看 | 成人精品在线播放 | 亚洲人久久 | 古代黄色一级片 | 波多野结衣一区二区三区免费视频 | xx视频在线| 青青草97国产精品麻豆 | 日韩一区二区在线播放 | 中文视频一区二区 | 日批免费观看 | 色婷婷久久五月综合成人 | 探花国产在线 | 四虎av在线 | 脱裤吧导航 | 成人精品久久久 | 中文字幕av无码一区二区三区 | 中文字幕一区二区三区门四区五区 | 中文字幕在线看高清电影 | 三年大全国语中文版免费播放 | 91九色丨porny丨国产jk | www精品一区二区三区 | 精品无码人妻少妇久久久久久 | 日本免费不卡视频 | 欧美福利视频一区二区 | 俺啪也| 天天插天天操天天干 | 在线看黄的网站 | 91热热 | 天天操狠狠操 | 在线色站 | 男男play呻吟动漫网站 | 先锋影音一区二区三区 | 色一情一交一乱一区二区三区 | 靠逼动漫| 国产欧美视频在线观看 | 木木影院| 加勒比视频在线观看 | 无套内谢88av免费看 | 91们嫩草伦理 | av在线激情 | 都市激情久久 | 国产片淫乱18一级毛片动态图 | 超碰人人在线 | 久久夜夜操妹子 | 爆操女秘书 | 色综合免费视频 | 欧美日韩亚洲天堂 | 国产午夜在线一区二区三区 | 最新中文字幕一区 | 亚洲无码精品在线观看 | 国产乱淫a∨片免费视频 | 毛片自拍| 午夜精品久久久久久久99老熟妇 |