HashMap 實現原理? ConcurrentHashMap 怎么實現 線程安全的。
使用 一個 Entry 數組保存數據,Entry 對象中有四個屬性,分別是 key,value,next[Entry 類型的](保存不同對象擁有相同hash值的value對象,也就是 hash沖突的解決方式(鏈表存儲))
HashMap 的擴容標準是,達到了設置的哈希因子的臨界值,2備擴充,擴充方式為新建一個 Entry 數組,然后重新計算key的hash值進行拷貝存儲。
ConcurrentHashMap 是一個線程安全的 hashMap? 線程安全是使用? Segment 實現的,并非 直接增加? synchronized關鍵字
Collections.synchronizedMap(Map)? 創建的 線程安全的hashmap是通過 增加 synchronized 關鍵字 實現的線程安全。
hashMap 中解決 哈希沖突的方法為:重寫equals 和 hashCode 函數(還有其他方法,我不會。)
為什么要重寫 hashCode 函數減另一篇文章?http://www.lxweimin.com/p/d8069b28bb40
volatile ?關鍵字的作用。
volatitle? 只能用來修飾 屬性,被修飾的屬性,在多線程環境中,總能保持最新的數據(不會出現臟數據)也就是實現了線程安全:原理是 被volatile修飾的屬性,不允許線程保存私有拷貝。static 修飾的變量無需增加該關鍵字。volatile變量可以保證下一個讀取操作會在前一個寫操作之后發生
Integer ?考題
Integer a=999; ? Integer b=999; ?System.out.print(a==b); ?輸出結果是
輸出false? 因為 Integer 是對象類型,對象類型得通過 equals 進行比較
如果換成?
Integer a = 999; ?System.out.print(a == 999 ); 則輸出結果是 ?true,因為 jdk 會自動進行拆箱操作,就相當于 二個基本數據類型 int ?在比較,當然是 true。
如果換成
Integer a=9; Integer b=9; System.out.print(a==b);? 輸出結果是? true 因為 IntegerCache 會緩存 -128 到 127 之間的數據,所以 返回 true
線程池的實現原理 ? (我不會)
jvm 相關內容(我不會)
二個排序好的int 數組獲取交集
Java中CyclicBarrier 和 CountDownLatch有什么不同?
CyclicBarrier 和 CountDownLatch 都可以用來讓一組線程等待其它線程。與 CyclicBarrier 不同的是,CountdownLatch 不能重新使用
分布式 ID 生成策略
1、利用 mysql 自增長特效,設置不同的步長 (擴展數據庫數量難度大)
2、使用 uuid? (字符串類型,不利于存儲和增加索引,無序)
3、使用 uuid 的變種 轉換為 10進制的 數字。
4、使用像 Twitter的snowflake算法?
5、使用 redis 或 MongoDB的ObjectId ?或 zookeeper 等第三方中間件來做
Spring ?注入的方式由幾種?
三種、接口類型注入、construct 注入(構造器注入)、set 注入(通過調用屬性的set 方法注入)
Spring 的 bean 生命周期?
創建 - 屬性注入 - init-method ?- ?銷毀 ?- destroy-method ??超詳細講解
Spring 事務的傳播性
PROPAGATION_REQUIRED ? ?如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。這是最常見的選擇。
PROPAGATION_SUPPORTS ? 支持當前事務,如果當前沒有事務,就以非事務方式執行。
PROPAGATION_MANDATORY ? 使用當前的事務,如果當前沒有事務,就拋出異常。
PROPAGATION_REQUIRES_NEW ? 新建事務,如果當前存在事務,把當前事務掛起。
PROPAGATION_NOT_SUPPORTED ? 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
PROPAGATION_NEVER ? 以非事務方式執行,如果當前存在事務,則拋出異常。
PROPAGATION_NESTED ? ? 如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與PROPAGATION_REQUIRED ? 類似的操作。
mysql 的事務隔離級別有幾種?(四種)
1、讀取未提交行 - 會有臟讀、重復讀、幻讀
2、讀取提交行 ? - 會 重復讀、幻讀 (mysql 的默認事務級別)
3、不可重復讀 ?- 會幻讀
4、串行化 ? ?--( 一個事務部結束,其他事務只能等待,不可同時執行,所以沒有 臟讀,重復讀,幻讀風險)
臟讀(Drity Read):某個事務已更新一份數據,另一個事務在此時讀取了同一份數據,由于某些原因,前一個RollBack了操作,則后一個事務所讀取的數據就會是不正確的。
不可重復讀(Non-repeatable read):在一個事務的兩次查詢之中數據不一致,這可能是兩次查詢過程中間插入了一個事務更新的原有的數據。
幻讀(Phantom Read):在一個事務的兩次查詢中數據筆數不一致,例如有一個事務查詢了幾列(Row)數據,而另一個事務卻在此時插入了新的幾列數據,先前的事務在接下來的查詢中,就會發現有幾列數據是它先前所沒有的。
mysql 增加索引原則
簡單說說 http 協議
更多 JAVA 面試題及答案,查看小程序
暫時就記得這么多,如果有錯誤,歡迎指正、補充。