前言
不知不覺2020年已經快要過去了,然而受到疫情影響,之前的公司四月份都沒有正式復工,於是只能被迫走上了重新找工作的道路
開篇
在完全沒有準備的情況下面了幾家公司,由於好幾個月沒有工作了,基本上以前做過的技術細節都記得不是很清楚了,以至於面試的情況非常不理想。由此,這段時間心情一直起起伏伏,甚至產生了對自己技術能力的懷疑,以及擔心自己到底能否找到一份工作了。
從事Android開發也三年有餘了,然而在投簡歷過程中也是遇到了很多問題,比如簡歷上的經歷跟公司需的不匹配;比如自身的技術面過窄,覺得自己學了很多,但是過於理論化而沒有落實到實踐當中;再比對之前做過的項目細節把握的不好,也沒有去深究,都導致了面試當中出現的一系列問題。
然而生活還是要繼續,工作也要繼續找下去。雖然自己也面臨也寫生活上的壓力,但是這也不是停滯不前的理由和藉口。寫這個博客的目的也很明確,幫助自己梳理相關的技術,直面自己內心的恐懼,以更好的準備面試,找到一份滿意的工作。
準備
1. 簡歷
在投簡歷的過程中,跟HR交流有時直接說“經驗不匹配”。自我感覺還是簡歷寫的有問題,這種情況下,簡歷盲投感覺已經不合適了,還是要有針對性的對簡歷進行定製化,先過簡歷關。
2. 技術點
既然毫無準備的裸面行不通,那就開始查漏補缺,準備相關的知識點吧。
作爲一個三年多的Android研發,自認爲還是積累了一定的技術實力和能力的,只是沒有系統,深入的整理過自己的項目技術點。
3. 拓展
針對面試中問的一些問題,沒有思路去回答的,面試結束後可以針對這些問題去拓展和深挖,避免下次面試再出現相同的情況。
思考
這次的面試目標是「Android高工」,那麼要思考的是,這個「高」,究竟高在哪裏?我們以一個什麼樣的工作經驗,技術水平,思想深度,才能達到這個高度,這個是要思考的,在面試和準備過程中我也不斷的反思和總結。
面試經歷
後來複習了三個月左右。7月底開始邊投簡歷邊進行復習掃尾、鞏固,大大小小的公司投出了大概三四十份簡歷。收到面試大概20場。下面我挑了幾個較好的和一些大廠的真題面經分享一下。
小建議:
面試某家公司前,最好是要先了解你所面試的工作崗位,公司的業務,主要是做哪個方面的,這樣可以更加具有針對性的複習和準備。
華潤集團下某借貸子公司
一家借貸公司,肯定對APP安全方面比較着重。
- Activity 的啓動過程
- Broadcast 註冊方式與區別
- 磁盤緩存怎麼實現
- 進程間通信原理、Binder 機制原理
- APK加固、dex文件加密實現、原理
- 說一下類加載的過程、機制,爲什麼要這樣設計?
- 談談你對安卓簽名的理解。
- 對於提高app的安全性,你有哪些建議或方法?
騰訊新聞
大概就是UI、頁面流暢度、適配這些方面吧。
- 如何將一個Activity設置成窗口的樣式。
- Android中跨進程通訊的幾種方式
- 屏幕適配的處理技巧都有哪些?
- ListView卡頓原因及處理
- 廣播傳輸的數據是否有限制,是多少,爲什麼要限制?
- 如何防止過度繪製
- View的回執流程
- 說說對Context的理解
- 卡頓的一整套解決方案是怎麼做的?
某知名外賣APP
佈局、頁面、高級UI之類的
- View的繪製過程,onMeasure方法中兩個參數的含義;
- 你在做佈局優化的過程中用到了哪些工具?
- 做完佈局優化有哪些成果產出?
- 看過哪些源碼
- 混合開發有沒有做過
- 大致說一下自己做過最滿意的項目吧
字節跳動抖音部
音視頻、算法
- 靜態註冊和動態註冊的原理分別說一下吧
- JNI是如何訪問java中的方法和字段的?
- JNI規範中定義了哪些引用,區別是什麼
- 算法:獲取單鏈表倒數第k個元素
- 單例實現線程的同步的要求?
- LaunchMode應用場景
- 計算一個view的嵌套層級
算法:
某上市公司(母嬰類產品)
- 請介紹下ContentProvider是如何實現數據共享的。
- android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。
- 算法:複製含有隨機指針節點的鏈表
- Android系統中GC什麼情況下會出現內存泄露呢?
- 三次握手四次揮手說一下吧
- HashMap 、HashTable原理?
- Java 虛擬機&內存結構&GC&類加載&四種引用&動態代理
- 進程保活怎麼做
合資外企
- LeakCanary 原理
- OOM 場景及規避
- App 安裝過程的怎樣的
- ANR是什麼?怎樣避免和解決ANR
- MVC MVP MVVM原理和區別
- 算法:2000萬個整數,找出第五十大的數字?
- App 是如何沙箱化,爲什麼要這麼做?
- flutter用過嗎?
- Flutter 如何與 Android iOS 通信?
志安科技
類似於華爲海思,對底層很看重。
- HashMap 原理
- andorid的Binder機制是怎麼樣的
- Linux的原理有了解嗎
- 有看過哪些源碼,有深入到C++中嗎,C++熟練嗎?
- 熟悉framework哪些模塊的源碼,對圖像性能優化有了解嗎
- 以後的技術發展方向是如何的
阿里巴巴P6崗
- HTTP2.0與3.0的區別
- 項目中常用的設計模式
- https中哪裏用了對稱加密,哪裏用了非對稱加密,對加密算法(如RSA)等是否有了解?
- 瞭解過Android虛擬機有哪些?
- 對Dalvik、ART虛擬機有什麼瞭解?
- Gradle自動補丁包生成原理
- Hybrid 通信原理是什麼,有做研究嗎?
- 來介紹下你最成熟的一個項目是哪個?
- 能簡單的畫一下你這個項目的架構圖嗎?
- 除了MVP,MVC,MVVM外還有什麼其他的架構方式?
- 動態編譯和反射相比,除了性能方面外還有什麼區別?
- 死鎖如何避免、處理?
- Flutter中的Widget、State、Context 的核心概念?是爲了解決什麼問題?
- 卡頓 {如何檢測卡頓,卡頓原理是什麼,怎麼判斷頁面響應卡頓還是邏輯處理造成的卡頓} ,BlockCanary 的原理
- 算法:雙鏈表翻轉、寫出你所知道的排序算法及時空複雜度,穩定性
最後
多餘的話就不講了,接下來將分享我面試之旅的複習過程,如果你也在準備面試但是不知道怎麼高效複習,可以參考一下我的複習路線,有任何問題也歡迎一起互相交流,加油吧!
這裏給大家提供一個方向,進行體系化的學習:
1、看視頻進行系統學習
這幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因爲Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面。關於視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時。
另外,我自己也珍藏了好幾套視頻,有需要的我也可以分享給你。
2、進行系統梳理知識,提升儲備
客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。
系統學習方向:
架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO
Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化
360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化
解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack
NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發
微信小程序:小程序介紹+UI開發+API操作+微信對接
Hybrid 開發與Flutter:Html5項目實戰+Flutter進階
知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。
3、讀源碼,看實戰筆記,學習大神思路
“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。
主要內含微信 MMKV 源碼、AsyncTask 源碼、Volley 源碼、Retrofit源碼、OkHttp 源碼等等。
4、面試前夕,刷題衝刺
面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。
關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:
總結
改變人生,沒有什麼捷徑可言,這條路需要自己親自去走一走,只有深入思考,不斷反思總結,保持學習的熱情,一步一步構建自己完整的知識體系,纔是最終的制勝之道,也是程序員應該承擔的使命。
以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。