本文為「Java 基礎面試題」系列第三部分,涵蓋 JDBC 事務與大物件處理、正則表達式、反射機制、面向物件六大原則一法則、23 種設計模式、UML、ORM/CoC、Servlet/JSP 核心、過濾器/監聽器、Java EE 核心規格、Spring IoC/AOP 實現機制與選型理由。適合中高級開發者查漏補缺。
Connection 提供三大核心方法:
setAutoCommit(false):關閉自動提交,開啟手動事務commit():顯式提交事務rollback():異常時回滾JDBC 3.0 新增 Savepoint(保存點),支援部分回滾:
Savepoint sp = conn.setSavepoint("A");
// ... 執行 SQL ...
conn.rollback(sp); // 回滾到保存點 A
PreparedStatement 與 ResultSet 均提供 setBlob()/getBlob()、setClob()/getClob() 方法。
用途:描述字串規則,進行匹配、提取、替換、分割。
Java API:
String.matches()、replaceAll()、replaceFirst()、split()java.util.regex.Pattern / Matcher:豐富的物件導向 API經典面試題:擷取第一個中文括號前的內容
北京市(朝陽區)(西城區) → 北京市
Pattern p = Pattern.compile(".*?(?=\\()"); // 非貪婪 + 前瞻斷言
Matcher m = p.matcher(str);
if (m.find()) System.out.println(m.group());
| 問題 | 答案 |
|---|---|
| 獲取 Class 物件的三種方式 | 1. 類別.class 2. 物件.getClass() 3. Class.forName("全限定名") |
| 反射建立物件的兩種方式 | 1. clazz.newInstance()(需無參建構子) 2. clazz.getConstructor(參數類別...).newInstance(實參...) |
| 存取 private 欄位 | Field f = clazz.getDeclaredField("name"); f.setAccessible(true); f.get(obj) / f.set(obj, val) |
Properties extends Hashtable、Stack extends Vector 皆為濫用繼承GoF 23 種模式三大類:
Singleton、Factory Method、Abstract Factory、Builder、PrototypeProxy、Adapter、Decorator、Facade、Bridge、Composite、FlyweightTemplate Method、Strategy、Observer、Chain of Responsibility、Command、State、Visitor、Iterator、Mediator、Memento、Interpreter必會手寫/說明 4 大高頻模式:
| 模式 | 核心思想 | 典型應用 |
|---|---|---|
| 工廠方法 | 定義建立物件介面,子類決定實例化哪個類 | Collection.iterator() |
| 代理 | 為目標物件提供代理,控制存取 | Spring AOP、遠程代理、虛擬代理 |
| 適配器 | 將介面轉換為客戶期望的介面 | IO 流轉換、Arrays.asList() |
| 模板方法 | 定義演算法骨架,延遲部分步驟到子類 | JdbcTemplate、Servlet 生命週期 |
User 對應表 users)即無需配置;違背約定時再配置。核心價值:減少決策、統一規範、利於團隊協作| 題號 | 考點 | 核心答案 |
|---|---|---|
| 96 | Servlet 生命週期 | 載入→實例化→init()→服務service()(分派 doGet/doPost)→銷毀destroy() |
| 97 | Forward vs Redirect | Forward:伺服器內部轉向,瀏覽器 URL 不變,效率高。Redirect:302 狀態碼,瀏覽器重新請求,URL 變更,可跨伺服器 |
| 98 | JSP 9 大內建物件 | request、response、pageContext、session、application、out、config、page、exception |
| 99 | GET vs POST | GET:參數在 URL,長度受限,非敏感資料。POST:參數在 Body,無長度限制,適合上傳/敏感資料 |
| 100 | JSP 與 Servlet 關係 | JSP 本質是 Servlet,側重視圖;Servlet 側重控制邏輯。MVC 中 JSP=View,Servlet=Controller |
| 101 | JSP 四大作用域 | page < request < session < application(生命週期由短到長) |
| 102 | Session 追蹤技術 | URL 重寫、隱藏表單、Cookie、HttpSession(最強大,伺服器端記憶體) |
| 103 | Filter 用途 | 統一認證、日誌審計、資料過濾/替換、壓縮響應、加解密、XSLT 轉換 |
| 104 | Listener 類型 | ServletContextListener、HttpSessionListener、ServletRequestListener 及其 Attribute 對應版共 6 種 |
| 105 | web.xml 作用 | 配置 Listener、Filter、Servlet、參數、Session 超時、安全驗證、錯誤頁面 |
<c:if>、<c:choose/when/otherwise>、<c:forEach>、<c:forTokens>、<c:set>、<c:out>、<c:url>。最佳實踐:僅用 core 庫,配合 EL,嚴禁 ScriptletpageContext、param、paramValues、header、headerValues、cookie、initParam、四大作用域(pageScope 等)+ - * / div % mod)、關係(== eq != ne > gt < lt)、邏輯(&& and || or ! not)、條件(? :)、empty(判空)| 縮寫 | 全稱 | 核心作用 |
|---|---|---|
| JNDI | Java Naming & Directory Interface | 命名目錄服務,分散式應用快速查找定位 |
| JMS | Java Message Service | 訊息傳送標準 API,支援點對點與發布/訂閱 |
| JTA | Java Transaction API | 事務邊界劃分介面 + SPI 介面 |
| JPA | Java Persistence API | ORM 標準 API,管理實體與關聯映射 |
| JAF | JavaBeans Activation Framework | 處理 MIME 型別資料,JavaMail 依賴 |
| JAAS | Java Authentication and Authorization Service | 驗證與授權,實現 PAM 架構 |
| JMX | Java Management Extensions | 管理監控 API,透過 MBean 管理伺服器 |
Proxy + InvocationHandler);未實現介面→CGLIB 繼承代理(字節碼生成)JdbcTemplate、JpaTemplate、JmsTemplate、RestTemplate 簡化樣板碼系列導航:Java 基礎面試題(一) | Java 基礎面試題(二) | Java 基礎面試題(三)