1. 前言
春水初盛恋日,垂釣者絡繹不絕膀篮,魚兒按捺不住,拍打著尾鰭紛紛躍出水面岂膳,沽個好價誓竿。
本篇真實的記錄了我從 準備->復習->面試 的全過程,分享一些我的真實經(jīng)驗闷营,希望能幫到大家烤黍。
2. 準備工作
開始準備工作之前,首先思考幾個問題:
- 如何準備
- 需要復習哪些東西
- 該怎么復習
- 怎么復習最高效
- 職業(yè)規(guī)劃
如何準備傻盟,從哪里開始著手速蕊?首先是想好自己是否真的需要換工作,確定好需要換之后就開始寫簡歷娘赴,將個人技能點规哲、業(yè)務經(jīng)驗、業(yè)務成績等寫上去诽表。
需要復習哪些東西唉锌?我個人認為首先是復習Java基礎和Android基礎,然后再根據(jù)簡歷上寫的技能點和業(yè)務經(jīng)歷竿奏,復習相關的知識點袄简。有時候,你做過的某個東西泛啸,可能敘述出來不是特別清晰绿语,或者根本就想不起來具體是怎么做的了,這個時候就需要復習代碼回顧一下。
下面是一些我需要復習的點:
- 項目經(jīng)歷吕粹,業(yè)務种柑,難點
- Java基礎,JVM,集合原理
- Android基礎,View體系匹耕,View繪制流程聚请,事件分發(fā),屏幕刷新稳其,動畫原理
- 常見三方庫原理
- Jetpack
- Android Framework
- 算法
- Kotlin
該怎么復習驶赏?將以前學習該部分時寫過的博客或者筆記拿出來復習,結(jié)合源碼既鞠。如果是以前沒有寫過相關筆記的母市,就找一下相關的技術文章,匯總损趋,看一波。
怎么復習最高效椅寺?一個技術點或者做過的業(yè)務浑槽,最好是先復習一下,然后用自己的話把它描述出來返帕,最好是寫成文字桐玻,記錄到云筆記上,方便隨時復習荆萤。當然镊靴,這只是一個點的復習方式。而簡歷上有很多很多個這樣的點链韭,我們需要設置一個dead line偏竟,設置一個復習總時長,到哪個日期截止敞峭,必須在那個日期結(jié)束前復習完成踊谋。然后將需要復習的點詳細安排到每一天,每天需要復習哪些東西旋讹,必須當天完成殖蚕,禁止自己拖到第二天,最好是明天的任務內(nèi)容今天就把它完成了沉迹,然后明天就去復習后天的任務內(nèi)容睦疫。給自己留有余地,即使某天沒時間復習鞭呕,也不至于落后于計劃蛤育。最好是開始復習計劃之前就把每一個知識點需要看的東西全部給列出來,比如需要復習哪篇筆記、哪篇文章缨伊、哪部分代碼等摘刑,到時在復習的時候就無需關心該復習哪里,直接照著之前安排好的計劃開整就行了刻坊。
下面是一些我在復習時的部分計劃枷恕,完成時打個勾
- 職業(yè)規(guī)劃?開始找工作之前谭胚,最好是先想好自己下一份工作想做什么徐块,去怎么樣的公司玩祟,將來想怎么發(fā)展番宁。
3. 我的復習資料
這塊大家盡量按照自己簡歷的內(nèi)容來進行專項復習,下面是一些我復習時用到的資料叫挟。因為這些都是自己的技能點旁趟,所以復習要稍微加快一下速度昼激,控制好復習總時長。
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基礎
- Java集合源碼復習一遍
- 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/基礎/從源碼角度徹底搞懂String,StringBuffer,StringBuilder_20180420.md
- String https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎/String.md
- 泛型 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎/泛型.md
- 異常 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎/異常.md
- 反射 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎/反射.md
- 注解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎/注解.md
- 反射性能開銷原理及優(yōu)化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/基礎/反射性能開銷原理及優(yōu)化.md
- 《深入理解Java虛擬機》
- 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虛擬機對象 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/2.HotSpot虛擬機對象.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
- 虛擬機類加載機制 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/6.虛擬機類加載機制.md
- 虛擬機字節(jié)碼執(zhí)行引擎 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Java/JVM/7.虛擬機字節(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 工程師進階34講》
- 拉鉤教育-《Java 并發(fā)編程 78 講》
3.3 Android
- 《安卓開發(fā)藝術探索》
- 死磕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
- 學習Android Jetpack? 實戰(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機制你需要知道的一切 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Handler機制你需要知道的一切.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三者關系 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Window,Activity,View三者關系.md
- Handler同步屏障 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Handler同步屏障.md
- Choreographer原理及應用 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Choreographer原理及應用.md
- Handler相關知識點大全 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/系統(tǒng)源碼解析/Handler相關知識點大全.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/實戰(zhàn)常見問題/屏幕適配.md
- 插件化 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/實戰(zhàn)常見問題/插件化.md
- 熱更新 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/實戰(zhàn)常見問題/熱更新.md
- Gradle系列(一) Groovy 基礎 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(一)Groovy基礎.md
- Gradle系列(二) Gradle執(zhí)行順序和task https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(二)_Gradle執(zhí)行順序和task.md
- Gradle系列(三) Gradle配置構建和渠道包 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(三)_Gradle配置構建和渠道包.md
- Gradle系列(四) Gradle插件 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列(四)_Gradle插件.md
- Gradle系列 插件練習-動態(tài)移除權限 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/Gradle系列_插件練習-動態(tài)移除權限.md
- 手把手教大家用Transform API和ASM實現(xiàn)一個防快速點擊案例 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/Gradle/手把手教大家用Transform_API和ASM實現(xiàn)一個防快速點擊案例.md
- Android進程間通信: 深入淺出AIDL https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多進程/AIDL詳解.md
- Android進程間通信: Messenger詳解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多進程/Messenger詳解.md
- Android進程間通信: Binder詳解 https://github.com/xfhy/Android-Notes/blob/master/Blogs/Android/多進程/Binder詳解.md
- 硬核橙困!Android 應用啟動全流程深度剖析!(進程創(chuàng)建+消息機制+Activity組件管理+Application和Activity初始化+UI布局與繪制+RenderThread渲染+SurfaceFlinger合成) https://mp.weixin.qq.com/s/b6-leHKQZkuxkjll-1109A
- Choreographer原理及應用 https://blog.csdn.net/xfhy_/article/details/115436765?spm=1001.2014.3001.5502
- 終于懂了耕餐,屏幕刷新 https://juejin.cn/post/6863756420380196877
- View工作原理 https://juejin.cn/post/6854573212374663182
- 編譯基礎 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的設計與實現(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. 技術面試真題
只記錄了部分公司和部分題目,有時候面試完忘記記錄了肠缔,后面就想不起來了夏跷。
公司1:
- 包體積優(yōu)化
- handler原理
- 如何退出app
- synchronized和lock
- 鴻蒙了解過嗎
- flutter了解過嗎,compose呢
- 跨進程通信明未,線程通信
- 組件化是怎么做的
- 做過的項目槽华,主要負責什么
- 擔任的角色
- 最難的是什么?怎么解決的
- 開發(fā)流程是怎么樣的趟妥?有做設計文檔嗎硼莽?
- 職業(yè)規(guī)劃,為什么做安卓煮纵?鴻蒙有了解嗎懂鸵?
- 平時怎么學習的?最近學了什么行疏?給工作帶來了哪些好處匆光?
- 看過哪些技術書籍
- 平時有什么愛好
- 對你想要去的公司團隊有什么要求?或者說你想去什么氛圍的項目組酿联?
公司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生命周期
- 屏幕刷新機制
- binder理解
- bindService校驗: 權限周崭,包名
- https的原理
- 響應式編程
- 熱修復:class和資源
- invalidate 和 postInvalidate區(qū)別
- handler原理柳譬,sendMessageDelayed是怎么實現(xiàn)的,為什么不卡主線程续镇,底層是如何通知進程這邊恢復阻塞的
- java掌握到什么程度了美澳,kotlin呢?android呢摸航?
- 響應式編程
- 看過哪些書制跟?推薦一本你覺得不錯的書,為什么不錯
- android最近這2年值得關注的框架
- 敏捷開發(fā)模式
- 你給你自己的水平打分酱虎,計劃怎么完善和精進自己的技術棧
公司5:
- app啟動過程+activity啟動過程雨膨,activity啟動過程中的launchmode的原理
- handler
- java 方法重載問題,泛型相關
- 卡頓優(yōu)化读串,冷啟動優(yōu)化聊记,線上監(jiān)控方式
- 慢函數(shù)線上監(jiān)控
公司6:
- 3個線程如何依次執(zhí)行
- 設計一個圖片加載庫,lrucache原理恢暖,linkedhashmap實現(xiàn)
- lifecycle,viewmodel原理
- view事件分發(fā)
公司7:
- gc roots
- JVM垃圾回收算法甥雕,Android虛擬機垃圾回收算法
- 分代回收思想
- Java類加載機制
- 線程池有幾種,分別是什么特征胀茵,自定義線程池需要注意什么,核心線程數(shù)是多少
- hashmap原理(紅黑樹會退成鏈表嗎挟阻?什么情況下琼娘?),ConcurrentHashMap原理附鸽,Hashtable原理
- StringBuilder和StringBuffer原理
- 反射原理及其優(yōu)缺點
- 泛型拿來做什么的
- 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é)點赌蔑,不準用快慢指針,O(1)空間復雜度竟秫,O(n)時間復雜度娃惯,可修改鏈表節(jié)點的指針和數(shù)據(jù)。不能在鏈表節(jié)點中新增屬性
公司8:
- 說一下項目的架構肥败,哪一塊是你主要負責的趾浅?說一下是怎么設計的
- 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)機
- let和also區(qū)別
- mvvm
5. HR面
一般HR面就比較輕松了订歪,不會涉及什么高難度的問題脖祈。一般就問問你為什么離職、住哪里刷晋、有對象嗎盖高、結(jié)婚了嗎、有小孩嗎眼虱、小孩多大了喻奥、買房了嗎、哪里人捏悬,然后HR還會介紹公司的情況撞蚕、產(chǎn)品、公司規(guī)劃过牙、福利之類的甥厦。下面這些是我在網(wǎng)絡上搜集的一些比較重要的問題,需要詳細向HR了解清楚寇钉。
每個問題都很重要刀疙,必問
- 工資是
*
12 ? - 有年終嗎扫倡?
- 五險一金是全額谦秧?多少比例?
- 加班有錢撵溃?
- 晉升制度疚鲤,漲薪制度
- 年假?
- 績效考評是怎么樣的缘挑?
- 午休時間石咬,上下班時間
- 雙休?
- 試用期多久卖哎?轉(zhuǎn)正標準
- 工作強度
6. 其他注意事項
- 技術復盤:在每輪技術面試完成后鬼悠,肯定是有些問題回答得不好的删性,或者是沒有答上來的,回去之后需要及時整理并復習焕窝,最好是能用自己的話復述一下這個問題蹬挺。
- 提前了解好要去面試的公司的產(chǎn)品、方向
- 提前了解好當前公司辦理離職需要多久
- 社保和公積金不能斷
- 盡量遠程面試它掂,避免耽擱現(xiàn)在的工作
7. 最后
現(xiàn)在正值金三銀四招聘旺季巴帮,祝正在求職的伙伴都能找到自己喜歡的工作。