2019寒冬,被裁後一週 10 家面試經歷

2019 年對我來說是最幸運的一年,很多小夥伴已經知道了,我多了一個「小情人」。然而,剛忙完回到公司的第二週,我接到了最殘酷的通知,公司經濟狀況不佳 —— 裁員!

雖然可以選擇降薪留下來,但是社保公積金最低,還需要996,無奈只好選告別了待了三年之久的 xxx,沒有 n+1,沒有 xxx,mmp。

由於離職時間點比較尷尬,馬上就是中秋節,剛好可以放鬆下回家陪陪家人。

中秋過後,嘗試投了幾份簡歷,但是效果不太好,面試機會也不多,可能是由於馬上就是國慶長假的緣故(也只能這樣安慰下自己)。

優貝在線

  • Android 項目中 asset 目錄和 res 目錄有什麼區別
  • 面向對象的特徵,並舉例說明面向對象的過程
  • 如何結束一個正在運行的線程
  • 簡述 MVC 和 MVP,並說一下 MVP 的優點
  • 如何獲取某個 View 的大小並動態改變 View 的大小
  • join()、wait()、interrupt()
  • 二維數組旋轉
  • 有一羣人A與B有關係,B與C有關係…分成兩隊,讓彼此都有關係

這是一個神奇的公司,只怪自己太菜筆試都沒有過,出師不利啊。然而奇怪的是國慶後,該公司的HR找了我不下3次。

三節課

  • String、StringBuilder、StringBuffer 區別
  • ArrayMap、HashMap、SparseArray 原理
  • Fragment 添加方式,add、replace、show 區別
  • volatile 關鍵字作用
  • Binder 機制
  • HTTP 版本之間區別
  • invalidate()、requestLayout() 區別
  • View 繪製流程
  • 事件分發機制
  • 渲染優化
  • ArrayList 怎麼實現線程安全

必要商城

  • Android 線程間通訊方式有哪些?
  • 類B繼承A,A、B兩個類中都有靜態變量、成員變量、靜態代碼塊、構造方法執行順序是什麼?
  • Java代碼執行時內存狀況
  • Activity生命週期其他函數
  • View什麼時候繪製完成?
  • 如何獲取一個View的尺寸?

展心展力

  • Handler 機制,一個線程幾個 Looper,幾個 Handler,Looper 如何確定是哪個 Handler?
  • 內存溢出、內存泄漏的關係
  • volatile、synchronized關鍵字的區別
  • 垃圾回收機制,垃圾回收算法優缺點
  • Java內存模型的理解
  • HashMap實現原理,如何計算key的index,存儲方式
  • 一個無限單向鏈表如何計算長度,如果有環如何計算長度
  • RelativeLayout與LinerLayout的區別
  • View繪製原理
  • 事件分發機制,Activity怎麼處理的

團車網

  • 自定義 View 流程
  • View 繪製原理
  • 事件分發機制
  • AMS、WMS
  • Handler 機制
  • JMM
  • 鎖機制
  • AQS
  • 內存優化怎麼優化
  • 項目中遇到的最大的問題是什麼?怎麼解決的
  • 如果遇到項目進度無法推進,你怎麼做的
  • 你對近五年的規劃

某課

  • Handler postDelay() 然後finish當前Activity會怎麼樣?
  • View 繪製流程
  • invalidate()、postInvalidate()、requestLayout()
  • Tinker 爲什麼需要重啓
  • volatile、synchronized
  • Java內存模型

這是我迄今體驗最差的面試沒有之一,面試官特別裝逼,一直問我 API 細節,方法裏有什麼代碼(也怪自己太菜,一年多沒做 Android了)。最後面試官竟然 JVM 運行時內存區域和 JMM 都分不清,我實在忍不住了反問了一句:公司難道是在招 API 工程師嗎?

諸葛找房

  • 事件分發機制
  • HTTP 響應嗎
  • Handler 機制
  • 手寫排序算法
  • 常用設計模式

異鄉好居

  • http https
  • js webview交互
  • handler爲什麼不卡死
  • App啓動流程
  • 自定義view過程
  • 動畫原理
  • 事件分發機制
  • 混淆怎麼處理
  • 設計模式
  • 對跨平臺技術的瞭解

FineChart

  • HTTP、HTTPS區別
  • HTTP報文
  • 手寫反轉鏈表
  • 手寫單例模式
  • volatile關鍵字原理
  • 事件分發機制
  • App啓動流程
  • 項目天氣曲線實現原理
  • 第三方開源庫實現原理
  • 線程池原理
  • wait()、sleep()區別
  • 項目中最大的困難是什麼?怎麼解決的?
  • 常用集合類實現原理
  • ConcurrentHashMap原理

阿里體育

電面

  • List、Map、Set 哪個能存null,哪個能重複?
  • 補間動畫與屬性動畫的區別
  • Handler 機制

一面

  • 怎麼實現View懸停?
  • TCP怎麼做長連接?
  • 網絡優化
  • 熱修復原理
  • Instant Run原理
  • 視頻做過嗎?
  • 相機做過嗎?
  • LinkedHashMap、HashMap實現原理,區別是什麼?

二面

  • Android與iOS相比有什麼差別
  • Android與iOS系統內存管理機制瞭解嗎?
  • 常見算法瞭解哪些,時間複雜度是什麼?
  • 項目中遇到的困難是什麼?怎麼解決的?
  • 你最大的優勢是什麼?
  • 對於其他同事,爲什麼你覺得你這個優勢最突出?

不得不承認阿里實力還是很強的,也可能我投的崗位期望 P7 以上水平的緣故,被虐的很慘。突然感覺這幾年都荒廢了,選擇大於努力,一定要選擇好的方向,比如我選擇小程序就是一個錯誤。

多點科技

一面

  • HashMap、ArrayMap
  • Handler、IdleHandler、postDelay
  • View 繪製原理
  • 事件分發機制
  • 如果子View已經處理了事件,父View怎麼攔截子View事件
  • Binder機制
  • 線程池原理
  • 垃圾回收機制
  • 類加載機制

二面

  • OkHttp、Retrofit、Glide、ButterKnife、EventBus、RxJava
  • Jetpack、LiveData、ViewModel
  • ArrayList、LinkedList
  • Material Design
  • Java併發編程(JMM)
  • MVP、MVVM區別

HR面

  • 期望什麼樣的領導?
  • 期望加入什麼樣的公司?
  • 拿到幾個Offer了?
  • 期望薪資?

董事之一

  • 介紹了下公司的發展前景,公司的優勢
  • 對未來工作的期望?
  • 聊了將近一個小時…

美餐網

  • 怎麼判斷二叉搜索樹是否合法,白板手寫出解法
  • 給出一個業務場景怎麼處理

你沒有看錯,就只有兩道面試題,白板手寫代碼,這是我遇到的最奇葩的公司了,最後還說我代碼寫的不講究(這 tm 是面試吧,我已經說了由於篇幅有限,一些細節就忽略了),太浪費時間了。

360

一面

  • 線程狀態轉換圖
  • Activity生命週期,一個Activity啓動另外一個Activity生命週期函數調用
  • Activity啓動模式,onNewIntent() 調用時機
  • 動畫有哪些,實現原理
  • setContentView()後面的流程
  • Handler機制,Looper與ANR
  • 過度重繪、UI卡頓
  • WindowManager.addView(),View.getParent()是誰?
  • JMM理解
  • Lock機制

二面

  • 內存泄露、內存溢出
  • 類加載機制、雙親委派模型
  • CAS
  • 有多個線程1、2、3、4,1、2、3 並行完後與 4 串行,至少 3 種方式實現
  • 網絡參考模型
  • HTTP、HTTPS傳輸過程
  • TCP三次握手、四次揮手
  • 用過哪些設計模式
  • 根據簡歷多渠道包怎麼構建的
  • 反射原理

三面

  • 一般都是根據簡歷問
  • 對大前端技術的瞭解
  • 類加載機制
  • 對JDK個版本差異的瞭解
  • Android系統啓動流程
  • AMS、WMS
  • 對Framework層源碼的瞭解,爲什麼這麼設計,優缺點

關於準備

每個人應聘的職位級別不一樣,需要準備的範圍也有所不同。我應聘的是高級職位,主要準備了以下幾點:

  • Java 基礎

一般都會問 Java 虛擬機相關知識:類加載機制、雙親委派模型、垃圾回收機制、運行時內存區域、註解、泛型、反射等等。強烈建議精讀一下《深入理解 Java 虛擬機》這本書。

Java 併發編程也是高級必問知識:Thread生命週期、JMM、volatile、synchronizied、final、JUC、Lock、線程池等等。推薦看一下《Java 併發編程的藝術》。

  • Android 基礎

這部分內容比較多,還是需要平時多積累,養成看源碼的習慣。

現在一般都不僅僅問原理是什麼了,比如 View 繪製原理會問 requestLayout() 和 invalidate() 什麼區別?什麼情況下 requestLayout() 會執行 onDraw() 方法?

Handler 機制大家都會說,網上找找都能找到,現在會問一個線程幾個 Looper,幾個 Handler?Looper 中的死循環爲什麼不會卡死主線程?IdleHandler 的原理?發送延時消息怎麼處理的?

如果你能從 Handler 答出 epoll 機制,接下來會問 epoll 機制的原理,有沒有看過源碼?

高級崗位 Framework 層原理肯定逃不過的,系統啓動流程、Binder、AMS、WMS 都是最基礎的,最好有一個自己深入研究的方向,比如 SurfaceFlinger。

進階一定要看剛哥的《Android 開發藝術探索》必備,Framework 部分《Android 內核剖析》、《Android 源碼情景解析》、《深入理解 Android》系列等都是很不錯的書籍。

另外強烈推薦張紹文的《Android開發高手課》。

  • 網絡基礎

面試中一般會問 HTTP 的三次握手、四次揮手過程,以及爲什麼?HTTPS 的通訊過程?等等。

網絡是個大方向,對於 Android 工程師來說,常見的概念必須要瞭解的,當然深入研究一下也是很不錯的加分項。就像直播,網絡優化等方面都離不開網絡知識。

推薦看一下《圖解 HTTP》、《圖解 TCP/IP》,向深入研究可以看《TCP/IP 詳解》、《UNIX 網絡編程》。

  • 數據結構與算法

數據結構計算機專業的一般都是必修課,網上資料很多這裏就不推薦了。

面試中數據結構一般會問 Java 集合類:ArrayList、HashMap、ConcurrentHashMap 等等,常見的高頻算法題一定要準備下。

算法可以看看《算法》、《算法導論》、覃超的《算法面試通關 40 講》、刷下 LeetCode。

  • 設計模式與架構

設計模式一般會問你在項目中常用的設計模式有那些?等你說完之後會問你怎麼用的,什麼場景用的?它的優缺點是什麼?遵循了什麼原則?違背了什麼原則?…

架構 MVC、MVP、MVVM 爛大街的問題,一般會問它們的優缺點各是什麼?

總結

雖然後面還有好幾家面試,也有像豹廠這樣的很不錯的公司。但不得不承認一天面兩家,一週面 10 家實在太累了。

在收到大數字公司的 Offer 後就沒有再面了,加上 HR 將近五輪的面試聊得過程都很愉快,大數字公司也是我比較理想的公司。

雖然在之前也收到了幾家很不錯 Offer,相比之下還是大數字公司比較適合我,接下里的幾年也需要好好沉澱一下技術了。

經過這一次的被動面試經歷,我個人感受有以下幾點:

  • 一定不要裸辭

如果是裸辭找工作,HR 一般都會問什麼時候離職的。如果手裏沒有 Offer,就很被動了,很有可能被壓薪資。主動權一定要掌握在自己手中。

  • 選擇大於努力

即使很努力如果方向錯了就是浪費時間,就像我選擇了小程序就是個錯誤(大前端坑太多,入坑需謹慎)。我的建議是多深入研究一些以不變應萬變的技能。

  • 學歷與履歷

雖然說能力很重要,但學歷是敲門磚(HR 就看這個)。如果連面試機會都沒有,還怎麼談然後?如果學歷不突出有很好的大廠履歷也很不錯,貌似是個蛋生雞,雞生蛋的問題。

  • 充分準備

一些基礎知識和理論肯定是要背的,要理解的背,用自己的語言總結一下背下來。

雖然 Android 沒有前幾年火熱了,已經過去了會四大組件就能找到高薪職位的時代了。這隻能說明 Android 中級以下的崗位飽和了,現在高級工程師還是比較缺少的,我能明顯感覺到國慶後多了很多高級職位,所以努力讓自己成爲高級工程師纔是最重要的。

好了,希望對大家有所幫助。

我的 GitHub

github.com/jeanboydev

我的公衆號

歡迎關注我的公衆號,分享各種技術乾貨,各種學習資料,職業發展和行業動態。

Android 波斯灣

技術交流羣

歡迎加入技術交流羣,來一起交流學習。

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