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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java面试你必须要知道的那些知识,面试建议

發(fā)布時(shí)間:2023/11/30 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java面试你必须要知道的那些知识,面试建议 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

二、面試題

面:考你幾個(gè)紅黑樹的知識(shí)點(diǎn)🦀

  • 紅黑樹的數(shù)據(jù)結(jié)構(gòu)都用在哪些場(chǎng)景,有什么好處?
  • 紅黑樹的時(shí)間復(fù)雜度是多少?
  • 紅黑樹中插入新的節(jié)點(diǎn)時(shí)怎么保持平衡?
  • 面:2-3樹都是不沒看,回去等消息吧!

    三、2-3樹與紅黑樹的等價(jià)性

    紅黑樹規(guī)則

    1. 根節(jié)點(diǎn)是黑色 2. 節(jié)點(diǎn)是紅黑或者黑色 3. 所有子葉節(jié)點(diǎn)都是黑色(葉子是NIL節(jié)點(diǎn),默認(rèn)沒有畫出來) 4. 每個(gè)紅色節(jié)點(diǎn)必須有兩個(gè)黑色子節(jié)點(diǎn)(也同樣說明一條鏈路上不能有鏈路的紅色節(jié)點(diǎn)) 5. 黑高,從任一節(jié)點(diǎn)到齊每個(gè)葉子節(jié)點(diǎn),經(jīng)過的路徑都包含相同數(shù)目的黑色節(jié)點(diǎn)

    那么,這些規(guī)則是怎么總結(jié)定義出來的呢?接下里我們一步步分析講解。

    1. 為什么既有2-3樹要有紅黑樹

    首先2-3樹(讀法:二三樹)就是一個(gè)節(jié)點(diǎn)有1個(gè)或者2個(gè)元素,而實(shí)際上2-3樹轉(zhuǎn)紅黑樹是由概念模型2-3-4樹轉(zhuǎn)換而來的。-4叉就是一個(gè)節(jié)點(diǎn)里有3個(gè)元素,這在2-3樹中會(huì)被調(diào)整,但是在概念模型中是會(huì)被保留的。

    雖然2-3-4樹也是具備2-3樹同樣的平衡樹的特性,但是如果直接把這樣的模型用代碼實(shí)現(xiàn)就會(huì)很麻煩,且效率不高,這里的復(fù)雜點(diǎn)包括;

  • 2-叉、3-叉、4-叉,三種結(jié)構(gòu)的節(jié)點(diǎn)類型,互相轉(zhuǎn)換復(fù)雜度較高
  • 3-叉、4-叉,節(jié)點(diǎn)在數(shù)據(jù)比較上需要進(jìn)行多次,不像2-叉節(jié)點(diǎn),直接布爾類型比較即可非左即右
  • 代碼實(shí)現(xiàn)上對(duì)每種差異,都需要有額外的代碼,規(guī)則不夠標(biāo)準(zhǔn)化
  • 所以,希望找到一種平衡關(guān)系,既保持2-3樹平衡和O(logn)的特性,又能在代碼實(shí)現(xiàn)上更加方便,那么就誕生了紅黑樹。

    2. 簡單2-3樹轉(zhuǎn)紅黑樹

    2-3樹轉(zhuǎn)紅黑樹,也可以說紅黑樹是2-3樹和2-3-4樹的另外一種表現(xiàn)形式,也就是更利于編碼實(shí)現(xiàn)的形式。

    簡單轉(zhuǎn)換示例;

    從上圖可以看出,2-3-4樹與紅黑樹的轉(zhuǎn)換關(guān)系,包括;

  • 2-叉節(jié)點(diǎn),轉(zhuǎn)換比較簡單,只是把原有節(jié)點(diǎn)轉(zhuǎn)換為黑色節(jié)點(diǎn)
  • 3-叉節(jié)點(diǎn),包括了2個(gè)元素,先用紅色線把兩個(gè)節(jié)點(diǎn)相連,之后拆分出來,最后調(diào)整高度黑色節(jié)點(diǎn)在上
  • 4-叉節(jié)點(diǎn),包括了3個(gè)元素,分別用紅黑線連接,之后拆分出來拉升高度。這個(gè)拉升過程和2-3樹調(diào)整一致,只是添加了顏色
  • 綜上,就是2-3-4樹的節(jié)點(diǎn)轉(zhuǎn)換,總結(jié)出來的規(guī)則,如下;

  • 將2-3-4樹,用二叉樹的形式表示
  • 3-叉、4-叉節(jié)點(diǎn),使用紅色、黑色連線進(jìn)行連接
  • 另外,3-叉節(jié)點(diǎn)有兩種情況,導(dǎo)致轉(zhuǎn)換成二叉樹,就有左傾和右傾
  • 3. 復(fù)雜2-3樹轉(zhuǎn)紅黑樹

    在簡單2-3樹轉(zhuǎn)換紅黑樹的過程中,了解到一個(gè)基本的轉(zhuǎn)換規(guī)則右旋定義,接下來我們?cè)谝粋€(gè)稍微復(fù)雜一點(diǎn)的2-3樹與紅黑樹的對(duì)應(yīng)關(guān)系,如下圖;

    上圖是一個(gè)稍微復(fù)雜點(diǎn)的2-3樹,轉(zhuǎn)換為紅黑樹的過程,是不這樣一張圖讓你對(duì)紅黑樹更有感覺了,同時(shí)它也滿足一下條件;

  • 從任意節(jié)點(diǎn)到葉子節(jié)點(diǎn),所經(jīng)過的黑色節(jié)點(diǎn)數(shù)目相同
  • 黑色節(jié)點(diǎn)保持著整體的平衡性,也就是讓整個(gè)紅黑樹接近于O(logn)時(shí)間復(fù)雜度
  • 其他紅黑樹的特點(diǎn)也都滿足,可以對(duì)照紅黑樹的特性進(jìn)行比對(duì)
  • 四、紅黑樹

    1. 平衡操作

    通過在上一章節(jié)2-3樹的學(xué)習(xí),在插入節(jié)點(diǎn)時(shí)并不會(huì)插到空位置,而是與現(xiàn)有節(jié)點(diǎn)融合以及調(diào)整,保持整個(gè)樹的平衡。

    而紅黑樹是2-3-4樹的一種概念模型轉(zhuǎn)換而來,在插入節(jié)點(diǎn)時(shí)通過紅色鏈接相連,也就是插入紅色節(jié)點(diǎn)。插入完成后進(jìn)行調(diào)整,以保持樹接近平衡。

    那么,為了讓紅黑樹達(dá)到平衡狀態(tài),主要包括染色、?左右旋轉(zhuǎn)、這些做法其實(shí)都是從2-3樹演化過來的。接下來我們就分別講解幾種規(guī)則的演化過程,以此更好了解紅黑樹的平衡操作。

    1.1 左旋轉(zhuǎn)

    左旋定義: 把一個(gè)向右傾斜的紅節(jié)點(diǎn)鏈接(2-3樹,3-叉雙元素節(jié)點(diǎn)),轉(zhuǎn)化為左鏈接。

    背景:順序插入元素,1、2、3,2-3樹保持平衡,紅黑樹暫時(shí)處于右傾斜。

    接下來我們分別對(duì)比兩種樹結(jié)構(gòu)的平衡操作;

  • 2-3樹,所有插入的節(jié)點(diǎn)都會(huì)保持在一個(gè)節(jié)點(diǎn)上,之后通過調(diào)整節(jié)點(diǎn)位置,保持平衡。
  • 紅黑樹,則需要通過節(jié)點(diǎn)的左側(cè)旋轉(zhuǎn),將元素2拉起來,元素1和元素3,分別成為左右子節(jié)點(diǎn)。
  • 紅黑樹的左旋,只會(huì)處理與之對(duì)應(yīng)的2-3樹節(jié)點(diǎn)進(jìn)行操作,不會(huì)整體改變。

    1.2 右旋轉(zhuǎn)

    右旋定義: 把一個(gè)向左傾斜的紅節(jié)點(diǎn)連接(2-3樹,3-叉雙元素節(jié)點(diǎn)),轉(zhuǎn)換為右連接。

    背景:順序插入元素,3、1、1,2-3樹保持平衡,紅黑樹暫時(shí)處于左傾斜。

    接下來我們分別對(duì)比兩種樹結(jié)構(gòu)的平衡操作;

  • 2-3樹,所有插入的節(jié)點(diǎn)都會(huì)保持在一個(gè)節(jié)點(diǎn)上,之后通過調(diào)整節(jié)點(diǎn)位置,保持平衡。
  • 紅黑樹,則需要通過節(jié)點(diǎn)的右側(cè)旋轉(zhuǎn),將元素2拉起來,元素1和元素3,分別成為左右子節(jié)點(diǎn)。
  • 你會(huì)發(fā)現(xiàn),左旋與右旋是相互對(duì)應(yīng)的,但在2-3樹中是保持不變的

    1.3 左右旋綜合運(yùn)用

    左旋、右旋,我們已經(jīng)有了一個(gè)基本的概念,那么接下來我們?cè)倏匆粋€(gè)可以綜合左右旋以及對(duì)應(yīng)2-3樹的演化案例,如下;

    以上的例子分別演示了一個(gè)元素插入的三種情況,如下;

  • 1、3,插入0,左側(cè)底部插入,與2-3樹相比,需要右旋保持平衡
  • 1、3,插入2,中間位置插入,首先進(jìn)行左旋調(diào)整元素位置,之后進(jìn)行右旋進(jìn)行樹平衡
  • 1、3,插入5,右側(cè)位置插入,此時(shí)正好保持樹平衡,不需要調(diào)整
  • 1.4 染色

    在2-3樹中,插入一個(gè)節(jié)點(diǎn),為了保持樹平衡是不插入到空位置上的,當(dāng)插入節(jié)點(diǎn)后元素?cái)?shù)量有3個(gè)后則需要調(diào)整中間元素向上,來保持樹平衡。與之對(duì)應(yīng)的紅黑樹則需要調(diào)整顏色,來保證紅黑樹的平衡規(guī)則,具體參考如下;

    2. 旋轉(zhuǎn)+染色運(yùn)用案例

    接下來我們把上面講解到的旋轉(zhuǎn)、染色,運(yùn)用到一個(gè)實(shí)際案例中,如下圖;

    • 首先從左側(cè)開始,是一個(gè)按照順序插入生產(chǎn)出來的紅黑樹,插入順序;7、2、8、1、4、3、5
    • α,向目前紅黑樹插入元素6,插入后右下角有三個(gè)紅色節(jié)點(diǎn);3、5、6。
    • β,因?yàn)橛蚁陆菨M足染色條件,變換后;黑色節(jié)點(diǎn)(3、5)、紅色節(jié)點(diǎn)(4、6)。
    • γ,之后看被紅色連線鏈接的節(jié)點(diǎn)7、4、2,最小節(jié)點(diǎn)在中間,左旋平衡樹結(jié)構(gòu)。
    • δ,左旋完成后,紅色鏈接線的7、4、2為做傾順序節(jié)點(diǎn),因此需要做右旋操作。
    • ε,左旋、右旋,調(diào)整完成后,又滿足了染色操作。到此恢復(fù)紅黑樹平衡。

    注意,所有連接紅色節(jié)點(diǎn)的,都是是紅色線。以此與2-3樹做對(duì)應(yīng)。

    3. 刪除操作

    根據(jù)2-3-4樹模型的紅黑樹,在刪除的時(shí)候基本是按照2-3方式進(jìn)行刪除,只不過在這個(gè)過程中需要染色和旋轉(zhuǎn)操作,以保持樹平衡。刪除過程主要可以分為如圖四種情況,如下;

    3.1 刪除子葉紅色節(jié)點(diǎn)

    紅色子葉節(jié)點(diǎn)的刪除并不會(huì)破壞樹平衡,也不影響樹高,所以直接刪除即可,如下;

    3.2 刪除左側(cè)節(jié)點(diǎn)

    3.2.1 被刪節(jié)點(diǎn)兄弟為黑色&含右子節(jié)點(diǎn)

    3.2.2 被刪節(jié)點(diǎn)兄弟為黑色&含左子節(jié)點(diǎn)

    3.2.3 被刪節(jié)點(diǎn)兄弟為黑色&含雙子節(jié)點(diǎn)(紅)

    3.2.4 被刪節(jié)點(diǎn)兄弟為黑色&不含子節(jié)點(diǎn)

    3.2.5 被刪節(jié)點(diǎn)兄弟為黑色&含雙黑節(jié)點(diǎn)(黑)

    3.3. 刪除右側(cè)節(jié)點(diǎn)

    3.3.1 被刪節(jié)點(diǎn)兄弟為黑色&含左子節(jié)點(diǎn)

    3.3.2 被刪節(jié)點(diǎn)兄弟為黑色&含右子節(jié)點(diǎn)

    3.3.3 被刪節(jié)點(diǎn)兄弟為黑色&含雙子節(jié)點(diǎn)(紅)

    3.2.4 被刪節(jié)點(diǎn)兄弟為黑色&不含子節(jié)點(diǎn)

    3.2.5 被刪節(jié)點(diǎn)兄弟為黑色&含雙黑節(jié)點(diǎn)(黑)

    最后

    即使是面試跳槽,那也是一個(gè)學(xué)習(xí)的過程。只有全面的復(fù)習(xí),才能讓我們更好的充實(shí)自己,武裝自己,為自己的面試之路不再坎坷!今天就給大家分享一個(gè)Github上全面的Java面試題大全,就是這份面試大全助我拿下大廠Offer,月薪提至30K!

    資料領(lǐng)取方式:藍(lán)色傳送門

    我也是第一時(shí)間分享出來給大家,希望可以幫助大家都能去往自己心儀的大廠!為金三銀四做準(zhǔn)備!
    一共有20個(gè)知識(shí)點(diǎn)專題,分別是:

    Dubbo面試專題

    JVM面試專題

    Java并發(fā)面試專題

    Kafka面試專題

    MongDB面試專題

    MyBatis面試專題

    MySQL面試專題

    Netty面試專題

    RabbitMQ面試專題

    Redis面試專題

    Spring Cloud面試專題

    SpringBoot面試專題

    zookeeper面試專題

    常見面試算法題匯總專題

    計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)專題

    設(shè)計(jì)模式專題

    [外鏈圖片轉(zhuǎn)存中…(img-38gvEK3Z-1626344127956)]

    zookeeper面試專題

    [外鏈圖片轉(zhuǎn)存中…(img-x1BcUbtV-1626344127957)]

    常見面試算法題匯總專題

    [外鏈圖片轉(zhuǎn)存中…(img-7RtszomX-1626344127957)]

    計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)專題

    [外鏈圖片轉(zhuǎn)存中…(img-xhS1PIPy-1626344127958)]

    設(shè)計(jì)模式專題

    [外鏈圖片轉(zhuǎn)存中…(img-B81wVGev-1626344127959)]

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的Java面试你必须要知道的那些知识,面试建议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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