BAT大廠Android面試知識點,請客官拿好~~

AndyandJennifer發表於2019-02-22

前言

年年寒冬,年年也擋不住一個安卓程式設計師追求大廠的決心。想要進入大廠,我們需要掌握哪些知識點呢?這裡,我為大家梳理了一個整體的知識架構。整體包括Java、Android、演算法、網路等,並且我也在相應知識點下推薦了與該知識點相關的書籍與部落格。希望大家閱讀之後,能幫助大家完善與整理自己的知識體系。祝大家早日進入自己理想的公司~~

注意,整篇文章是知識點的概括,不包含答案,需要大家多看原始碼,知識只有自己去探索與發現,才會彌足珍貴!

Java基礎知識點

Jvm相關

  • Java記憶體結構及分割槽
  • Java物件的建立、儲存及訪問
  • Java判斷物件是否存活及垃圾回收演算法(GC)
  • Jvm中的常見的垃圾回收器
  • Java類載入過程
  • Java類載入器(雙親委派模型)

推薦閱讀:

  1. 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第二章 Java記憶體區域與記憶體溢位異常
  2. 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第三章 垃圾收集器與記憶體分配策略
  3. 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第六章 類檔案結構
  4. 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第七章 虛擬機器類載入機制
  5. 《Java虛擬機器規範 JAVA SE 8版》

集合相關

  • ArrayList分析
  • LinkedList分析
  • HashMap分析
  • HashTable分析
  • LinkedHashMap分析
  • HashSet分析
  • LinkedHashSet分析
  • ArrayMap、SparseMap、與HashMap的對比
  • ConcurrentHashMap分析

推薦閱讀

  1. 如果大家不嫌棄,可以看看我的-->ArrayList分析
  2. 如果大家不嫌棄,可以看看我的-->LinkedList分析
  3. 如果大家不嫌棄,可以看看我的-->雜湊表初識
  4. 徹頭徹尾理解 HashTable
  5. 美團技術團隊-Java8系列之重新認識HashMap
  6. Map 綜述(二):徹頭徹尾理解 LinkedHashMap
  7. 《Java併發程式設計的藝術》第六章6.1節CocurrrentHashMap(基於JDK 1.6,1.7分析的)實現原理及使用
  8. 深入淺出ConcurrentHashMap1.8

併發相關

  • Java記憶體模型
  • volatile原理
  • Synchronized的原理
  • AQS原理
  • Condition原理
  • ReentrantLock 原理
  • 公平鎖與非公平鎖
  • ReentrantReadWriteLock原理

推薦閱讀:

  1. 《Java併發程式設計的藝術》第二章 Java併發機制的底層實現原理
  2. 《Java併發程式設計的藝術》第三章 記憶體模型
  3. 《Java併發程式設計的藝術》第五章 Java中的鎖
  4. Java併發程式設計之Java記憶體模型
  5. Java併發程式設計之Java CAS操作
  6. Java併發程式設計之Volatile
  7. Java併發程式設計之synchronized
  8. Java併發程式設計之鎖機制之引導篇
  9. Java併發程式設計之鎖機制之Lock介面
  10. Java併發程式設計之鎖機制之AQS(AbstractQueuedSynchronizer)
  11. Java併發程式設計之鎖機制之LockSupport工具
  12. Java併發程式設計之鎖機制之Condition介面
  13. Java併發程式設計之鎖機制之重入鎖
  14. Java併發程式設計之鎖機制之讀寫鎖

執行緒相關

  • 執行緒的啟動和終止
  • 執行緒間通訊
  • 等待/通知機制

推薦閱讀:

《Java併發程式設計的藝術》第四章 Java併發程式設計基礎

執行緒池相關

  • 使用執行緒池的原因
  • 執行緒池內部原理
  • 執行緒池中的幾種重要的引數及流程說明
  • 執行緒池中幾種常見的工作佇列
  • 幾種常見的執行緒池及使用場景。

推薦閱讀: 《Java併發程式設計的藝術》第九章 Java中的執行緒池

IO相關

  • IO相關面試問題-Socket
  • IO相關面試問題-BIO/NIO

推薦閱讀:

  1. NIO相關基礎篇一
  2. NIO相關基礎篇二
  3. NIO相關基礎篇三
  4. 《UNIX 網路程式設計,卷1:套接字聯網API 第三版》第六章 I/O複用:select和poll
  5. 《深入理解Java虛擬機器JVM高階特性及最佳實踐》 第二章 Java記憶體區域與記憶體溢位異常 2.7節 直接記憶體介紹

Android基礎知識點

Activity相關

  • 典型狀況下的生命週期
  • 異常情況下的生命週期
  • 異常情況下的資料儲存
  • 各種情況下跳轉到某個Activity時目標Activity及當前Activity的生命週期
  • Activity的啟動模式及應用場景
  • 程式和應用生命週期

推薦閱讀:

  1. 《Android開發藝術探索》 第一章 Activity的生命週期和啟動模式
  2. 《Android開發藝術探索》 第九章 9.2節Activity的工作過程
  3. Google-程式和應用生命週期
  4. Google-任務和返回棧

Service相關

  • Service的定義及作用
  • Service兩種啟動方式 startService、 bindService 區別及生命週期
  • Service繫結服務的三種實現方式,擴充套件Binder類、使用Messenger、使用AIDL
  • 關於啟動服務與繫結服務間的轉換問題 先繫結服務後啟動服務、先啟動服務後繫結服務
  • 服務Service與執行緒Thread的區別
  • Android 5.0以上的隱式啟動問題及其解決方案
  • 如何保證服務不被殺死
  • IntentService的使用及原理

推薦閱讀:

  1. 《Android開發藝術探索》 第九章 9.3節Service的工作過程
  2. 關於Android Service真正的完全詳解,你需要知道的一切
  3. Android 多執行緒之IntentService 完全詳解
  4. Android 多執行緒之HandlerThread 完全詳解

BroadcastReceiver相關

  • BroadcastReceiver定義及作用、應用場景
  • BroadcastReceiver的註冊方式,靜態方式、動態方式
  • BroadcastReceiver註冊與取消的時機
  • BroadcastReceiver的不同型別,普通廣播,系統廣播、有序廣播、粘性廣播、應用類廣播

推薦閱讀:

  1. 《Android開發藝術探索》 第九章 9.4節BroadcastReceiver 的工作過程
  2. BroadcastReceiver史上最全面解析
  3. 廣播在7.0、8.0、9.0下的適配

Fragment相關

  • Fragment生命週期
  • Fragment的懶載入
  • Fragment之間的通訊
  • FragmentPagerAdapter與FragmentStatePagerAdapter的區別
  • 為什麼不建議直接通過使用new Fragment的方式傳入資料

推薦閱讀:

  1. Fragment全解析系列(一):那些年踩過的坑
  2. Google-Fragment概覽
  3. Google-與其他Fragment通訊

序列化相關

  • 序列化與反序列化的定義及區別
  • Serializable中serialVersionUID及transient關鍵字的作用
  • 序列化:Parcelable和Serializable差異

推薦閱讀:

  1. 序列化與反序列化之Parcelable和Serializable淺析
  2. 《Android開發藝術探索》 第二章 IPC基礎概念介紹

IPC相關

  • 在Android中什麼樣的情況下會使用多程式模式,如何開啟多程式
  • Android為什麼採用Binder做為IPC機制
  • IPC常用方式 使用Bundle、使用檔案共享、使用Messenger、使用AIDL、使用ContentProvider、使用Socket
  • AIDL的語義
  • AIDL如何建立
  • AIDL生成Java檔案詳細分析

推薦閱讀:

  1. 《Android開發藝術探索》 第二章 IPC機制
  2. 《深如理解LINUX核心 第三版涵蓋2.6版》 第三章 程式 3.2節程式描述符
  3. 寫給 Android 應用工程師的 Binder 原理剖析
  4. 如果需要深入瞭解,推薦GitYuan大大的 Binder 系列文章

View事件機制相關

  • View的座標體系
  • View滑動的幾種方式,使用ScrollTo/ScrollBy、使用動畫、改變佈局引數
  • 彈性滑動的原理及實現
  • View的事件分發機制,點選事件的傳遞規則,事件分發的原始碼解讀
  • 處理滑動衝突的場景及解決方法

推薦閱讀:

《Android開發藝術探索》 第三章 View的事件體系

View繪製相關

  • DecorView、Window、ViewRootImpl等概念
  • MeasureSpec概念
  • View的工作流程,measure過程、layout過程、draw過程
  • 自定義View需要注意的事項
  • Activity、Window、View三者之間的關係

推薦閱讀:

  1. 《Android開發藝術探索》第四章 View的工作原理
  2. 《Android開發藝術探索》第八章 理解Window和WindowManager
  3. Android自定義控制元件三部曲文章索引

View動畫相關

  • 常用動畫View動畫(補間動畫)、屬性動畫與幀動畫
  • 補間動畫與屬性動畫區別
  • 差值器和估值器理解
  • 屬性動畫的工作原理

推薦閱讀:

  1. Android自定義控制元件三部曲文章索引
  2. 《Android開發藝術探索》 第七章 Android動畫深入分析

Handler相關

  • Handler機制之ThreadLocal
  • Handler機制之Looper、Handler、訊息佇列如何理解
  • Handler機制之Message的傳送與取出
  • Handler機制之Message及Message的回收機制
  • Handler機制之迴圈訊息佇列的退出
  • Handler機制之記憶體洩漏
  • Handler機制之IdleHandle的理解及使用

推薦閱讀:

  1. 《Android開發藝術探索》第十章 10.2節 Android的訊息機制
  2. IdleHandle的奇思妙想----->你知道android的MessageQueue.IdleHandler嗎?
  3. Handler面試常問題目----->你真的懂Handler嗎?Handler問答
  4. 如果大家不嫌棄,可以看看我的Handler機制總結----->Anroid Handler機制總目錄

AsyncTask相關

  • AsyncTask的使用和注意事項
  • AsyncTask幾個重要的方法 doInBackgound、onProgressUpdate、onPostExecute等
  • AsyncTask的工作原理及原始碼理解

推薦閱讀:

  1. 《Android開發藝術探索》第十一章 Android的執行緒和執行緒池
  2. 《Java併發程式設計的藝術》第九章 Java中的執行緒池,第十章 Executor框架

Bitmap壓縮回收相關

  • Bitmap所佔記憶體
  • 常用壓縮圖片方式
  • LruCache原理
  • DiskLruCache原理
  • LinkedHashMap原理

推薦閱讀:

  1. 圖片佔記憶體公式:解析度 * 每個畫素大小,嚴謹嗎?
  2. 魯班圖片壓縮
  3. Map 綜述(二):徹頭徹尾理解 LinkedHashMap

ListView與RecyclerView相關

  • ListView的原理和複用機制
  • ListView和RecyclerView的區別

推薦閱讀:

  1. Android ListView工作原理完全解析,帶你從原始碼的角度徹底理解
  2. 深入理解Android中的快取機制(二)RecyclerView跟ListView快取機制對比

資料儲存相關

  • 常用資料庫框架GreenDao,官方Room
  • 資料庫資料遷移問題
  • GreenDao中一對一,一對多,多對多關係
  • SharedPreferences使用及原始碼,commit與apply()方法的區別

推薦閱讀:

  1. 資料庫基礎1
  2. 資料庫基礎2
  3. 資料庫基礎3
  4. GreenDao官方幫助文件
  5. 面試高頻題:一眼看穿 SharedPreferences
  6. GreenDao資料庫遷移幫助類 MigrationHelper

Android開源框架知識點

OkHttp相關

  • OkHttp的優點
  • OkHttp執行請求的整個流程
  • OkHttp中的攔截器
  • OkHttp中的同步請求與非同步請求的理解及其原始碼
  • OkHttp中涉及到的設計模式
  • OkHttp底層網路請求實現,socket還是URLConnection

推薦閱讀:

拆輪子系列-拆OkHttp

Retrofit相關

  • Retrofit執行請求的整個流程
  • Retrofit中ConverterFactory、CallAdapterFactory的理解
  • Retrofit中CallAdapter的介面卡模式

推薦閱讀:

拆輪子系列:拆Retrofit

RxJava相關

  • RxJava常用建立操作符 create、from、just、interval、range等
  • RxJava常用組合、合併操作符 combineLatest、join、merge、zip等
  • RxJava錯誤處理操作符 onErrorReturn、onErrorResumeNext、onExceptionResumeNext等
  • RxJava過濾操作符 filter、ofType、sample、take等
  • Rxjava背壓相關理解
  • RxJava實際開發中的使用:網路請求輪詢、網路請求巢狀回撥、從磁碟 / 記憶體快取中 獲取快取資料等

推薦閱讀:

  1. Android Rxjava:這是一篇 清晰 & 易懂的Rxjava 入門教程
  2. 如果大家想直接寫Demo,這裡我已經寫好了一份--->RxJava操作符總結

Glide相關

  • Glide的執行流程
  • Glide的快取機制
  • Glide圖片轉換
  • Glide帶進度的圖片載入功能
  • Glide記憶體、磁碟快取,優先順序使用

推薦閱讀:

  1. Android圖片載入框架最全解析(一),Glide的基本用法
  2. Android圖片載入框架最全解析(二),從原始碼的角度理解Glide的執行流程
  3. Android圖片載入框架最全解析(三),深入探究Glide的快取機制
  4. Android圖片載入框架最全解析(四),玩轉Glide的回撥與監聽
  5. Android圖片載入框架最全解析(五),Glide強大的圖片變換功能
  6. Android圖片載入框架最全解析(六),探究Glide的自定義模組功能

ButterKnife相關

  • Java註解相關Annotation
  • Java註解相關之APT工具
  • ButterKnife註解框架原理

推薦閱讀:

  1. Android 註解系列之APT工具(三)
  2. Android 註解系列之Annotation(二)
  3. ButterKnife 原理解析

EventBus相關

  • EventBus原理,及索引類的使用

推薦閱讀:

  1. Android 註解系列之APT工具(三)
  2. Android 註解系列之Annotation(二)
  3. 騰訊Bugly乾貨-老司機教你“飆”EventBus3

Android效能優化

  • 效能優化:佈局優化、繪製優化、執行緒優化等
  • ANR異常:主執行緒執行了耗時操作,如BroadcastReceiver(前臺廣播10s,後臺廣播為60s)、Service(前臺20s,後臺200s)沒有處理完相關任務等
  • OOM異常:記憶體溢位的原因
  • 記憶體洩漏:記憶體洩露的幾種場景,如單例模式引出的洩露、靜態變數導致的洩露、屬性動畫導致的記憶體洩露等

推薦閱讀:

  1. 《Android開發藝術探索》第十五章 Android效能優化
  2. Memory Profiler的使用
  3. LeakCanary庫相關介紹

Android螢幕適配知識點

  • 今日頭條適配方式
  • 寬高限定符適配方式
  • smallestWidth適配

推薦閱讀:

  1. 拉丁吳老師的--Android 目前穩定高效的UI適配方案
  2. 今日頭條適配方式
  3. SmallestWidth 限定符適配方案

Android打包知識點

  • 安卓簽名的理解
  • Gradle多渠道打包

推薦閱讀: 《Android Gradle權威指南》

Android架構知識點

  • MVC架構設計模式面試問題講解
  • MVP架構設計模式面試問題講解
  • MVVM架構設計模式面試問題講解

推薦閱讀:

  1. mvp架構設計
  2. mvvm架構設計
  3. googlesamples/android-architecture

Android不同版本特性知識點

推薦閱讀:

  1. Android不同版本下的特性
  2. 廣播在7.0、8.0、9.0下的適配
  3. Android 6.0 許可權下的適配
  4. Android 7.0 應用共享檔案(FileProvider)
  5. 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. 體系架構--->《計算機網路第七版 謝希仁》第一章 1.7.1節到1.7.5節
  2. TCP三報文握手與四報文握手--->《計算機網路第七版 謝希仁》第五章 5.9節 TCP的運輸連線管理
  3. TCP與UDP理解--->《計算機網路第七版 謝希仁》 第五章 運輸層
  4. 《計算機網路第七版 謝希仁》 第六章 應用層 第七章 網路安全
  5. HTTP1.0、HTTP1.1 和 HTTP2.0 的區別
  6. 清晰的計算機網路基礎 學習指南

設計模式知識點

  • 單例模式
  • Builder模式
  • 裝飾模式
  • 策略模式
  • 模板方法
  • 觀察者模式
  • 等.....

推薦閱讀: 《Android原始碼設計模式解析與實戰》

演算法知識點

  • 常見的八大排序方式
  • 時間複雜度的計算
  • 連結串列相關演算法,連結串列翻轉,連結串列合併等
  • 二叉樹相關演算法前序、中序、後序遍歷(遞迴,迭代)
  • 紅黑樹與BL樹

推薦閱讀:

  1. 《Java 資料結構和演算法 第二版》
  2. 時間複雜度學習(上)
  3. 時間複雜度學習(下)
  4. 刷題---->LeetCode

相關文章