02.27 每逢三月必跳槽,總結下自己多年後臺技術崗面試經驗,暫定阿里P6

最近原來工作時候的Boss聯繫我,說他跳槽到了阿里,問我有沒有興趣面一個Java後臺開發崗位。

考慮到我只工作了一年,現在去阿里肯定要降薪,因此也沒有太強烈的意願。但出於提升自我的角度考慮,參加了面試。

一面(電話面試一小時)

首先做一個簡單的自我介紹,主要包括學校經歷和工作經歷。我工作經歷只有一年,大部分時間都是在做產品設計和UI/UX Design,因此隔著電話都能感受到面試官的shock。

  • Java基礎。自動拆裝箱如何實現,String,StringBuffer,StringBuilder的異同以及各自的實現。
  • JVM基礎。JVM的內存模型,常見的垃圾回收算法。
  • 事務ACID,編程時如何保證事務,分佈式情況下如何保證事務。
  • 由於分佈式相關場景我沒有接觸過,因此面試官一直誘導我去設計實現一個分佈式事務。
  • 數據庫樂觀鎖和悲觀鎖。如何實現一個樂觀鎖。
  • 消息隊列使用場景,Kafka的架構以及原理。
  • 什麼是restful api,和rpc調用有什麼區別。
  • 單例的幾種寫法。volatile關鍵字有什麼作用。

以上就是電話面試的大體問題,面試完之後,又發給我三道算法題目,要求我一小時內完成,下面是三道算法題:

  • 翻轉一個long類型數字。例如輸入123456L,輸出654321L。- Leetcode翻轉integer的變種。考察能否正確處理溢出的情況。
  • 輸入一個double,要求返回與它最接近的.49或.99的數字。例如12.77返回12.99,11.02返回10.99,12.61返回12.49。
  • 有三個線程ABC分別向一個數組中寫入a,l,i,要求最終的寫入結果形如alialiali...寫入次數由A線程決定。

這三道題目做的還比較順利,第二天面試官又聯繫我闡述一下第一題和第三題的思路,然後通知我可以參加下一輪了。

二面(電話面試一小時)

二面主要考察了一些開放式的問題。

  • 首先還是自我介紹。主要是工作後的經歷。介紹一下工作一年所在team的產品,我承擔了什麼職責。
  • 開放式問題。如何設計一個rpc框架。
  • 開放式問題。如何設計一個服務註冊中心。
  • 集合類源碼。HashMap是如何實現的,擴容的過程,為什麼要擴容為2倍。HashMap中的鏈表替換為數組可以嗎?時間複雜度相同嗎?
  • 集合類源碼。線程安全的HashMap是什麼?(HashTable和ConcurrentHashMap)ConcurrentHashMap是如何實現的?(Java7分段鎖和Java8的CAS+Lock)和HashTable相比有什麼優勢?
  • 紅黑樹的結構,時間複雜度是多少,如何計算的
  • 什麼是CAS操作,如何實現一個自定義鎖
  • 數據庫設計。有一張很大的order表,如何設計能夠提升查詢效率(同時滿足根據買家id和賣家id查詢)?

二面也同樣是一小時左右,面試過程還算順利。只是當時我在廈門鼓浪嶼的一家小餐館吃晚飯,周圍的嘈雜和悶熱使我很煩躁,感覺面試官態度有些傲慢……

ps.一面二面結束後面試官都各種暗示我要瘋狂加班能不能接受blabla……

三面(電話面試一個半小時)

二面結束後的第三天,就收到了現場三面的通知。然而我還在廈門旅行,因此改為了電話面試。

三面是一個大Boss,因此面試的問題都更考察一些分析問題的能力。

  • 介紹一下你工作一年學習到什麼?所在項目的架構是什麼樣的?UI/UX設計有哪些規範(由於我說我學到了一些UI/UX設計方法,因此面試官就問了)?
  • 數據隔離級別,髒讀幻讀。
  • 線程池原理。
  • Synchronized的實現,鎖的升級過程。
  • K8s的作用,K8s的底層架構。
  • 對我業餘時間做的一些項目做了介紹。
  • 你覺得加入阿里你能給阿里帶來什麼?
  • 進入阿里你需要忍受很多困難,需要迎難而上,如果績效考評拿到差評,你會怎麼辦?

三面總的來說也還算順利,面試官也算和藹。

總結

整個流程從一面到三面結束大約持續了10天左右。總的來說,問題都是預期範圍內的,雖然面試過程中問到了一些分佈式相關問題,我都沒有任何經驗,這時候不要放棄,主動說出你的思路,然後在面試官的誘導下,相信你能說出屬於的答案。

最後,是我總結的一些面試Java後臺工程師必須要掌握的知識點。

1. 集合類源碼

  • ArrayList:內部數據結構,數組擴容機制
  • LinkedList:內部數據結構,為什麼使用雙向鏈表
  • HashMap:內部數據結構,put方法的完整流程,擴容機制
  • LikedHashMap:內部數據結構,如何實現一個Cache
  • TreeMap:內部數據結構,時間複雜度
  • CurrentHashMap:內部數據結構,Java7分段鎖,Java8 CAS+Synchronize


每逢三月必跳槽,總結下自己多年後臺技術崗面試經驗,暫定阿里P6

2. Java基礎

  • 自動拆裝箱原理
  • String,StringBuffer和StringBuilder
  • Throwable
  • reader和stream
  • NIO


每逢三月必跳槽,總結下自己多年後臺技術崗面試經驗,暫定阿里P6

3. JVM基礎

  • JVM內存模型
  • 常見垃圾回收算法
每逢三月必跳槽,總結下自己多年後臺技術崗面試經驗,暫定阿里P6

4. 併發編程基礎

  • Synchronized關鍵字原理
  • wait,notify,sleep
  • 安全的終止線程以及線程的狀態轉換
  • 自定義Lock
  • 線程池原理

5. 數據庫基礎

  • 數據庫三範式,事務ACID,隔離級別,視圖,索引
  • JPA實體狀態
  • EntityManger

6. 網絡基礎

  • TCP/IP

7. 常見設計模式

  • 裝飾者,模板方法,策略,工廠,狀態

由於文檔內容過多,所以只截取了目錄部分,每個知識點都有更細化的內容

需要獲取這份文檔的朋友:轉發文章並關注我,後臺私信【面試】即可免費獲取


每逢三月必跳槽,總結下自己多年後臺技術崗面試經驗,暫定阿里P6


每逢三月必跳槽,總結下自己多年後臺技術崗面試經驗,暫定阿里P6


每逢三月必跳槽,總結下自己多年後臺技術崗面試經驗,暫定阿里P6


分享到:


相關文章: