JVM 面试都问些啥?看这一篇就够了
昨晚,我在路口等車的時候,聽到幾個人在那討論問題:
“之前我用 jprofiler 監控 jvm 里的對象,當老年代滿了,我手動觸發一次 fgc,發現只能回收一半,再觸發一次,就完全回收,這種情況正常嗎?”
“是不是你的應用正在執行過程中啊?”
“可以考慮下 finalize,弱引用緩存等。”
“那你們怎么確定 CPU 線程上下文切換消耗資源的?你們咋改進的?”
“一般我們的業務系統 CPU 切換消耗很低,你可以試下分批加法,算 100 億個數字相加什么的,開 10 個,100 個,1000 個,10000 個線程。線程數量太大才會有影響,本質是資源爭用,和鎖資源有些類似。線程數量要測試,還是要看業務類型,高并發低 CPU 的 Redis 之類影響非常明顯,Java 的主要領域是企業業務系統,如果你要實現 Redis,Mongo,MySQL 等基礎服務,必須考慮 CPU 切換。”
......
車來了,我坐上車后看著窗外的冬夜嘆了口氣:這幾天的北京可真冷啊,連天都黑的太快了。
是啊,冬天本來就冷,黑夜也會變得漫長,都是自然現象而已。
但是每個人的心里總會因為一些原因莫名的感到寒冷。比如我就是因為聽到剛才那些人的聊天覺得心煩意亂。
因為我也是一名 Java 從業者,雖然近些年來,無論是使用規模、開發者人數,還是技術生態成熟度、相關工具的豐富程度,Java 都當之無愧是后端開發語言中不可撼動的王者,也是開發各類業務系統的首選語言。
而且薪資也不菲 ????
但我總有種做不動的感覺。項目還好說,讓我用 Java 寫系統代碼都沒有問題,但是如果有人問我 Java 程序運行起來以后內部發生了什么,可以怎么讓它運行的更好的話,我就真的有點答不上來。
而且我發現,現在面試 Java 崗位,無論什么規模的公司,一般面試官面著面著就會問到 JVM 相關的問題,什么線程、內存模型、JVM 運行時內存、垃圾回收與算法、GC 垃圾收集器、JAVA IO/NIO 、JVM 類加載機制等等知識點。
如果答不好,甚至影響薪酬的多少。
所以了解 JVM 則是深入學習 Java 必不可少的一環,也是 Java 開發人員邁向更高水平的一個階梯。
我們不僅要會用 Java 寫代碼做系統,更要懂得如何理解和分析 Java 程序運行起來以后內部發生了什么,然后可以怎么讓它運行的更好。
就像我們要想多年開車的老司機,僅僅會開車肯定不能當一個好司機。車開多了,總會有一些多多少少大大小小的故障毛病。老司機需要知道什么現象說明有了什么毛病,需要怎么處理,不然就會導致經常拋錨,影響我們的行程。本專欄的目的就是教會我們怎么去了解 JVM 這輛優秀跑車的一些原理以及怎么去用各種工具分析修理它。
市面上各類 JVM 相關的資料雖多如牛毛,但是明顯都很難讓大家系統性地學明白,同時一線大廠技術面試現在 JVM 知識也是必考科目。? ?
所以在這個背景下,兩位在大廠摸爬滾打 10 多年的 Java 專家全面梳理了系統化學習 JVM 的知識和經驗,包括 JVM 的技術和內存模型、JVM 參數和內置工具、GC 算法、GC 日志、內存和線程等相關問題排查分析,以及常見的面試問題深度剖析等高級的進階方法與實戰。既滿足大家快速系統化學習和全面掌握知識的需求,又兼顧大家的面試經驗輔導。
通過體系化的學習,了解一般原理,知其然知其所以然;
熟悉工具和方案,知道從何下手,工作中如何分析和解決問題;
隨著課程的演示和練習,加深理解,不管大家之前的基礎如何,都能夠融會貫通;
面試題的解析部分,會根據大家的反饋進行持續更新,長期助力于大家的學習和進步。
本專欄的特點可以總結為 16 個字:
深入淺出、實踐為要、體系完整、層次分明
本專欄分為兩部分,基礎知識篇主要介紹 JVM 的基礎知識、JDK 相關的各種工具用法,深入分析篇講解各種 GC 算法、如何進行 JVM 的 GC 日志、線程、內存等各類指標進行分析和問題診斷,再結合作者的實際分析調優經驗,以及對于常見的 JVM 面試問題進行分析和解答,為學習者梳理清楚 JVM 的整體知識脈絡,帶來最全面的 JVM 一線經驗和實用技巧。
專欄大綱
本次分享您將了解以下內容(22 篇):
基礎知識篇
環境準備:千里之行,始于足下
常用性能指標:沒有量化,就沒有改進
JVM 基礎知識:不積跬步,無以至千里
Java 字節碼技術:不積細流,無以成江河
JVM 類加載器:山不辭土,故能成其高
JVM 內存模型:海不辭水,故能成其深
JVM 啟動參數詳解:博觀而約取、厚積而薄發
JDK 內置命令行工具:工欲善其事,必先利其器
JDK 內置圖形界面工具:海闊憑魚躍,天高任鳥飛
JDWP 簡介:十步殺一人,千里不留行
JMX 與相關工具:山高月小,水落石出
深入分析篇
常見的 GC 算法介紹(Parallel/CMS/G1):溫故而知新
Java11 ZGC 和 Java12 Shenandoah 介紹:茍日新、日日新、又日新
Oracle Graalvm 介紹:會當凌絕頂、一覽眾山小
GC 日志解讀與分析:千淘萬漉雖辛苦,吹盡狂沙始到金
JVM 的線程堆棧等數據分析:操千曲而后曉聲、觀千劍而后識器
內存 dump 和內存分析工具:萬里赴戎機、關山度若飛
fastthread 相關的工具介紹:欲窮千里目,更上一層樓
面臨復雜問題時的幾個高級工具:它山之石,可以攻玉
JVM 問題排查分析調優經驗:操千曲而后曉聲,觀千劍而后識器
JVM 相關的常見面試問題匯總:運籌策帷帳之中,決勝于千里之外
應對容器時代面臨的挑戰:長風破浪會有時、直掛云帆濟滄海
專欄亮點
從 0 掌握 JVM 關鍵技術,了解核心知識;
全面了解各類 GC 算法的原理和特性,洞悉相關原理;
全面學習常見的 JVM 分析調優工具,上手十八般武藝;
一線大廠 JVM 面試題全面剖析,助力拿到心儀 Offer。
你能收獲什么
夯實基礎:掌握 JVM 的基礎知識和常用工具,了解一般原理,知道從什么地方著手分析問題;
深入學習:掌握各類 GC 算法的一般原理,知道如何根據實際需要選擇使用合適的 GC 策略;
分析問題:掌握 GC 日志、線程、內存等維度的分析技巧,知道排查問題和優化系統的套路;
積累經驗:了解常見的分析調優經驗,熟悉常見的面試問題和技巧,徹底學會 JVM 知識。
作者簡介
適宜人群
希望提高技術能力的 Java 開發者、運維工程師
對 JVM 技術和性能、問題分析調優感興趣的技術人員
廣大高校計算機和軟件專業的師生
總結
以上是生活随笔為你收集整理的JVM 面试都问些啥?看这一篇就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Self Service Passwor
- 下一篇: layer icon图标汇总