前言
作為 Java 的從業者,在找工作的時候,一定會被問及關於 JVM 相關的知識。JVM 知識的掌握程度,在很多面試官眼里是候選人技術深度的一個重要評判標准。
小編分享的這份Java后端開發面試總結包含了JavaOOP、Java集合容器、Java異常、並發編程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL數據庫、消息中間件MQ、Dubbo、Linux、ZooKeeper、 分布式&數據結構與算法等26個專題技術點,都是小編在各個大廠總結出來的面試真題,已經有很多粉絲靠這份PDF拿下眾多大廠的offer,今天在這里總結分享給到大家!【已完結】
完整版Java面試題地址:2021最新面試題合集集錦。
1.什么情況下會發生棧內存溢出。
2.詳解JVM內存模型
思路: 給面試官畫一下JVM內存模型圖,並描述每個模塊的定義,作用,以及可能會存在的問題,如棧溢出等。
我的答案:
JVM內存結構
3.JVM內存為什么要分成新生代,老年代,持久代。新生代中為什么要分為Eden和Survivor。
4. JVM中一次完整的GC流程是怎樣的,對象如何晉升到老年代
5.你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms和G1,包括原理,流程,優缺點。
6.JVM內存模型的相關知識了解多少,比如重排序,內存屏障,happen-before,主內存,工作內存。
思路: 先畫出Java內存模型圖,結合例子volatile ,說明什么是重排序,內存屏障,最好能給面試官寫 以下demo說明。
我的答案:
1)Java內存模型圖:
Java內存模型規定了所有的變量都存儲在主內存中,每條線程還有自己的工作內存,線程的工作內存中 保存了該線程中是用到的變量的主內存副本拷貝,線程對變量的所有操作都必須在工作內存中進行,而不能直接讀寫主內存。不同的線程之間也無法直接訪問對方工作內存中的變量,線程間變量的傳遞均需要自己的工作內存和主存之間進行數據同步進行。
2)指令重排序。
在這里,先看一段代碼
public class PossibleReordering { static int x = 0, y = 0; static int a = 0, b = 0; public static void main(String[] args) throws InterruptedException { Thread one = new Thread(new Runnable() { public void run() { a = 1; x = b; } });Thread other = new Thread(new Runnable() { public void run() { b = 1; y = a; } }); one.start();other.start(); one.join();other.join(); System.out.println(“(” + x + “,” + y + “)”);}
運行結果可能為(1,0)、(0,1)或(1,1),也可能是(0,0)。因為,在實際運行時,代碼指令可能並不是嚴格按照代碼語句順序執行的。大多數現代微處理器都會采用將指令亂序執行(out-of-order execution,簡稱OoOE或OOE)的方法,在條件允許的情況下,直接運行當前有能力立即執行的后續指令,避開獲取下一條指令所需數據時造成的等待3。通過亂序執行的技術,處理器可以大大提高執行效率。而這就是
指令重排。
7.簡單說說你了解的類加載器,可以打破雙親委派么,怎么打破。
雙親委派模型圖:
8.說說你知道的幾種主要的JVM參數
9.怎么打出線程棧信息。
10.強引用、軟引用、弱引用、虛引用的區別?
11.內存模型以及分區,需要詳細到每個區放什么。
12.堆里面的分區:Eden,survival (from+ to),老年代,各自的特點。
13.簡述 java 垃圾回收機制?
14.java 中垃圾收集的方法有哪些?
15.java 內存模型
16.java 類加載過程?
17. 簡述 java 類加載機制?
虛擬機把描述類的數據從 Class 文件加載到內存,並對數據進行校驗,解析和初始化,最終形成可以被虛擬機直接使用的 java 類型。
18. 類加載器雙親委派模型機制?
當一個類收到了類加載請求時,不會自己先去加載這個類,而是將其委派給父類,由父類去加載,如果此時父類不能加載,反饋給子類,由子類去完成類的加載。
19.什么是類加載器,類加載器有哪些?
20.簡述 java 內存分配與回收策率以及 Minor GC 和 Major GC
- 對象優先在堆的 Eden 區分配。
- 大對象直接進入老年代.
- 長期存活的對象將直接進入老年代當 Eden 區沒有足夠的空間進行分配時,虛擬機會執行一次 Minor GC.Minor Gc 通常發生在新生代的 Eden 區,在這個區的對象生存期短,往往發生 Gc 的頻率較高,回收速度比較快;Full Gc/Major GC 發生在老年代,一般情況下,觸發老年代 GC的時候不會觸發 Minor GC,但是通過配置,可以在 Full GC 之前進行一次 Minor GC 這樣可以加快老年代的回收速度。