<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          八股文騷套路之JVM(重構(gòu)完善版)

          共 4274字,需瀏覽 9分鐘

           ·

          2021-12-31 03:04

          近幾年 Java 后端面試中,對(duì) JVM 的考察越來越嚴(yán)格,這也給還沒工作經(jīng)驗(yàn)的應(yīng)屆生帶來很大的難度。本期我們就給 JVM 知識(shí)部分畫一畫重點(diǎn),給大家講講如何應(yīng)付面試官對(duì) JVM 的考察。

          1救急準(zhǔn)備

          下面這些問題都是面試互聯(lián)網(wǎng)大廠后端崗位時(shí)的常問問題,我希望你都能熟練的答出來呀!暫時(shí)沒記牢也不用太擔(dān)心,我建議你在投簡(jiǎn)歷和約面時(shí),把最想去的公司的面試稍微往后推一推,先面幾家自己拿不到 offer 也不會(huì)難過的公司。上面這些八股文就是通過我 平時(shí)+面試 記熟的,去年 7 月 初第一次我面一家中小廠,這些都磕磕絆絆的答不出來,但是到后期 8 月底 9 月初完全能輕松應(yīng)對(duì)各大廠面試官了。

          另外,我通過打星與加粗的方式對(duì)下面面試題的重要性進(jìn)行評(píng)級(jí)!難度是針對(duì)互聯(lián)網(wǎng)大廠的。

          • ? :面試中不常問到,如果面試官問到盡量能答出來,答不出來也沒關(guān)系。
          • ?? :面試中不常問到,但是如果面試官問到的話,答不出來對(duì)你的印象會(huì)減分。
          • ???:面試中會(huì)問到,答不出來面試有點(diǎn)懸。面試官會(huì)驚訝為什么你這也不會(huì)。
          • ????:面試高頻考點(diǎn)。
          • ?????:面試超高頻考點(diǎn)。四星考點(diǎn)和五星考點(diǎn)是參加十場(chǎng)面試,至少能有五場(chǎng)面試問到這些的。大家在準(zhǔn)備面試過程中盡量把這些知識(shí)點(diǎn)的回答條理梳理清楚,面試官一問就開背。

          JVM 基礎(chǔ)常見面試題匯總?:

          1. 運(yùn)行時(shí)數(shù)據(jù)區(qū)中包含哪些區(qū)域?哪些線程共享?哪些線程獨(dú)享?【?????】
          2. 說一下方法區(qū)和永久代的關(guān)系。【???】
          3. 講一下 Java 創(chuàng)建一個(gè)對(duì)象的過程。【????】
          4. 對(duì)象的訪問定位的兩種方式(句柄和直接指針兩種方式)。【?????】
          5. 你了解分代理論嗎?講一下 Minor GC、還有 Full GC。【?????】
          6. Java 用什么方法確定哪些對(duì)象該被清理?講一下可達(dá)性分析算法的流程。【????】
          7. JDK 中有幾種引用類型?分別的特點(diǎn)是什么?【??】
          8. 如何回收方法區(qū)?【???】
          9. 標(biāo)記清楚、標(biāo)記復(fù)制、標(biāo)記整理分別是怎樣清理垃圾的?各有什么優(yōu)缺點(diǎn)?【?????】
          10. JVM 中的安全點(diǎn)和安全區(qū)各代表什么?寫屏障你了解嗎?【????】
          11. 并發(fā)標(biāo)記要解決什么問題?并發(fā)標(biāo)記帶來了什么問題?如何解決并發(fā)掃描時(shí)對(duì)象消失問題?【????】相關(guān)閱讀:面試官:你說你熟悉 jvm?那你講一下并發(fā)的可達(dá)性分析?。
          12. 對(duì)于 JVM 的垃圾收集器你有什么了解的?【????】有時(shí)候面試官會(huì)問出這種十分開放性的問題,你需要腦子里過一下你對(duì)這個(gè)大問題下的哪些知識(shí)熟悉哪些不熟悉,不熟悉的點(diǎn)一下就過,熟悉的展開講。在準(zhǔn)備校招時(shí),我的一個(gè)是阿里 P7 的學(xué)姐,給我做過一次模擬面試,問出這個(gè)問題時(shí)讓我有點(diǎn)懵,那么多東西我不知道從哪開始回答呀,就答得很凌亂。模擬面試完我問她這種問題應(yīng)該從哪開始回答?她說她因?yàn)椴恢牢业恼莆涨闆r,所以就先問一個(gè)大問題,根據(jù)我的回答再追問,以后遇到這種問題主要從自己熟悉得方面切入就可以了。后來的面試還真遇到過好幾次這種情況,我就答,垃圾收集器的種類有以下幾種 Serial,ParNew...現(xiàn)在用的多的還是 CMS 和 G1,CMS 的垃圾收集流程是 xxx,G1 的垃圾收集流程是 xxx,他們特點(diǎn)是...就這樣把話題引到 CMS 和 G1 了,只 CMS 和 G1 這部分和面試官討論十幾分鐘完全沒問題。
          13. 新生代垃圾收集器有哪些?老年代垃圾收集器有哪些?哪些是單線程垃圾收集器,哪些是多線程垃圾收集器?各有什么特點(diǎn)?各基于哪一種垃圾收集算法?【????】
          14. 講一下 CMS 垃圾收集器的四個(gè)步驟。CMS 有什么缺點(diǎn)?【????】
          15. G1 垃圾收集器的步驟。有什么缺點(diǎn)?【????】
          16. 講一下內(nèi)存分配策略?【????】
          17. 虛擬機(jī)基礎(chǔ)故障處理工具有哪些?【???】
          18. 什么是字節(jié)碼?類文件結(jié)構(gòu)的組成了解嗎?【????】
          19. 類的生命周期?類加載的過程了解么?加載這一步主要做了什么事情?初始化階段中哪幾種情況必須對(duì)類初始化?【?????】
          20. 講一下雙親委派模型。【?????】

          由于篇幅問題,我并沒有寫上面這些問題的答案。你可以自行查閱,你也可以參考 JavaGuide 這個(gè)開源項(xiàng)目,涵蓋了大部分 Java 程序員所需要掌握的核心知識(shí)。背面試八股文,這是一個(gè)必看的開源項(xiàng)目(學(xué) Java 基礎(chǔ)以及實(shí)戰(zhàn)也推薦看這個(gè)項(xiàng)目)。

          • Github 地址:https://github.com/Snailclimb/JavaGuide
          • Gitee 地址:https://gitee.com/SnailClimb/JavaGuide(Github 無法訪問或者訪問速度比較慢的小伙伴可以看碼云上的對(duì)應(yīng)內(nèi)容)
          • 在線閱讀地址: https://javaguide.cn/

          2系統(tǒng)學(xué)習(xí)

          如果想要看書學(xué)習(xí) JVM 和準(zhǔn)備 JVM 面試的話,我建推薦兩本書:一本是準(zhǔn)備后端面試時(shí)人手一本的《深入理解 Java 虛擬機(jī)》,另一本是《實(shí)戰(zhàn) Java 虛擬機(jī)》。

          《深入理解 Java 虛擬機(jī)》 這本書的推薦理由不用多說,面試官的 JVM 知識(shí)也是從這本書上學(xué)的。推薦實(shí)戰(zhàn) Java 虛擬機(jī)這本書的理由呢,是因?yàn)樯钊肜斫?Java 虛擬機(jī)這本書初學(xué)者看起來有點(diǎn)困難。如果你一點(diǎn) JVM 虛擬機(jī)基礎(chǔ)都沒有,那么我建議你先快速過一遍實(shí)戰(zhàn) Java 虛擬機(jī),然后再去啃深入理解 Java 虛擬機(jī)這本書。我的理念一直是先易后難,先做到上手再做到深挖。深入理解 Java 虛擬機(jī)這本書很厚,但是通過我的劃重點(diǎn),能把書變薄。大家先把我劃重點(diǎn)的部分學(xué)會(huì),就完全夠應(yīng)付面試了,剩下的部分有時(shí)間再看就好了。

          這里我們以 《深入理解 Java 虛擬機(jī)》 這本書為例來介紹如何準(zhǔn)備 JVM 面試八股文。

          第 2 章 Java 內(nèi)存區(qū)域與內(nèi)存溢出異常

          第 2 章屬于第二部分的一個(gè)總概括,也是 JVM 八股文面試中的一大考點(diǎn)。首先,運(yùn)行時(shí)數(shù)據(jù)區(qū)?是面試官特別愛問的一個(gè)問題。下面這張圖大家一定要記牢。

          img

          面試官在考察 JVM 部分時(shí),起始問題一般就是運(yùn)行時(shí)數(shù)據(jù)區(qū)中包含哪些區(qū)域?哪些區(qū)域時(shí)線程共享?哪些區(qū)域線程隔離?然后以此再問你各個(gè)部分的細(xì)節(jié)。這幾個(gè)區(qū)域中,堆和方法區(qū)又是考察的重點(diǎn)。另外虛擬機(jī)在 Java 堆中?對(duì)象的創(chuàng)建?、內(nèi)存布局?、對(duì)象訪問?定位這幾個(gè)過程也是面試八股文的一大考點(diǎn)。如果有時(shí)間的話把 2.4 節(jié) OutOfMemoryError 異常的實(shí)例了解一下也是挺好的。

          第 3 章 垃圾收集器與內(nèi)存分配策略

          垃圾收集器是面試中重點(diǎn)的重點(diǎn)。首先?引用計(jì)數(shù)法?和?可達(dá)性分析算法?必須充分理解,然后強(qiáng)引用?、軟引用?、?弱引用?、虛引用?四種類型必須理解并且記牢,面試官特別愛問四種引用的區(qū)別。垃圾收集算法中的分代收集理論要充分理解并且記熟,標(biāo)記-清楚算法?、標(biāo)記復(fù)制算法?、標(biāo)記整理算法?要充分理解并且記熟,并比較各自的優(yōu)缺點(diǎn)。根節(jié)點(diǎn)枚舉?、安全點(diǎn)?、安全區(qū)域?、記憶集與卡表?、寫屏障?、并發(fā)的可達(dá)性分析?要充分理解并能大致復(fù)述出來。經(jīng)典垃圾收集器?CMS?和?G1?相關(guān)知識(shí)點(diǎn)要充分理解并且記熟(這是超高頻考點(diǎn)),SerialParNew?等了解就好,新生代的垃圾收集器暫時(shí)就別看了,你不說面試官不會(huì)問的。3.8 節(jié)的內(nèi)存分配與回收策略的實(shí)戰(zhàn)要好好看下,對(duì)象優(yōu)先在?Eden?分配、大對(duì)象直接進(jìn)入老年代長(zhǎng)期存活的對(duì)象進(jìn)入老年代動(dòng)態(tài)對(duì)象年齡判定空間分配擔(dān)保?這些技術(shù)做了什么要記清楚。這些技術(shù)使用的常見參數(shù)有哪些?

          第 4 章 虛擬機(jī)性能監(jiān)控、故障處理工具

          這一章有時(shí)間看下,把幾個(gè)常用的工具記一下,沒時(shí)間就別看了。當(dāng)時(shí)有個(gè)面試官問我虛擬機(jī)怎么做性能監(jiān)控,我說我知道有工具可以監(jiān)控虛擬機(jī)性能,但名字我記不清了,面試官說你知道有工具就行。

          第 5 章 調(diào)優(yōu)案例分析與實(shí)戰(zhàn)

          在這一章可以學(xué)一兩個(gè)實(shí)例套到自己項(xiàng)目中給面試官講,但是如果你感覺自己給面試官講不清楚,那么千萬別勉強(qiáng)。你別說你有 JVM 調(diào)優(yōu)經(jīng)驗(yàn),面試官一般也不會(huì)問你。

          第 6 章 類文件結(jié)構(gòu)

          大致掃讀一遍就可以了,了解就行,面試官基本不問。

          第七章 虛擬機(jī)類加載機(jī)制

          類的生命周期?一定要記牢,就是下面這張圖。

          img

          上述環(huán)節(jié)的順序要記清楚,每個(gè)環(huán)節(jié)做了什么也要記清楚。比如?加載?階段做了三件事:

          (1)通過類的全限定名獲取定義此類的二進(jìn)制字節(jié)流。

          (2)將字節(jié)流所代表的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。

          (3)在內(nèi)存中生成一個(gè)代表這個(gè)類的 Class 對(duì)象作為方法區(qū)這個(gè)類的各種數(shù)據(jù)訪問入口。其它幾個(gè)環(huán)節(jié)同樣,不需要記清楚細(xì)節(jié),但是做了什么要記清楚。

          類加載器中的?雙親委派模型?是八股文考試中重點(diǎn)的重點(diǎn),被問到的頻率特別高,一定要充分理解,并且記熟。

          說到類加載,Java創(chuàng)建對(duì)象?的過程也一定要記熟呀,類加載檢查 -> 分配內(nèi)存 -> 初始化零值 -> 設(shè)置對(duì)象頭 ->執(zhí)行 init 方法,這個(gè)順序一定要記牢,細(xì)節(jié)也要記清。

          第八章 虛擬機(jī)字節(jié)碼執(zhí)行引擎

          這一章把?棧幀的結(jié)構(gòu)?弄清楚就差不多了,其它的就掃一眼就好了。

          第九章 類加載及執(zhí)行子系統(tǒng)的案例與實(shí)戰(zhàn)

          了解一下就可以了,不了解也沒事。

          第十二章 Java 內(nèi)存模型與線程

          這一章也是八股文面試考察中的重點(diǎn)、Java內(nèi)存模型的定義內(nèi)存間交互操作?要記清楚。volatile?這個(gè)關(guān)鍵字是面試考察的重點(diǎn),他的作用要徹徹底底的掌握,面試中經(jīng)常問。Java 內(nèi)存模型的三大特征?原子性、可見性和有序性?也一定要理解。Java 線程的狀態(tài)轉(zhuǎn)換?也是一個(gè)常考問題。協(xié)程了解一下就好了。

          第十三章 線程安全與鎖優(yōu)化

          這部分絕對(duì)是面試中考察的重點(diǎn)中的重點(diǎn)。首先你需要理解并記牢線程安全的幾種實(shí)現(xiàn)方法,比如互斥同步非阻塞同步?等。互斥同步中有兩個(gè)重要的同步手段一定要重視,一個(gè)是?synchronized,另一個(gè)是?ReentrantLock?。非阻塞同步中一個(gè)重要手段?CAS?一定要充分理解。

          鎖優(yōu)化也是考察的重點(diǎn),適應(yīng)性自旋鎖消除鎖碰撞輕量級(jí)鎖偏向鎖?這些技術(shù)一定要充分理解和記熟。

          好了,如果只是為了通過 JVM 的八股文面試的話,把上面我劃重點(diǎn)的內(nèi)容掌握應(yīng)付校招足夠了。這樣看,深入理解 Java 虛擬機(jī)這本書是不是變薄了很多了?但是如果有時(shí)間的話,我還是建議你能夠把整本書都好好看下呀。嗯...我知道你們應(yīng)該學(xué)累了。


          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩视频在线观看一区 | 91久久电影 | 美女性爱网址 | 日韩性网址 | 亚洲大几吧色色91视频 |