我的杭州面試之旅

寫在前面

本人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的相關知識嗎?”。相對於什麼都不說,出現冷場尷尬的情況,這樣肯定會好一點。

寫在最後

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

一起加油,共勉!

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