現在的人自我意識越來越強,專注做自己的事不太會在意別人的眼光,不管別人如何評價路,畢竟腳下的路是自己在走。
最近有位網友在職場論壇上發帖,說看見地鐵上有一程序員大哥在寫代碼,並且配上了一張照片。
從照片中可以看出,一位男子坐在靠地鐵欄杆的地方,把包放在腿上,墊着電腦,噼噼啪啪的在工作,地鐵上人不多,顯然不是高峯期,他工作的狀態很專注。
沒想到程序員的這個舉動卻被路人吐槽說:“有什麼好裝的”,地鐵裏手機信號都不好,如果遇到緊急的bug,早就下車找地方去修改了,還用在地鐵裏幹。
但這個網友的帖子立刻引來其他網友的回懟,說寫代碼根本不用網絡而且地鐵的網絡現在也很好,就是因爲他覺得寫代碼是一個很高大上的事情,所以纔會覺得程序員在裝。
其實在程序員看來這就是他的工作,是因爲工作太多,進度太趕,實在忙不過來,或者因爲在下班的路上,突然有了靈感纔在地鐵裏幹活。
也有網友說,不管他是不是裝,他都是在工努力工作,對於這種抓緊分分秒秒都在拼搏的年輕人,我們應該對他心生敬意,而不是冷嘲熱諷。
如果一個人在地鐵裏背英文單詞,是不是也會被人諷刺裝呢,但是有很多人就是這樣不斷充實自己,才讓自己變得更優秀。
也有人說他不是在裝,沒有從事過這個行業的人不瞭解,真的是太忙了,地鐵裏不幹,可能回家就要多幹一小時,利用地鐵的時間多幹一點,那麼回家就可以多休息一會。
分享讀者
作爲一名Android開發,與其整天996,拼命加班,不妨正視自己的缺點和不足,構建一個屬於自己的知識體系,提升工作效率。
同時也能夠讓我們學到的知識體系化.讓自己清楚哪塊是自己的知識盲區,哪塊已經構建起根基.然後根據實際情況,有針對性的進行模塊學習.讓自己成爲一個合格的Android工程師.
我們平時看博客或者學知識,學到的東西比較零散,沒有獨立的知識模塊概念,而且學了之後很容易忘.於是我建立了一個自己的筆記倉庫 (一個我長期維護的筆記倉庫,感興趣的可以點個star~你的star是我寫作的巨大大大大的動力),將平時學到的東西都歸類然後放裏面,需要的時候呢也方便複習.過了段時間,我覺得這樣還是不夠好,於是我最近花了點時間,整理了一下Android中的常見知識,畫了一張思維導圖.更清晰地認識自己的知識邊界到底在哪裏,哪些東西還不足.
此知識體系呢只是一個參考,大家可以根據自己的實際情況進行鍼對性學習,然後進行查漏補缺,提升自己~
1. 計算機基礎
1.1 計算機網絡
1.1.1 計算機網絡概述
-
網絡七層協議
-
TCP/IP四層模型
-
底層協議
-
底層設備
1.1.2 應用層
-
HTTP協議(⭐⭐⭐)
-
DHCP協議(⭐⭐⭐)
-
NAT
1.1.3 傳輸層(⭐⭐⭐)
-
TCP協議
-
UDP協議
1.1.4 網絡層
-
IP協議
-
ICMP協議
1.2 操作系統(⭐⭐⭐)
1.2.1 操作系統基本功能
-
進程管理
-
作業管理/文件管理
-
存儲管理/設備管理
1.2.2 Linux系統
-
內存管理
-
進程管理
-
文件系統
-
常見命令操作
1.2.3 補充
-
自旋鎖/互斥鎖/讀寫鎖/條件變量/共享文件
-
消息隊列/管道/信號量
-
操作系統的用戶態與內核態
-
上下文切換成本
-
進程,線程與協程
2. Java基礎(⭐⭐⭐)
2.1 集合原理
-
ArrayList
-
Vector
-
Stack
-
LinkedList
-
HashMap
-
Hashtable
-
TreeMap
-
LinkedHashMap
-
HashSet
-
TreeSet
-
CopyOnWriteArrayList
-
ConcurrentHashMap
-
LinkedBlockingQueue
-
SynchronousQueue
-
SparseArray
-
ArrayMap
2.2 其他
-
面向對象
-
設計模式
-
反射
-
泛型
-
註解
3. Java併發
3.1 線程基礎
-
實現多線程
-
啓動線程
-
停止線程
-
線程的6種狀態
-
各種各樣的鎖
-
悲觀鎖和樂觀鎖
-
共享鎖和獨佔鎖
-
公平鎖和非公平鎖
-
可重入鎖和非可重入鎖
-
可中斷鎖和非可中斷鎖
-
自旋鎖和非自旋鎖
-
偏斜鎖/輕量級鎖/重量級鎖
-
JVM對synchronized鎖的優化
-
-
wait/notify/sleep/join等重要方法
-
守護線程,優先級等屬性
-
線程安全
-
Future獲取運行結果
-
Fork/Join模式
-
CountDownLatch
-
CyclicBarrier
-
Semaphore
-
Condition
-
Phaser
-
重排序
-
原子性
-
內存可見性
-
CAS原理
-
AQS框架
3.2 其他
3.2.1 併發容器
-
Vector/Hashtable
-
ConcurrentHashMap
-
CopyOnWriteArrayList
-
阻塞隊列
-
非阻塞隊列
-
ConcurrentSkipListMap
3.2.2 atomic包,6種原子類
-
分類
-
原子類與鎖
-
原子類與volatile
3.2.3 ThreadLocal
-
使用場景
-
原理
3.3.4 線程池
-
優點
-
參數
-
分類
-
執行任務流程
-
拒絕策略
-
正確關閉線程池
-
線程池複用原理
4. JVM虛擬機
-
內存區域
-
內存模型
-
內存分配回收策略
-
Java對象的創建、內存佈局和訪問定位
-
GC: 引用計數及可達性分析,垃圾回收算法,G1及ZGC
-
類加載機制
-
雙親委派模型
-
編譯器優化: 方法內聯,逃逸分析
-
虛擬機相關: HotSpot及JIT,Dalvik,ART及AOT
-
JVM執行方法
-
JVM實現反射
-
JVM實現泛型
-
JVM實現異常
-
JVM實現註解
5. 數據結構與算法
5.1 數據結構
-
棧
-
隊列
-
數組
-
鏈表
-
Hash表
-
二叉樹
-
基礎排序算法
-
字符串操作
5.2 算法
-
分治算法
-
動態規劃
-
貪心算法
-
分支限界法
5.3 刷題
6. Android基礎
6.1 核心知識點
6.1.1 四大組件
-
Activity
-
Service
-
BroadcastReceiver
-
ContentProvider
6.1.2 佈局和控件
-
RelativeLayout
-
FrameLayout
-
LinearLayout
-
ConstraintLayout
-
Button
-
TextView
-
RecyclerView
-
…
6.1.3 自定義View/ViewGroup
-
onMeasure
-
onLayout
-
onDraw
-
onTouchEvent
-
dispatchTouchEvent
-
自定義屬性
6.1.4 動畫和手勢
-
View動畫
-
屬性動畫
-
layoutAnimation視圖動畫
-
手勢檢測(GestureDetector)
-
縮放手勢檢測(ScaleGestureDecetor)
6.1.5 網絡
-
請求網絡
-
解析數據
6.1.6 圖片加載
-
本地圖片
-
網絡圖片
-
壓縮圖片
-
多圖列表
-
DiskLruCache
6.1.7 Handler
-
Looper
-
Message
-
MessageQueue
-
內存泄漏
-
ThreadLocal
6.1.8 Android各版本新特性
-
Android5.0
-
Android6.0
-
Android7.0
-
Android8.0(O)
-
Android9.0§
-
Android10.0(Q)
-
Android11.0®
6.1.9 其他
-
adb常用命令
-
文件和數據庫
-
異步線程池
-
Resources
6.2 開源庫使用
-
Retrofit/OKhttp
-
RxJava
-
Glide
-
註解框架
-
Jetpack
6.3 性能優化
6.3.1 快-流暢的體驗
-
佈局優化
-
繪製優化
-
內存優化
-
啓動優化
-
其他
6.3.2 穩-穩定
-
避免內存泄露
-
避免崩潰
6.3.3 省-省電/流量
-
使用JobScheduler調度任務
-
使用懶惰法則
6.3.4 小-安裝包小
-
apk構成
-
包體優化
7. Android進階
7.1 核心知識點
7.1.1 多進程
-
Binder
-
AIDL
-
Messenger
7.1.2 Activity難點
-
onSaveInstanceState()和onRestoreInstanceState()
-
intent-filter匹配規則
-
生命週期
-
啓動模式
-
Activity啓動過程
-
App啓動過程
7.1.3 Service難點
-
startService流程
-
bindService流程
7.1.4 BroadcastReceiver難點
- 註冊/發送/接收工作原理
7.1.5 ContentProvider難點
- ContentProvider啓動過程
7.1.6
-
View繪製
-
事件分發
-
消息隊列
-
AsyncTask原理
-
RemoteViews
-
Window和ViewRootImpl
7.2 開源庫原理
-
OkHttp
-
Retrofit
-
RxJava
-
Glide
-
LeakCanary
-
GreenDao
-
ARouter
7.3 Gradle
-
編譯
-
混淆
-
簽名
-
Groovy
-
Gradle構建流程
-
GradlePlugin
-
Gradle構建優化
-
App構建過程
-
差異化打包
7.4 初級架構
-
設計模式
-
MVC,MVP,MVVM
7.5 JNI
-
JNI基礎
-
NDK基礎
7.6 動態化
7.6.1 前置知識
-
Android打包流程
-
Java字節碼
-
GradlePlugin
-
TransformAPI
-
ASM
7.6.2 熱修復:nuwa&Tinker
-
經典-64k問題
-
dex分包
-
MultiDex優化
-
findClass原理
-
QQ空間熱補丁方案
-
Nuwa應用層實現
-
NuwaGradle
7.6.3 插件化:VirtualAPK
-
加載類
-
資源訪問
-
生命週期管理
7.7 編譯插樁
-
AOP
-
ASM
7.8 Framework
7.8.1 系統服務
-
Zygote啓動
-
Android系統啓動
-
ServiceManager啓動及工作原理
7.8.2 應用進程
-
啓動流程
-
啓用Binder機制
-
Application初始化流程
-
Context
7.8.3 UI體系
-
顯示原理
-
UI線程啓動
-
屏幕刷新機制
-
surface
-
vsync
7.8.4 進程通信
-
Binder
-
IPC通信流程
-
Binder對象跨進程傳遞
-
OneWay機制
7.8.5 線程通信
-
消息隊列
-
消息傳遞機制
-
Handler消息延遲實現
-
IdleHandler原理
-
消息屏障
-
ThreadLocal原理
7.8.6 其他
-
跨進程傳遞大圖片
-
四大組件啓動原理
8. 領域專家
8.1 性能優化方向
-
穩定性優化
-
啓動速度優化
-
繪製優化
-
內存優化
-
包體積優化
-
網絡優化
-
IO優化
-
存儲優化
-
耗電優化
8.2 基礎架構方向
-
Android工程實踐
-
Gradle自動化構建
-
編譯插樁技術
-
Android架構
-
Android熱修復
-
Android插件化
-
Android核心源碼
8.3 NDK、音視頻
-
C
-
C++
-
JNI基礎
-
編譯原理與語法基礎
-
Linux基礎
-
熱修復
-
Gif圖實現
-
音視頻基礎
-
ffmpeg
-
WebRTC
-
opengl
-
vulkan
-
opencv
8.4 大前端
8.4.1 前端基礎
-
HTML
-
CSS
-
JavaScript
8.4.2 Flutter(⭐⭐)
-
Dart入門
-
Flutter入門
-
開發
-
工程管理
-
線上運維
-
發佈
-
測試調試
8.4.3 其他
-
ReactNative
-
小程序
-
性能優化
9. 其他Android相關
9.1 Koltin(⭐⭐)
9.1.1 基礎部分
-
內置類型
-
類型初步
-
表達算式
-
函數進階
-
類型進階
9.1.2 高級部分
-
泛型
-
反射
-
註解
-
協程
本文在開源項目:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄,裏面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…