高級java 面試總結

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 面試題及答案,查看小程序



暫時就記得這么多,如果有錯誤,歡迎指正、補充。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Java面試 2016年9月11日 1 Java基礎特性 Java基礎 面試題目總結 首先參考 駱昊的 上中下三篇...
    小斌斌閱讀 4,975評論 3 110
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,374評論 11 349
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,778評論 18 399
  • 一天我的小妹妹去了一個地方。她在那里看見了一個軟軟的東西,小妹妹不知道這是什么?于是她就和這個東西玩了起來。不...
    觀潮魚閱讀 252評論 0 0
  • 這天早晨,姚雪依舊起床,梳洗,做早點,吃早點,然后坐公交車去上班。 剛下公交,就見一輛自行車飛撲而 來,姚雪來...
    畫宮女王閱讀 445評論 0 1