<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

          共 4471字,需瀏覽 9分鐘

           ·

          2021-08-05 04:22


          大家好,這是面試八股文騷套路系列的第四篇,JVM 篇。近幾年Java后端面試中,對 JVM 的考察越來越嚴(yán)格,這也給還沒工作經(jīng)驗的應(yīng)屆生帶來很大的難度。本期我們就給 JVM 知識部分畫一畫重點(diǎn),給大家講講如何應(yīng)付面試官對 JVM 的考察。

          推薦閱讀:

          我首先要給大家推薦兩本書,一本是準(zhǔn)備后端面試時人手一本的深入理解 Java 虛擬機(jī),另一本是實戰(zhàn) Java 虛擬機(jī)。

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

          「面試小技巧:」

          這里插播一則面試小技巧。在面試過程中,面試官特別注重應(yīng)聘者的歸納和總結(jié)能力。希望大家在回答面試官的問題時,都能把要回答的知識總結(jié)成 1,2,3,4 這樣,然后一條條的給面試官講述出來。比如你有一個秒殺系統(tǒng),你就應(yīng)該這樣給面試官講。我的秒殺系統(tǒng)的架構(gòu)為 Nginx + Redis + RabbitMQ + MySQL。首先我在緩存數(shù)據(jù)庫上采用 Cluster 形式的集群,解決了 xxx 問題。在消息中間件上采用什么方式解決了什么問題,最后在 MySQL 部分我針對 xxx 情況進(jìn)行了 xxx 設(shè)計,解決了 xxx 問題。我見過許多應(yīng)聘者,想起什么說什么,把自己說懵了,也把面試官搞糊了。不管是講項目,還是背八股文,甚至是參加hr面,在聽到問題的時候都應(yīng)該想一下,把回答條理了再給面試官講,這樣面試官能快速的捕捉到你的重點(diǎn)。

          深入理解Java虛擬機(jī)

          第二部分 自動內(nèi)存管理

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

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

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

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

          垃圾收集器是面試中重點(diǎn)的重點(diǎn)。首先 引用計數(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)典垃圾收集器  CMSG1 相關(guān)知識點(diǎn)要充分理解并且記熟(這是超高頻考點(diǎn)),SerialParNew 等了解就好,新生代的垃圾收集器暫時就別看了,你不說面試官不會問的。3.8節(jié)的內(nèi)存分配與回收策略的實戰(zhàn)要好好看下,對象優(yōu)先在 Eden 分配、大對象直接進(jìn)入老年代長期存活的對象進(jìn)入老年代動態(tài)對象年齡判定空間分配擔(dān)保 這些技術(shù)做了什么要記清楚。這些技術(shù)使用的常見參數(shù)有哪些?

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

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

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

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

          第三部分 虛擬機(jī)執(zhí)行子系統(tǒng)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          下面我出一些問題,把我上面說的學(xué)完以后,你可以用來自測一下你 JVM 準(zhǔn)備的怎么樣了,可以收藏了等面試前再過一遍。答案都在深入理解Java虛擬機(jī)這本書中。

          「測試開始」

          1.運(yùn)行時數(shù)據(jù)區(qū)中包含哪些區(qū)域?哪些線程共享?哪些線程獨(dú)享?

          2.講一下 Java 創(chuàng)建一個對象的過程。

          3.如何訪問對象?

          4.你了解分代理論嗎?講一下 Minor GC、還有 Full GC

          5.Java 用什么方法確定哪些對象該被清理?講一下可達(dá)性分析算法的流程。

          6.JDK 中有幾種引用類型?分別的特點(diǎn)是什么?

          7.如何回收方法區(qū)?

          8.標(biāo)記清楚、標(biāo)記復(fù)制、標(biāo)記整理分別是怎樣清理垃圾的?各有什么優(yōu)缺點(diǎn)?

          9.JVM 中的安全點(diǎn)和安全區(qū)各代表什么?寫屏障你了解嗎?

          10.講一下解決并發(fā)掃描時對象消失問題的兩種方案。

          11.對于 JVM 的垃圾收集器你有什么了解的?你講一下。

          有時候面試官會問出這種十分開放性的問題,你需要腦子里過一下你對這個大問題下的哪些知識熟悉哪些不熟悉,不熟悉的點(diǎn)一下就過,熟悉的展開講。在準(zhǔn)備校招時,我的一個是阿里 P7 的學(xué)姐,給我做過一次模擬面試,問出這個問題時讓我有點(diǎn)懵,那么多東西我不知道從哪開始回答呀,就答得很凌亂。模擬面試完我問她這種問題應(yīng)該從哪開始回答?她說她因為不知道我的掌握情況,所以就先問一個大問題,根據(jù)我的回答再追問,以后遇到這種問題主要從自己熟悉得方面切入就可以了。后來的面試還真遇到過好幾次這種情況,我就答,垃圾收集器的種類有以下幾種 Serial,ParNew...現(xiàn)在用的多的還是 CMS 和 G1,CMS 的垃圾收集流程是 xxx,G1的垃圾收集流程是 xxx,他們特點(diǎn)是...就這樣把話題引到 CMS 和 G1了,只 CMS 和 G1 這部分和面試官討論十幾分鐘完全沒問題。

          12.新生代垃圾收集器有哪些?老年代垃圾收集器有哪些?哪些是單線程垃圾收集器,哪些是多線程垃圾收集器?各有什么特點(diǎn)?各基于哪一種垃圾收集算法?

          13.講一下 CMS 垃圾收集器的四個步驟。CMS 有什么缺點(diǎn)?

          14.G1垃圾收集器的步驟。有什么缺點(diǎn)?

          15.講一下內(nèi)存分配策略?

          16.虛擬機(jī)基礎(chǔ)故障處理工具有哪些?

          17.類的生命周期?類加載階段完成了哪些事情。

          18.講一下雙親委派模型。

          19.把你對 volatile 的了解講一下。

          20.Java 內(nèi)存模型的原子性、可見性和有序性是通過哪些操作實現(xiàn)的?

          21.線程的狀態(tài)有哪些?

          22.按照線程安全的強(qiáng)度來區(qū)分,分為哪幾類?

          23.線程安全的實現(xiàn)方法有哪些?

          24.鎖優(yōu)化技術(shù)你了解什么?

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

          大家在校招過程中遇到問題歡迎來找我聊天呀。

          < END >

          也許你還想看
            | Java領(lǐng)域的又一神書!周志明老師YYDS!
            | 我常用的20+個學(xué)習(xí)編程的網(wǎng)站!蕪湖起飛!
            | 想去讀個研究生了
            | 7年前,24歲,出版了一本 Redis 神書
            | 京東二面:為什么需要分布式ID?你項目中是怎么做的?

          我是 Guide哥,一個工作2年有余,接觸編程已經(jīng)6年有余的程序員。大三開源 JavaGuide,目前已經(jīng) 100k+ Star。未來幾年,希望持續(xù)完善 JavaGuide,爭取能夠幫助更多學(xué)習(xí) Java 的小伙伴!共勉!凎!點(diǎn)擊即可了解我的個人經(jīng)歷

          歡迎點(diǎn)贊分享。咱們下期再會!

          瀏覽 30
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  一级片在线观看视频 | 超碰97资源网站 | 人人操综合 | 国产美女A片 | 自拍中文字幕 |