阿裡一面
- 講一下 HashMap 中 put 方法過程?
- 對 Key求Hash 值,然後再計算 下标。
- 如果沒有碰撞,直接放入桶中,
- 如果碰撞了,以連結清單的方式連結到後面,
- 如果連結清單長度超過閥值(TREEIFY_THRESHOLD == 8),就把連結清單轉成紅黑樹。
- GC 算法,除了常見的複制算法,标記整理,标記清除算法,還有哪些?
- 增量算法。主要思想是垃圾收集線程與使用者線程交替執行。也可以說一邊執行垃圾回收一邊執行使用者代碼。但是這種方法會造成系統吞吐量下降。
- Spring 主要思想是什麼,回答 IOC 和AOP,怎麼自己實作 AOP ?
- 使用基于反射的動态代理
- SpringAOP 用的哪一種代理
阿裡二面
- HashMap 怎樣解決沖突,講一下擴容過程,假如一個值在原數組中,現在移動了新數組,位置肯定改變了,那是什麼定位到在這個值新數組中的位置,
- 将新節點加到連結清單後,
- 容量擴充為原來的兩倍,然後對每個節點重新計算哈希值。
- 這個值隻可能在兩個地方,一個是原下标的位置,另一種是在下标為 <原下标+原容量> 的位置。
- 抛開 HashMap,hash 沖突有哪些解決辦法?
- 10w行資料,每行一個單詞,統計出現次數出現最多的前100個。
- 一個文本檔案,給你一個單詞,判斷單詞是否出現。
- Java 通路修飾符權限的差別;
- public 所有類都可通路
- protected 隻允許包内、子類通路。
- 預設 隻允許包内通路
- private 隻允許類内通路
- String 是否可以繼承, “+” 怎樣實作?
- String 是 final 類,不可繼承。
阿裡三面
- 線程安全性
- HashMap、ConcurrentHashMap 差別。
- 索引計算消除了最高位的影響
- 預設容量: 16(若定義了初始容量(c),容量會定義為大于(c + (c >>> 1) +1) 的最小 2^n)
- 例如:初始容量為 13,則真正的容量是 32.
- 線程安全,并發性能較好
- 将M個平均長度為N的有序隊列組合成一個有序隊列
- 10億條短信,找出前一萬條重複率高的
- 對一萬條資料排序,你認為最好的方式是什麼
- 假如有100萬個玩家,需要對這100W個玩家的積分中前100名的積分,按照順序顯示在網站中,要求是實時更新的。積分可能由做的任務和獲得的金錢決定。問如何對着100萬個玩家前100名的積分進行實時更新?
- 1.1 支援斷點續傳。RANGE:bytes=XXX 表示要求伺服器從檔案 XXX 位元組處開始傳送
- 還有一些其他的改進,有興趣可以自行查閱相關資料
- HTTP 和 HTTPS 的主要差別
- 安全。HTTP 直接與 TCP 通信,而 HTTPS 是先與 SSL(加密) 通信,然後再由 SSL 和 TCP 通信
面試總結及建議
每一次Java面試,其實都是一次學習機會,是對自己技術知識棧的梳理、考核、複盤。我們應該抱着學習的态度,認真對待,找到自己比較薄弱的環節,盡快去查漏補缺學習鞏固。對于面試來說,其實也沒有太多的技巧可言,面試官主要看重的就是個人能力,無非就是兩個方面:
- 技術廣度
- 技術深度
總結
在這裡,由于面試中MySQL問的比較多,是以也就在此以MySQL為例為大家總結分享。但是你要學習的往往不止這一點,還有一些主流架構的使用,Spring源碼的學習,Mybatis源碼的學習等等都是需要掌握的,我也把這些知識點都整理起來了
