首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

SSH 框架面試精華:Struts2 + Spring + Hibernate 核心考點系統總結

     編輯:Java 綜合教學

SSH 框架面試精華:Struts2 + Spring + Hibernate 核心考點系統總結

SSH(Struts2 + Spring + Hibernate)雖屬上一代技術棧,但其設計思想(MVC、IOC/AOP、ORM)仍是現代框架基石。本文彙總三大框架 高頻面試題、原理解析、整合要點,助你快速構建完整知識體系。

一、Hibernate 篇(核心持久層)

1. 工作流程 8 步曲

  1. 解析 hibernate.cfg.xml 配置
  2. 解析映射文件,構建 SessionFactory
  3. 打開 Session
  4. 開啟事務 Transaction
  5. 持久化操作
  6. 提交事務
  7. 關閉 Session
  8. 關閉 SessionFactory(應用關閉時)

2. 為什麼選 Hibernate?

  • 封裝 JDBC,消除樣板代碼
  • 優秀 ORM 實現,簡化 DAO 開發
  • 反射機制實現透明性,無需字節碼增強
  • 輕量級、映射靈活、支援複雜關聯

3. 延遲加載演進

版本支援範圍
Hibernate 2實體對象、集合
Hibernate 3++ 屬性級延遲

原理:代理對象攔截方法調用,首次訪問觸發 SQL 查詢。

4. 關聯映射標籤

  • <many-to-one>:多對一(關聯擁有方)
  • <one-to-many>:一對多(被關聯方,配合 inverse="true")
  • <many-to-many>:多對多(中間表)

5. 緩存機制兩級制

  • 一級緩存:Session 級,事務範圍,強制開啟
  • 二級緩存:SessionFactory 級,進程/集群範圍,需配置提供者

二級緩存適用條件:低頻修改、非關鍵、可接受臟讀、高頻讀取。

6. 查詢方式全家桶

  • HQL(面向對象、支援多態)
  • QBC / Criteria API(程序化、動態條件)
  • 原生 SQL(createSQLQuery)

7. 優化 7 大法則(同前文)

二、Struts2 篇(表現層控制器)

1. 工作流程

  1. 啟動初始化 ActionServlet(Struts 1)或 StrutsPrepareAndExecuteFilter(Struts 2)
  2. 讀取 struts.xml 映射配置
  3. 請求到達 → 匹配 ActionMapping
  4. 自動注入表單數據到 Action 屬性(Struts 2 模型驅動)
  5. 攔截器鏈預處理(驗證、文件上傳、國際化…)
  6. 執行 Action.execute() 業務邏輯
  7. 返回 Result(視圖跳轉、JSON、流…)
  8. 攔截器鏈後處理 → 響應客戶端

2. 核心設計模式

  • MVC:Action=Controller、JSP=View、Service/DAO=Model
  • 攔截器模式:橫切關注點解耦
  • 值棧/ OGNL:上下文數據存取

3. Action 線程安全

Struts 2 Action 多實例(原型模式)天然線程安全;Struts 1 Action 單例需避免實例變量。

4. 驗證框架

  • 聲明式:ActionName-validation.xml 配置規則
  • 程序式:實現 Validateable 接口重寫 validate()

三、Spring 篇(容器與切面)

1. Spring MVC 請求流程

  1. DispatcherServlet 統一入口
  2. HandlerMapping 定位 Controller
  3. 攔截器預處理
  4. Controller 處理 → 返回 ModelAndView
  5. ViewResolver 解析視圖
  6. 視圖渲染 → 響應

2. IOC 核心價值

  • 依賴倒置:對象創建、賦值交給容器
  • Bean 作用域:singleton(默認)、prototype、request、session、application
  • 注入方式:構造器、Setter、字段

3. AOP 核心價值

  • 橫切關注點模塊化:事務、日誌、權限、緩存
  • 動態代理實現:JDK(接口)、CGLIB(類)
  • 聲明式事務:@Transactional 替代編程式

4. Spring 整合 Hibernate 要點

  • LocalSessionFactoryBean 暴露 SessionFactory
  • HibernateTransactionManager 綁定事務
  • OpenSessionInViewFilter 解決延遲加載異常
  • DAO 繼承 HibernateDaoSupport 或注入 SessionFactory

四、三框架整合數據源三種方式

  1. Spring 管理:applicationContext.xml 配置 DataSource + SessionFactory(推薦,統一事務)
  2. Hibernate 管理:hibernate.cfg.xml 直連(輕量、無 Spring 事務)
  3. Tomcat JNDI:context.xml 定義 DataSource,Spring/Hibernate 通過 JNDI 查找(生產環境推薦,連接池由容器管理)

五、並發控制機制

維度悲觀鎖樂觀鎖
原理DB 行鎖版本號/時間戳
隔離級別依賴 DB應用層實現
並發性能低高(推薦)
Hibernate 配置LockMode.UPGRADE<version> + optimistic-lock="all"

六、經典面試追問速查

Q: Struts2 如何實現文件上傳?
A: fileUpload 攔截器 + Action 定義 File myFile, String myFileFileName, String myFileContentType + 限制大小/類型參數
Q: Spring 循環依賴如何解決?
A: 三級緩存(singletonObjects、earlySingletonObjects、singletonFactories)+ 提前暴露 ObjectFactory
Q: Hibernate N+1 問題根因與解決?
A: 根因:延遲加載觸發多次查詢。解決:join fetch、batch-size、@BatchSize、二級緩存
Q: SSH 整合中事務不生效常見原因?
A: 1) 缺 @Transactional 2) 方法非 public 3) 異常被捕獲未拋出 4) 數據源未綁定事務管理器 5) 自調用繞過代理

七、總結

SSH 面試核心在于 三大框架各自原理 與 整合關鍵點 的融會貫通。建議複習路徑:
Hibernate 狀態/緩存/優化 → Struts2 攔截器/值棧/驗證 → Spring IOC/AOP/事務/整合 → 並發/事務/異常排查。
理解設計模式在框架中的落地(模板方法、代理、工廠、觀察者),比背誦 API 更有價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved