面試題1

---恢復內容開始---java

1.++i 先計算後輸出
2.arraycopy(a,2,b,2,2) 從a數組第二位複製兩位替換掉b數組第二位後兩位
3.java獨特特色,平臺無關性。
4..java文件編譯成.class文件
5.讀取圖片文件可以使用
6.linkedhashset會保留順序,treeset會自動排序。
7.java變量名不能是數字,不能是關鍵字。
8.private表示私有,只能在本類中使用。
9.對象須要跨網絡傳輸,須要實現Serializable接口
10.生命抽象方法不可寫大括號。
11.count+=i 表示count=i+count
12.spring boot框架,其實他不算是一個框架,他算是整合了多個框架。他擁有本身的pom.xml和配置文件,經過配置文件或YML實現了對SSM或者其餘框架的整合,經過一個application的main方法和註解啓動spring boot。他的使用場景很是普遍,由於他整合多個框架,因此普遍應用在各類項目開發和分佈式項目的搭建。通常是使用IDEA建立spring boot項目,而後勾選須要的maven依賴。遇到的坑:在建立完成後,沒法啓動spring boot項目。
13.select sum(列名) from 表名 where //求綜合
select avg(列名) from 表名 where //求平均數
select count(1) from 表名 where //次數
select 列名 from 表名 where 列名> < //對比
優化數據庫方法:
1.避免在子句中使用!=或<>判斷,因此拆分語句
2.添加索引。
3.避免全表查詢linux

14.java中線程實現方式:
1.classA繼承thread,並重寫run方法,new A.start(),啓動線程
2.classA實現Runnable接口,並覆蓋run方法,new thread(new A()).start()0,啓動線程。
15.i=12;
i+=i-=i*=i (結果爲-120)
16.反射就是運行中的程序檢查本身和軟件運行環境的能力,它能夠根據他發現的進行改變。通俗的講就是反射能夠在運行時根據指定的類名得到類的信息。
invoke()方法就是調用method類表明的方法,能夠實現動態調用。
17.linux系統中,Rm-r /mnt/tmp所表明的是刪除文件夾中全部文件
18.elasticSearch和solr相似,建立索引,全文檢索的一個開源框架
19.在java中,對象的序列化能夠經過實現兩種接口來實現,若實現的是Serializable接口,則全部的序列化將會自動進行,若實現的是Externalizable接口,則沒有任何東西能夠自動序列化,須要在writeExternal方法中進行手工指定所要序列化的變量,這與是否被transient修飾無關。
20.對數據進行枷鎖,程序先經過acquire獲取鎖來對數據排他訪問,而後對數據進行一系列的操做最後釋放鎖。
21.解決集羣環境下session共享問題,有下面四種方案:(1).粘性session,每次都將同一用戶的全部請求轉發至同一臺服務器上,用戶與服務器綁定。(2).服務器session,每次session發生變化時,就廣播給全部集羣中的服務器,使全部服務器上的session相同.(3).session共享,緩存session,使用redis,memcached。(4).session持久化,將session存儲到數據庫中,向操做數據同樣操做session。git

22.被final修飾的類沒法被繼承,被final修飾的方法沒法被重寫。被final修飾的值爲常量。
final關鍵字提升了性能,保證安全。使用final關鍵字,jvm會對方法變量及類進行優化。
23.stringbuffer和stringbuilder的區別:他們兩個方法功能徹底等價,buffer中方法採用了synchronized關鍵字進行修飾,所以線程安全。同理builder線程非安全。 單線程程序下,builder效率更快,由於不須要加鎖
24. contructors 構造函數 applied 應用
25. 構造方法不能被static、final、synchronized、abstract、native修飾,但能夠被public,private,protected修飾。
26.error是系統中的錯誤,程序員不能改變和處理,實在程序編譯救贖先錯誤,僅靠程序自己沒法恢復和預防,遇到這樣的問題,建議終止程序。
而exception是能夠處理的異常,能夠捕獲可能恢復。遇到這類問題儘量處理異常,是程序恢復
27.GET請求=數據庫select
PUT請求=數據庫update
POST請求=數據庫insert
delete請求=數據庫delete
28.抽象類和接口的區別,一個是繼承,一個是實現。抽象方法有public修飾,接口默認是public不能夠修飾。抽象類可定義構造方法,也能夠有抽象方法和具體方法。接口徹底抽象無構造方法。extends繼承抽象類,implements實現接口。
29.方法的重寫和重載是java多態性的不一樣表現。
override(重寫)特色:(1).子類方法名稱,參數類型必需要和父類徹底匹配,才能重寫。(2).子類的方法返回值必須和父類相同,能夠擴大不可縮小。(3).子類方法拋出異常,只能是父類拋出異常的子異常。(4).被private、final等關鍵字修飾不能被重寫。(5)不是抽象方法不能被abstract修飾。
overload(重載)特色:(1).再使用重載時只能經過不一樣的參數樣式。(2).方法異常類型和數目不會對重載形成影響.(3).不能經過訪問權限、返回類型、拋出異常進行重載。程序員

30.dependency injection=依賴注入
實現依賴注入的不一樣方法:構造函數注入,設值注入。
31.annotation=註解
@Aspect 指定一個類爲切面類
@Before 前置通知:目標方法以前執行
@AfterReturning 返回後通知:執行方法結束前執行
@Around 環繞通知:環繞目標方法執行
@AfterThrowing 異常通知:出現異常執行
@After 後置通知:目標方法以後執行
配置文件中添加<aop:aspectj-autoproxy/>元素,啓用對於@AspectJ註解的支持
@Conmponent 加入IOC容器github

32.當使用|時,若前面的表達式爲真時,程序會繼續執行後面的表達式,而後再獲得true結果。
||時,若前面的表達式結果爲真,則程序不會再執行後面的表達式,直接得出TRUE的結果。web

33.switch可做用於char,byte,short,int和他們對應的包裝類。可做用於string類型,枚舉類型。不可做用於long,double,float,boolean類型和他們的包裝類。
34. hashmap線程非安全,容許有null的鍵和值,效率較高,方法不是Synchronize的要提供外同步。有containsvalue和containskey方法。hashmap是java1.2引進的map interface的一個實現。是hashtable的輕量級實現。
hashtable,線程安全,不容許有null的鍵和值。效率稍低,方法是Synchronize的,有contains方法,hashtable繼承於Dictionary類。hashtable比hashmap老
35.spring的好處:
一.輕量級框架
二.控制反轉,經過控制反轉實現鬆耦合
三.面向切面AOP,把應用業務邏輯和系統分開
四.容器,spring包含並管理應用中對象的生命週期和配置
五.MVC框架,強大的web框架
六.事務管理,spring提供持續的事務管理接口,能夠擴展到上至本地下至全局的事務管理。
七.異常處理,spring提供方便的API將具體相關的異常處理,轉化爲一致的unchecked異常redis

36.spring生命週期:
bean創建,由beanfactory讀取bean定義文件,並聲稱各個實例
setter注入,執行bean的屬性依賴注入
BeanFactoryAware的seBeanName(),若是實現該接口,則執行setbeanname方法
BeanFactoryAwaredesetBeanFactory(),若是有關聯pricessor,則在bean初始化以前都會執行這個實例的processBeforeInitialization()方法
DisposableBean的destroy(),在容器關閉時,能夠在bean定義文件中使用"destory-method"定義的方法spring

37.若是使用ApplicationContextAware接口,則執行其setApplicationContext()方法,而後再進行BeanPostProcessors的processBeforeInitialiization()
實際上,ApplicationContext除了向BeanFactory那樣維護容器外,還提供更加豐富的框架功能,如Bean的消息,時間處理機制等。數據庫

38.JSON開源庫類:1.使用Jackson 2.Google-Gson類庫
3.JSON-lib類庫 4.Flexjson類庫
5.Json-io類庫 6.Genson類庫
7.JSONIJ類庫 json

39.git命令行:
初始化文件夾=git init
建立本地分支dev=git branch dev
查看本地分支=git branch
切換分支master=git checkout master

40.maven命令打包war包:命令進入項目包pom.xml下,命令行輸入: mvn package

41.JVM內存劃分:java棧,本地方法棧,程序計數器,堆,方法區

42.jvm中堆空間能夠分爲三個區,新生代,老生代,永久代
新生代刻劃分爲三個區,Eden區,兩個倖存區。在jvm運行時,能夠經過配置參數來改變整個JVM堆的配置比例。配置有:jvm運行時堆的大小,新生代堆空間大小,永久代大小和其餘

43.JVM運行時數據區:
1.PC寄存器:用於存儲每一個線程下一步將執行的JVM之令。PC指當前指令的地址。JVM用PC來追蹤指令執行的位置,PC其實是指向方法區的一個內存地址。
2.jvm棧:棧是線程私有的,每一個線程建立的同時都會建立jvm棧,棧中存放的是當前局部基本類型的變量,部分的返回結果以及StackFrame,非基本類型的對象在棧上僅存放一個指向堆上的地址。
3.堆:它是jvm來存儲對象實例以及數組值的區域,能夠做爲java中全部經過new建立的對象的內存都在此分配,heap中的對象的內存須要等待GC進行回收。
4.方法區域:這裏存放了所加載的類的信息,類中的靜態變量,類中定義爲final的變量、類中的field信息、類中的方法信息,開發人員在程序中經過class對象中的get,isinterface等方法來獲取信息,數據所有來源於方法區,同時方法區也是全劇共享,在異地你條件下會被GC,方法區須要使用內存超過容許大小,會拋出outofmemory的錯誤信息
5.運行時常量池:存放的是類中的固定常量信息,方法和field的引用信息等。其空間從方法區分配。
6.本地方法棧:jvm採用本地方法堆棧來支持native方法,此區域用於存儲每一個native方法調用的狀態。

44.JVM-GC:將內存中再也不被使用的對象進行回收,GC中用於回收的方法叫收集器,因爲GC須要消耗一些資源和時間,在java對對象的生命收起進行分析後,按照新生代、舊生代的方式來對對象進行收集,儘量縮短GC對應用形成的暫停。

45.JVM優化原則:儘可能減小YoungGC,儘可能減小FullGC。
優化方法:1、代碼角度,縮短對象生命期,尤爲是大對象。2、JVM參數角度,優化JVM參數以減小YGC/FGC次數,可替換收集器。
解決youngGC問題:把用Arraylist存儲信息體採用hashmap,map中的key是uudi,value是消息本體。這樣能夠大大增長併發性能。 採用AtomicInteger來保存當前map中消息內容的大小。 當map中的消息體總大小到達閾值後,將當前map中全部key取出,而後將map中的數據封裝到一條消息中,將當前map中的信息體大小置爲0,而後for循環刪除已成功發送的key。

46.內存泄漏以及解決方法:
系統崩潰前的一些現象:*垃圾回收時間變長,fullGC時間變長。*fullgc次數變多 *年老代的內存愈來愈大斌且每次fullgc年老代內存沒有釋放
通過以上三點系統會無響應,逐漸達到OutOfMemory臨界值

 

---恢復內容結束---

1.++i 先計算後輸出
2.arraycopy(a,2,b,2,2) 從a數組第二位複製兩位替換掉b數組第二位後兩位
3.java獨特特色,平臺無關性。
4..java文件編譯成.class文件
5.讀取圖片文件可以使用
6.linkedhashset會保留順序,treeset會自動排序。
7.java變量名不能是數字,不能是關鍵字。
8.private表示私有,只能在本類中使用。
9.對象須要跨網絡傳輸,須要實現Serializable接口
10.生命抽象方法不可寫大括號。
11.count+=i 表示count=i+count
12.spring boot框架,其實他不算是一個框架,他算是整合了多個框架。他擁有本身的pom.xml和配置文件,經過配置文件或YML實現了對SSM或者其餘框架的整合,經過一個application的main方法和註解啓動spring boot。他的使用場景很是普遍,由於他整合多個框架,因此普遍應用在各類項目開發和分佈式項目的搭建。通常是使用IDEA建立spring boot項目,而後勾選須要的maven依賴。遇到的坑:在建立完成後,沒法啓動spring boot項目。
13.select sum(列名) from 表名 where //求綜合
select avg(列名) from 表名 where //求平均數
select count(1) from 表名 where //次數
select 列名 from 表名 where 列名> < //對比
優化數據庫方法:
1.避免在子句中使用!=或<>判斷,因此拆分語句
2.添加索引。
3.避免全表查詢

14.java中線程實現方式:
1.classA繼承thread,並重寫run方法,new A.start(),啓動線程
2.classA實現Runnable接口,並覆蓋run方法,new thread(new A()).start()0,啓動線程。
15.i=12;
i+=i-=i*=i (結果爲-120)
16.反射就是運行中的程序檢查本身和軟件運行環境的能力,它能夠根據他發現的進行改變。通俗的講就是反射能夠在運行時根據指定的類名得到類的信息。
invoke()方法就是調用method類表明的方法,能夠實現動態調用。
17.linux系統中,Rm-r /mnt/tmp所表明的是刪除文件夾中全部文件
18.elasticSearch和solr相似,建立索引,全文檢索的一個開源框架
19.在java中,對象的序列化能夠經過實現兩種接口來實現,若實現的是Serializable接口,則全部的序列化將會自動進行,若實現的是Externalizable接口,則沒有任何東西能夠自動序列化,須要在writeExternal方法中進行手工指定所要序列化的變量,這與是否被transient修飾無關。
20.對數據進行枷鎖,程序先經過acquire獲取鎖來對數據排他訪問,而後對數據進行一系列的操做最後釋放鎖。
21.解決集羣環境下session共享問題,有下面四種方案:(1).粘性session,每次都將同一用戶的全部請求轉發至同一臺服務器上,用戶與服務器綁定。(2).服務器session,每次session發生變化時,就廣播給全部集羣中的服務器,使全部服務器上的session相同.(3).session共享,緩存session,使用redis,memcached。(4).session持久化,將session存儲到數據庫中,向操做數據同樣操做session。

22.被final修飾的類沒法被繼承,被final修飾的方法沒法被重寫。被final修飾的值爲常量。
final關鍵字提升了性能,保證安全。使用final關鍵字,jvm會對方法變量及類進行優化。
23.stringbuffer和stringbuilder的區別:他們兩個方法功能徹底等價,buffer中方法採用了synchronized關鍵字進行修飾,所以線程安全。同理builder線程非安全。 單線程程序下,builder效率更快,由於不須要加鎖
24. contructors 構造函數 applied 應用
25. 構造方法不能被static、final、synchronized、abstract、native修飾,但能夠被public,private,protected修飾。
26.error是系統中的錯誤,程序員不能改變和處理,實在程序編譯救贖先錯誤,僅靠程序自己沒法恢復和預防,遇到這樣的問題,建議終止程序。
而exception是能夠處理的異常,能夠捕獲可能恢復。遇到這類問題儘量處理異常,是程序恢復
27.GET請求=數據庫select
PUT請求=數據庫update
POST請求=數據庫insert
delete請求=數據庫delete
28.抽象類和接口的區別,一個是繼承,一個是實現。抽象方法有public修飾,接口默認是public不能夠修飾。抽象類可定義構造方法,也能夠有抽象方法和具體方法。接口徹底抽象無構造方法。extends繼承抽象類,implements實現接口。
29.方法的重寫和重載是java多態性的不一樣表現。
override(重寫)特色:(1).子類方法名稱,參數類型必需要和父類徹底匹配,才能重寫。(2).子類的方法返回值必須和父類相同,能夠擴大不可縮小。(3).子類方法拋出異常,只能是父類拋出異常的子異常。(4).被private、final等關鍵字修飾不能被重寫。(5)不是抽象方法不能被abstract修飾。
overload(重載)特色:(1).再使用重載時只能經過不一樣的參數樣式。(2).方法異常類型和數目不會對重載形成影響.(3).不能經過訪問權限、返回類型、拋出異常進行重載。

30.dependency injection=依賴注入
實現依賴注入的不一樣方法:構造函數注入,設值注入。
31.annotation=註解
@Aspect 指定一個類爲切面類
@Before 前置通知:目標方法以前執行
@AfterReturning 返回後通知:執行方法結束前執行
@Around 環繞通知:環繞目標方法執行
@AfterThrowing 異常通知:出現異常執行
@After 後置通知:目標方法以後執行
配置文件中添加<aop:aspectj-autoproxy/>元素,啓用對於@AspectJ註解的支持
@Conmponent 加入IOC容器

32.當使用|時,若前面的表達式爲真時,程序會繼續執行後面的表達式,而後再獲得true結果。
||時,若前面的表達式結果爲真,則程序不會再執行後面的表達式,直接得出TRUE的結果。

33.switch可做用於char,byte,short,int和他們對應的包裝類。可做用於string類型,枚舉類型。不可做用於long,double,float,boolean類型和他們的包裝類。
34. hashmap線程非安全,容許有null的鍵和值,效率較高,方法不是Synchronize的要提供外同步。有containsvalue和containskey方法。hashmap是java1.2引進的map interface的一個實現。是hashtable的輕量級實現。
hashtable,線程安全,不容許有null的鍵和值。效率稍低,方法是Synchronize的,有contains方法,hashtable繼承於Dictionary類。hashtable比hashmap老
35.spring的好處:
一.輕量級框架
二.控制反轉,經過控制反轉實現鬆耦合
三.面向切面AOP,把應用業務邏輯和系統分開
四.容器,spring包含並管理應用中對象的生命週期和配置
五.MVC框架,強大的web框架
六.事務管理,spring提供持續的事務管理接口,能夠擴展到上至本地下至全局的事務管理。
七.異常處理,spring提供方便的API將具體相關的異常處理,轉化爲一致的unchecked異常

36.spring生命週期:
bean創建,由beanfactory讀取bean定義文件,並聲稱各個實例
setter注入,執行bean的屬性依賴注入
BeanFactoryAware的seBeanName(),若是實現該接口,則執行setbeanname方法
BeanFactoryAwaredesetBeanFactory(),若是有關聯pricessor,則在bean初始化以前都會執行這個實例的processBeforeInitialization()方法
DisposableBean的destroy(),在容器關閉時,能夠在bean定義文件中使用"destory-method"定義的方法

37.若是使用ApplicationContextAware接口,則執行其setApplicationContext()方法,而後再進行BeanPostProcessors的processBeforeInitialiization()
實際上,ApplicationContext除了向BeanFactory那樣維護容器外,還提供更加豐富的框架功能,如Bean的消息,時間處理機制等。

38.JSON開源庫類:1.使用Jackson 2.Google-Gson類庫
3.JSON-lib類庫 4.Flexjson類庫
5.Json-io類庫 6.Genson類庫
7.JSONIJ類庫

39.git命令行:
初始化文件夾=git init
建立本地分支dev=git branch dev
查看本地分支=git branch
切換分支master=git checkout master

40.maven命令打包war包:命令進入項目包pom.xml下,命令行輸入: mvn package

41.JVM內存劃分:java棧,本地方法棧,程序計數器,堆,方法區

42.jvm中堆空間能夠分爲三個區,新生代,老生代,永久代
新生代刻劃分爲三個區,Eden區,兩個倖存區。在jvm運行時,能夠經過配置參數來改變整個JVM堆的配置比例。配置有:jvm運行時堆的大小,新生代堆空間大小,永久代大小和其餘

43.JVM運行時數據區:
1.PC寄存器:用於存儲每一個線程下一步將執行的JVM之令。PC指當前指令的地址。JVM用PC來追蹤指令執行的位置,PC其實是指向方法區的一個內存地址。
2.jvm棧:棧是線程私有的,每一個線程建立的同時都會建立jvm棧,棧中存放的是當前局部基本類型的變量,部分的返回結果以及StackFrame,非基本類型的對象在棧上僅存放一個指向堆上的地址。
3.堆:它是jvm來存儲對象實例以及數組值的區域,能夠做爲java中全部經過new建立的對象的內存都在此分配,heap中的對象的內存須要等待GC進行回收。
4.方法區域:這裏存放了所加載的類的信息,類中的靜態變量,類中定義爲final的變量、類中的field信息、類中的方法信息,開發人員在程序中經過class對象中的get,isinterface等方法來獲取信息,數據所有來源於方法區,同時方法區也是全劇共享,在異地你條件下會被GC,方法區須要使用內存超過容許大小,會拋出outofmemory的錯誤信息
5.運行時常量池:存放的是類中的固定常量信息,方法和field的引用信息等。其空間從方法區分配。
6.本地方法棧:jvm採用本地方法堆棧來支持native方法,此區域用於存儲每一個native方法調用的狀態。

44.JVM-GC:將內存中再也不被使用的對象進行回收,GC中用於回收的方法叫收集器,因爲GC須要消耗一些資源和時間,在java對對象的生命收起進行分析後,按照新生代、舊生代的方式來對對象進行收集,儘量縮短GC對應用形成的暫停。

45.JVM優化原則:儘可能減小YoungGC,儘可能減小FullGC。
優化方法:1、代碼角度,縮短對象生命期,尤爲是大對象。2、JVM參數角度,優化JVM參數以減小YGC/FGC次數,可替換收集器。
解決youngGC問題:把用Arraylist存儲信息體採用hashmap,map中的key是uudi,value是消息本體。這樣能夠大大增長併發性能。 採用AtomicInteger來保存當前map中消息內容的大小。 當map中的消息體總大小到達閾值後,將當前map中全部key取出,而後將map中的數據封裝到一條消息中,將當前map中的信息體大小置爲0,而後for循環刪除已成功發送的key。

46.內存泄漏以及解決方法:
系統崩潰前的一些現象:*垃圾回收時間變長,fullGC時間變長。*fullgc次數變多 *年老代的內存愈來愈大斌且每次fullgc年老代內存沒有釋放
通過以上三點系統會無響應,逐漸達到OutOfMemory臨界值

 

linux命令行:
ls 查看目錄,查看文件權限
pwd 查看當前工做目錄
mkdir 建立文件夾
rm 刪除命令
mv 移動文件或文件夾
cat命令 顯示整個文件,建立一個文件,將幾個合併一個

git命令行:
add 新增
commit 提交信息
log 查看日誌
push 更新到github上
status 對應文件夾中添加新有項

 

47.代理模式:
1、靜態代理
優勢:能夠作到在符合開閉原則的狀況下對目標對象進行功能擴展。
缺點:咱們得爲每個服務都建立代理類,工做量大,不易管理。同時接口一旦發生變化,代理類也得相應修改。
2、動態代理
在動態代理中咱們不須要再手動建立代理類,咱們只須要編寫一個動態處理器就能夠。真正的代理對象由jdk再運行時爲咱們動態建立。
優勢:相較於靜態代理,咱們大大減小了開發任務,也減小了對業務接口的依賴,下降了耦合。
缺點:沒法擺脫僅支持interface代理的問題。
3、CGLIB代理
JDK實現動態代理須要實現類經過接口定義業務方法,對於沒有藉口的類。咱們就要使用CGLIB了。CGLIB採用了底層字節碼的技術,原理是經過字節碼技術爲一個類建立子類,並在子類中採用方法攔截技術攔截全部類方法的調用,瞬時織入橫切邏輯。但由於採用的是繼承,因此不能對final修飾的類進行代理。JDK動態代理與CGLIB動態代理都是spring aop的基礎
總結:CGLIB建立的動態代理對象比JDK建立的動態代理對象性能更高,可是CGLIB建立代理花費的時間比JDK多不少。因此對於代理對象,由於無需頻繁建立對象,用CGLIB合適,反之使用JDK方法要更爲合適一些。同時因爲CGLIB是採用動態建立子類的方法,對於final修飾的方法沒法進行代理。

 

 

 

48.分佈式事務 1、兩階段提交(2PC) 優勢:儘可能保證了數據的強一致性,適合對數據強一致性的要求高的 關鍵領域。 缺點:實現複雜,犧牲了可用性,對性能影響大。不適合高併發高性 能場景,若是分佈式系統跨接口調用,目前沒有實現方案。 2、補償事務(TCC) 核心思想:針對每一個操做,都要註冊一個與其對應的確認和補償操做 。三階段:try階段主要對業務系統作檢測及資源預留,confirm階段主 要是對業務系統作確認提交,try階段成功並開始執行confirm階段,默 認confirm階段不會出錯。cancel階段主要是在業務執行錯誤,須要回 滾的狀態下執行的業務取消,預留資源釋放。 優勢:比2pc流程簡單,數據一致性相對較差。 缺點:在二三步中有可能失敗,因此須要實現過程當中寫不少業務代碼 ,一些場景中,一些業務流程可能用TCC不太好定義處理。 3、本地消息表 業界使用最多,核心思想是將分佈式事務拆分紅本低事務進行處理。 基本思路:信息產生放,須要額外建一個消息表,並記錄消息發送狀 態。消息和業務數據要在一個事務裏提交,也就是說他們要在一個數據 庫中,而後消息通過MQ發送到消費方。若是失敗會重試發送。 而後消息消費方須要處理這個消息,並完成本身的業務邏輯。此時如 果本低事務處理成功,表名已經處理成功,若是失敗,就嘗試重試運行 。若是都失敗,能夠給生產方發送一個業務補償信息,通知生產方進行 回滾操做。 生產方和消費方定時掃描本低消息表,把還沒處理完的消息或者失敗 信息再發一遍。若是有靠譜的自動到賬補償邏輯,這種方案仍是很實用 。 優勢:一種很是經典的實現,避免了分佈式事務,實現了最終一致性 。 缺點:消息表會耦合到業務系統中,若是沒有封裝好的解決方案,會 有不少雜活須要處理。3、MQ事務消息4、sagas事務模型

相關文章
相關標籤/搜索