我比較瞭解Android這塊,我就直接從Android的角度出發吧。java
至於說轉管理的事,忽略了,程序員轉管理確定是可取的,可是本文只從技術的角度來講一個程序員如何作到年薪50萬。(Ps:略長,相信能夠給看完的朋友一點幫助)git
一個Android程序員達到年薪50萬的同時,他也是一名架構師了。(這裏防槓一下:月薪是月薪,年薪是年薪,月薪1w必定比年薪12w要高,緣由有:年末多薪、年終獎以及各類福利待遇等)程序員
那麼,一個年薪50萬的Android程序員(架構師)應該要具有哪些知識呢?面試
咱們一個一個分開來說~算法
**項目經驗是程序員們最重要的財富,也是面試中必問的問題。**通常面試官都會藉着項目經驗來考查應聘者的溝通能力和思考能力。但實際咱們大部分的狀況都是作產品的一個功能或一個模塊,雖然咱們能很好的完成工做上的要求,可是對於面試這確定是不夠的。對於面試來講,咱們還要完成如下四點。編程
(Ps:**「面試造火箭,工做擰螺絲」**你們內心要有桿秤,自行衡量)小程序
Android應用是由Java語言進行開發的,SDK也是由Java語言編寫,因此咱們要學習java語言。另外,雖然說kotlin語言獲得了Android官方的熱推,可是kotlin也是編譯成了java語言再運行的。對於Android來講,只要SDK沒有用kotlin重寫,那麼Java語言是都須要學習的。並且Android apk的後臺服務器程序大機率是java語言構建,因此學習java也是一種必然。windows
那麼Java中哪些東西是咱們Android程序員須要學習的呢?因爲Android程序員習慣了 C V 代碼塊,因此與Android中比較相關的稍微比較難的Java基礎幾乎都是一個門檻,像:泛型、多線程、反射、JVM、Java IO、註解、序列化等,都是被 CV 的對象,而不少程序員是不懂其原理的,具體的學習內容如圖所示。微信小程序
1.泛型原理與Android網絡庫數據解析應用原理分析設計模式
2.無所不能的反射原理及Android類加載核心
3.Java虛擬機原理
Dalvik虛擬機與JVM的區別
4.多線程及線程池原理技能拔高
多線程與Android線程性能優化
線程在RxJava中的實戰
5.Java I/O核心原理及其在Android中的內核應用
6.註解原理與dagger2/retrofit的密切關係
7.序列化與數據自動解析原理
JSON
這塊知識是現今使用者最多的,咱們稱之爲Android 2013~2016年的技術。可是,即便是這樣的技術,Android開發者也每每由於網上Copy代碼習慣了而致使對這塊常常「使用」的代碼熟悉而又陌生:熟悉的是幾乎每天在和它們打交道,每天在複製這些代碼;陌生的是雖然每天和這些代碼打交道,可是並無深刻研究過這些代碼的原理、代碼深處的內涵。因此咱們須要重新的角度去分析這些知識點,深刻研究他們,要學習源碼,模仿源碼,而後再hook源碼,這樣才能說本身懂這塊的知識。
這些都是作Android開發,作高級工程師的基礎。
1.職業生涯規劃
2.面向Android中的一切實體(高級UI/Framework)
2.1Activity與View相關實體知識體系
2.1.1Task啓動原理與調用棧內核
2.1.2ViewGroup源碼解析
2.1.3View源碼分析與高級自定義View項目實戰
2.1.4事件分發的核心機制
2.1.5Handler通訊原理與框架手寫
2.1.6Hook Resource源碼實現 theme項目實戰
2.2FrameWork源碼
2.2.1Service內核原理
2.2.2Fragment內核
2.2.3XMS生命週期與內核管理原理
2.2.4Intent數據傳輸原理和內核
3.實體間的通訊方案
3.1各實體之間通訊原理與方法
3.2Apk之間通訊方案原理總結
4.實體中數據存儲專題
一個app的性能好很差咱們須要從兩個層面努力。
如何寫出高性能的代碼呢?
那就須要咱們具有深厚的代碼功底,這就是代碼的基礎,如:數據結構達到能夠根據應用場景寫出符合當前場景的特殊結構,好比google針對Android平臺特徵研發了sparseArray替代HashMap。
另外,對經常使用的算法有本身獨到的看法,leetcode上有刷個上百道題,這樣差很少能夠達到精通最經常使用的排序查找動態規劃等算法的能力。再者,高效的算法以及節省內存的數據結構若是配合優秀的符合應用場景的設計模式,那麼,這些就爲高性能的代碼提供了實現依據。
另一個就是對寫好的代碼進行調優,那麼調優的方向就是使用Profiler工具進行測試和檢查,看哪裏有性能消耗大的操做,而後分析對於代碼的問題。調優的方向就變成了如何對內存調優,對耗電調優,對網絡流量調優,固然,還有對啓動速度,頁面切換效果與速度,開機白屏體驗,閃屏方面的緣由等進行分析和調優。最後再加上一個屏幕適配相機適配。
1.高性能代碼編碼實戰
1.1難以想象的OOM
…
1.4View過渡渲染層級優化
1.5設計模式
1.6數據結構
1.7排序算法
1.8查找算法
2.用戶體驗及資源消耗優化
…
2.5圖片庫的選擇
…
2.8網絡優化
2.9Profiler
3.手機適配
4.代碼質量調優
音視頻、高清大圖片、人工智能、直播、抖音等等這些年與用戶最緊密,與咱們生活最相關的技術一直都在尋找最終的技術落地平臺,之前是windows系統,而如今則是移動系統了,移動系統中又是以Android佔比絕大部分爲前提,因此Android NDK技術已是咱們必備技能了。
要學習好NDK,其中關於C/C++、jni、Linux基礎都是須要學習的。除此以外,音視頻的編解碼技術、流媒體協議、ffmpeg這些都是音視頻開發必備技能,並且OpenCV、OpenGl這些又是圖像處理必備知識,這些在學習的過程當中都應該有原理級的實戰項目。
1.基礎開發流程
2.圖像處理與熱修復應用
3.音視頻開發應用
4.人工智能應用
如今去不少公司面試,除了你具有基本的可以寫一個高性能app的能力後,通常都會在本身的app裏面加一些現有的相對較爲「666」的技術(或者是「無奈本人沒文化,一句臥槽走天下」的技術),這些技術咱們稱之爲前沿技術。他們通常包含熱升級,熱修復,App Instant,強制更新,組件化路由架構Arouter,RxJava,IOC架構方法,Hook技術等等。
固然,這些技術你不能只會用,你須要知道他的原理,有時候,你還須要知道如何對這些架構進行改進。
另外,很是重要的一點,不少Android開發者不肯意接受新知識,因此對於如今Google推出的新的技術方案毫無感受,這些都是被 control C 和control V所毒害的結果,開源讓開發者失去了自我,失去了基本的編碼能力,失去了深刻學習的信心和毅力,因此對於不少google推出的新技術、好組件(Google I/O 大會新技術)、好框架已經不肯意去學習了。這確定是不可取的,做爲一個程序員若是不能不斷地提高自我、自發的進階的話,30、35這種在網上看到的別人的焦慮,也會發生在你的身上,緣由很簡單,就是**「技術更替」**,老的技術漸漸被遺忘,新的技術又不會,學習能力尚未應屆生強,一旦公司效益很差要裁人,你猜猜誰纔是這個「幸運兒」?
1.熱升級
2.熱修復
3.App Instant
4.強制更新
5.組件化框架設計
6.圖片加載框架設計
7.網絡訪問框架設計
8.RXJava響應式編程框架設計
9.IOC架構設計
10.Google I/O大會最新技術及技術更新
11.Hook技術
架構師不是天生的,是在項目中磨練起來的,因此,咱們學了技術就須要結合項目進行實戰訓練,那麼在Android裏面最經常使用的架構無外乎 MVC,MVP,MVVM,可是這些思想若是和模塊化,層次化,組件化混和在一塊兒,那就不是一件那麼簡單的事了,咱們須要一個真正身經百戰的架構師才能講解透徹其中蘊含的深理。
「工欲善其事必先利其器」
如何提升開發的效率?
不少開發者在開發的過程當中因爲gradle不會用致使加載代碼很是耗時,這些就是工做成本。
還有就是git的使用能夠幫咱們管理好咱們的代碼,這個很是關鍵,由於這個工具可讓咱們修改的代碼不會由於錯誤的操做而致使代碼丟失。
另外,做爲移動開發者,咱們至少須要知道如何抓取網絡包吧,其中,最經常使用的stetho就是一個很好的能夠進行網絡抓包的工具。
移動架構師不可不學習微信小程序。
1.小程序介紹
2.UI開發
3.API操做
4.微信對接
5.任務清單項目
6.電影榜單項目
7.本地生活項目
8.購物商場項目
混合開發的flutter如今已經逐漸變成了主流的混合開發框架,另外因爲阿里系的強大存在,致使阿里系的公司都在用Weex混合架構,這些都是一個Android工程師開拓視野,走向將來必不可少的基本技能。
1.Html5項目實戰
2.Flutter
2.1你好,Flutter
2.2Flutter編碼語言Dart詳解系列
2.3Flutter框架原理與使用技巧
2.4Flutter架構知識落地實現
漫漫開發之路,咱們只是其中的一小部分……只有不斷的學習、進階,纔是咱們的出路!纔跟得上時代的進步!
我作事不喜歡光說不練,既然指出了年薪50萬的程序員要會這些知識,那我也把個人一些庫存都分享給你們。
我從事Android開發十多年了,今年年初我花兩個月的時間收錄整理了一套知識體系,包括移動開發高級架構技術腦圖、架構學習視頻和面試專題文檔,有想法深刻的系統化的去學習的,能夠加入Android開發交流羣(820198451),我會把我收錄整理的資料都送給你們,幫助你們更快的進階。
上述的圖片都來自於**《移動開發高級架構技術腦圖》**想要這個能夠另外說明清楚
Android架構師之路很漫長,一塊兒共勉吧!