前言
構建一個屬於自己的知識體系,能夠讓我們學到的知識體系化。讓自己清楚哪塊是自己的知識盲區,哪塊已經構建起根基。然後根據實際情況,有針對性的進行模塊學習。讓自己成爲一個合格的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.五角星數表示面試問到的頻率,代表重要推薦指數
以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。