天天看點

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

前言

這一年,是動蕩的一年,但也是逆風翻盤的一年。一顆種子要想成長為蒼天大樹,必須具備堅韌不拔的意志,這一點比學習本身更加重要。下面,我們就來回顧一下我的2020年主要做了哪些事情。

一、回顧我的2020年

第一季度(1-3月):

1、深入學習Android性能優化 & 開源 Awesome-Android-Performance

衆所周知,性能優化是Android細分領域中最難且也是知識面涉及最深和最廣的方向之一,但是如果你想要成為一名頂尖的Android工程師,性能優化細分領域則是非常好的實戰與理論結合的場所。是以,為了将性能優化涉及的各個層面的知識成體系地融合到一起,筆者建立了Awesome-Android-Performance這個項目,希望能帶領讀者從Android系統架構中的應用層、Framework層、Native層、ART/Dalvik甚至Linux核心層這一垂直領域去深入探索與挖掘性能優化的極緻技術。目前,除了IO優化與存儲優化之前,其它的性能優化文章均已釋出,内容如下:

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

一、穩定性優化

深入探索Android穩定性優化(已完成)

Android穩定性優化是一個需要長期投入,持續營運和維護的一個過程,上文中我們不僅深入探讨了Java Crash、Native Crash和ANR的解決流程及方案,還分析了其内部實作原理和監控流程。到這裡,可以看到,要想做好穩定性優化,我們必須對虛拟機運作、Linux信号處理和記憶體配置設定有一定程度的了解,隻有深入了解這些底層知識,我們才能比别人設計出更好的穩定性優化方案。

二、啟動速度優化

深入探索Android啟動優化(已完成)

想要極緻地提升App的啟動速度,我們需要有一定的廣度,在文中引入了始于後端的AOP程式設計來實作無侵入式的函數插樁,也需要有一定的深度,從裡面的探索之旅來看,我們先後涉及了Framework層、Native層、Dalvik虛拟機、甚至是Linux IO和檔案系統相關的原理。

三、記憶體優化

Android性能優化之記憶體優化(已完成)

記憶體優化可以說是性能優化中最重要的優化點之一,可以說,如果你沒有掌握系統的記憶體優化方案,就不能說你對Android的性能優化有過多的研究與探索。

深入探索Android記憶體優化(已完成)

真正的将記憶體優化做到極緻,還不點選去一探究竟?

四、繪制優化

Android性能優化之繪制優化(已完成)

首先,讓我們從全局的角度去認識繪制優化,并為其打下良好的優化基礎。

深入探索Android布局優化(上)(已完成)
深入探索Android布局優化(下)(已完成)

布局優化看似是Android性能優化中最簡單的專項優化項,但是筆者卻花費了整整三萬字的篇幅才能比較完整地将其核心知識傳授給大家。是以,不要小看每一個專項優化點,深入進去,必定滿載而歸。

深入探索Android卡頓優化(上)(已完成)
深入探索Android卡頓優化(下)(已完成)

卡頓優化可以說是Android性能優化中最複雜的環節,筆者從卡頓優化分析方法與工具、自動化卡頓檢測方案及優化、ANR分析與實戰、卡頓單點問題檢測方案、界面秒開、優雅監控耗時盲區等多個次元來展開對App的卡頓優化進行深入講解,相信讀者必定有所收獲。

五、包體積優化

深入探索Android包體積優化(已完成)

如果要想對包體積做更深入的優化,我們就必須對 APK 組成,Dex、So 動态庫以及 Resource 檔案格式,還有 APK 的編譯流程 有深入地了解,這樣我們才能有 足夠的内功素養 去實作包體積的深度優化,而此文将會帶我們深入其中。

六、網絡優化

《深入探索 Android 網絡優化(一、網絡核心築基篇)》(已完成)
《深入探索 Android 網絡優化(二、網絡優化築基篇) 》(已完成)
《深入探索 Android 網絡優化(三、網絡優化篇) 》(已完成)

網絡優化一直被認為是移動優化水最深的領域之一,是以,我們有必要對其進行深入學習。

七、耗電優化

深入探索 Android 耗電優化(已完成)

在 Android 應用開發中,我們需要考慮如何優化電量使用,讓我們的 App 不會因為電量消耗過高被使用者排斥,或者被其他安全應用報告,以此確定使用者黏性。是以,電量優化也是需要去考慮的。

第二季度(4-6月):

1、深入探索編譯插樁與 Gradle 自動化建構技術技術

現如今,Gradle + 編譯插樁 的應用場景越來越多,無論是 各種性能優化中的插件工具制作,還是用來支援 插件化、熱修複的各種插件,都會使用到這個組合,是以,掌握 Gradle + 編譯插樁 技術能夠大大提升我們的技術競争力。内容如下:

編譯插樁技術

深入探索編譯插樁技術(一、編譯基礎)(已完成)
深入探索編譯插樁技術(二、AspectJ)(已完成)
深入探索編譯插樁技術(三、Class位元組碼)(已完成)
深入探索編譯插樁技術(四、ASM)(已完成)

Gradle自動化建構

深入探索 Gradle 自動化建構技術(一、配置篇)(已完成)
深入探索 Gradle 自動化建構技術(二、Groovy 築基篇)(已完成)
深入探索 Gradle 自動化建構技術(三、Gradle 核心解密)(已完成)
深入探索 Gradle 自動化建構技術(四、自定義 Gradle 插件)(已完成)
深入探索 Gradle 自動化建構技術(五、Gradle 核心源碼剖析)(已完成)
深入探索 Gradle 自動化建構技術(六、Gradle 插件開發平台化架構 ByteX 解密)(已完成)

第三季度(7-9月):

1、算法地圖建構 & 開源 Awesome-Algorithm-Study

這是一份從零建構算法核心知識的地圖,它是以算法面試為根基而打造而成,裡面涉及到的都是非常高頻的算法面試題。因為算法非常重要,是以從今年7月份開始,我就開始系統從0開始學習了資料結構和算法,具體的學習路徑如下:

  • 1、慕課網之《資料結構精講》:手寫各種核心的資料結構,例如動态數組、連結清單、堆、二叉樹、AVL、紅黑樹等等。
  • 2、《劍指Offer》:有了比較紮實的資料結構功底後,再去學習如何練習算法,那麼,《劍指Offer》是最适合不過了。
  • 3、慕課網之《玩轉算法面試》:非常詳細地對LeetCode上的高頻面試算法題進行了系統講解,能在短時間内快速提升我們的算法面試能力。
  • 4、《算法面試通關 40 講》:這個是對《玩轉算法面試》的補充。
  • 5、手寫前面所有算法2遍以上(預估150道題左右)。

在系統學習算法的過程中,我逐漸建構出了我的算法地圖,内容簡要如下:

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

2、計算機基礎鞏固路線

主要基于《程式設計必備基礎 計算機組成原理+作業系統+計算機網絡》系統學習了組成原理、作業系統、網絡等核心的計算機基礎知識,這對加深我們的内功是非常有幫助的。

3、NDK入門

NDK是深入Android必備的一項技術,是以,我開始了NDK的學習,主要完成的學習内容如下:

  • 1、C基礎複習。
  • 2、C++基礎複習。
  • 3、JNI、編譯原理與文法、Linux基礎系統學習。
  • 4、了解如何實作增量更新、高效加載Gif圖、MMKV元件。

第四季度(10-12月):

1、深入學習和實踐元件化、插件化、熱修複技術

為了提升架構能力與加深對Android Framework層的了解,那麼學習元件化、插件化、熱修複技術是必不可少的。這裡我就簡單聊一聊如何去學習它們。對于元件化來說,關鍵點就在于掌握如何進行元件化重構,并深入了解如何進行跨元件通信。對于插件化來說,這裡有一些問題我們可以去思考一下:

  • 如何規避 Android P 對通路私有 API 的限制?
  • 如何進行插件化重構?
  • 插件化的原理:如何動态加載類?四大元件如何實作插件化?資源如何插件化?So如何插件化?對目前各個熱門插件化架構實作的了解?(例如VirtualApk、Replugin、Shadow)
  • 對插件化這一整套技術的了解?

對于熱修複來說,我們可以先自己手寫一個簡單的熱更新架構,然後再去深入學習某一個熱修複架構的使用和實作,例如Tinker。對于熱修複的原理來說,也同樣包括代碼修複、資源修複、So的修複,這些我們都應該去深入了解。

2、Android Framework層深入學習

主要基于 剖析Framework面試 沖擊Android進階職位 課程 将Framework的設計思想與實作細節、總體流程融合起來,追求真正的融會貫通。

3、知識體系系統複習

溫故而知新,可以為師矣。學習不是看你學了多少,而是看你真正掌握了多少,一味地追求學習的速度反而會讓我們掉入一個黑洞:花費了大量的時間學習,但是真正了解的東西卻很少。這讓我想起了在讀書時代的一位朋友,他非常努力,一天到晚都在學習。有時他甚至在就寝燈熄滅之後還約我一起去廁所看書(因為廁所有燈),但是我堅持了兩天就不行了。由于他的努力,我一直以為他未來的成就不可限量,但是我和他偶然的一次聯系才知道事情并非如此。為什麼努力卻得不到好的結果?可能最核心的問題就在于我們沒能真正地把知識融會貫通,如何融合貫通?唯有不斷的練習與複習,請無論如何都要記住:學會隻是第一步,真正的掌握需要很多次的重複練習,這樣你第一步的努力才不會白費。是以,從11月份開始,我就開始系統整理與複習目前我所掌握的知識,并将它轉化了為思維導圖的形式,如下所示:

計算機基礎

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

程式設計語言

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

Android基礎

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

穩定性優化

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

基礎架構

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

Framework

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

NDK

JsonChao 的 2020 年終總結一、回顧我的2020年二、展望我的2021年三、總結

二、展望我的2021年

随着對性能優化與基礎架構技術的研究逐漸深入,我發現目前所處的環境很難提供一個足夠體量的APP去讓我深入實踐。是以,由于不确定性較大,下面我就簡要列一下明年的主要目标:

  • 1、能夠有機會去開發、優化一個複雜的APP。
  • 2、以實踐為主,繼續深入性能優化領域的學習。
  • 3、每天堅持練習算法,以培養開闊的算法思維。
  • 4、能夠有機會深入學習Flutter,甚至造一些Flutter的輪子。
  • 5、繼續深入學習Framework,以加深對Framework層的了解。
  • 6、能夠有機會深入實踐Google的JetPack元件。

三、總結

這一年,我的确做出了一些努力,也得到了一些收獲與掌聲。但僅僅靠單純的努力是不夠的,學會如何學習(溫故而知新非常重要),學會如何管控好自己的精力與時間,也許會讓我們的努力更加高效,進而讓我們的内心更加充實。2021年,我們一起加油,希望這是一場真正的蛻變!

繼續閱讀