《2016阿里巴巴校招內推offer之JAVA研發工程師》

寫在前面 : 2015 年 7 月初,參加阿里巴巴校招內推, 8 月 15 日拿到研發工程師 JAVA 的 offer 。我的專業並非計算機,也沒有在互聯網公司實習過,只有一些學習和麪試心得,供大家參考。阿里巴巴 90%以上使用 Java ,所以下面的分享也基於 Java 崗,如有表達不準確的地方,請提出建議和指正。

7 月上旬投遞簡歷, 7 月 27 號至 29 號連續三天,每天一面,在 8 月 15 日正式收到校招 offer 。今年阿里依舊火熱,看簡歷編號,內推階段大約有 6萬份簡歷,而據 HR 告知實際通過比例略大於 1% ,所以競爭還是很激烈。

一面 :
時間約 50 分鐘,注重基礎,廣度加深度,刨根問底。
自我介紹熟悉 Java 、 jvm 、 Python 、 Hadoop( 包括 HDFS 、 MapReduce 、 HBase 等 ) 、優化算法等。所以,針對這些來提問。
1. Hashtable,HashMap,ConcurrentHashMap 底層實現原理與線程安全問題(建議熟悉 jdk 源碼,才能從容應答)
2. MapReduce 輸入輸出格式
3. Mapper 和 Reducer 的功能
4. MapReduce 的工作機制,Shuffle過程
5. HDFS 工作原理,如何實現 HA
6. 節點間通信機制
7. DataNode 如何冗餘備份
8. Java 的引用類型有哪幾種
9. 抽象類和接口的區別
10. 設計模式會哪些
11. 工廠方法模式的優點(低耦合、高內聚,開放封閉原則)
12. 數組多大放在 JVM 老年代(不只是設置 PretenureSizeThreshold ,問通常多大,沒做過一問便知)
13. 老年代中數組的訪問方式
14. GC 算法,永久代對象如何 GC , GC 有環怎麼處理
15. 誰會被 GC ,什麼時候 GC
16. 如果想不被 GC 怎麼辦
17. 如果想在 GC 中生存 1 次怎麼辦
18 緩存設計與 LRU
19. hashCode() 與 equals() 生成算法、方法怎麼重寫
20. 關係型和非關係型數據庫區別
21. HBase 原理與工作機制,如何保證 HA ,如何保證宕機數據可恢復
22. 數據庫處理大數據的優化
23. 索引的分類
24. 模糊查詢性能
25. 排序算法與時空複雜度(快排爲什麼不穩定,爲什麼你的項目還在用)
26. 逆波蘭計算器
27. Hoffman 編碼
28. 查找樹與紅黑樹
29. Spring 框架等
30. 項目
31. jvm 如何分配直接內存, new 對象如何不分配在堆而是棧上,常量池解析

一面總結 :
面試官竟然主動對我說謝謝 … 驚我一身冷汗,不過立刻意識到肯定過了。
1) 面試問題主要根據自我介紹和項目,所以,對寫在簡歷上的內容,一定要理解的清清楚楚,也不要爲了簡歷看起來牛比而羅列經歷,尤其是自己淺嘗輒止的項目。
例如,建議不要輕易說自己寫過爬蟲,因爲沒那麼簡單,一般會追問懂 Scrapy 框架嗎,爲什麼不做成分佈式的,如何並行爬取多個網站,如何設計並行任務分發器,爬來的數據如何存儲,索引,檢索,你覺得還有什麼可以改進的。爬蟲屬於搜索引擎框架的一部分,面試爬蟲很容易給自己挖一個 “ 系統設計 ”的坑。
2) 阿里注重基礎、潛力和興趣,而一些初創公司往往更注重立即上手的技能,這一點在面試中有所體會。
3) 阿里注重基礎,但是僅有基礎是不夠的。
項目經歷與實習經歷可以加分,一線互聯網公司的實習經歷可以鍍金,由於師門嚴禁實習,因此需要項目彌補,除去研究的課題多目標優化算法, Hadoop 是個“大寶貝”,它包含了 java 、 jvm 、設計模式、大數據處理框架、分佈式計算、 HA 、負載均衡、主備一致性等,也包含分佈式文件系統、分佈式計算框架、非關係型數據庫的實現等,幾乎面試官問的任何場景的問題,都可以在 Hadoop 中找到解答,所以, Hadoop 是我最大的加分項,彌補了自己零實習的弱點。
至於 Hadoop 需要掌握到什麼程度,才能應對面試?原理上,可以回答上面提到的點,操作上,自己可以實現淘寶的數據魔方的 Demo 。
4) 面試官的問題不會了怎麼辦?個人不建議直接說不會,而是要 “ 扯 ” 。
例如,問我 Spring 、 iBatis 等框架,而我一點不懂,但我說會 Hadoop ,你有什麼業務需求,我幾乎都可以在 Hadoop 找到實現。問我 MySQL 數據庫,我也不精通,但我會告訴他 HBase 如何解決。
5) 關注面試的公司,關注阿里的開源技術與自主框架,例如,問到 jvm 的時候,我會向面試官闡述淘寶在 jvm 方面的優化工作,以及 jvm 在 Hadoop 方面的優化。有興趣的同學可以關注淘寶 “ 莫樞 ” ,後離職加入 Oracle 、 Azul ,在虛擬機方面做了很多出色的工作,詳情關注: ITeye 的高級語言虛擬機專欄。
6) 回答問題時,切忌使用 “ 應該 ” 、 “ 好像 ” 、 “… 吧 ” 等不確定性詞彙,因爲搞技術還是需要嚴謹的,面試官不想招聘一個什麼都靠猜測的同事。

二面 :
時間約 23 分鐘,感覺是交叉面,是其他部門的主管,聽語氣感覺級別在 P8 以上。
首先也是自我介紹,針對自我介紹和項目,開始提問。
1. IO 流,字節流 –> 字符流
2. 遞歸讀取文件夾下的文件,代碼怎麼實現
3. HashMap 與線程安全問題
4. rehash
5. Web 框架
6. 項目與 Hadoop
7. 問我未來的職業規劃
8. 問我有什麼問題(問了關於阿里工程師文化的問題)

二面總結 :
1) 自我介紹要抓住重點,與崗位匹配,比如面技術,社團經歷可以不說(但是 hr 面非常有用)。
2) 二面問的技術內容很少,感覺是可以看到一面成績,進行簡單的確認。所以,筆試或一面表現好,對後面的面試很有幫助。
3) 當面試官不再關注你的過去,而是和你談未來談理想的時候,基本表明面試通過了。例如,問職業規劃和你對阿里的想法等問題的時候。

HR面 :
知乎上稱阿里的 HR是神存在,掌握生殺大權,多少英雄好漢歷經殘酷的技術面,卻倒在HR面前,但是從個人的經歷,感覺HR姐姐還是很 nice 的。
40 分鐘,並沒有自我介紹,而是直接轟炸。
1. 暑假在學校做什麼呢
2. 平時喜歡閱讀什麼書
3. 問我俱樂部主席的工作,有什麼收穫(社團主席,是HR的興趣點)
4. 課題是什麼,遇到什麼困難,你是如何解決問題的
5. 爲什麼不從事本專業相關工作
6. 你專業是電磁場,爲什麼要轉行
7. 你是一個什麼樣的人
8. 你的缺點
9. 曾經最大的打擊
10. Web 框架不會怎麼辦,以後工作的內容和你現在研究的不同怎麼辦
11. 職業規劃
12. 如果能去杭州家人同意嗎
13. 向我介紹了所應聘部門
14. 問我有什麼問題

HR面總結 :
1) 一定要坦誠,HR 閱人無數,更別說阿里的HR了。
2) 面試官是在考察適合自己團隊的人選,而面試者,也是在尋找適合自己的團隊和 manager ,這是雙向選擇的過程,所以自己的心態要和面試官持平。記住,面試官是在尋找團隊夥伴,不是在對你考試,這種心態有助於減輕緊張的心情。
3) 社團主席讓HR產生了好感,社團經歷對自己的成長,看不見摸不着,但在時間管理、情緒控制、團隊管理等方面,有很大的收穫。程序猿的工作壽命並不長,當技術過硬,開始帶團隊的時候,相信一定會感謝自己在社團的經歷。

推薦書目 :
限於師門不允許實習,所以只能在學校學習乾貨,提升內功。一直相信,理論決定上限,技能決定下限。修煉好內功,學習各種武功招式便輕而易舉。
《 Java 編程思想》, Java 業界神書,不建議入門閱讀,相比較,《 Java 核心技術 I 》非常適合入門。《 Java 核心技術 I 》,如果不想啃《 Java 編程思想》,這本是絕佳的入門神器。
《 Effective Java 第二版》,別猶豫了,深入 Java 必讀,因爲 James Gosling 也讀,務必打好基礎再讀,否則會打擊學習 Java 的信心。居家旅行,催眠必備。
《 Java 解惑》, Effective Java 作者又一力作,解析 Java 的各種坑。
《 Java 併發編程實戰》,玩 Java ,怎麼能不懂併發,併發的世界很奇妙。
《 Java 特種兵》,淘寶謝宇所著,洋洋灑灑,也是進階讀物,不可入門,作爲補充參考。
《深入理解 Java 虛擬機》,周志明所著,國內業界良心之作,建議參考 ITeye 高級語言虛擬機專欄,也可與《 Java 性能優化權威指南》參考來看。
《 Java 性能優化權威指南》,深入理解 Java 性能優化細節, James Gosling 力薦。
《設計模式之禪》,一個個生動的例子,讓枯燥的設計模式也變得有趣,不建議初學者直接看 GOF的《設計模式》。
《 Hadoop 權威指南》,掌握 Hadoop 必看,不用多說。
《 Hadoop 技術內幕》之 HDFS 、 MapReduce 、 YARN ,參考與補充。
《 Python 核心編程》,對 Python 的講解深入淺出,雖然基於 Python2.5 ,但是核心思想不變。Python有很多庫,建議閱讀官方文檔,裏面有詳細解釋和示例代碼。
《計算機網絡》,網絡基礎入門必備。
《大型網站技術架構》,簡單實在,理解大型網站架構,學習 Hadoop 之後纔看發現架構上很多相似之處。
《 Linux 內核設計與實現》,拋開了 Linux 內核紛繁的源碼,給出了關鍵的架構與實現,與《深入理解 Linux 內核》互補,重點推薦。
《深入理解 Linux 內核》,幾乎所有關鍵的疑問,都可以在裏面找到解答,需要時查閱,千萬不要從第一頁開始讀。
《程序員面試金典》,注意不是 “ 寶典 ” ,涉及算法、對象設計、概率智力題等,面試神器。
《劍指 offer 》,刷題必備,面試利器。
《編程之美》,你會發現各大公司的算法題好像似曾相似。
《大話數據結構》、《算法》、《算法導論》,算法是我的弱項,以我的教訓建議算法長期準備。
實際上,上面的書目我表示也只看了 50% 不到,大神的作品需要反覆研讀,比如《 Effective Java》。

個人體會, Hadoop 是個“大寶貝”,尤其對於我這樣零實習,少項目的非科班學生,在面試的時候化解了很多面試官的刁難問題。它是 DT 時代的關鍵技術,包含了太多大神的心血和智慧,深入理解,不僅是 Java 與編程的提升,而且提高架構與系統設計的能力。抓蛇抓七寸,對於 Hadoop 一樣,其中關鍵的組件有分佈式文件系統、分佈式計算框架、非關係型數據庫、分佈式協調服務等,而各個組件都有其核心架構與關鍵技術點,認清架構,由廣度到深度,各個擊破。理論加實踐,建議在 Debug 中探索工作機制。

最後推薦一些技術資源, lintcode 、 leetcode 刷題必備(適可而止,不同於北美 FLAG 和一些startup 公司,國內的面試往往需要很多應用技術,也就是項目), July 的 csdn 博客 “ 結構之法 算法之道 ” ,數據庫可以學習淘寶沈詢的視頻和博客,操作系統( Linux 進程管理與調度、內核同步、虛擬文件系統、內存管理、進程地址空間等),推薦網站: 牛客網, 七月算法,博客在線, ImportNew 、 ITeye、 InfoQ 、 csdn 、博客園, IBM developerWorks 等。另外,可以關注技術大牛的微博,開開眼界也是極好的,例如寒冬 winter 、淘寶沈詢、淘叔度、淘寶丁奇、阿里正祥、淘寶正明、淘寶褚霸、RednaxelaFX 、 2gua 等大神。
對於非應屆生,有足夠的時間,修煉內功,切忌基礎不牢就模仿武功招數。對於應屆生,時間不多,可以刷刷題,多看看面經,磨磨槍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章