一面(電話面試):
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的一些基本知識: