收藏=會了,2021 最新Android常見知識體系,精通這些大廠Offer還不拿到手軟?

前言

構建一個屬於自己的知識體系,能夠讓我們學到的知識體系化。讓自己清楚哪塊是自己的知識盲區,哪塊已經構建起根基。然後根據實際情況,有針對性的進行模塊學習。讓自己成爲一個合格的Android工程師。

平時看博客或者學知識,學到的東西比較零散,沒有獨立的知識模塊概念,而且學了之後很容易忘。於是我建立了一個自己的知識體系,將平時學到的東西都歸類然後放裏面,需要的時候呢也方便複習。過了段時間,我覺得這樣還是不夠好,於是我最近花了點時間,整理了一下Android中的常見知識,更清晰地認識自己的知識邊界到底在哪裏,哪些東西還不足。

此知識體系呢只是一個參考,大家可以根據自己的實際情況進行增刪,然後進行查漏補缺,提升自己~

一、計算機基礎

1.計算機網絡

計算機網絡概述

  • 網絡七層協議
  • TCP/IP四層模型
  • 底層協議
  • 底層設備

應用層

  • HTTP協議(⭐⭐⭐)
  • DHCP協議(⭐⭐⭐)
  • NAT

傳輸層(⭐⭐⭐)

  • TCP協議
  • UDP協議

網絡層

  • IP協議
  • ICMP協議

2.操作系統(⭐⭐⭐)

操作系統基本功能

  • 進程管理
  • 作業管理/文件管理
  • 存儲管理/設備管理

Linux系統

  • 內存管理
  • 進程管理
  • 文件系統
  • 常見命令操作

補充

  • 自旋鎖/互斥鎖/讀寫鎖/條件變量/共享文件
  • 消息隊列/管道/信號量
  • 操作系統的用戶態與內核態
  • 上下文切換成本
  • 進程,線程與協程

二、Java基礎(⭐⭐⭐)

1.集合原理

  • ArrayList
  • Vector
  • Stack
  • LinkedList
  • HashMap
  • Hashtable
  • TreeMap
  • LinkedHashMap
  • HashSet
  • TreeSet
  • CopyOnWriteArrayList
  • ConcurrentHashMap
  • LinkedBlockingQueue
  • SynchronousQueue
  • SparseArray
  • ArrayMap

2.其他

  • 面向對象
  • 設計模式
  • 反射
  • 泛型
  • 註解

三、Java併發

1.線程基礎

  • 實現多線程
  • 啓動線程
  • 停止線程
  • 線程的6種狀態
  • 各種各樣的鎖
    • 悲觀鎖和樂觀鎖
    • 共享鎖和獨佔鎖
    • 公平鎖和非公平鎖
    • 可重入鎖和非可重入鎖
    • 可中斷鎖和非可中斷鎖
    • 自旋鎖和非自旋鎖
    • 偏斜鎖/輕量級鎖/重量級鎖
    • JVM對synchronized鎖的優化
  • wait/notify/sleep/join等重要方法
  • 守護線程,優先級等屬性
  • 線程安全
  • Future獲取運行結果
  • Fork/Join模式
  • CountDownLatch
  • CyclicBarrier
  • Semaphore
  • Condition
  • Phaser
  • 重排序
  • 原子性
  • 內存可見性
  • CAS原理
  • AQS框架

2.其他

併發容器

  • Vector/Hashtable
  • ConcurrentHashMap
  • CopyOnWriteArrayList
  • 阻塞隊列
  • 非阻塞隊列
  • ConcurrentSkipListMap

atomic包,6種原子類

  • 分類
  • 原子類與鎖
  • 原子類與volatile

ThreadLocal

  • 使用場景
  • 原理

線程池

  • 優點
  • 參數
  • 分類
  • 執行任務流程
  • 拒絕策略
  • 正確關閉線程池
  • 線程池複用原理

四、JVM虛擬機

  • 內存區域
  • 內存模型
  • 內存分配回收策略
  • Java對象的創建、內存佈局和訪問定位
  • GC: 引用計數及可達性分析,垃圾回收算法,G1及ZGC
  • 類加載機制
  • 雙親委派模型
  • 編譯器優化: 方法內聯,逃逸分析
  • 虛擬機相關: HotSpot及JIT,Dalvik,ART及AOT
  • JVM執行方法
  • JVM實現反射
  • JVM實現泛型
  • JVM實現異常
  • JVM實現註解

五、數據結構與算法

1.數據結構

  • 隊列
  • 數組
  • 鏈表
  • Hash表
  • 二叉樹
  • 基礎排序算法
  • 字符串操作

2.算法

  • 分治算法
  • 動態規劃
  • 貪心算法
  • 分支限界法

3.刷題

六、Android基礎

1.核心知識點

四大組件

  • Activity
  • Service
  • BroadcastReceiver
  • ContentProvider

佈局和控件

  • RelativeLayout
  • FrameLayout
  • LinearLayout
  • ConstraintLayout
  • Button
  • TextView
  • RecyclerView
  • ......

自定義View/ViewGroup

  • onMeasure
  • onLayout
  • onDraw
  • onTouchEvent
  • dispatchTouchEvent
  • 自定義屬性

動畫和手勢

  • View動畫
  • 屬性動畫
  • layoutAnimation視圖動畫
  • 手勢檢測(GestureDetector)
  • 縮放手勢檢測(ScaleGestureDecetor)

網絡

  • 請求網絡
  • 解析數據

圖片加載

  • 本地圖片
  • 網絡圖片
  • 壓縮圖片
  • 多圖列表
  • DiskLruCache

Handler

  • Looper
  • Message
  • MessageQueue
  • 內存泄漏
  • ThreadLocal

Android各版本新特性

  • Android5.0
  • Android6.0
  • Android7.0
  • Android8.0(O)
  • Android9.0(P)
  • Android10.0(Q)
  • Android11.0(R)

其他

  • adb常用命令
  • 文件和數據庫
  • 異步線程池
  • Resources

2.開源庫使用

  • Retrofit/OKhttp
  • RxJava
  • Glide
  • 註解框架
  • Jetpack

3.性能優化

快-流暢的體驗

  • 佈局優化
  • 繪製優化
  • 內存優化
  • 啓動優化
  • 其他

穩-穩定

  • 避免內存泄露
  • 避免崩潰

省-省電/流量

  • 使用JobScheduler調度任務
  • 使用懶惰法則

小-安裝包小

  • apk構成
  • 包體優化

七、Android進階

1.核心知識點

多進程

  • Binder
  • AIDL
  • Messenger

Activity難點

  • onSaveInstanceState()和onRestoreInstanceState()
  • intent-filter匹配規則
  • 生命週期
  • 啓動模式
  • Activity啓動過程
  • App啓動過程

Service難點

  • startService流程
  • bindService流程

BroadcastReceiver難點

  • 註冊/發送/接收工作原理

ContentProvider難點

  • ContentProvider啓動過程

其他

  • View繪製
  • 事件分發
  • 消息隊列
  • AsyncTask原理
  • RemoteViews
  • Window和ViewRootImpl

2.開源庫原理

  • OkHttp
  • Retrofit
  • RxJava
  • Glide
  • LeakCanary
  • GreenDao
  • ARouter

3.Gradle

  • 編譯
  • 混淆
  • 簽名
  • Groovy
  • Gradle構建流程
  • GradlePlugin
  • Gradle構建優化
  • App構建過程
  • 差異化打包

4.初級架構

  • 設計模式
  • MVC,MVP,MVVM

5.JNI

  • JNI基礎
  • NDK基礎

6.動態化

前置知識

  • Android打包流程
  • Java字節碼
  • GradlePlugin
  • TransformAPI
  • ASM

熱修復:nuwa&Tinker

  • 經典-64k問題
  • dex分包
  • MultiDex優化
  • findClass原理
  • QQ空間熱補丁方案
  • Nuwa應用層實現
  • NuwaGradle

插件化:VirtualAPK

  • 加載類
  • 資源訪問
  • 生命週期管理

7.編譯插樁

  • AOP
  • ASM

8.Framework

系統服務

  • Zygote啓動
  • Android系統啓動
  • ServiceManager啓動及工作原理

應用進程

  • 啓動流程
  • 啓用Binder機制
  • Application初始化流程
  • Context

UI體系

  • 顯示原理
  • UI線程啓動
  • 屏幕刷新機制
  • surface
  • vsync

進程通信

  • Binder
  • IPC通信流程
  • Binder對象跨進程傳遞
  • OneWay機制

線程通信

  • 消息隊列
  • 消息傳遞機制
  • Handler消息延遲實現
  • IdleHandler原理
  • 消息屏障
  • ThreadLocal原理

其他

  • 跨進程傳遞大圖片
  • 四大組件啓動原理

八、領域專家

1.性能優化方向

  • 穩定性優化
  • 啓動速度優化
  • 繪製優化
  • 內存優化
  • 包體積優化
  • 網絡優化
  • IO優化
  • 存儲優化
  • 耗電優化

2.基礎架構方向

  • Android工程實踐
  • Gradle自動化構建
  • 編譯插樁技術
  • Android架構
  • Android熱修復
  • Android插件化
  • Android核心源碼

3.NDK、音視頻

  • C
  • C++
  • JNI基礎
  • 編譯原理與語法基礎
  • Linux基礎
  • 熱修復
  • Gif圖實現
  • 音視頻基礎
  • ffmpeg
  • WebRTC
  • opengl
  • vulkan
  • opencv

九、其他Android相關

1.Kotlin(⭐⭐)

基礎部分

  • 內置類型
  • 類型初步
  • 表達算式
  • 函數進階
  • 類型進階

高級部分

  • 泛型
  • 反射
  • 註解
  • 協程

關於程序員系統學習

我們都很渺小,在宇宙中甚至比不上一顆塵埃,可是人爲何稱之爲人,就是因爲人懂得思考,知道學習的重要性。並且隨時願意改變自己,重新出發。我們一生都在忙忙碌碌,爲自己而活的時間太少太少,努力奔跑不僅僅是爲了活着,更多的是實現我們自己的理想與報復。存在即爲意義,我希望大家能跟我一樣堅持,你不知道下一個黃金浪潮在哪裏,但是隻要你在裏面,總會趕上的啊!下一個Android輝煌的時刻可能就在明天呢?

目前我們要做的就是選好自己細分領域深入研究,對基礎原理性內容深入理解,儘快向高級水平靠近並達到。當然也要了解新技術,擁有開放的心態去學習一些新技術,不要一開始出來一個新技術就轉入學習,這樣會導致啥都會一點啥都不會,當然新技術是有一個發展過程的,不會立馬流行和大量應用等它稍微成熟點。

這樣你會少踩很多坑,也不要排斥它,完全不去理會和了解學習,正確的方式是簡單瞭解這個技術產生是爲了解決什麼問題,有什麼優缺點已經目前發展成熟度和應用範圍,我們還是要多抓住技術的本質和基礎,這樣出現了新技術學起來也會很輕鬆,當然機會合適了再去學習它。 所以,找準自己的定位及細分領域。

多餘的話就不講了,接下來將分享面試的一個複習路線,如果你也在準備面試但是不知道怎麼高效複習,可以參考一下我的複習路線,有任何問題也歡迎一起互相交流,加油吧!

首先是超級詳細得不能再詳細的Android開發學習思維導圖,因爲圖片實在是太大了,所以我就只把二級目錄的內容放出來,更加詳細的你們可以主頁掃微信二維碼獲取

接下來就需要梳理知識,提升儲備了!(Android移動架構師七大專題學習資源)

  • 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO

  • Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化

  • 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化

  • 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack

  • NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發

  • 微信小程序:小程序介紹+UI開發+API操作+微信對接

  • Hybrid 開發與Flutter:Html5項目實戰+Flutter進階

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

然後再是通過源碼來系統性地學習

只要是程序員,不管是Java還是Android,如果不去閱讀源碼,只看API文檔,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀源碼,不僅限於閱讀各大系統源碼,還包括各種優秀的開源庫。

刷大廠面試題備戰,增加大廠通過率

歷時半年,整理了這份市面上最全面的安卓面試題解析大全。

1.可以通過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章