1. 程式人生 > >我的杭州面試之旅

我的杭州面試之旅

寫在前面

本人2015年畢業於普通一本院校計算機專業,畢業以後一直從事Android開發,今年打算回杭州落戶定居,也就有了這次杭州面試之旅。面試的崗位是Android開發,因公司業務發展需要,去年10月份開始自己陸續開發上線了兩個微信小程式,所以小程式作為加分項在簡歷裡也有所體現。從4月份準備面試到最終offer確認差不多3個月的時間,覺得還是有必要總結一下。

天貓
天貓的面試來自掘金專欄群兮訣同學的內推,這裡非常感謝他提供這次寶貴的機會。

一面
Retrofit的實現與原理
應用詳細啟動過程,涉及的程序,fork新程序(Linux)
HashMap原理,Hash衝突,併發集合
Android兩種虛擬機器區別與聯絡
GC機制
Activity的onNewIntent
View的繪製原理
類的載入機制
requestLayout,invalidate,postInvalidate區別與聯絡

二面
專案架構
專案詳細優化
專案難點與亮點
Glide快取原始碼,載入原理
網路優化,服務端與客戶端兩方面

三面
ActivityThread工作原理
設計模式與實際應用
adb常用命令列
Android訊息機制
多執行緒同步
GC機制
記憶體洩漏與分析
部落格與GitHub
AndroidP新特性

四面
微信小程式實現原理
Java反射
Binder機制,共享記憶體實現原理
Android動畫
混合開發
筆試(5道題,兩小時)

五面
業務需求分析與建議
黑盒排序演算法

天貓的面試從4月中旬一直到5月中旬,接近一個月的時間。形式包括電話面試,視訊面試,遠端筆試,線上程式設計。最終面試的結果是不匹配,給出的評價是缺少對業務的理解以及對Android原理的深入研究。知道結果的時候,心裡難免有些失落,但我覺得更重要的是過程。我一直認為面試是一個交流學習的機會,能夠有機會與這麼多阿里一線技術專家溝通,對自己來說是一筆很寶貴的經驗。結合這次面試,也認識到自己的不足。像專案的難點亮點,總結的不是很好,光顧著說一些UI效果而沒有去往架構封裝方面去談;像Java反射,這種最基本最不該犯錯的自己答得也不是很好;像微信小程式,自己只知道一個雙執行緒模式而沒有去深入瞭解它的實現執行原理,等等。

有了天貓這次失敗的經驗之後,我沒有著急再去投簡歷面試。5月中旬到6月中旬,結合自己優缺點,更多的是準備與總結。6月底的時候,再次開始了自己的杭州面試之旅。

51信用卡

一面
專案介紹
Retrofit的實現與原理,封裝
Java泛型
設計模式與實際應用
RecyclerView與ListView(快取原理,區別聯絡,優缺點)
ButterKnife實現原理
EventBus實現原理
AOP與APT
RxJava
自定義LayoutManager
巢狀滑動實現原理
混合開發
微信小程式

二面
View的繪製原理
第三方框架選擇標準
專案難點與亮點
外掛化,熱修復
專案優化

51信用卡的整體面試表現還可以,面試官和藹可親,技術氛圍,規模發展也很不錯,值得一去的公司。

美術寶

筆試
具體場景分析Activity的生命週期
Android訊息機制
Bitmap記憶體計算,如何壓縮
SurfaceView與View
Application生命週期
Http與Https
手寫單例模式
手寫演算法程式碼

面試
EventBus實現原理
自定義View裡,onDraw詳細優化
SurfaceView替換方案
高清載入巨圖且支援手勢縮放的實現方案
演算法題目其他思路

美術寶是一家專門做線上教育的平臺,面試方向圖片處理,自定義View多一些。差不多20多分鐘做完的筆試,面試官看完後誇了下筆者基礎不錯便開始了接下來的面試,主要結合平時圖片的處理方案以及自定義View心得交流了不少時間,整體表現還行。

貝貝

一面
專案介紹
架構的搭建與原理
MVC,MVP,MVVM模式理解與使用
微信小程式實現原理
ArrayList與LinkList區別與聯絡
HashMap原始碼,JDK1.8前後詳細區別,負載因子,Fail-Fast機制
執行緒安全的集合及各自實現原理
Synchronized原理
Volatile實現原理
詳細描述應用從點選桌面圖示到首頁Activity展示的流程(應用啟動流程,Activity的Window建立過程)
Glide載入原理
元件化

二面
Fragment的懶載入實現,引數傳遞與儲存
ViewPager的快取實現
Android訊息機制,post與postDelay
ActivityThread工作原理
子執行緒訪問UI的驗證與後果
主執行緒Looper.loop為什麼不會造成死迴圈
Android裡的多執行緒與實現原理
熱修復實現方案
EventBus實現原理
Android記憶體優化與分析
類載入機制,載入過程
元件化實現方案,路由原理
單鏈表新增具體實現

三面
程序與執行緒
專案詳細優化
設計模式與實際應用
ListView與RecyclerView的對比
自定義View的優化
具體場景分析高併發訪問伺服器的解決方案

貝貝的技術實力很強,每一輪面試針對你的回答,面試官總能深入拓展到另外一個層級,對你不瞭解的部分會給你詳細分析解答。元件化這一塊我之前接觸的比較少,只知道實現原理而沒有實際使用過。二面時和麵試官在這一塊討論了不少時間,面試官針對我給出的一些方案進行評價優化,然後再給出自己的解決方案,非常棒的一次面試體驗。技術上貝貝真的很強。

小影

一面
專案介紹,整體框架搭建
Glide載入原理,快取方案,LRU演算法
Glide載入長圖,圖片背景變色
ArrayList與LinkList區別與聯絡
RecyclerView快取原理,區域性重新整理原理
Android事件分發機制
結合具體場景處理滑動衝突事件
Android訊息機制
ActivityThread工作原理

二面
EventBus實現原理
View的繪製原理
熱修復實現原理,解決方案
元件化具體實現
專案詳細優化
Android許可權管理
編碼風格與規範
專案管理

小影主要做的是短視訊編輯,在海外市場與國內市場積累了不少的使用者,在音視訊處理,直播方面做的真的很不錯。

蘑菇街
蘑菇街的面試本來約在週一,因為當時自己正在參加面試無法趕到,面試官很友好的調到了週二。面試官表示之前有看過自己的部落格,所以面試方向更多的是從專案角度切入。包括專案整體架構的搭建(MVP模式的優缺點),第三方框架選擇的理由以及各自實現原理,RecyclerView的自定義LayoutManager,ItemTouchHelper的實現原理,自定義View的流程與注意事項,Android 65K問題,引入第三方包衝突解決方案等。
蘑菇街在微信小程式上擁有非常成熟的體系與產品,在另一個主管看到我有微信小程式開發的經驗後,表示很感興趣,我便給他們展示了自己3月份做的另外一個小程式–LACEUP履型。包括它的架構實現(小程式類似於Android裡的DataBinding模式),組成結構,Flex佈局實現,實現原理,亮點難點,多場景分享,Android專案與微信小程式的互相關聯。期間兩位主管也發表了一些他們的看法,包括微信小程式的擴充套件性,低端機型適配,分包處理等問題。非常愉悅的一次交流。

因為考慮上下班距離的原因推掉的面試有同花順,個推。最後,在所有拿到offer的公司裡面,我選擇了蘑菇街,技術與平臺是自己參考的兩個標準,相信自己的選擇。

分享一些自己的經驗,希望能對你有所幫助:

關於簡歷
自己在離開北京之前,一直在面試別人,深知一份優秀的簡歷有多重要。儘量別用DOC格式,相容性很差,優先考慮PDF格式;職業技能中,掌握的技術,使用的框架並且出現在簡歷上的,一定要充分把握,這是面試官會著重考察的部分;專案經驗中突出亮點難點,這是吸引人的地方;千萬別造假,實事求是,這是一個程式設計師應該具備的品質。

關於機會
拉勾+BOSS直聘+V2EX+內推

關於面試
對於自己掌握的技能,不僅要充分理解並且還要表達清楚,因為最終面試官是通過你的描述來了解你的技術深度。針對需要掌握的知識點,我會提前總結好一套自己的答案,比如像Android事件分發機制,我會從這些角度回答:事件分發的物件,事件分發的順序,事件分發核心方法,事件分發的詳細分析,滑動衝突的處理。這樣條理清楚,回答起來也可以做到不慌不忙。
對於自己沒有掌握的技能,這個在面試中經常遇到,很正常的事情,關鍵是如何應對。我一般會這樣回答:“面試官雖然我不知道X的實現原理,但是在專案中遇到過Y(和X有一定聯絡)的相關問題,可以介紹一下Y的相關知識嗎?”。相對於什麼都不說,出現冷場尷尬的情況,這樣肯定會好一點。

寫在最後

以此來記錄我這三個月的杭州面試之旅。長路漫漫,及時認知,調整,改正。

一起加油,共勉!