Android 年薪百萬的進階攻略圖,阿里大牛耗時一年三個月最佳總結

思維導圖



系統啟動過程

這一部分是 Android 系統從按下電源鍵開始,然後到展示開機界面,再到展示桌面之前的一個過程。瞭解下面相關進程的工作流程,會對 Android 系統有一個整體的概念,是一個從 0 到 1 的過程,對深入研究 Android 系統內部機制有很大幫助。

init 進程瞭解 init 進程創建與啟動的流程。Zygote 進程瞭解 Zygote 進程創建的流程,以及 fork 的過程。system_server 進程瞭解 system_server 進程啟動流程,工作流程。ServiceManager 瞭解 ServiceManager 的啟動流程,以及 ServiceManager 在系統中的作用。

內核技術

這一部分是計算機操作系統相關的原理,也是計算機相關專業的一門必修課程,推薦學習下相關知識。

CPU 調度進程管理文件系統內存管理

通信方式

Binder

Binder 是 Android 系統中特有的一種 IPC 通信方式,建議閱讀 Binder 相關的源碼,與深入越好,理解 Binder 工作的原理,瞭解服務的註冊、獲取、死亡通知的流程。

Handler

Handler 是 Android 系統中線程間通信的方式,已經在 Android 高級工程師部分說過了。這裡一定要閱讀下源碼瞭解內部的運行機制。

Socket

Socket 是系統中常見的一種 IPC 通信方式,Socket 的應用範圍很廣,在進程間通信、網絡通信都會用到,建議深入瞭解下。

Pipe

Pipe(管道)是 Linux 系統中常見的一種 IPC 通信方式,建議深入瞭解下工作原理。

signal

signal(信號量)是系統中常見的一種 IPC 通信方式,建議深入瞭解下工作原理。

核心服務

Activity、Service、Broadcast、ContentProvider瞭解四大組件啟動流程,理解生命週期回調過程,瞭解工作原理。ActivityManagerService(AMS)理解 ActivityManagerService 工作流程,以及與 Activity 工作的流程。WindowManagerService(WMS)理解 WindowManagerService 工作流程,以及與 ActivityManagerService 和 Activity 工作的過程。View、Window、Surface理解 Activity、Window、View 之間的關係,瞭解 View 渲染機制。Surface、SurfaceFlinger理解 View 與 Surface 之間的關係,瞭解 SurfaceFlinger 工作流程,理解 View 渲染的過程。PackageManagerService(PKMS)理解 PackageManagerService 工作流程,瞭解 Apk 安裝與卸載過程。PowerManagerService(PMS)理解 PackageManagerService 工作流程,瞭解屏幕喚醒、滅屏的過程,並理解 WeakLock 機制。InputManagerService(IMS)理解 InputManagerService 工作流程,理解事件的創建流程、事件分發機制,ANR 觸發原理。AudioFlinger理解 AudioFlinger 工作流程。AssertManager理解 Apk 安裝包中資源管理的過程。

異常處理

可以從源碼的角度分析異常產生的原因,定位異常,以及處理。

WatchdogANRJava CrashNative Crash卡頓

Java 虛擬機

內存模型

瞭解 JVM 內存模型,包括堆、棧、方法區、運行時常量池等。

類加載機制

瞭解類加載時機,類加載的過程,理解類加載器雙親委派模型。

垃圾回收機制

瞭解垃圾回收的原因,理解對象生命週期,瞭解垃圾回收算法。

動態化

Android Gradle Plugin

通過閱讀 Android Gradle Plugin 源碼,理解 Gradle 構建項目的過程,瞭解插件開發過程。

VirtualAPK、Tinker

通過閱讀 VirtualAPK 源碼,理解熱修復、插件化的原理。

Hook 技術

設計模式與架構

熟悉六大 OOD 設計原則熟悉常見的設計模式,可以熟練的運用在項目中理解 MVC、MVP、MVVM 的思想以及區別項目架構設計與重構項目組件化設計與開發

軟技能

拓展技術廣度,其他領域的技術學習團隊管理和指導新人

總結

以上就是 Android 資深(專家)工程師 的基本知識點,如果在高級工程師部分基礎很牢,進階到資深(專家)是很容易的。這個級別的知識點不僅僅需要對 API 熟練應用,更重要的是對內部的運行機制的深入理解。

我們可以發現很多的知識點都是對 Android 系統源碼的閱讀來獲取的,閱讀源碼是一個很痛苦的過程,也是必須經歷的一個過程。

在閱讀源碼的時候建議多注重對整體流程的把握,而不是深入細節不能自拔。畢竟我們主要工作還是開發 App,閱讀源碼是為了更好的理解內部運行機制。

專家除了具有紮實的技術深度以外,還有一定的技術廣度,以及不錯的架構設計能力。除了技術,軟技能也是很重要的部分。比如如何管理團隊,帶帶新人,寫寫 PPT,吹 NB 啥的。

已經達到了資深(專家)的開發者,以後的學習路線跟自己的職業規劃有很大關係。這個級別技術也不再那麼重要,畢竟都是專家了,大家都很 NB,怎麼還能讓人手把手教呢?!

以下方面大家可以參考下:

維護一個公眾號,增加業內影響力考慮出一本書,增加業內知名度開源一個 NB 的項目,為開源貢獻一份力量轉型做產品或者管理換一個領域繼續深入研究

一般達到資深(專家)的開發者需要 3 - 5 年左右,本科畢業的學生年齡一般在 22 週歲左右,那麼達到資深(專家)最快也得 25 週歲了。這裡我們會遇到一個職業上的危機 —— 30 歲危機。

隨著年齡的越來越大是繼續做技術?還是轉型做管理呢?Android 也沒啥可研究的了,還是換其他領域呢?這是一個值得思考的問題,我還沒有這個經歷(歲數還沒到)不敢妄下定論,哈哈。

這裡分享下網上的一份關於各大廠 Android 級別的薪資參考圖(如有侵權,請聯繫我刪除)。


我看到網上很多消息都說今年互聯網寒冬什麼什麼的,其實每年都會說寒冬。互聯網總共也就發展了十幾年,從 2000 年初的諾基亞到現在的智能手機時代,也就十幾年的時間。誰有會預料的下一個十年之後會是什麼樣的呢?

由於前幾年大量培訓出來的開發者(這裡只是說下客觀事實,沒有貶低的意思),整個市場湧入大量的初級、中級開發者,所以對於新人來說的確不好找工作了,因為競爭的人多了。

自己沒能力就說沒能力,怎麼你到哪兒,哪都大環境不好,你是破壞大環境的人啊?—— 趙本山

作為開發者我們最好的準備就是知識的儲備,如果我們努力學習達到了高級甚至更高,目前需求量還是很大的。目前我瞭解到的 Android 領域專家級別的工程師也沒有多少,大家可以留意統計一下。

關於 Android 進階的學習指南就已經完結了,歡迎大家繼續關注,其他方面的技術分享,及個人感悟。