1. 前言
春水初盛,垂釣者絡(luò)繹不絕,魚兒按捺不住,拍打著尾鰭紛紛躍出水面,沽個好價。
本篇真實(shí)的記錄了我從 準(zhǔn)備->復(fù)習(xí)->面試 的全過程,分享一些我的真實(shí)經(jīng)驗(yàn),希望能幫到大家。
2. 準(zhǔn)備工作
開始準(zhǔn)備工作之前,首先思考幾個問題:
- 如何準(zhǔn)備
- 需要復(fù)習(xí)哪些東西
- 該怎么復(fù)習(xí)
- 怎么復(fù)習(xí)最高效
- 職業(yè)規(guī)劃
如何準(zhǔn)備,從哪里開始著手?首先是想好自己是否真的需要換工作,確定好需要換之后就開始寫簡歷,將個人技能點(diǎn)、業(yè)務(wù)經(jīng)驗(yàn)、業(yè)務(wù)成績等寫上去。
需要復(fù)習(xí)哪些東西?我個人認(rèn)為首先是復(fù)習(xí)Java基礎(chǔ)和Android基礎(chǔ),然后再根據(jù)簡歷上寫的技能點(diǎn)和業(yè)務(wù)經(jīng)歷,復(fù)習(xí)相關(guān)的知識點(diǎn)。有時候,你做過的某個東西,可能敘述出來不是特別清晰,或者根本就想不起來具體是怎么做的了,這個時候就需要復(fù)習(xí)代碼回顧一下。
下面是一些我需要復(fù)習(xí)的點(diǎn):
- 項(xiàng)目經(jīng)歷,業(yè)務(wù),難點(diǎn)
- Java基礎(chǔ),JVM,集合原理
- Android基礎(chǔ),View體系,View繪制流程,事件分發(fā),屏幕刷新,動畫原理
- 常見三方庫原理
- Jetpack
- Android Framework
- 算法
- Kotlin
該怎么復(fù)習(xí)?將以前學(xué)習(xí)該部分時寫過的博客或者筆記拿出來復(fù)習(xí),結(jié)合源碼。如果是以前沒有寫過相關(guān)筆記的,就找一下相關(guān)的技術(shù)文章,匯總,看一波。
怎么復(fù)習(xí)最高效?一個技術(shù)點(diǎn)或者做過的業(yè)務(wù),最好是先復(fù)習(xí)一下,然后用自己的話把它描述出來,最好是寫成文字,記錄到云筆記上,方便隨時復(fù)習(xí)。當(dāng)然,這只是一個點(diǎn)的復(fù)習(xí)方式。而簡歷上有很多很多個這樣的點(diǎn),我們需要設(shè)置一個dead line,設(shè)置一個復(fù)習(xí)總時長,到哪個日期截止,必須在那個日期結(jié)束前復(fù)習(xí)完成。然后將需要復(fù)習(xí)的點(diǎn)詳細(xì)安排到每一天,每天需要復(fù)習(xí)哪些東西,必須當(dāng)天完成,禁止自己拖到第二天,最好是明天的任務(wù)內(nèi)容今天就把它完成了,然后明天就去復(fù)習(xí)后天的任務(wù)內(nèi)容。給自己留有余地,即使某天沒時間復(fù)習(xí),也不至于落后于計(jì)劃。最好是開始復(fù)習(xí)計(jì)劃之前就把每一個知識點(diǎn)需要看的東西全部給列出來,比如需要復(fù)習(xí)哪篇筆記、哪篇文章、哪部分代碼等,到時在復(fù)習(xí)的時候就無需關(guān)心該復(fù)習(xí)哪里,直接照著之前安排好的計(jì)劃開整就行了。
下面是一些我在復(fù)習(xí)時的部分計(jì)劃,完成時打個勾

- 職業(yè)規(guī)劃?開始找工作之前,最好是先想好自己下一份工作想做什么,去怎么樣的公司,將來想怎么發(fā)展。
3. 我的復(fù)習(xí)資料
這塊大家盡量按照自己簡歷的內(nèi)容來進(jìn)行專項(xiàng)復(fù)習(xí),下面是一些我復(fù)習(xí)時用到的資料。因?yàn)檫@些都是自己的技能點(diǎn),所以復(fù)習(xí)要稍微加快一下速度,控制好復(fù)習(xí)總時長。
3.1 算法部分
- 打遍天下二叉樹 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Algorithm/打遍天下二叉樹.md
- labuladong的fucking-algorithm https://github.com/labuladong/fucking-algorithm
3.2 Java基礎(chǔ)
- Java集合源碼復(fù)習(xí)一遍
- ArrayList源碼解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/ArrayList源碼解析.md
- LinkedList源碼解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/LinkedList源碼解析.md
- CopyOnWriteArrayList源碼解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/CopyOnWriteArrayList源碼解析.md
- HashMap源碼解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/HashMap源碼解析.md
- ConcurrentHashMap源碼解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/ConcurrentHashMap源碼解析.md
- TreeMap 和 LinkedHashMap https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/TreeMap和LinkedHashMap.md
- HashSet 和 TreeSet https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/HashSet和TreeSet.md
- Android中的Bundle,SparseArray和ArrayMap https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/集合/Android中的Bundle,SparseArray和ArrayMap.md
- 從源碼角度徹底搞懂String,StringBuffer,StringBuilder_20180420 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎(chǔ)/從源碼角度徹底搞懂String,StringBuffer,StringBuilder_20180420.md
- String https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎(chǔ)/String.md
- 泛型 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎(chǔ)/泛型.md
- 異常 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎(chǔ)/異常.md
- 反射 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎(chǔ)/反射.md
- 注解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎(chǔ)/注解.md
- 反射性能開銷原理及優(yōu)化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎(chǔ)/反射性能開銷原理及優(yōu)化.md
- 《深入理解Java虛擬機(jī)》
- JVM內(nèi)存數(shù)據(jù)區(qū)域 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/1.JVM內(nèi)存數(shù)據(jù)區(qū)域.md
- HotSpot虛擬機(jī)對象 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/2.HotSpot虛擬機(jī)對象.md
- 垃圾收集器與內(nèi)存分配策略 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/3.垃圾收集器與內(nèi)存分配策略.md
- Java字節(jié)碼(class文件)解讀 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/4.Java字節(jié)碼(class文件)解讀.md
- 字節(jié)碼指令簡介 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/5.字節(jié)碼指令簡介.md
- 虛擬機(jī)類加載機(jī)制 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/6.虛擬機(jī)類加載機(jī)制.md
- 虛擬機(jī)字節(jié)碼執(zhí)行引擎 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/7.虛擬機(jī)字節(jié)碼執(zhí)行引擎.md
- 前端編譯與優(yōu)化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/8.前端編譯與優(yōu)化.md
- 后端編譯與優(yōu)化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/9.后端編譯與優(yōu)化.md
- Java內(nèi)存模型與線程 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/10.Java內(nèi)存模型與線程.md
- 線程安全與鎖優(yōu)化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/11.線程安全與鎖優(yōu)化.md
- 拉鉤教育-《Android 工程師進(jìn)階34講》
- 拉鉤教育-《Java 并發(fā)編程 78 講》
3.3 Android
- 《安卓開發(fā)藝術(shù)探索》
- 死磕Android_View工作原理你需要知道的一切 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/死磕Android_View工作原理你需要知道的一切.md
- 死磕Android_App_啟動過程(含Activity啟動過程) https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/死磕Android_App_啟動過程(含Activity啟動過程).md
- 死磕Android_Service啟動流程分析(一) https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/死磕Android_Service啟動流程分析(一).md
- 死磕Android_Service綁定流程分析(二) https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/死磕Android_Service綁定流程分析(二).md
- 死磕Android_BroadcastReceiver_工作過程 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/死磕Android_BroadcastReceiver_工作過程.md
- Lifecycle_原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Lifecycle_原理解析.md
- ViewModel_使用及原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/ViewModel_使用及原理解析.md
- Jetpack全家桶 https://juejin.cn/post/7013640663824597005
- 學(xué)習(xí)Android Jetpack? 實(shí)戰(zhàn)和教程這里全都有! https://juejin.cn/post/6844903889574051848
- Lifecycle https://juejin.cn/post/6893870636733890574
- LiveData https://juejin.cn/post/6903143273737814029
- ViewModel https://juejin.cn/post/6915012483421831175
- MVVM https://juejin.cn/post/6921321173661777933
- DataBinding https://juejin.cn/post/6923859213403979789
- Handler機(jī)制你需要知道的一切 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Handler機(jī)制你需要知道的一切.md
- 死磕Android_ContentProvider_啟動 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/死磕Android_ContentProvider_啟動.md
- LiveData_使用及原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/LiveData_使用及原理解析.md
- Window,Activity,View三者關(guān)系 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Window,Activity,View三者關(guān)系.md
- Handler同步屏障 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Handler同步屏障.md
- Choreographer原理及應(yīng)用 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Choreographer原理及應(yīng)用.md
- Handler相關(guān)知識點(diǎn)大全 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Handler相關(guān)知識點(diǎn)大全.md
- LeakCanary 原理探究 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方庫原理/LeakCanary_原理探究.md
- OkHttp3 原理探究 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方庫原理/OkHttp3_原理探究.md
- Retrofit 原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方庫原理/Retrofit_原理解析.md
- Glide主流程源碼解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方庫原理/Glide主流程源碼解析.md
- RxJava3原理解析 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方庫原理/RxJava3原理解析.md
- Android-skin-support 換膚原理詳解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/三方庫原理/Android-skin-support換膚原理詳解.md
- 屏幕適配 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/實(shí)戰(zhàn)常見問題/屏幕適配.md
- 插件化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/實(shí)戰(zhàn)常見問題/插件化.md
- 熱更新 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/實(shí)戰(zhàn)常見問題/熱更新.md
- Gradle系列(一) Groovy 基礎(chǔ) https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(一)Groovy基礎(chǔ).md
- Gradle系列(二) Gradle執(zhí)行順序和task https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(二)_Gradle執(zhí)行順序和task.md
- Gradle系列(三) Gradle配置構(gòu)建和渠道包 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(三)_Gradle配置構(gòu)建和渠道包.md
- Gradle系列(四) Gradle插件 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(四)_Gradle插件.md
- Gradle系列 插件練習(xí)-動態(tài)移除權(quán)限 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列_插件練習(xí)-動態(tài)移除權(quán)限.md
- 手把手教大家用Transform API和ASM實(shí)現(xiàn)一個防快速點(diǎn)擊案例 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/手把手教大家用Transform_API和ASM實(shí)現(xiàn)一個防快速點(diǎn)擊案例.md
- Android進(jìn)程間通信: 深入淺出AIDL https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多進(jìn)程/AIDL詳解.md
- Android進(jìn)程間通信: Messenger詳解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多進(jìn)程/Messenger詳解.md
- Android進(jìn)程間通信: Binder詳解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多進(jìn)程/Binder詳解.md
- 硬核!Android 應(yīng)用啟動全流程深度剖析?。ㄟM(jìn)程創(chuàng)建+消息機(jī)制+Activity組件管理+Application和Activity初始化+UI布局與繪制+RenderThread渲染+SurfaceFlinger合成) https://mp.weixin.qq.com/s/b6-leHKQZkuxkjll-1109A
- Choreographer原理及應(yīng)用 https://blog.csdn.net/xfhy_/article/details/115436765?spm=1001.2014.3001.5502
- 終于懂了,屏幕刷新 https://juejin.cn/post/6863756420380196877
- View工作原理 https://juejin.cn/post/6854573212374663182
- 編譯基礎(chǔ) https://juejin.cn/post/6844904106545414157
- Android插件化原理(一)Activity插件化 https://juejin.cn/post/6844903613865672718
- ClassLoader http://liuwangshu.cn/tags/ClassLoader/
- hencoder全部Kotlin部分 https://rengwuxian.com/tag/kotlin/
- hencoder全部自定義View部分 https://rengwuxian.com/tag/custom-view/
- 協(xié)程原理 https://juejin.cn/post/6862548590092140558
- flow https://juejin.cn/post/6914802148614242312
- 反思|官方也無力回天?Android SharedPreferences的設(shè)計(jì)與實(shí)現(xiàn) https://juejin.cn/post/6884505736836022280
- ActivityThread的理解 https://blog.csdn.net/hzwailll/article/details/85339714
- 了解AMS http://liuwangshu.cn/tags/ActivityManagerService/
- Android Gradle 自定義Task 詳解 https://blog.csdn.net/zhaoyanjun6/article/details/76408024
- 編譯打包流程 https://juejin.cn/post/6844904106545414157
- Android Gradle 看這一篇就夠了 https://juejin.cn/post/6844903446814916621#comment
4. 技術(shù)面試真題
只記錄了部分公司和部分題目,有時候面試完忘記記錄了,后面就想不起來了。
公司1:
- 包體積優(yōu)化
- handler原理
- 如何退出app
- synchronized和lock
- 鴻蒙了解過嗎
- flutter了解過嗎,compose呢
- 跨進(jìn)程通信,線程通信
- 組件化是怎么做的
- 做過的項(xiàng)目,主要負(fù)責(zé)什么
- 擔(dān)任的角色
- 最難的是什么?怎么解決的
- 開發(fā)流程是怎么樣的?有做設(shè)計(jì)文檔嗎?
- 職業(yè)規(guī)劃,為什么做安卓?鴻蒙有了解嗎?
- 平時怎么學(xué)習(xí)的?最近學(xué)了什么?給工作帶來了哪些好處?
- 看過哪些技術(shù)書籍
- 平時有什么愛好
- 對你想要去的公司團(tuán)隊(duì)有什么要求?或者說你想去什么氛圍的項(xiàng)目組?
公司2:
- sleep和wait區(qū)別
- mvp
- 組件化
- livedata,viewmodel原理
- 內(nèi)存優(yōu)化
- 啟動優(yōu)化
- leakcanary原理
- 換膚原理
- 怎么hook ams
公司3:
- volatile、synchronized、原子類的原理
- 數(shù)據(jù)庫優(yōu)化是怎么做的
- 性能優(yōu)化
- kotlin伴生對象和init
- 斐波拉契序列
- 反轉(zhuǎn)鏈表
公司4:
- fragment生命周期
- 屏幕刷新機(jī)制
- binder理解
- bindService校驗(yàn): 權(quán)限,包名
- https的原理
- 響應(yīng)式編程
- 熱修復(fù):class和資源
- invalidate 和 postInvalidate區(qū)別
- handler原理,sendMessageDelayed是怎么實(shí)現(xiàn)的,為什么不卡主線程,底層是如何通知進(jìn)程這邊恢復(fù)阻塞的
- java掌握到什么程度了,kotlin呢?android呢?
- 響應(yīng)式編程
- 看過哪些書?推薦一本你覺得不錯的書,為什么不錯
- android最近這2年值得關(guān)注的框架
- 敏捷開發(fā)模式
- 你給你自己的水平打分,計(jì)劃怎么完善和精進(jìn)自己的技術(shù)棧
公司5:
- app啟動過程+activity啟動過程,activity啟動過程中的launchmode的原理
- handler
- java 方法重載問題,泛型相關(guān)
- 卡頓優(yōu)化,冷啟動優(yōu)化,線上監(jiān)控方式
- 慢函數(shù)線上監(jiān)控
公司6:
- 3個線程如何依次執(zhí)行
- 設(shè)計(jì)一個圖片加載庫,lrucache原理,linkedhashmap實(shí)現(xiàn)
- lifecycle,viewmodel原理
- view事件分發(fā)
公司7:
- gc roots
- JVM垃圾回收算法,Android虛擬機(jī)垃圾回收算法
- 分代回收思想
- Java類加載機(jī)制
- 線程池有幾種,分別是什么特征,自定義線程池需要注意什么,核心線程數(shù)是多少
- hashmap原理(紅黑樹會退成鏈表嗎?什么情況下?),ConcurrentHashMap原理,Hashtable原理
- StringBuilder和StringBuffer原理
- 反射原理及其優(yōu)缺點(diǎn)
- 泛型拿來做什么的
- synchronized用法及原理,1.6做了哪些優(yōu)化,Mark word
- 常用的三方庫原理,隨便挑一個說
- 換膚原理
- 動畫有哪幾種,屬性動畫原理,vsync
- View繪制流程
- 短時間內(nèi)多次調(diào)用requestLayout,哪些View會重繪
- 冷啟動優(yōu)化
- 包體積優(yōu)化
- 插件化原理,startActivity
- mvc,mvp,mvvm
- requestLayout流程
- 算法1:反轉(zhuǎn)單詞
- 算法2:環(huán)形鏈表求環(huán)入口節(jié)點(diǎn),不準(zhǔn)用快慢指針,O(1)空間復(fù)雜度,O(n)時間復(fù)雜度,可修改鏈表節(jié)點(diǎn)的指針和數(shù)據(jù)。不能在鏈表節(jié)點(diǎn)中新增屬性
公司8:
- 說一下項(xiàng)目的架構(gòu),哪一塊是你主要負(fù)責(zé)的?說一下是怎么設(shè)計(jì)的
- livedata原理
- handler原理
- 組件化傳遞大數(shù)據(jù)
- 單例里面的數(shù)據(jù)線程安全
- 內(nèi)存優(yōu)化,卡頓優(yōu)化,冷啟動優(yōu)化
- 怎么檢測已發(fā)生了內(nèi)存泄露的對象?不知道那個對象是誰
- 協(xié)程和RxJava原理,區(qū)別
公司9:
- view繪制流程
- 事件分發(fā)流程,外部攔截法,內(nèi)部攔截法
- Kotlin協(xié)程,協(xié)程原理,怎么開協(xié)程,怎么切線程
- viewpager內(nèi)部view高度不一致,怎么解決
- startActivity流程
- 啟動優(yōu)化,包體積優(yōu)化
- livedata原理
- gradle 馬甲包
- 換膚原理
- 協(xié)程狀態(tài)機(jī)
- let和also區(qū)別
- mvvm
5. HR面
一般HR面就比較輕松了,不會涉及什么高難度的問題。一般就問問你為什么離職、住哪里、有對象嗎、結(jié)婚了嗎、有小孩嗎、小孩多大了、買房了嗎、哪里人,然后HR還會介紹公司的情況、產(chǎn)品、公司規(guī)劃、福利之類的。下面這些是我在網(wǎng)絡(luò)上搜集的一些比較重要的問題,需要詳細(xì)向HR了解清楚。
每個問題都很重要,必問
- 工資是
*12 ? - 有年終嗎?
- 五險(xiǎn)一金是全額?多少比例?
- 加班有錢?
- 晉升制度,漲薪制度
- 年假?
- 績效考評是怎么樣的?
- 午休時間,上下班時間
- 雙休?
- 試用期多久?轉(zhuǎn)正標(biāo)準(zhǔn)
- 工作強(qiáng)度
6. 其他注意事項(xiàng)
- 技術(shù)復(fù)盤:在每輪技術(shù)面試完成后,肯定是有些問題回答得不好的,或者是沒有答上來的,回去之后需要及時整理并復(fù)習(xí),最好是能用自己的話復(fù)述一下這個問題。
- 提前了解好要去面試的公司的產(chǎn)品、方向
- 提前了解好當(dāng)前公司辦理離職需要多久
- 社保和公積金不能斷
- 盡量遠(yuǎn)程面試,避免耽擱現(xiàn)在的工作
7. 最后
現(xiàn)在正值金三銀四招聘旺季,祝正在求職的伙伴都能找到自己喜歡的工作。