一、前言
這兩個月聽的最多的兩個詞就是 疫情 和 裁員 ,作為被裁大軍中的一員,我的關鍵詞就是 遺憾 和 還好 。
遺憾的是現在的項目還有很多想象的空間,但是就要走向盡頭; 還好 的是畢業幾年來一直沒有以一種打工的心态在工作,寒冬就寒冬,怕個錘子。
最近在整理面試方面的文章,因為有小夥伴問我是怎麼準備面試的,也有許多小夥伴正面臨着面試,我也想談談我最近的一些想法和計劃,大家一起讨論。
整體分為以下兩個方面:
自我介紹 & 項目經驗
知識儲備
二、自我介紹 & 項目經驗
2.1 自我介紹
這個是第一個要準備的東西,面試多幾次,慢慢完善就好,重要的是 有條理 。可以從下面幾點入手,關鍵是第二和第三點:
之前工作的公司、崗位及工作方向。
團隊構成,在團隊中的位置及承擔的責任。
為團隊做出的主要貢獻,對于這部分涉及到的 項目經曆以及延伸出的知識點 一定要重點準備。
能夠從側面反映出你優點的愛好。
如果能從其它管道了解到你招人的部門所做的東西,那麼也可以談談對他們的一些了解以及自己的願望,沒有就算了,這個是可選項。
2.2 項目經驗
項目經驗這塊因人而異,把覺得做的有亮點的東西挑出來,從四個方面來準備:
功能子產品的實作
達到了什麼效果
遇到了什麼問題,是如何解決的
涉及到的相關知識點
項目經驗和知識點其實是一個雙向的過程,要 試圖去找到它們之間的聯系 :
談到項目經驗的時候,可以說:做完 xx 之後,我還去了解了一下 yy 背後的原理,xxx,這裡展現的是 你是否有求知欲 。
談到知識點的時候,可以說:yy 的原理是這樣的,在 xx 項目中我是如何應用它來解決問題的,這裡展現的是 你是否具備把知識付諸實踐的能力 。
2.3 遇到的問題
一定要準備,很重要! 問題涉及到知識點也要都弄清楚。
平時項目可能比較忙,遇到問題急着解決。但是要學着先把問題先記錄下來,之後再按下面的步驟進行總結,有條理地進行闡述:
遇到問題
分析過程
解決方案
結果
三、知識儲備
很多人準備面試的時候,大多數就會這樣的,打開百度,輸入 “Android 面試題”,找幾個多的開始看。
這雖然看起來很自然,但是并不是一種 健康的方式 ,面試題的作用應當是查缺補漏,上學的時候也不是直接發習題冊然後對着答案學習吧?
知乎上有個問題,叫做 如何高效學習 ,裡面有一個回答我覺得很符合我自己的觀點,就是 建立起自己的知識體系 ,建立知識體系的目的在于:
鞏固記憶。
認識自己,找到自己的優勢及不足。
把握複習的進度。
經驗總結。
目前我自己的總結的會分為以下幾個大點:
3.1 Java 基礎知識
面向對象的基本思想
Object 類相關: Object 類的幾個關鍵函數、 String 涉及到的常量池概念,序列化 & 反序列化。
重要關鍵字: final 、 static 。
内部類:内部類的分類、應用場景、内部類編譯成 class 後是怎麼樣的。
抽象類 & 接口:差別、應用場景。
編碼:編碼的目的、分類。
異常:異常體系、自定義異常。
注解:注解的基本概念、分類、編譯時注解 & 運作時注解。
容器:重要容器的内部實作、容器間的對比。
記憶體模型。
垃圾回收。
類加載的過程。
泛型:分類、通配符 & 上下邊界、泛型擦除。
反射:使用。
3.2 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 的權限管理機制。
3.3 圖檔
Bitmap 相關: Bitmap 的大小計算、品質、 inJustDecodeBounds 、 inBitmap 。
幾種圖檔格式的對比、壓縮。
大圖加載: BitmapRegionDecoder
3.4 算法
别無捷徑,刷題,但是刷題的時候,要按照題的類型去總結。
3.5 開源架構
RxJava :操作符的應用場景、重點操作符的内部實作、和 RxJava 的對比。
Glide :流程、緩存相關的實作。
Retrofit :流程、動态代理 & 注解解析。
OkHttp :流程、隊列實作、緩存實作。
3.6 性能
性能優化技巧:啟動速度優化、布局優化、記憶體優化、電量優化、 APK 大小優化、清單滑動優化。
性能優化工具: TraceView 、 Systrace 、調試 GPU 過度繪制 & GPU 呈現模式分析、 Hierarchy Viewer 、 MAT 、 Memory Monitor & Heap Viewer & Allocation Tracker 、 LeakCanary 、 Lint 。
ANR
ANR 原因
ANR 産生過程源碼分析
資訊收集過程
trace 檔案分析
分析基本流程
具體示例
如何避免産生 ANR
性能實踐:解決過的性能問題,從 遇到問題、分析問題、解決問題、結果 四個點進行闡述。
3.7 View
繪制流程: measure 、 layout 、 draw 三個關鍵流程。
事件分發:事件分發的原理、處理過的滑動沖突問題。
自定義 View : Canvas & Path ,實作過的比較複雜的自定義 View 。
3.8 架構
MVP : MVP 的思想 & 優劣勢、在項目中的應用、
3.9 源碼
AMS
WMS
Binder
應用啟動流程
APK 相關知識點
APK 構成: resources.arsc 組成、 AndroidManifest.xml 、 aapt 作用及原理
APK 打包過程
APK 安裝過程
APK 簽名 & 校驗原理
dexopt 原理
3.10 網絡
基礎知識:看一下對于 <<計算機網絡>> ,重點是網絡分層模型、 TCP/UDP 、 HTTP/HTTPS 。
3.11 設計模式
按照 23 種網絡模型、三個分類進行總結,每種設計模式包含以下三個方面,至少要準備常用的幾個:
UML
Android
3.12 多線程
看并發程式設計的藝術,這本書的目錄就是多線程最好的知識體系。
遇到過的多線程問題、怎麼解決的。
3.13 Gradle
常用配置。
多管道打包。
3.14 插件化
插件化的核心思想。
幾種插件化架構實作的原理。
3.15 元件化
Arouter
3.16 Kotlin
有用到的可以看看。
3.17 多媒體
音頻、視訊播放。
3.18 大前端
ReactNative 、 Flutter :沒學過的可以了解一下思想。
3.19 JNI
調用實作方式。
四、結語
我一直覺得技術面試不是考試,考前背背題,發給你一張考卷,答完交卷等通知。
首先,技術面試是一個 認識自己 的過程,知道自己和外面世界的差距。
更重要的是,技術面試是一個雙向了解的過程,要讓對方發現你的閃光點,同時也要 試圖去找到對方的閃光點 ,因為他以後可能就是你的同僚或者上司,是以,面試官問你有什麼問題的時候,不要說沒有了,要去試圖了解他的工作内容、了解這個團隊的氛圍。
找工作無非就是看三點:和什麼人、做什麼事、給多少錢,要給這三者在自己的心裡劃分一個比例。
今天關于面試的分享就到這裡,還是那句話,有些東西你不僅要懂,而且要能夠很好地表達出來,能夠讓面試官認可你的了解,例如Handler機制,這個是面試必問之題。有些晦澀的點,或許它隻活在面試當中,實際工作當中你壓根不會用到它,但是你要知道它是什麼東西。