秋招阿里四面,已獲offer!分享下經驗總結和麵試問題(Java崗)

秋招阿里四面,已獲offer!分享下經驗總結和麵試問題(Java崗)

面試過程

最近去阿里的菜鳥國際做了一次面試交流,發現大公司對於面試者的知識結構考核非常嚴謹,可以作為我們日常工作學習的指導。雖然很多人說面試問到的東西在實際工作中很少用到,甚至有「面試造火箭,工作擰螺絲」的說法。

但從面試中,其實可以看得出來現在的公司對於面試者的知識體系要求。如果我們能在工作中就按著這樣的要求去不斷提升,那麼在面試的時候必然也能遊刃有餘。

一般來說,阿里的面試會有兩輪的技術電面,分別交叉檢驗你的技術基礎。後面還有兩輪的現場技術面試,主要檢驗你的項目經驗。但從知識體系的角度來看,阿里面試對於知識的考核可以分為三個層次:對於基礎知識的考核、對於項目經驗的考核、對於項目深度的考核

一、基礎知識考核

在這個層次上,主要考核你對 Java 語言本身原理的理解以及各種框架的原理理解。對於 Java 開發崗位上來說,這些知識點包括但不限於:

  • 集合 HashMap 的原理,與 Hashtable、ConcurrentHashMap 的區別?
  • Java 線程池的核心屬性以及處理流程
  • Java 併發包原理、Synchronized關鍵字、鎖
  • 線程的生命週期
  • JVM類加載機制
  • JVM內存模型
  • JVM分代以及垃圾回收機制
  • Spring Bean 容器生命週期
  • Spring AOP 原理
  • Dubbo 請求流程以及原理
  • 數據庫 SQL 優化、數據庫索引、索引原理
  • ……

看到這麼多的知識點,我一下子就懵逼了,這麼多得看到什麼時候才看得完啊?但後面我想明白了,其實你不需要全部都懂,但需要了解大部分知識點,並且在這大部分知識點中,還需要有部分是瞭解得非常深入的。如果達到這個水平,基本上都能通過考核。

對於基礎知識的考核多出現在阿里的前兩輪電話面試上。對於這塊,你事前把常見的面試題目看一遍,多面試幾次基本上都沒有問題

秋招阿里四面,已獲offer!分享下經驗總結和麵試問題(Java崗)

二、項目經驗的考核

當你成功通過基礎知識的考核之後,你會進入下一關的考驗:項目的理解程度。

面試官首先會讓你選擇一個你最拿手的項目,畫出架構圖,之後的一切問題都從這個架構圖觸發。當你畫出架構圖之後,你肯定需要解釋清楚每個模塊的作用,每個框架的原理以及與其他框架的區別

例如我就用我做過的一個搜索項目作為經典項目,與面試官探討

項目中用到了 Kafka 這個框架,那麼面試官就會問 Kafka 和 RocketMQ 之間的區別是什麼,它們兩個有什麼不同?
項目中還用到了 Canal 這個阿里巴巴開源的框架,那麼面試官自然會問這個東西是幹嘛的,原理是怎樣的?
項目中還用到了 Zookeeper 作為協調者,那麼 Zookeeper 在這個項目中的作用是什麼,扮演了什麼角色?


對於「項目理解程度」的考核會發生在技術面試的三四輪。在這個層次上,你必須要有一個拿得出手的項目,並且對其中的所有框架以及原理都瞭如指掌,否則你會被虐慘。

三、項目深度的考核

通過上一輪對於「項目理解程度」的考核後,基本上你對整個項目都會有一個全面的認識,應用層面上的問題基本上不會難倒你了。但在「項目思考深度」的考核上,就不僅僅只是考核應用層面上的問題了

還是用我做過的一個搜索項目作為例子,其中 Canal 這個開源框架暫時是沒有實現集群這個功能的,那麼面試官就問了:

你如何去改造這個項目,從而實現 Canal 的集群功能?
這個時候,你會發現你懵逼了,因為你從來沒有去思考過這個問題。你所有的工作內容都是在想如何使用開源框架,而沒有進一步思考這些開源框架好不好,有什麼可以改進的地方。
所以,在這一個層次上考核的是你對開源框架的思考深度,這些框架到底好不好,好在哪裡,不好在哪裡,有什麼可以改進的地方。

對於「項目思考深度」的考核同樣發生在技術面試的三四輪。在這個層次上,你不僅要對項目本身理解足夠深刻,還要跳出項目本身,去思考開源框架本身的問題。

四、總結

當我們回過頭來總結,你會發現這三個層次都是層層遞進的,而且逐步深入。雖然這是面試中總結出來的經驗,但是這卻是一個很好的學習指引。讀者可以自己自查,看看自己現在是處於哪個層次,這樣在工作中也可以不斷地向更高層次邁進。

對於我來說,我缺乏的是對於項目的思考深度,很多時候都是業界覺得好,那我就用了。但是作為一個高級開發,甚至是一個即將成為架構師的高級開發來說,你必須知道為什麼要用這些框架?它有什麼問題,我們能不能做得更好?只有這樣,我們才能有所成長。

秋招阿里四面,已獲offer!分享下經驗總結和麵試問題(Java崗)

阿里面試真題:

一面(主要是jvm,併發,鎖,數據結構等基礎)

  1. 自我介紹(說說自己的擅長及拿手的技術)
  2. 說說treemap和HashMap的區別?HashMap和ConcurrentHashMap的區別?
  3. HashMap底層如何實現(JDK1.8有所改動)?
  4. 說說Hash的一致算法?
  5. 你知道的GC算法和回收策略有哪些?GC的機制是什麼?
  6. 垃圾回收器的基本原理?是否可以立即回收內存?怎麼樣主動的通知JVM進行垃圾回收?
  7. 雙親委派模型機制線程池創建的幾個核心構造參數是什麼?
  8. 樂觀鎖和悲觀鎖?可重入鎖和Synchronized?他們都是可重入鎖嗎?哪個效率更高?
  9. CountDownLaunch和Cylicbarrior的區別以及分別是在哪樣場景下使用的?
  10. Http和Https的區別以及Https加密的方式?
  11. 以後的職業規劃和想法

二面(主要是數據庫,協議 , Spring等 )

  1. 自我介紹,聊下自己認為做得很好的項目!
  2. InnoDB支持的四種事務隔離級別名稱是什麼?之間的區別是什麼? MySQL隔離級別是什麼?
  3. 說說事務的特性?講講對慢查詢的分析?
  4. 你理解的BTree機制?
  5. 有哪些MySQL常用的優化方法?6. Http請求過程, DNS解析的過程?7.三次握手和四次握手的過程?
  6. B+樹索引和Hash索引之間的區別?
  7. Spring IOC如何管理Bean之間的依賴關係,怎麼樣避免循環依賴?
  8. SpringBean創建過程中的設計模式?11.說說AOP的實現原理?
  9. Tomcat的基本架構是什麼?

三面(主要是緩存,併發,分佈式)

  1. 自己項目中的總結的併發經驗
  2. 說說MySQL的鎖併發?加鎖的機制是什麼?
  3. 高併發場景下如何防止死鎖,保證數據的一致性?
  4. 集群和負載均衡的算法與實現?
  5. 說說分庫與分表設計?
  6. 分庫分錶帶來的分佈式困境與對應之策有哪些?
  7. Redis和Setnx命令使如何實現分佈式鎖的?
  8. 使用Redis怎麼進行異步隊列?會有什麼缺點?
  9. 緩存擊穿的概念和解決方案?
  10. Redis的數據結構?線程模型? Redis的數據淘汰機制?
  11. Redis的數據一致性問題12. MQ底層原理的實現?
  12. 阻塞隊列不用Java提供的該怎麼實現?
  13. 講講負載均衡的原理?
  14. 如何實現高併發環境下的削峰、限流?
  1. 手寫ArrayList
  2. 手寫進制轉換算法,求出一個數的二進制數1的個數
  3. JAVA基礎 equals和==
  4. 多線程方式、threadlocal,各種鎖,synchronized和lock
  5. 設計模式、spring類加載方式、實例保存在哪、aop ioc、反射機制
  6. 類加載器,雙親委派模型,熱部署
  7. jvm內存模型,內存結構、堆的分代算法、堆的分區、gc算法、gc過程。
  8. tcp ip 七層模型 rest接口規範 get和post區別,長度,安全。
  9. tcp ip的arp協議,兩個同一網絡的主機如何獲得對方的mac地址。
  10. 負載均衡、高併發、高可用的架構
  11. mysql的引擎區別
  12. redis緩存,redis的集群部署,熱備份,主從備份,主從數據庫,hash映射找到知道指定節點。
  13. 瞭解雲計算麼,瞭解雲容器docker麼,容器和虛擬機的區別
  1. 自我介紹 項目中負責哪些 做了哪些
  2. 項目中的數據庫備份,主從數據庫、集群
  3. 數據庫的索引原理,b+樹原理,trie樹引申,二叉查找樹的原理
  4. 海量數據中查找一個單詞,分佈式計算map reduce ,或者用hsah映射篩選部分結果
  5. java的抽象類和接口區別、java的hashmap,java的內存模型,分區,分代垃圾回收算法。實例、常量放在哪裡。
  6. int 4個字節,double 8個字節。
  7. 多線程中的wait和sleep區別,notify的作用
  8. 設計模式瞭解哪些,寫一個觀察者模式。實現兩個接口,一個是主題一個是觀察者,並寫出對應方法。
  9. 寫一個生產者消費者隊列的方法,分別寫兩個類代表生產者和消費者,並且用隊列模擬其生產消費。用while循環和waitnotify可以實現,但我忘記在隊列上加synchronize關鍵字,於是讓我再寫一題。寫的是:輸入一個字符串,輸入第一個只出現一次的字符,寫出來了。
  10. tcp ip的四次揮手 子網掩碼的作用, 子網掩碼(subnet mask)又叫 網絡掩碼 、 地址掩碼 、子網絡遮罩,它是一種用來指明一個IP地址 的哪些位標識的是 主機所在的子網,以及哪些位標識的是主機的位掩碼。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼只有一個作用,就是將某個IP地址劃分成 網絡地址 和主機地址 兩部分。
  11. 瞭解linux麼,說一下linux的內核鎖?沒接觸過。
  12. 有沒有用過sed 使用shell腳本寫一個將文本中的字符替換掉的腳本,大概說了一下用grep || 替換。沒再問linux的
  1. 自我介紹
  2. 負責模塊,哪些模塊,項目一的架構,我說太久了忘了,說最近的項目。
  3. 數據庫連接池用的是什麼,配置文件呢,數據庫驅動怎麼下載的,持久層框架呢。
  4. 為什麼要用數據庫連接池,有什麼好處。
  5. java的內存模型,變量和實例存在哪。java棧的作用,java的堆存什麼,方法區存什麼。
  6. java的分代回收。
  7. 項目如何部署到雲主機上,有什麼速度提升,為什麼有提升,答主要是設備性能和帶寬。
  8. tomcat的配置,堆得初始大小是多少,達不知道。
  9. 問遇到過什麼難題。
  10. 問在遇到問題時候的辦法。
  11. 抗壓能力
  12. 優缺點
  13. 接受加班。
  14. 遇到工作問題,同事不配合怎麼辦。
  15. 快速上手工作的辦法。
  16. 平時學習的方法,舉幾點。
  17. 職業規劃

最後

感謝各位程序員同仁閱讀。

感謝支持,我會更加努力分享,喜歡的朋友可以關注下,祝大家面試通過拿到心儀offer。

需要獲取面試核心資料的可以私信我【面試】獲取資料領取方式!(助你面試無憂)

重要的事情說三遍:轉發+轉發+轉發!

秋招阿里四面,已獲offer!分享下經驗總結和麵試問題(Java崗)

秋招阿里四面,已獲offer!分享下經驗總結和麵試問題(Java崗)

秋招阿里四面,已獲offer!分享下經驗總結和麵試問題(Java崗)

更多筆記分享

秋招阿里四面,已獲offer!分享下經驗總結和麵試問題(Java崗)

最全最新面試文檔分享,先一步瞭解大型互聯網面試題及答案,對面試文檔總結感興趣的

轉發+轉發+轉發,關注我後臺私信關鍵字【面試】免費獲取資料領取方式!(助你面試無憂)


分享到:


相關文章: