最近面試了多家網際網路公司,最終收到了阿里offer,面試前在網上也蒐集了面試題目,但有些不是過時的,就是題目雜亂,歸納不繫統。 這次面試過後,我把面試上阿里的面試過程整理了一下,當做是一個總結,後來有朋友問我要面試記錄,索性發布出來,跟大家一起分享。
因為之前有同事面試過京東、美團、滴滴等大型網際網路公司,將面試題目整理好分享給我,如果大家感興趣的話,推薦大家關注微信公眾號Java資訊庫,裡面整理有演算法面試題、BAT面試題以及面試技巧等。
一面
一面沒有技術面直接就是組長面,首先是自我介紹,之後問了專案內容,我就說了下即時通訊和視訊加工兩個模組。他讓我畫出模組的架構圖,這個建議大家準備一下,阿里和百度都有要求應聘者畫模組圖考察應聘者的開發層次和思路。本人沒什麼準備,不過當時設計評審時的UML還記著,就把模組圖和類圖畫了下。
面試官又問,有沒有遇到困難;我說有,效能瓶頸、卡頓的問題、瞬時資訊量過大導致的UI卡死;他就問如何解決的,我說由實時重新整理改為定時重新整理;他問還有沒有更好的實現方式,我回答有用任務佇列。
我們又爭論了下任務佇列的設計應該用先進先出還是後進先出。這時候本人已經忘記是來面試的了,只想爭贏,語速越來越快,聲音也越來越大。他質疑我這個機制在效率調優上沒有意義,因為系統會進行cell快取;我說在中間的時候系統快取可以生效,在最底部的時候就失效了,就會卡頓。最後還是我爭贏了,時間就這麼不知不覺中過了一個小時。
問通訊訊息騰訊是如何做的,我說不知道我猜測是這麼做的巴拉巴拉;問了我濾鏡的使用和原理,如何美白,我說修改OpenGL的值就可以了,問如何進行視訊合成,這個很簡單把視訊和音訊軌道抽出來再用composition合成就可以了。問了下加水印、也是從檔案中把視訊軌道layer抽出再把圖片layer加在這個layer上就可以了。
把開始時間和持續時間、幀率設定好就ok了,又問了下為什麼來面試,一面官最後問我工作地點。
二面
一面結束讓我去休息之後是二面,二面的面試官很nice。讓我做自我介紹之前竟然先做了自我介紹,他負責的部門是核心部門。
面試的內容跟一面差不多。讓我在白板上畫我設計的系統架構圖之後就是講解,問了我的職業規劃,我說現階段還是想寫程式碼。他問多久,我說2年吧,又問我對管理崗位怎麼看,我說一個好的管理首先要能幫助組員解決問題,我現在水平還達不到這個境界,想多寫點程式碼,程式碼量上去後設計能更合理一些,像這個設計當時有幾個優化點沒考慮到,有點遺憾。面試官問我有什麼問題之後,我就詢問了下他們部門的情況和企業文化,面試官好像比較滿意,就讓我去hr面,還特別強調就是跟hr聊聊不算面試。
hr面過程不表,就是問了下杭州房價問題,問我能不能來杭州發展,我說我考慮下,還不知道你們會不會錄用,閒扯了半個小時,就打道回府了。3天后收到阿里的offer通知介紹,給的薪水又一次超過了本人的心理預期,還有本人一直夢寐以求的期權。
阿里的面試跟騰訊百度都不同,感覺更注重專案實踐一些。總結來說BAT的技術面都差不多,只要把內功和外功都修煉好了再配合點實戰經驗基本上都可以應付三大的面試了。
面試的核心流程
技術一面、技術二面(組長面)、總監面、hr面,騰訊會多一個經理面;但是一般總監認為可行的人,9成的應聘者都會通過經理面的,除非發現嚴重的撒謊行為;hr面就是走過場,刷人的機率基本上為零。以前招聘過一個同學,hr想刷掉,理由是沒有大公司經驗,被我們組長一頓叼,說這個人各方面都很適合又踏實,如果你們覺得這個不行你們就要負責招一個你們認為行的,否則我們工作做不下去了,hr就軟了。後來事實證明,這個同事工作完成的相當好,人的能力跟公司大小沒關係。最難的就是二三面,人也基本上是這兩面中刷下去的,大家一定要小心。我個人的經驗來看,總監越嚴肅通過的機率越大,越客氣就越危險。
面試準確講不應該叫面試應該叫面談,就是interview,勞資雙方坐下來談談聊聊,互相瞭解。我們程式設計師作為技術工作者不是去求職的,只是去看看你的機會,你可以保留你的職位,我保留我的做事方法。
面試題目
-
ThreadLocal有什麼缺陷?如果是執行緒池裡的執行緒用ThreadLocal會有什麼問題?
-
類的載入機制,為什麼要用雙親委託?如何打破雙親委託載入機制
-
如果有一個100萬的qps專案,你會從哪些方面考慮系統的設計?
-
你平時經常用到的設計模式有哪些?
-
熟悉Reactive開發模式嗎?
-
你熟悉的分散式技術有哪些?瞭解他們底層的實現機制嗎?
-
Springcloud 各個元件的執行機制是什麼?
-
TreeMap與TreeSet實現原理是什麼?
-
Array和ArrayList的區別?
-
JVM的資料區有哪些,作用是什麼?
-
JVM堆記憶體結構是怎樣的?哪些情況會觸發GC?會觸發哪些GC?
-
資料庫你們是怎麼優化的?
-
synchronization 和Lock有什麼區別?
-
用過反向代理伺服器嗎?用來做什麼?nginx負載均衡有哪些引數?
-
你熟悉的訊息對列中介軟體的實現原理是什麼?和其他訊息中間對比,有什麼優勢?
-
Poll與ePool的區別?
-
BIO與NIO有什麼區別?
-
手寫程式碼題,不能是虛擬碼,能編譯通過: 有一個變數list,元素存放叢集的例項個數,有一個變數batch批次,根據批次均勻部署應用到叢集的所有例項。
-
你的職業規劃?年薪期望薪資?
關於Java行業前景
隨著IT培訓業的持續發展和大量的應屆畢業生進入社會,Java程式設計師面臨的競爭壓力越來越大。那麼,作為一名Java程式設計師,怎樣努力才能快速成長為一名高階的程式設計師或者架構師,或者說一名優秀的高階架構師應該有怎樣的技術知識體系,這不僅是一個剛剛踏入職場的初級程式設計師,也是工作三五年之後開始迷茫的老程式設計師,都必須要面對和想明白的問題。
為了幫助大家少走彎路,我請一線網際網路工作過的同事總結出一套技術體系,由於內容龐大,特整理出一套視訊。主要是針對BAT一線大型網際網路公司的面試,涵蓋Java工程化、高效能及分散式、效能調優、Spring、Netty原始碼分析和大資料等面試技巧,想要了解詳情的可以加入Java後端技術群:819940388,免費的大型網際網路Java技術視訊分享給大家。