Menu
快讀
  • 旅遊
  • 生活
    • 美食
    • 寵物
    • 養生
    • 親子
  • 娛樂
    • 動漫
  • 時尚
  • 社會
  • 探索
  • 故事
  • 科技
  • 軍事
  • 国际
快讀

五面阿裏,終拿offer,不明白爲什麽面試官總喜歡問Java這種問題

2020 年 1 月 28 日 Java架构师丨苏先生
五面阿裏,終拿offer,不明白爲什麽面試官總喜歡問Java這種問題

一面

一面就做了一道算法題,要求兩小時內完成,給了長度爲N的有重複元素的數組,要求輸出第10大的數。典型的TopK問題,快排算法搞定。

算法題要注意的是合法性校驗、邊界條件以及異常的處理。另外,如果要寫測試用例,一定要保證測試覆蓋場景盡可能全。加上平時刷刷算法題,這種考核應該沒問題的。

五面阿裏,終拿offer,不明白爲什麽面試官總喜歡問Java這種問題

二面

  • 自我介紹下呗
  • 開源項目貢獻過代碼麽?(Dubbo提過一個打印accesslog的bug算麽)
  • 目前在部門做什麽,業務簡單介紹下,內部有哪些系統,作用和交互過程說下
  • Dubbo踩過哪些坑,分別是怎麽解決的?(說了異常處理時業務異常捕獲的問題,自定義了一個異常攔截器)
  • 開始進入正題,說下你對線程安全的理解(多線程訪問同一個對象,如果不需要考慮額外的同步,調用對象的行爲就可以獲得正確的結果就是線程安全)
  • 事務有哪些特性?(ACID)
  • 怎麽理解原子性?(同一個事務下,多個操作要麽成功要麽失敗,不存在部分成功或者部分失敗的情況)
  • 樂觀鎖和悲觀鎖的區別?(悲觀鎖假定會發生沖突,訪問的時候都要先獲得鎖,保證同一個時刻只有線程獲得鎖,讀讀也會阻塞;樂觀鎖假設不會發生沖突,只有在提交操作的時候檢查是否有沖突)這兩種鎖在Java和MySQL分別是怎麽實現的?(Java樂觀鎖通過CAS實現,悲觀鎖通過synchronize實現。mysql樂觀鎖通過MVCC,也就是版本實現,悲觀鎖可以通過select… for update加上排它鎖)
  • HashMap爲什麽不是線程安全的?(多線程操作無並發控制,順便說了在擴容的時候多線程訪問時會造成死鎖,會形成一個環,不過擴容時多線程操作形成環的問題再JDK1.8已經解決,但多線程下使用HashMap還會有一些其他問題比如數據丟失,所以多線程下不應該使用HashMap,而應該使用ConcurrentHashMap)怎麽讓HashMap變得線程安全?(Collections的synchronize方法包裝一個線程安全的Map,或者直接用ConcurrentHashMap)兩者的區別是什麽?(前者直接在put和get方法加了synchronize同步,後者采用了分段鎖以及CAS支持更高的並發)
  • jdk1.8對ConcurrentHashMap做了哪些優化?(插入的時候如果數組元素使用了紅黑樹,取消了分段鎖設計,synchronize替代了Lock鎖)爲什麽這樣優化?(避免沖突嚴重時鏈表多長,提高查詢效率,時間複雜度從O(N)提高到O(logN))
  • redis主從機制了解麽?怎麽實現的?
  • 有過GC調優的經曆麽?(有點虛,答得不是很好)
  • 有什麽想問的麽?
五面阿裏,終拿offer,不明白爲什麽面試官總喜歡問Java這種問題

三面

  • 簡單自我介紹下
  • 監控系統怎麽做的,分爲哪些模塊,模塊之間怎麽交互的?用的什麽數據庫?(MySQL)使用什麽存儲引擎,爲什麽使用InnnoDB?(支持事務、聚簇索引、MVCC)
  • 訂單表有做拆分麽,怎麽拆的?(垂直拆分和水平拆分)
  • 水平拆分後查詢過程描述下
  • 如果落到某個分片的數據很大怎麽辦?(按照某種規則,比如哈希取模、range,將單張表拆分爲多張表)
  • 哈希取模會有什麽問題麽?(有的,數據分布不均,擴容縮容相對複雜 )
  • 分庫分表後怎麽解決讀寫壓力?(一主多從、多主多從)
  • 拆分後主鍵怎麽保證惟一?(UUID、Snowflake算法)
  • Snowflake生成的ID是全局遞增唯一麽?(不是,只是全局唯一,單機遞增)
  • 怎麽實現全局遞增的唯一ID?(講了TDDL的一次取一批ID,然後再本地慢慢分配的做法)
  • Mysql的索引結構說下(說了B+樹,B+樹可以對葉子結點順序查找,因爲葉子結點存放了數據結點且有序)
  • 主鍵索引和普通索引的區別(主鍵索引的葉子結點存放了整行記錄,普通索引的葉子結點存放了主鍵ID,查詢的時候需要做一次回表查詢)一定要回表查詢麽?(不一定,當查詢的字段剛好是索引的字段或者索引的一部分,就可以不用回表,這也是索引覆蓋的原理)
  • 你們系統目前的瓶頸在哪裏?
  • 你打算怎麽優化?簡要說下你的優化思路
  • 有什麽想問我麽?
五面阿裏,終拿offer,不明白爲什麽面試官總喜歡問Java這種問題

四面

  • 介紹下自己
  • 爲什麽要做逆向?
  • 怎麽理解微服務?
  • 服務治理怎麽實現的?(說了限流、壓測、監控等模塊的實現)
  • 這個不是中間件做的事麽,爲什麽你們部門做?(當時沒有單獨的中間件團隊,微服務剛搞不久,需要進行監控和性能優化)
  • 說說Spring的生命周期吧
  • 說說GC的過程(說了young gc和full gc的觸發條件和回收過程以及對象創建的過程)
  • CMS GC有什麽問題?(並發清除算法,浮動垃圾,短暫停頓)
  • 怎麽避免産生浮動垃圾?(記得有個VM參數設置可以讓掃描新生代之前進行一次young gc,但是因爲gc是虛擬機自動調度的,所以不保證一定執行。但是還有參數可以讓虛擬機強制執行一次young gc)
  • 強制young gc會有什麽問題?(STW停頓時間變長)
  • 知道G1麽?(了解一點 )
  • 回收過程是怎麽樣的?(young gc、並發階段、混合階段、full gc,說了Remember Set)
  • 你提到的Remember Set底層是怎麽實現的?
  • 有什麽想問的麽?
五面阿裏,終拿offer,不明白爲什麽面試官總喜歡問Java這種問題

五面

五面是HRBP面的,和我提前預約了時間,主要聊了之前在螞蟻的實習經曆、部門在做的事情、職業發展、福利待遇等。阿裏面試官確實是具有一票否決權的,很看重你的價值觀是否match,一般都比較喜歡皮實的候選人。HR面一定要誠實,不要說謊,只要你說謊HR都會去證實,直接cut了。

  • 之前螞蟻實習三個月怎麽不留下來?
  • 實習的時候主管是誰?
  • 實習做了哪些事情?(尼瑪這種也問?)
  • 你對技術怎麽看?平時使用什麽技術棧?(阿裏HR真的是既當爹又當媽,joy)
  • 最近有在研究什麽東西麽
  • 你對SRE怎麽看
  • 對待遇有什麽預期麽

最後HR還對我說目前穩定性保障部挺缺人的,希望我盡快回複。

小結

螞蟻面試比較重視基礎,所以Java那些基本功一定要紮實。螞蟻的工作環境還是挺贊的,因爲我面的是穩定性保障部門,還有許多單獨的小組,什麽三年1班,很有青春的感覺。面試官基本水平都比較高,基本都P7以上,除了基礎還問了不少架構設計方面的問題,收獲還是挺大的。

讀者福利:關于面試題的答案和筆者Java學習路線圖,私信筆者 【101】 即可免費領取!!!

科技

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

©2025 快讀 | 服務協議 | DMCA | 聯繫我們