中電金信-杭州工商銀行
-
JAva集合用過哪些?
- ArrayList、LinkedList、HashSet、TreeSet、HashMap、LinkedHashMap、ConcurrentHashMap
-
Arraylist和linkbist區別
- ArrayList底層是數據,查詢快,增刪慢,線程不安全,效率高
- LikedList 底層是雙向鏈表,查詢慢,增刪快,線程不安全,效率高
- Vector:底層數組,查詢快,增刪慢,線程安全
-
hashmap和Hashset的區別,以及査詢時問復雜度?
- HashMap實現了Map接,存儲是key,value結構,key不能重復,value可以重復。
- HashSet實現了Set接口,存儲是對象,單列結構,不能重復。
- 都是基于散列函數, 時間復雜度 O(1) 但是如果太差的話是桶內元素小于6個O(n),大雨8個O(logN)
- TreeSet==>O(log(n))
- 1、使用線程安全的集合ConcurrentHashMap
- 使用volatile修飾節點數組,保證其可見性,禁止指令重排。
- 做插入操作時,首先進入樂觀鎖,
然后,在樂觀鎖中判斷容器是否初始化,
如果沒初始化則初始化容器,
如果已經初始化,則判斷該hash位置的節點是否為空,如果為空,則通過CAS操作進行插入。
如果該節點不為空,再判斷容器是否在擴容中,如果在擴容,則幫助其擴容。
如果沒有擴容,則進行最后一步,先加鎖,然后找到hash值相同的那個節點(hash沖突),
循環判斷這個節點上的鏈表,決定做覆蓋操作還是插入操作。
循環結束,插入完畢。 ConcurrentHashMap
的get()
方法是不加鎖的,為什么可以不加鎖?因為table
有volatile
關鍵字修飾,保證每次獲取值都是最新的。
- 2、使用集合工具類 Collections.synchronizedList
? 有了解,鎖的分類有公平鎖,非公平/可重入鎖,不可重入鎖/單機鎖,分布式鎖/悲觀鎖,樂觀鎖
-
Synchronized 無法判斷獲取鎖的狀態,Lock 可以判斷是否獲取到了鎖
-
synchronized 內置的Java關鍵字,Lock 是一個Java類
-
Synchronized 會自動釋放鎖, Lock 必須要手動釋放鎖,如果不釋放鎖,死鎖
-
Synchronized 可重入鎖不可以中斷的,非公平;Lock 可重入鎖,可以判斷鎖,可以自己設置是否公平。
- 有用過,每日報表
- 繼承Thread,實現Runnable重寫run方法,實現Callable類重寫Call方法。
- 啟動線程使用start方法來啟動,線程池是使用submit和exceute方法提交
- explain關鍵字
-
redis有了解嗎?分布式鎖的實現,常用的數據類型有哪些?
- String,zset,set,hash,list
-
分布式項目中的事務控制怎么做的?
1.2PC 2.本地消息表 3.3PC 4.TCC 5.消息事務+最終一致性
-
你們開發自測怎么做的?
參考:單元測試、測試案例要覆蓋
覆蓋測試,單元測試*,聯調測試*,常見錯誤集合,最后測試統一測試壓測
不同的關鍵字通過相同的哈希函數計算出相同的哈希地址