| 類型 | 語法 | 處理時機 | 適用場景 | 參數傳遞 |
| 動態 | <jsp:include page="..." flush="true"/> | 請求處理階段(執行期) | 動態頁面、需傳參 | 支援 <jsp:param> |
| 靜態 | <%@ include file="..." %> | JSP 編譯階段(轉譯期) | 靜態片段、頁首頁尾 | 不支援 |
靜態 include 將內容直接合併到主頁面 Servlet 代碼中,動態 include 則是執行期請求轉發/包含。
4. Assert 斷言最佳實踐
- 用途:開發/測試階段驗證「必須為真」的前置/後置條件、不變量。
- 啟用:
java -ea 或 java -enableassertions。
- 生產環境:關閉斷言(
-da)以提升效能。
- 慎用:不要用於參數驗證、業務邏輯控制流,因生產環境可能關閉導致邏輯失效。
5. GC (Garbage Collection) 核心機制
- 目的:自動回收無引用物件記憶體,防止記憶體洩漏與 OutOfMemoryError。
- 可達性分析:從 GC Roots(棧區引用、靜態欄位、常量、JNI 引用等)出發,不可達物件判定為垃圾。
- 演算法:標記-清除、標記-整理、複製、分代收集(新生代/老年代)。
- Java 無顯式釋放記憶體 API,
System.gc() 僅建議,不保證執行。
6. 20 道經典陷阱題深度解析
Q6: short s1 = 1; s1 = s1 + 1; vs s1 += 1;
short s1 = 1; s1 = s1 + 1; // 編譯錯誤:s1+1 提升為 int,需強制轉型 (short)(s1+1)
short s1 = 1; s1 += 1; // 正確:+= 內含隱式強制轉型
Q7: Math.round(11.5) / Math.round(-11.5)
Math.round(11.5) == 12 // floor(x + 0.5)
Math.round(-11.5) == -11 // floor(-11.5 + 0.5) = floor(-11.0) = -11
Q8: String s = new String("xyz"); 創建幾個物件?
兩個:字串常量池中 "xyz" + 堆上 new String 物件。
Q9: 四執行緒對 j 遞增/遞減(含同步)
public class ThreadTest {
private int j = 0;
public static void main(String[] args) {
ThreadTest tt = new ThreadTest();
Runnable inc = tt::inc, dec = tt::dec;
for (int i = 0; i < 2; i++) {
new Thread(inc).start();
new Thread(dec).start();
}
}
private synchronized void inc() { j++; System.out.println(Thread.currentThread().getName() + "-inc:" + j); }
private synchronized void dec() { j--; System.out.println(Thread.currentThread().getName() + "-dec:" + j); }
}
Q10: Java 有 goto 嗎?
goto 是保留字,未使用。可用 break/continue 標籤 實現類似跳轉。
Q11: 啟動執行緒用 run() 還是 start()?
start():建立新執行緒並排程執行 run()。直接呼叫 run() 只是普通方法調用,仍在主執行緒執行。
Q12: SessionBean/EntityBean 生命週期與事務
- Stateless Session Bean:池化管理,容器決定生命週期,方法級事務。
- Stateful Session Bean:與客戶端會話綁定,激活/鈍化,會話級事務。
- Entity Bean:資料同資料庫壽命同在,容器管理 (CMP) 或 Bean 管理 (BMP) 持久化。
- 事務技術:JTA (Java Transaction API)、JTS、OTS、XA。
Q13: 主流應用伺服器
WebLogic, WebSphere, JBoss/WildFly, Tomcat (Servlet 容器), GlassFish/Payara, Jetty。
Q14: 常見 RuntimeException
NullPointerException, IndexOutOfBoundsException, ClassCastException,
IllegalArgumentException, IllegalStateException, ArithmeticException,
ConcurrentModificationException, UnsupportedOperationException...
Q15: 介面/抽象類別繼承規則
- 介面可繼承多介面 (
extends)。
- 抽象類別可實現介面 (
implements)。
- 抽象類別可繼承具體類別(前提:父類別有可見建構子)。
Q16: List/Set/Map 與 Collection 關係
List、Set 繼承 Collection;Map 不繼承 Collection(但提供 keySet()、values()、entrySet() 返回 Collection 視圖)。
Q17: 資料庫連線池機制
- 啟動建立初始連線數。
- 借用:取空閒連線標記忙碌;不足則按配置增量建立。
- 歸還:標記空閒,不關閉實體連線。
- 維護:定期檢測空閒連線有效性、回收超時連線。
Q18: abstract method 能否同時是 static/native/synchronized?
全不能:abstract 要求子類實現,static 屬於類、native 是原生實現、synchronized 需方法體,均與 abstract 衝突。
Q19: 陣列 length vs String length()
陣列:length 屬性。String:length() 方法。
Q20: Set 判重用 == 還是 equals()?
用 equals() 判斷邏輯相等。== 比較參考位址。HashSet 先比 hashCode() 再比 equals()。
Q21: 建構子能否 override?
不能:建構子不屬於繼承成員。可多載,不可覆寫。
- 上一篇文章: Java 基礎核心知識點大全(一):面向對象、基礎類型、集合、異常、Servlet、EJB
- 下一篇文章: Java 代碼找錯實戰(六):12 道隱蔽編譯/邏輯錯誤深度解析
Copyright ©
程式碼之家 All Rights Reserved