前言
構建一個屬於自己的知識體系,能夠讓我們學到的知識體系化。讓自己清楚哪塊是自己的知識盲區,哪塊已經構建起根基。然後根據實際情況,有針對性的進行模組學習。讓自己成為一個合格的Android工程師。
平時看部落格或者學知識,學到的東西比較零散,沒有獨立的知識模組概念,而且學了之後很容易忘。於是我建立了一個自己的知識體系,將平時學到的東西都歸類然後放裡面,需要的時候呢也方便複習。過了段時間,我覺得這樣還是不夠好,於是我最近花了點時間,整理了一下Android中的常見知識,更清晰地認識自己的知識邊界到底在哪裡,哪些東西還不足。
此知識體系呢只是一個參考,大家可以根據自己的實際情況進行增刪,然後進行查漏補缺,提升自己~
一、計算機基礎1.計算機網路計算機網路概述
網路七層協議TCP/IP四層模型底層協議底層裝置應用層
HTTP協議(⭐⭐⭐)DHCP協議(⭐⭐⭐)NAT傳輸層(⭐⭐⭐)
TCP協議UDP協議網路層
IP協議ICMP協議2.作業系統(⭐⭐⭐)作業系統基本功能
程序管理作業管理/檔案管理儲存管理/裝置管理Linux系統
記憶體管理程序管理檔案系統常見命令操作補充
自旋鎖/互斥鎖/讀寫鎖/條件變數/共享檔案訊息佇列/管道/訊號量作業系統的使用者態與核心態上下文切換成本程序,執行緒與協程二、Java基礎(⭐⭐⭐)1.集合原理ArrayListVectorStackLinkedListHashMapHashtableTreeMapLinkedHashMapHashSetTreeSetCopyOnWriteArrayListConcurrentHashMapLinkedBlockingQueueSynchronousQueueSparseArrayArrayMap2.其他面向物件設計模式反射泛型註解三、Java併發1.執行緒基礎實現多執行緒啟動執行緒停止執行緒執行緒的6種狀態各種各樣的鎖悲觀鎖和樂觀鎖共享鎖和獨佔鎖公平鎖和非公平鎖可重入鎖和非可重入鎖可中斷鎖和非可中斷鎖自旋鎖和非自旋鎖偏斜鎖/輕量級鎖/重量級鎖JVM對synchronized鎖的最佳化wait/notify/sleep/join等重要方法守護執行緒,優先順序等屬性執行緒安全Future獲取執行結果Fork/Join模式CountDownLatchCyclicBarrierSemaphoreConditionPhaser重排序原子性記憶體可見性CAS原理AQS框架2.其他併發容器
Vector/HashtableConcurrentHashMapCopyOnWriteArrayList阻塞佇列非阻塞佇列ConcurrentSkipListMapatomic包,6種原子類
分類原子類與鎖原子類與volatileThreadLocal
使用場景原理執行緒池
優點引數分類執行任務流程拒絕策略正確關閉執行緒池執行緒池複用原理四、JVM虛擬機器記憶體區域記憶體模型記憶體分配回收策略Java物件的建立、記憶體佈局和訪問定位GC: 引用計數及可達性分析,垃圾回收演算法,G1及ZGC類載入機制雙親委派模型編譯器最佳化: 方法內聯,逃逸分析虛擬機器相關: HotSpot及JIT,Dalvik,ART及AOTJVM執行方法JVM實現反射JVM實現泛型JVM實現異常JVM實現註解五、資料結構與演算法1.資料結構棧佇列陣列連結串列Hash表二叉樹基礎排序演算法字串操作2.演算法分治演算法動態規劃貪心演算法分支限界法3.刷題CS-Notes劍指Offer題解CS-NotesLeetCode題解JsonChao高頻題集六、Android基礎1.核心知識點四大元件
ActivityServiceBroadcastReceiverContentProvider佈局和控制元件
RelativeLayoutFrameLayoutLinearLayoutConstraintLayoutButtonTextViewRecyclerView......自定義View/ViewGroup
onMeasureonLayoutonDrawonTouchEventdispatchTouchEvent自定義屬性動畫和手勢
View動畫屬性動畫layoutAnimation檢視動畫手勢檢測(GestureDetector)縮放手勢檢測(ScaleGestureDecetor)網路
請求網路解析資料圖片載入
本地圖片網路圖片壓縮圖片多圖列表DiskLruCacheHandler
LooperMessageMessageQueue記憶體洩漏ThreadLocalAndroid各版本新特性
Android5.0Android6.0Android7.0Android8.0(O)Android9.0(P)Android10.0(Q)Android11.0(R)其他
adb常用命令檔案和資料庫非同步執行緒池Resources2.開源庫使用Retrofit/OKhttpRxJavaGlide註解框架Jetpack3.效能最佳化快-流暢的體驗
佈局最佳化繪製最佳化記憶體最佳化啟動最佳化其他穩-穩定
避免記憶體洩露避免崩潰省-省電/流量
使用JobScheduler排程任務使用懶惰法則小-安裝包小
apk構成包體最佳化七、Android進階1.核心知識點多程序
BinderAIDLMessengerActivity難點
onSaveInstanceState()和onRestoreInstanceState()intent-filter匹配規則生命週期啟動模式Activity啟動過程App啟動過程Service難點
startService流程bindService流程BroadcastReceiver難點
註冊/傳送/接收工作原理ContentProvider難點
ContentProvider啟動過程其他
View繪製事件分發訊息佇列AsyncTask原理RemoteViewsWindow和ViewRootImpl2.開源庫原理OkHttpRetrofitRxJavaGlideLeakCanaryGreenDaoARouter3.Gradle編譯混淆簽名GroovyGradle構建流程GradlePluginGradle構建最佳化App構建過程差異化打包4.初級架構設計模式MVC,MVP,MVVM5.JNIJNI基礎NDK基礎6.動態化前置知識
Android打包流程Java位元組碼GradlePluginTransformAPIASM熱修復:nuwa&Tinker
經典-64k問題dex分包MultiDex最佳化findClass原理QQ空間熱補丁方案Nuwa應用層實現NuwaGradle外掛化:VirtualAPK
載入類資源訪問生命週期管理7.編譯插樁AOPASM8.Framework系統服務
Zygote啟動Android系統啟動ServiceManager啟動及工作原理應用程序
啟動流程啟用Binder機制Application初始化流程ContextUI體系
顯示原理UI執行緒啟動螢幕重新整理機制surfacevsync程序通訊
BinderIPC通訊流程Binder物件跨程序傳遞OneWay機制執行緒通訊
訊息佇列訊息傳遞機制Handler訊息延遲實現IdleHandler原理訊息屏障ThreadLocal原理其他
跨程序傳遞大圖片四大元件啟動原理八、領域專家1.效能最佳化方向穩定性最佳化啟動速度最佳化繪製最佳化記憶體最佳化包體積最佳化網路最佳化IO最佳化儲存最佳化耗電最佳化2.基礎架構方向Android工程實踐Gradle自動化構建編譯插樁技術Android架構Android熱修復Android外掛化Android核心原始碼3.NDK、音影片CC++JNI基礎編譯原理與語法基礎Linux基礎熱修復Gif圖實現音影片基礎ffmpegWebRTCopenglvulkanopencv九、其他Android相關1.Kotlin(⭐⭐)基礎部分
內建型別型別初步表達算式函式進階型別進階高階部分
泛型反射註解協程關於程式設計師系統學習我們都很渺小,在宇宙中甚至比不上一顆塵埃,可是人為何稱之為人,就是因為人懂得思考,知道學習的重要性。並且隨時願意改變自己,重新出發。我們一生都在忙忙碌碌,為自己而活的時間太少太少,努力奔跑不僅僅是為了活著,更多的是實現我們自己的理想與報復。存在即為意義,我希望大家能跟我一樣堅持,你不知道下一個黃金浪潮在哪裡,但是隻要你在裡面,總會趕上的啊!下一個Android輝煌的時刻可能就在明天呢?
目前我們要做的就是選好自己細分領域深入研究,對基礎原理性內容深入理解,儘快向高階水平靠近並達到。當然也要了解新技術,擁有開放的心態去學習一些新技術,不要一開始出來一個新技術就轉入學習,這樣會導致啥都會一點啥都不會,當然新技術是有一個發展過程的,不會立馬流行和大量應用等它稍微成熟點。
這樣你會少踩很多坑,也不要排斥它,完全不去理會和了解學習,正確的方式是簡單瞭解這個技術產生是為了解決什麼問題,有什麼優缺點已經目前發展成熟度和應用範圍,我們還是要多抓住技術的本質和基礎,這樣出現了新技術學起來也會很輕鬆,當然機會合適了再去學習它。 所以,找準自己的定位及細分領域。
接下來就需要梳理知識,提升儲備了!(Android移動架構師七大專題學習資源)
架構師築基必備技能:深入Java泛型+註解深入淺出+併發程式設計+資料傳輸與序列化+Java虛擬機器原理+反射與類載入+動態代理+高效IOAndroid高階UI與FrameWork原始碼:高階UI晉升+Framework核心解析+Android元件核心+資料持久化360°全方面效能調優:設計思想與程式碼質量最佳化+程式效能最佳化+開發效率最佳化解讀開源框架設計思想:熱修復設計+外掛化框架解讀+元件化框架設計+圖片載入框架+網路訪問框架設計+RXJava響應式程式設計框架設計+IOC架構設計+Android架構元件JetpackNDK模組開發:NDK基礎知識體系+底層圖片處理+音影片開發微信小程式:小程式介紹+UI開發+API操作+微信對接Hybrid 開發與Flutter:Html5專案實戰+Flutter進階知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。
然後再是透過原始碼來系統性地學習
只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。
真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。
《486頁超全面Android開發相關原始碼精編解析》
刷大廠面試題備戰,增加大廠透過率
歷時半年,整理了這份市面上最全面的安卓面試題解析大全。
1.可以透過目錄索引直接翻看需要的知識點,查漏補缺。2.五角星數表示面試問到的頻率,代表重要推薦指數
《379頁Android開發面試寶典》