前言
年年寒冬,年年也擋不住一個安卓程式設計師追求大廠的決心。想要進入大廠,我們需要掌握哪些知識點呢?這裡,我為大家梳理了一個整體的知識架構。整體包括Java、Android、演算法、網路等,並且我也在相應知識點下推薦了與該知識點相關的書籍與部落格。希望大家閱讀之後,能幫助大家完善與整理自己的知識體系。祝大家早日進入自己理想的公司~~
注意,整篇文章是知識點的概括,不包含答案,需要大家多看原始碼,知識只有自己去探索與發現,才會彌足珍貴!
Java基礎知識點
Jvm相關
- Java記憶體結構及分割槽
- Java物件的建立、儲存及訪問
- Java判斷物件是否存活及垃圾回收演算法(GC)
- Jvm中的常見的垃圾回收器
- Java類載入過程
- Java類載入器(雙親委派模型)
推薦閱讀:
- 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第二章 Java記憶體區域與記憶體溢位異常
- 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第三章 垃圾收集器與記憶體分配策略
- 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第六章 類檔案結構
- 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第七章 虛擬機器類載入機制
- 《Java虛擬機器規範 JAVA SE 8版》
集合相關
- ArrayList分析
- LinkedList分析
- HashMap分析
- HashTable分析
- LinkedHashMap分析
- HashSet分析
- LinkedHashSet分析
- ArrayMap、SparseMap、與HashMap的對比
- ConcurrentHashMap分析
推薦閱讀
- 如果大家不嫌棄,可以看看我的-->ArrayList分析
- 如果大家不嫌棄,可以看看我的-->LinkedList分析
- 如果大家不嫌棄,可以看看我的-->雜湊表初識
- 徹頭徹尾理解 HashTable
- 美團技術團隊-Java8系列之重新認識HashMap
- Map 綜述(二):徹頭徹尾理解 LinkedHashMap
- 《Java併發程式設計的藝術》第六章6.1節CocurrrentHashMap(基於JDK 1.6,1.7分析的)實現原理及使用
- 深入淺出ConcurrentHashMap1.8
併發相關
- Java記憶體模型
- volatile原理
- Synchronized的原理
- AQS原理
- Condition原理
- ReentrantLock 原理
- 公平鎖與非公平鎖
- ReentrantReadWriteLock原理
推薦閱讀:
- 《Java併發程式設計的藝術》第二章 Java併發機制的底層實現原理
- 《Java併發程式設計的藝術》第三章 記憶體模型
- 《Java併發程式設計的藝術》第五章 Java中的鎖
- Java併發程式設計之Java記憶體模型
- Java併發程式設計之Java CAS操作
- Java併發程式設計之Volatile
- Java併發程式設計之synchronized
- Java併發程式設計之鎖機制之引導篇
- Java併發程式設計之鎖機制之Lock介面
- Java併發程式設計之鎖機制之AQS(AbstractQueuedSynchronizer)
- Java併發程式設計之鎖機制之LockSupport工具
- Java併發程式設計之鎖機制之Condition介面
- Java併發程式設計之鎖機制之重入鎖
- Java併發程式設計之鎖機制之讀寫鎖
執行緒相關
- 執行緒的啟動和終止
- 執行緒間通訊
- 等待/通知機制
推薦閱讀:
《Java併發程式設計的藝術》第四章 Java併發程式設計基礎
執行緒池相關
- 使用執行緒池的原因
- 執行緒池內部原理
- 執行緒池中的幾種重要的引數及流程說明
- 執行緒池中幾種常見的工作佇列
- 幾種常見的執行緒池及使用場景。
推薦閱讀: 《Java併發程式設計的藝術》第九章 Java中的執行緒池
IO相關
- IO相關面試問題-Socket
- IO相關面試問題-BIO/NIO
推薦閱讀:
- NIO相關基礎篇一
- NIO相關基礎篇二
- NIO相關基礎篇三
- 《UNIX 網路程式設計,卷1:套接字聯網API 第三版》第六章 I/O複用:select和poll
- 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第二章 Java記憶體區域與記憶體溢位異常 2.7節 直接記憶體介紹
Android基礎知識點
Activity相關
- 典型狀況下的生命週期
- 異常情況下的生命週期
- 異常情況下的資料儲存
- 各種情況下跳轉到某個Activity時目標Activity及當前Activity的生命週期
- Activity的啟動模式及應用場景
- 程式和應用生命週期
推薦閱讀:
- 《Android開發藝術探索》 第一章 Activity的生命週期和啟動模式
- 《Android開發藝術探索》 第九章 9.2節Activity的工作過程
- Google-程式和應用生命週期
- Google-任務和返回棧
Service相關
- Service的定義及作用
- Service兩種啟動方式 startService、 bindService 區別及生命週期
- Service繫結服務的三種實現方式,擴充套件Binder類、使用Messenger、使用AIDL
- 關於啟動服務與繫結服務間的轉換問題 先繫結服務後啟動服務、先啟動服務後繫結服務
- 服務Service與執行緒Thread的區別
- Android 5.0以上的隱式啟動問題及其解決方案
- 如何保證服務不被殺死
- IntentService的使用及原理
推薦閱讀:
- 《Android開發藝術探索》 第九章 9.3節Service的工作過程
- 關於Android Service真正的完全詳解,你需要知道的一切
- Android 多執行緒之IntentService 完全詳解
- Android 多執行緒之HandlerThread 完全詳解
BroadcastReceiver相關
- BroadcastReceiver定義及作用、應用場景
- BroadcastReceiver的註冊方式,靜態方式、動態方式
- BroadcastReceiver註冊與取消的時機
- BroadcastReceiver的不同型別,普通廣播,系統廣播、有序廣播、粘性廣播、應用類廣播
推薦閱讀:
- 《Android開發藝術探索》 第九章 9.4節BroadcastReceiver 的工作過程
- BroadcastReceiver史上最全面解析
- 廣播在7.0、8.0、9.0下的適配
Fragment相關
- Fragment生命週期
- Fragment的懶載入
- Fragment之間的通訊
- FragmentPagerAdapter與FragmentStatePagerAdapter的區別
- 為什麼不建議直接通過使用new Fragment的方式傳入資料
推薦閱讀:
序列化相關
- 序列化與反序列化的定義及區別
- Serializable中serialVersionUID及transient關鍵字的作用
- 序列化:Parcelable和Serializable差異
推薦閱讀:
- 序列化與反序列化之Parcelable和Serializable淺析
- 《Android開發藝術探索》 第二章 IPC基礎概念介紹
IPC相關
- 在Android中什麼樣的情況下會使用多程式模式,如何開啟多程式
- Android為什麼採用Binder做為IPC機制
- IPC常用方式 使用Bundle、使用檔案共享、使用Messenger、使用AIDL、使用ContentProvider、使用Socket
- AIDL的語義
- AIDL如何建立
- AIDL生成Java檔案詳細分析
推薦閱讀:
- 《Android開發藝術探索》 第二章 IPC機制
- 《深如理解LINUX核心 第三版涵蓋2.6版》 第三章 程式 3.2節程式描述符
- 寫給 Android 應用工程師的 Binder 原理剖析
- 如果需要深入瞭解,推薦GitYuan大大的 Binder 系列文章
View事件機制相關
- View的座標體系
- View滑動的幾種方式,使用ScrollTo/ScrollBy、使用動畫、改變佈局引數
- 彈性滑動的原理及實現
- View的事件分發機制,點選事件的傳遞規則,事件分發的原始碼解讀
- 處理滑動衝突的場景及解決方法
推薦閱讀:
《Android開發藝術探索》 第三章 View的事件體系
View繪製相關
- DecorView、Window、ViewRootImpl等概念
- MeasureSpec概念
- View的工作流程,measure過程、layout過程、draw過程
- 自定義View需要注意的事項
- Activity、Window、View三者之間的關係
推薦閱讀:
- 《Android開發藝術探索》第四章 View的工作原理
- 《Android開發藝術探索》第八章 理解Window和WindowManager
- Android自定義控制元件三部曲文章索引
View動畫相關
- 常用動畫View動畫(補間動畫)、屬性動畫與幀動畫
- 補間動畫與屬性動畫區別
- 差值器和估值器理解
- 屬性動畫的工作原理
推薦閱讀:
- Android自定義控制元件三部曲文章索引
- 《Android開發藝術探索》 第七章 Android動畫深入分析
Handler相關
- Handler機制之ThreadLocal
- Handler機制之Looper、Handler、訊息佇列如何理解
- Handler機制之Message的傳送與取出
- Handler機制之Message及Message的回收機制
- Handler機制之迴圈訊息佇列的退出
- Handler機制之記憶體洩漏
- Handler機制之IdleHandle的理解及使用
推薦閱讀:
- 《Android開發藝術探索》第十章 10.2節 Android的訊息機制
- IdleHandle的奇思妙想----->你知道android的MessageQueue.IdleHandler嗎?
- Handler面試常問題目----->你真的懂Handler嗎?Handler問答
- 如果大家不嫌棄,可以看看我的Handler機制總結----->Anroid Handler機制總目錄
AsyncTask相關
- AsyncTask的使用和注意事項
- AsyncTask幾個重要的方法 doInBackgound、onProgressUpdate、onPostExecute等
- AsyncTask的工作原理及原始碼理解
推薦閱讀:
- 《Android開發藝術探索》第十一章 Android的執行緒和執行緒池
- 《Java併發程式設計的藝術》第九章 Java中的執行緒池,第十章 Executor框架
Bitmap壓縮回收相關
- Bitmap所佔記憶體
- 常用壓縮圖片方式
- LruCache原理
- DiskLruCache原理
- LinkedHashMap原理
推薦閱讀:
ListView與RecyclerView相關
- ListView的原理和複用機制
- ListView和RecyclerView的區別
推薦閱讀:
資料儲存相關
- 常用資料庫框架GreenDao,官方Room
- 資料庫資料遷移問題
- GreenDao中一對一,一對多,多對多關係
- SharedPreferences使用及原始碼,commit與apply()方法的區別
推薦閱讀:
Android開源框架知識點
OkHttp相關
- OkHttp的優點
- OkHttp執行請求的整個流程
- OkHttp中的攔截器
- OkHttp中的同步請求與非同步請求的理解及其原始碼
- OkHttp中涉及到的設計模式
- OkHttp底層網路請求實現,socket還是URLConnection
推薦閱讀:
Retrofit相關
- Retrofit執行請求的整個流程
- Retrofit中ConverterFactory、CallAdapterFactory的理解
- Retrofit中CallAdapter的介面卡模式
推薦閱讀:
RxJava相關
- RxJava常用建立操作符 create、from、just、interval、range等
- RxJava常用組合、合併操作符 combineLatest、join、merge、zip等
- RxJava錯誤處理操作符 onErrorReturn、onErrorResumeNext、onExceptionResumeNext等
- RxJava過濾操作符 filter、ofType、sample、take等
- Rxjava背壓相關理解
- RxJava實際開發中的使用:網路請求輪詢、網路請求巢狀回撥、從磁碟 / 記憶體快取中 獲取快取資料等
推薦閱讀:
- Android Rxjava:這是一篇 清晰 & 易懂的Rxjava 入門教程
- 如果大家想直接寫Demo,這裡我已經寫好了一份--->RxJava操作符總結
Glide相關
- Glide的執行流程
- Glide的快取機制
- Glide圖片轉換
- Glide帶進度的圖片載入功能
- Glide記憶體、磁碟快取,優先順序使用
推薦閱讀:
- Android圖片載入框架最全解析(一),Glide的基本用法
- Android圖片載入框架最全解析(二),從原始碼的角度理解Glide的執行流程
- Android圖片載入框架最全解析(三),深入探究Glide的快取機制
- Android圖片載入框架最全解析(四),玩轉Glide的回撥與監聽
- Android圖片載入框架最全解析(五),Glide強大的圖片變換功能
- Android圖片載入框架最全解析(六),探究Glide的自定義模組功能
ButterKnife相關
- Java註解相關Annotation
- Java註解相關之APT工具
- ButterKnife註解框架原理
推薦閱讀:
EventBus相關
- EventBus原理,及索引類的使用
推薦閱讀:
Android效能優化
- 效能優化:佈局優化、繪製優化、執行緒優化等
- ANR異常:主執行緒執行了耗時操作,如BroadcastReceiver(前臺廣播10s,後臺廣播為60s)、Service(前臺20s,後臺200s)沒有處理完相關任務等
- OOM異常:記憶體溢位的原因
- 記憶體洩漏:記憶體洩露的幾種場景,如單例模式引出的洩露、靜態變數導致的洩露、屬性動畫導致的記憶體洩露等
推薦閱讀:
- 《Android開發藝術探索》第十五章 Android效能優化
- Memory Profiler的使用
- LeakCanary庫相關介紹
Android螢幕適配知識點
- 今日頭條適配方式
- 寬高限定符適配方式
- smallestWidth適配
推薦閱讀:
Android打包知識點
- 安卓簽名的理解
- Gradle多渠道打包
推薦閱讀: 《Android Gradle權威指南》
Android架構知識點
- MVC架構設計模式面試問題講解
- MVP架構設計模式面試問題講解
- MVVM架構設計模式面試問題講解
推薦閱讀:
Android不同版本特性知識點
推薦閱讀:
- Android不同版本下的特性
- 廣播在7.0、8.0、9.0下的適配
- Android 6.0 許可權下的適配
- Android 7.0 應用共享檔案(FileProvider)
- Android 7.0 共享檔案的使用方式
網路知識點
- 計算機網路三種體系架構,OSI體系架構(7層)、TCP/IP體系架構(4層),五層體系架構
- TCP的連線管理(三報文握手,四報文握手)
- TCP與UDP的理解與區別
- Http(HyberText Transfer Protocol)基本概念及報文結構
- Http常見錯誤碼
- Http1.0與Http1.1與Http2.0的區別
- Http中get請求與post請求的區別
- Http中cookie與session的區別
- Http與Https的區別
- Https加密演算法相關面試問題,簽名證照,公鑰私鑰、數字摘要的理解
推薦閱讀:
- 體系架構--->《計算機網路第七版 謝希仁》第一章 1.7.1節到1.7.5節
- TCP三報文握手與四報文握手--->《計算機網路第七版 謝希仁》第五章 5.9節 TCP的運輸連線管理
- TCP與UDP理解--->《計算機網路第七版 謝希仁》 第五章 運輸層
- 《計算機網路第七版 謝希仁》 第六章 應用層 第七章 網路安全
- HTTP1.0、HTTP1.1 和 HTTP2.0 的區別
- 清晰的計算機網路基礎 學習指南
設計模式知識點
- 單例模式
- Builder模式
- 裝飾模式
- 策略模式
- 模板方法
- 觀察者模式
- 等.....
推薦閱讀: 《Android原始碼設計模式解析與實戰》
演算法知識點
- 常見的八大排序方式
- 時間複雜度的計算
- 連結串列相關演算法,連結串列翻轉,連結串列合併等
- 二叉樹相關演算法前序、中序、後序遍歷(遞迴,迭代)
- 紅黑樹與BL樹
- 等
推薦閱讀:
- 《Java 資料結構和演算法 第二版》
- 時間複雜度學習(上)
- 時間複雜度學習(下)
- 刷題---->LeetCode