Spring面試題--(隔離、事務、Aop/oop)

curry库-04049發表於2024-11-23

目錄
  • Spring 的事務隔離級別?
  • Spring 的事務傳播行為?
    • 1>概念
    • 2>事務傳播的配置
  • 什麼是AoP?AoP與ooP有何區別?
    • 1>Aop的概念
    • 2>Aop和OOp的區別
  • 什麼是連線點、切點和增強(或通知)?
    • 連線點
    • 切點
    • 增強

Spring 的事務隔離級別?

事務隔離的概念:多個事務可以同時訪問資料庫中的資料,當多個事務在資料庫中同時訪問(併發)時,資料庫的一致性可能會受到破壞,從而導致資料出現問題

為了解決資料庫的訪問併發問題,Spring有四種事務隔離級別

  • 未授權讀取、讀未提交

    一個事務已經開始寫資料,另一個事務不允許同時寫操作,但允許其他事務讀此行資料

  • 授權讀取、讀提交(spring預設的事務隔離級別)

    讀取資料的事務允許其他事務繼續訪問該行資料,但是未提交的寫事務將會禁止其他事務訪問該行

  • 可重複讀取

    讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務

  • 序列化

    嚴格的事務隔離級別,要求事務序列化執行,事務只能一個個執行(可以理解為序列執行),不能併發執行

Spring 的事務傳播行為?

1>概念

系統中的一些方法交由spring來管理事務,當這些方法出現巢狀呼叫的時候,事務的表現行為就由事務的傳播來決定

2>事務傳播的配置

透過@Transactional註解中的propagation屬性來指定事務的傳播行為

事務傳播行為型別 說明
REQUIRED 如果當前事務管理器中沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。這是最常見的選擇,是預設的傳播行為
SUPPORTS 支援當前事務,如果當前事務管理器中沒有事務,就以非事務方式執行。
MANDATORY 使用當前的事務,如果當前事務管理器中沒有事務,就丟擲異常。
REQUIRES_NEW 新建事務,如果當前事務管理器中存在事務,把當前事務掛起,然後會新建一個事務。
NOT_SUPPORTED 以非事務方式執行操作,如果當前事務管理器中存在事務,就把當前事務掛起。
NEVER 以非事務方式執行,如果當前事務管理器中存在事務,則丟擲異常。
NESTED 如果當前事務管理器中存在事務,則在巢狀事務內執行;如果當前事務管理器中沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。

注意:這 7 種傳播行為有個前提,他們的事務管理器是同一個的時候,才會有上面描述中的表現行為。Spring 事務傳播預設使用 REQUIRED 型別

什麼是AoP?AoP與ooP有何區別?

1>Aop的概念

面向切面程式設計,透過預編譯方式和執行期動態代理實現程式功能統一維護的一種技術

  • 在Spring中Aop是oop的延續和有益補充,函數語言程式設計的一種泛型
  • 在Spring中提供了AOP的豐富支援,允許透過分離應用的業務邏輯與系統級服務和事務管理進行內聚性的併發

2>Aop和OOp的區別

OOP是物件導向程式設計(兩種程式設計思想,在目標上有本質的差異)

  • OOP(物件導向程式設計):針對業務處理過程的實體及其屬性和行為進行抽象封裝為物件,以物件作為最基本的邏輯處理單元,並關注物件與物件之間的關係
  • AOP(面向切面程式設計):針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以切面作為最基本的邏輯處理單元,以獲得邏輯過程中各部分之間低耦合性的隔離效果

什麼是連線點、切點和增強(或通知)?

連線點

往程式中插入程式碼的點(比如類初始化前後,某個方法呼叫前後)

切點

定位到特定的連線點,切點相當於查詢條件,一個切點可以匹配多個連線點(插入程式碼位置的查詢條件)

增強

織入到目標類連線點上的一段程式程式碼,在SpringAop中,增強除了用於描述一段程式程式碼外,還擁有另一個和連線點相關的資訊

相關文章