前言
工作一段時間一般都會出現一個瓶頸,這個時候學習的效率就會大打折扣,如果找不到好的方式,花的時間就會很長,然而進步的空間卻很小。那麼好的方式是什麼呢?答案就是知識體系的思維導圖。
構建自己的知識體系尤爲重要,每個人都應該構建自己的知識體系,那麼如何構建自己的知識體系呢?對於我來說,我是做 Android 開發的,從畢業到現在,大概六年多的時間,小公司呆過,大公司也呆過,自己獨立開發過產品,同時也跟大團隊一起開發過。因此基本上能經歷的都會經歷過,在這幾年的開發時間裏,我基本都會有學習總結的習慣,有的是工作上用到的,有的是平常想到的 idea ,我都會總結下來,然後抽空整理一下,寫成博客。
這幾天一直在準備構成大綱,前天后後大概花了四天時間來完成大綱思維導圖。今天我就將它分享出來,歡迎大夥一起學習。
總綱
計算基礎
- 數據結構與算法
- 操作系統
- 計算機網絡
- 組成原理
編程語言
- Java
- ReactNative
- Flutter
Android學習
- 基礎入門
- 進階
- 高級
- 推薦書籍
面試總結
學習思維大綱主要由以上幾大部分組成,基礎部分,語言部分,還有其他方面的內容,不管工作還是生活都會涉及到,由於我是做 Android 開發的,因此主要會涉及 Android 開發的內容。接下來,我們就依次展開各個部分的詳細大綱進行描述:
計算機基礎
在計算機基礎部分中,最重要的當然屬於數據結構與算法,這部分在我們實際的工作中,用到的比較多,因此本公衆號會着重總結所用到的各種數據結構以及算法。
數據結構
複雜度分析
- 時間複雜度
- 空間複雜度
線性表
- 數組
- 鏈表
- 單鏈表
- 雙向鏈表
- 循環鏈表
- 靜態鏈表
- 隊列
- 順序存儲
- 鏈式存儲
- 棧
- 順序棧
- 鏈式棧
散列表
- 散列函數
- 衝突解決
樹
- 二叉樹
- 平衡二叉樹
- 二叉查找樹
- 平衡二叉樹(AVL樹,紅黑樹)
- 多路查找樹
- B樹
- B+樹
- 2-3樹
- 2-3-4樹
- 堆
- 小頂堆
- 大頂堆
- 二項堆
- 裴波那契堆
- 遍歷
- 深度優先
- 官渡優先
圖
- 存儲
- 鄰接矩陣
- 鄰接表
- 十字鏈表
- 最小生成樹
- 遍歷
- 最短路徑
- 拓撲排序
算法
基本算法思想
- 貪心算法
- 分治算法
- 動態規劃
- 回溯算法
- 枚舉算法
排序
- O(n^2)
- 冒泡排序
- 插入排序
- 選擇排序
- 希爾排序
查找
- 線性表查找
- 散列表查找
- 樹結構查找
- 圖查找
搜索
- 廣度優先
- 深度優先
字串符
- 存儲
- 模式匹配
編程語言
由於 Android 開發主要使用 Java 語言,因此對於 Java 的學習顯得尤爲重要,因此本公衆號也會着重學習 Java 各方面的知識點,對於 Android 開發,Google 目前也主推 kotlin ,因此也會涉及到 kotlin 相關的內容。對於跨平臺開發的內容,RN 和 Flutter 我們也會涉及到的。
基礎
- JDK/JRE區別
- 數據類型
- 自動裝包拆包
- 重載和重寫區別
- 接口
- 多態
- 繼承
- 內部類
高階
集合框架
- Collection
- List(ArrayLlst,LinkedList,Vector)
- set(Treeset,HashSet)
- Map
- HahsMap
- HashTable
- TreeMap
- ArrayMap
- 多線程容器
- CopyonwrteArrayLlst
- ConCurrencyHashMap
多線程/井發鎖
- 生命週期
- 啓動方式
- 線程安全/鎖
- 線程池
進程/通信方式
- Socket
- 消息隊列
- 管道
- 內存共享
- AIDL
- 信號量
反射
泛型
動態代理
垃圾回收和GC
- 分代回收
- 回收算法
- 垃圾回收機制
- 可達性分析
- 引用類型
JVM虛擬機
- classLoader
- JVM內存模型
- GC回收機制
註解
Android
接下來就是我們的重頭戲 Android 部分的知識點,Android 部分的知識點多而且雜,因此做一個學習大綱很重要,將重要的知識點都以大綱的形式列出來,這對於我們學習 Android 開發幫助很大。
入門
Androld studio安裝及插件使用
- 安裝
- 常用插件
- GsonFormat
- Android Parcelable code generator
- Lifecycle sorter
- Adb WIFI
- ECTranslation
四大組件
- Actlvity
- Activty啓動過程
- 啓動模式
- 生命週期
- taskAtfinity
- intent
- onNewIntent
- Service
- startService
- bindService
- IntentService
- ContentProvider
- BroadCaseReceiver
- 註冊方式(動態,靜態)
- 傳遞方式(有序,無序)
- 事件種類(自定義,系統)
- 範圍(全局,本地)
組件持有的Context和Appllcation區別
fragment
- 懶加載
- 與Activity/fragment通信
view的基礎知識
- 工作原理
- onMeasure
- onDraw(palnt,Bltmap,Canvas,Matrix,PorterDuftXtermode)
- onL ayout
- 基礎
- 查看工具(GestureDetector,VelootyTracker,VlewConfiguration)
- 監聽(onTouch,onTouchEvent,onCllck,執行順序)
- 滑動
- 事件分發(dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent)
- 滑動衝突解決
常用控件/佈局
- Recyclerview
- SupportLibrary
- v4
- v7
- v11
- Webview
- JSBridge
- Deeplink
- 首屏加速
- 內存泄漏
- Surfaceview
- Dialog
- SnackBar
- Notitication
- ActlonBar
- 約束佈局
基礎動畫
- 屬性動畫
- 幀動畫
- Animation補問動畫
- MaterialDesign動畫
MaterialDesign
- 狀態欄/導航欄/沉漫式設計
資源
- 單位
- theme
- Layout
- Drawable
- .9patchEH
- Shape(gradient,size,stroke,padding,corners)
- selector
- 適配
進階
進程/線程/事件
- 線程通信
- Handler
- Timer/TimerTask
- Thread/ThreadPoolExcutor
- AsyncTask
- IntentServlce
- 進程
- 優先級(可見進程,服務進程,後臺進程,空進程,前臺進程)
- 進程間通信(Messager,AIDL,BInder,序列化,匿名共享內存)
- 事件
- 事件總線
- 應用保活
- 白色保活
- 黑色保活
- 灰色保活
數據持久化
- 本地存儲
- Sqlite
- sharedPreterence
- 文件
- 數據格式
- Json
- xml
- 跨進程
- Serlalzable
- Parcelable
性能優化
- 內存優化
- 電量優化
- 數據傳輸優化
- 網絡優化
- 緩存優化
- 其他優化(啓動時間優化,佈局優化,apk大小優化)
架構設計
- MVP
- MVC
- MVVM
- Androld Architecture Components
- Androld Jetpack
開源框架
- ORM數據庫框架/GreenDao
- 圖片緩存框架/Glide/Fresco/UlL/picasso
- 文件框架
- 網絡框架/RetrofitlVolley/OKhttp
- 注入依賴/ButterKnite/Dagger2
- 序列化(gson/tastjson)
- 路由ARouter
- Rxjava
- 事件總銭EventBus
高級
Framework層源碼
- UI組件
- 四大組件
- fragment
- context/application
- window
- webvlew
- recyclervlew
- 系統服務
- ActlvityManagerService
- Window/WIndowManager
- WindowManagerService
- ServlceManager
- 流程
- Androld系統啓動流程
- 應用啓動流程
- apk安裝過程
- apk打包過程
- Androld系統
- 內存管理機制
- 任務管理機制
- 消息通信機制
- 安全機制
逆向安全
- root原理
- small字節碼
- dex
- 加固和反加固
- hook
- ndk
- 混漸
- 簽名
虛擬機
- Dalvlk虛擬機
- ART虛擬機
熱門技術
- 插件話原理
- 組件化原理
- 熱修復原理
結尾
對於其他部分的內容,我將準備部分涉及到,作爲平常學習的潤滑劑,主要的還是上面的三大部分,如果能將上面三大部分通學一遍,從入門到高級應該只是時間的問題。接來下的文章我們會分篇將對以上部分的大綱進行詳細的記錄學習總結。
關於程序員系統學習
我們都很渺小,在宇宙中甚至比不上一顆塵埃,可是人爲何稱之爲人,就是因爲人懂得思考,知道學習的重要性。並且隨時願意改變自己,重新出發。我們一生都在忙忙碌碌,爲自己而活的時間太少太少,努力奔跑不僅僅是爲了活着,更多的是實現我們自己的理想與報復。存在即爲意義,我希望大家能跟我一樣堅持,你不知道下一個黃金浪潮在哪裏,但是隻要你在裏面,總會趕上的啊!下一個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文檔,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。
真正最能鍛鍊能力的便是直接去閱讀源碼,不僅限於閱讀各大系統源碼,還包括各種優秀的開源庫。
《486頁超全面Android開發相關源碼精編解析》
刷大廠面試題備戰,增加大廠通過率
歷時半年,整理了這份市面上最全面的安卓面試題解析大全。
1.可以通過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數
《379頁Android開發面試寶典》
以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。
最後還有耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記
等等,這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。