天天看點

面試總結之樂信(上)

面試内容:

一、畫出項目 架構圖

二、所處自己負責的業務子產品,其中用到了哪些技術點

三、如何實作最終一緻性分布式事務?

   1. 二階段送出:

       a. 概念:參與者将操作成敗通知協調者,再由協調者根據所有參與者的

       回報情報決定各參與者是否要送出操作還是中止操作。

       b. 作用:主要保證了分布式事務的原⼦性;第一階段為準備階 段,第二階段為送出階段;

面試總結之樂信(上)

  c. 缺點:不僅要鎖住參與者的所有資源,而且要鎖住協調者資源,開銷大。一句話總結就是:2PC效率很低,對高并發很不友好。

   2. 三階段送出:

      a. 概念:三階段送出協定在協調者和參與者中都引入逾時機制,并且把兩階段送出協定的第一個階段拆分成了兩步:詢問,然後再鎖資源,最後真正送出。這樣三階段送出就有CanCommit、PreCommit、DoCommit三個階段。

面試總結之樂信(上)

    b. 缺點:如果進入PreCommit後,Coordinator發出的是abort請求,假設隻有一個Cohort收到并進行了abort操作,而其他對于系統狀态未知的Cohort會根據3PC選擇繼續Commit,此時系統狀态發生不一緻性。

    3. 柔性事務:

    a. 概念:所謂柔性事務是相對強制鎖表的剛性事務而言。流程入下:服務器A的事務如果執行順利,那麼事務A就先行送出,如果事務B也執行順利利,則事務B也送出,整個事務就算完成。但是如果事務B執行失敗,事務B本身復原,這時事務A已經被送出,是以需要執行一個補償操作,将已經送出的事務A執行的操作反操作,恢複到未執行前事務A的狀态。

   b. 缺點:業務侵入性太強,還要補償操作,缺乏普遍性,沒法大規模推廣。

   4. 消息最終⼀一緻性解決⽅方案之RabbitMQ實作:

   a. 實作:發送方确認+消息持久化+消費者确認。

四.索引的B+樹結構是咋樣的?

   1. B-tree:

面試總結之樂信(上)

B-tree 利用了磁盤塊的特性進行建構的樹。每個磁盤塊一個節點,每個節點包含了關鍵字。把樹的節點關鍵字增多後樹的層級比原來的二叉樹少了,減少資料查找的次數和複雜度。

B-tree巧妙利⽤了磁盤預讀原理,将一個節點的⼤小設為等于一個頁(每⻚為4K),這樣每個節點隻需要一次I/O就可以完全載入。

B-tree 的資料可以存在任何節點中。

 2. B+tree:

面試總結之樂信(上)

B+tree 是 B-tree 的變種,B+tree 資料隻存儲在葉子節點中。這樣在B

樹的基礎上每個節點存儲的關鍵字數更多,樹的層級更少是以查詢資料更快,所有指關鍵字指針都存在葉子節點,是以每次查找的次數都相同是以查詢速度更穩定。

五.說⾃己了解的設計模式?Spring中用到了哪些設計模式?⾃己有用過哪些設計模式嗎?

 1. spring中的設計模式:

 a. 簡單工廠:spring中的BeanFactory就是簡單工廠模式的體 現, 根據傳入一個唯一的辨別來獲得bean對象,但是否是在傳入 參數後建立還是傳入參數前建立這個要根據具體情況來定。

b. 單例例模式: Spring下預設的bean均為singleton 。

c. 代理理模式: 為其他對象提供一種代理以控制對這個對象的通路。 從結構上來看 和Decorator模式類似,但Proxy是控制,更像是一種對功能的限制,而Decorator是增加職責。 spring的Proxy模式在aop中有展現,比如JdkDynamicAopProxy和Cglib2AopProxy。

d. 觀察者模式:定義對象間的一種一對多的依賴關系,當⼀個對象的狀态發生改變時,所有依賴于它的對象都得到通知并被自動更新。spring中Observer模式常用的地方是listener的實作。如ApplicationListener。