我是如何準備 Android 技術面試的(含面試題及答案)

image
00 前言
這兩個月聽的最多的兩個詞就是 寒冬 和 裁員,作為被裁大軍中的一員,我的關鍵詞就是 遺憾 和 還好。
遺憾 的是現在的專案還有很多想象的空間,但是就要走向盡頭;還好 的是畢業幾年來一直沒有以一種打工的心態在工作,寒冬就寒冬,怕個錘子。
最近又開始寫文章了,有小夥伴問我是怎麼準備面試的,我也想談談我最近的一些想法和計劃,大家一起討論。
文末會給大家分享我整理的Android面試專題及答案(這些題我基本都刷了三遍以上,畢竟年前突然被裁心裡是有點迷)
整體分為以下兩個方面:
-
自我介紹 & 專案經驗
-
知識儲備
01 正文
自我介紹 & 專案經驗
-
自我介紹
這個是第一個要準備的東西,面試多幾次,慢慢完善就好,重要的是 有條理。可以從下面幾點入手,關鍵是第二和第三點:
-
之前工作的公司、崗位及工作方向。
-
團隊構成,在團隊中的位置及承擔的責任。
-
為團隊做出的主要貢獻,對於這部分涉及到的 專案經歷以及延伸出的知識點 一定要重點準備。
-
能夠從側面反映出你優點的愛好。
-
如果能從其它渠道瞭解到你招人的部門所做的東西,那麼也可以談談對他們的一些瞭解以及自己的願望,沒有就算了,這個是可選項。
-
專案經驗
專案經驗這塊因人而異,把覺得做的有亮點的東西挑出來,從四個方面來準備:
-
功能模組的實現
-
達到了什麼效果
-
遇到了什麼問題,是如何解決的
-
涉及到的相關知識點
專案經驗和知識點 其實是一個雙向的過程,要 試圖去找到它們之間的聯絡:
-
談到專案經驗的時候,可以說:做完 xx 之後,我還去了解了一下 yy 背後的原理,xxx,這裡體現的是 你是否有求知慾 。
-
談到知識點的時候,可以說:yy 的原理是這樣的,在 xx 專案中我是如何應用它來解決問題的,這裡體現的是 你是否具備把知識付諸實踐的能力。
-
遇到的問題
一定要準備,很重要! 問題涉及到知識點也要都弄清楚。
平時專案可能比較忙,遇到問題急著解決。但是要學著先把問題先記錄下來,之後再按下面的步驟進行總結,有條理地進行闡述:
-
遇到問題
-
分析過程
-
解決方案
-
結果
知識儲備
很多人準備面試的時候,大多數就會這樣的,開啟百度,輸入 “Android 面試題”,找幾個多的開始看。
這雖然看起來很自然,但是並不是一種 健康的方式,面試題的作用應當是查缺補漏,上學的時候也不是直接發習題冊然後對著答案學習吧?
知乎上有個問題,叫做 如何高效學習,裡面有一個回答我覺得很符合我自己的觀點,就是 建立起自己的知識體系,建立知識體系的目的在於:
-
鞏固記憶。
-
認識自己,找到自己的優勢及不足。
-
把握複習的進度。
-
經驗總結。
目前我自己的總結的會分為以下幾個大點,詳細的可以看 Android 知識梳理目錄 - 好吧,這是一個很"幹"的標題。
-
Java 基礎知識
-
面向物件的基本思想
-
Object類相關:Object類的幾個關鍵函式、String涉及到的常量池概念,序列化 & 反序列化。
-
重要關鍵字:final、static。
-
內部類:內部類的分類、應用場景、內部類編譯成class後是怎麼樣的。
-
抽象類 & 介面:區別、應用場景。
-
編碼:編碼的目的、分類。
-
異常:異常體系、自定義異常。
-
註解:註解的基本概念、分類、編譯時註解 & 執行時註解。
-
容器:重要容器的內部實現、容器間的對比。
-
記憶體模型。
-
垃圾回收。
-
類載入的過程。
-
泛型:分類、萬用字元 & 上下邊界、泛型擦除。
-
反射:使用。
-
Android 基礎知識
-
Dalvik、Art虛擬機器
-
Activity:生命週期、launchMode。
-
Fragment:生命週期、懶載入、兩種Adapter之間的區別。
-
BroadcastReceiver:基本概念、廣播分類、許可權。
-
Service:生命週期、onStartCommand的返回值、startService和bindService的區別、相同程序 & 不同程序的互動、IntentService實現原理。
-
重要的工具類 & 原始碼實現:AsyncTask、HandlerThread、Handler、IntentService、LruCache、LinkedHashMap、SparseArray。
-
RecyclerView:快取原理、和ListView的對比、Adapter如何適配多種layout。
-
儲存:資料庫升級 & 優化、ContentProvider,SharePreference。
-
SDK版本升級的相容問題。
-
Android的許可權管理機制。
-
圖片
-
Bitmap相關:Bitmap的大小計算、質量、inJustDecodeBounds、inBitmap。
-
幾種圖片格式的對比、壓縮。
-
大圖載入:BitmapRegionDecoder
-
演算法
-
別無捷徑,刷題,但是刷題的時候,要按照題的型別去總結。
-
開源框架
-
RxJava:操作符的應用場景、重點操作符的內部實現、和RxJava的對比。
-
Glide:流程、快取相關的實現。
-
Retrofit:流程、動態代理 & 註解解析。
-
OkHttp:流程、佇列實現、快取實現。
-
效能
-
效能優化技巧:啟動速度優化、佈局優化、記憶體優化、電量優化、APK大小優化、列表滑動優化。
-
效能優化工具:TraceView、Systrace、除錯GPU過度繪製 & GPU呈現模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker、LeakCanary、Lint。
-
ANR:ANR原理 & 原始碼分析、舉一個處理ANR的例子。
-
效能實踐:解決過的效能問題,從 遇到問題、分析問題、解決問題、結果 四個點進行闡述。
-
View
-
繪製流程:measure、layout、draw三個關鍵流程。
-
事件分發:事件分發的原理、處理過的滑動衝突問題。
-
自定義View:Canvas & Path,實現過的比較複雜的自定義View。
-
架構
-
MVP:MVP的思想 & 優劣勢、在專案中的應用、
-
原始碼
-
AMS
-
WMS
-
Binder
-
應用打包流程
-
應用啟動流程
-
應用安裝流程
-
網路
-
基礎知識:看一下對於 <<計算機網路>> ,重點是網路分層模型、TCP/UDP、HTTP/HTTPS。
-
設計模式
按照23種網路模型、三個分類進行總結,每種設計模式包含以下三個方面,至少要準備常用的幾個:
-
基本概念:UML圖、簡單例子、應用場景、優勢 & 劣勢。
-
Android原始碼中的實現
-
專案中的應用
-
多執行緒
-
看併發程式設計的藝術,這本書的目錄就是多執行緒最好的知識體系。
-
遇到過的多執行緒問題、怎麼解決的。
-
Gradle
-
常用配置。
-
多渠道打包。
-
外掛化
-
外掛化的核心思想。
-
幾種外掛化框架實現的原理。
-
元件化
-
元件化的優勢。
-
Arouter:使用方式、實現原理。
-
Kotlin
-
有用到的可以看看。
-
多媒體
-
音訊、視訊播放。
-
大前端
-
ReactNative、Flutter:沒學過的可以瞭解一下思想。
-
JNI
-
呼叫實現方式。
02 總結
我一直覺得技術面試不是考試,考前背背題,發給你一張考卷,答完交卷等通知。
首先,技術面試是一個 認識自己 的過程,知道自己和外面世界的差距。
更重要的是,技術面試是一個雙向瞭解的過程,要讓對方發現你的閃光點,同時也要 試圖去找到對方的閃光點,因為他以後可能就是你的同事或者領導,所以,面試官問你有什麼問題的時候,不要說沒有了,要去試圖瞭解他的工作內容、瞭解這個團隊的氛圍。
找工作無非就是看三點:和什麼人、做什麼事、給多少錢,要給這三者在自己的心裡劃分一個比例。
最後
學習技術是一條慢長而艱苦的道路,不能靠一時激情,也不是熬幾天幾夜就能學好的,必須養成平時努力學習的習慣。所以:貴在堅持!
最後,祝願即將跳槽和已經開始求職的大家都能找到一份好的工作,這些面試題分享在我的 Android 架構設計③群 群裡,可以來群裡下載,群裡還有一些行業大牛,群裡也會有不定時送書等活動,歡迎前來下載。
【附】相關架構及資料

高階Android資料整理

Android面試資料整理
資料領取
關注+點贊+加群:791358629 免費獲取!
點選連結加入群聊【Android 架構設計③群】: https://jq.qq.com/?_wv=1027&k=5N9wWae
群裡還有往期Android高階架構資料、原始碼、筆記、視訊。高階UI、效能優化、架構師課程、NDK、混合式開發(ReactNative+Weex)微信小程式、Flutter全方面的Android進階實踐技術