面試經歷【螞蟻金服】

一面(電話面試):

Vector和ArrayList的區別:

1、vector是由synchronized保證線程安全的,ArrayList不是,所以vector的性能較低

2、vector擴容是翻倍,ArrayList是增加50%,所以ArrayList更加節約空間

 

static int a = 1執行順序

先初始化,在賦值

 

父類構造器和子類構造器先調用誰?

從該類所在的繼承樹最頂端開始執行,然後依次往下執行,最後執行到本類的構造器,如果其父類通過this調用同類中的構造器,則會依次執行多個父類中的構造器【1、子類構造器總會調用父類構造器;2、如果子類沒有super顯示調用父類構造器,則會默認調用父類的無參構造器;3、創建子類實例時,總會調用最頂層的父類構造器;4、構造方法無法繼承】

 

數據庫三大範式:

1、表設計中每一列都是不可拆分的原子列(四川省成都市,應該設計成province,city)

2、每一列都需要跟主鍵有關聯關係

3、每一列跟主鍵都需要有直接關聯關係

 

數據庫隔離級別:

未提交讀:事務修改中,即使事務沒有提交,其他事務也能看到(發生髒讀)

讀已提交:事務修改中,其他事務只能看到歷史數據,事務完成後,其他事務看到結果數據(讀到就數據)【oracle默認】

可重複讀:解決了髒讀和舊數據的問題,但是沒法保證幻讀【mysql默認】

串行化:SERIALIZABLE是最高的隔離級別,它通過強制事務串行執行(注意是串行),避免了前面的幻讀情況

 

分佈式線程安全怎麼實現:

1、時間戳方式:A系統大併發請求B系統進行操作的時候,帶上時間戳,B系統在執行命令的時候比較存在時間戳和A系統請求時間戳,只有當A系統請求的時間戳大於存在的時間戳才做更新【需要保證A系統時序的有效性】

2、串行化:接受方使用消息隊列將請求緩存起來,然後串行化處理這些調用

3、通過數據庫保證【1、利用唯一索引,2、更新計算操作儘可能通過數據庫完成(數據庫鎖機制會保證一致性)】

4、行鎖:在表裏面添加鎖字段,採用select   for  update方法保證數據一致性;

5、儘量統一觸發途經

 

MQ和dubbo的一些基本知識:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章