天天看點

java架構師面試題及答案

  1. 事務的隔離級别有哪些?
    1. 這個問題其實問的是資料庫的事務隔離級别;它目前有4種,分别是由低到高分别為Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事務的并發操作中可能會出現髒讀,不可重複讀,幻讀。對應的spring裡的配置是isolation,它預設值是DEFAULT,可選項有DEFAULT,READ_UNCOMMITTED,READ_COMMITTED,REPEATABLE_READ和SERIALIZABLE。其中預設的隔離級别DEFAULT是指使用資料庫預設的事務隔離級别。
    2. mysql預設的事務處理級别是'REPEATABLE-READ',也就是可重複讀
    3. oracle資料庫支援READ COMMITTED 和 SERIALIZABLE這兩種事務隔離級别。預設系統事務隔離級别是READ COMMITTED,也就是讀已送出
  2. 事務的傳播特性
    1. REQUIRED:預設的傳播特性,業務方法需要在一個事務中運作,如果一個方法已經處在一個事務中那麼就加入到這個事務中,否則就會建立一個事務。
    2. NEVER:指定的業務方法絕對不能在事務範圍内運作,如果業務方法在某個事務中執行,就會抛異常,隻有業務方法沒有任何事務才正常執行。
    3. MANDATORY:該屬性指定業務方法隻能在一個已經存在的事務中執行,業務方法不能自己發起自己的事務,如果業務方法不存在事務,容器就抛異常。    
    4. SUPPORTS:如果業務方法中已經在某個事務中被調用,則方法就稱為事務的一部分,如果外部業務方法沒有開啟事務,supports該方法也會在沒有事務的環境中執行。在沒有事務的環境下運作
    5. NOT_SUPPORTED:如果該業務方法在一個事務中被調用,那麼目前的事務會被挂起,執行該業務方法,方法執行完畢喚醒被挂起的事務,如果業務方法不在一個事務中執行,該方法也不會開事務。不管是否在有無事務的環境中執行都不開啟事務。
    6. REQUIRES_NEW:不管是否存在事務,業務方法總會自己開啟一個事務,如果在已有事務的環境中調用,已有事務會被挂起,新的事務會被建立,直到業務方法調用結束,已有事務才被喚醒
    7. NESTED:如果業務方法在一個事務中執行,就在這個事務中嵌套,如果沒有事務按着required執行,開啟單獨的事務,這種事務有多個事務的儲存點,内部事務的復原對外部事務沒有影響