《Android 工程師進階》:跳出舒適區,提升技術深度與廣度,走在行業前端!

南方吳彥祖_藍斯發表於2020-11-09

前言

我一直相信這樣一句話:真正的危機,來源於在正確的時間做不正確的事。沒有在正確的時間,為下一步做出積累,這才是危機的根源。

我也一直相信這樣一句話,當你把你的眼淚流乾了,你唯一剩下的就只有行動和努力了。

如果你正在這條成長路上的朋友,晚醒不如早醒,這就是我想說的。千萬別等到中年才發現自己沒有建立好自己的護城河,這個時候才知道努力。在自己努力的階段,不僅不努力反了選擇了縱容自己,這才是危機的根源。

而我們能做的就是: 跳出舒適區,走在行業前端

面試,是技術深度與廣度的試金石

每隔一段時間要出去面試一下。

對於 Android 知識的掌握還是多浮於表面,對一些技術點只停留在“使用過”甚至是“聽說過”的階段,比如一些問題, String 的最大長度是多少, JVM 的底層原理,Android 中  Dalvik 和  ART的回收機制有何不同,執行緒中的“工作記憶體”指的是什麼? 為什麼會導致執行緒安全問題?

也有很多求職者抱怨大廠“面試造火箭,工作擰螺絲”,但實際上,面試中的大多數問題都是在全方位地考察你對技術的理解深度,以及解決問題的能力。

不抱怨,努力提升自己!

技術是無止境的,你需要對自己提交的每一行程式碼、使用的每一個工具負責,不斷挖掘其底層原理,才能使自己的技術昇華到更高的層面。

國內移動網際網路的紅利期已經過去,初中級工程師基本已無立足之地,即使高階工程師也經常在面試中碰釘子。隨著 Android 開發越來越規範,國內工程師的素質,以及使用者對產品的要求也越來越高。這也間接導致我們對研發專案的質量要求到了近乎苛刻的地步,記憶體最佳化、UI 卡頓最佳化、App 崩潰監控等效能調優也逐漸成了人手必備的技能。

BAT常問面試題:

  • ListView和RecyclerView區別
  • 你用過MVP和MVVM的區別
  • HashMap的內部實現原理?
  • 你用過AsyncTask,說一說AsyncTask的內部實現原理?
  • RecyclerView的拖拽怎麼實現的?
  • service兩種啟動方式有什麼區別?
  • 說說三級快取、Handler機制 ?
  • Bitmap 使用時候注意什麼?
  • ANR 如何產生?
  • Activity與Service通訊的方式
  • Activity與Fragment之間生命週期比較
  • 記憶體洩露如何產生?
  • Glide 記憶體快取如何控制大小?
  • 執行緒如何關閉,以及如何防止執行緒的記憶體洩漏
  • handler發訊息給子執行緒,looper怎麼啟動
  • 訊息機制實現
  • App啟動崩潰異常捕捉
  • View事件傳遞
  • 封裝view的時候怎麼知道view的大小
  • ThreadLocal 原理
  • 熱修復,外掛化
  • 畫出 Android 的大體架構圖
  • .......
《Android 工程師進階》:跳出舒適區,提升技術深度與廣度,走在行業前端!
《379頁Android開發面試寶典》

跳出舒適區,走在行業前端

意識到自己的不足之後,我開始瘋狂惡補各種開源庫的實現原理,比較各個"輪子"之間的優缺點,同時也嘗試自己去寫開源控制元件。

因此只有瞭解原始碼,並從原始碼的角度分析,才會找到更完美的解決方案。

內容概要:微信 MMKV 原始碼、阿里巴巴路由框架ARouter 原始碼、AsyncTask 原始碼、Volley 原始碼、Retrofit、OkHttp、ButterKnife、Okio、SharedPreferences、EventBus、Android 自定義註解、View 的工作機制、Android 觸控事件分發機制、Android 按鍵事件分發機制等等Android開發過程中相關原始碼精編解析!

真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀Android系統原始碼,還包括各種優秀的開源庫。

《Android 工程師進階》:跳出舒適區,提升技術深度與廣度,走在行業前端!
《486頁超全面Android開發相關原始碼精編解析》

進階學習方向

《Android 工程師進階》:跳出舒適區,提升技術深度與廣度,走在行業前端!
Android成長路線圖

初級工程師:

技術要求:

  • 基本知識點
    比如四大元件如何使用、如何建立Service、如何進行佈局、簡單的自定義View、動畫等常見技術
  • 書籍推薦
    《第一行程式碼 Android》、《瘋狂Android》

中級工程師:

  • AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的區別;
  • Binder:從Java層大概理解Binder的工作原理,懂Parcel物件的使用;
  • 多程式:熟練掌握多程式的執行機制,懂Messenger、Socket等;
  • 事件分發:彈性滑動、滑動衝突等;
  • 玩轉View:View的繪製原理、各種自定義View;
  • 動畫系列:熟悉View動畫和屬性動畫的不同點,懂屬性動畫的工作原理;
  • 懂效能最佳化、熟悉mat等工具
  • 懂點常見的設計模式

學習方法:

閱讀進階書籍,閱讀Android原始碼,閱讀官方文件並嘗試自己寫相關的技術文章,需要有一定技術深度和自我思考。在這個階段的學習過程中,有2個點是比較困擾大家的,一個是閱讀原始碼,另一個是自定義View以及滑動衝突。

如何閱讀原始碼呢?這是個頭疼的問題,但是原始碼必須要讀。閱讀原始碼的時候不要深入程式碼細節不可自拔,要關注程式碼的流程並儘量挖掘出對應用層開發有用的結論。另外仔細閱讀原始碼中對一個類或者方法的註釋,在看不懂原始碼時,原始碼中的註釋可以幫你更好地瞭解原始碼中的工作原理,這個過程雖然艱苦,但是別無他法。

技術要求:

  • 稍微深入的知識點
    AIDL、Messenger、Binder、多程式、動畫、滑動衝突、自定義View、訊息佇列等
  • 書籍推薦
    《Android開發藝術探索》、《Android群英傳》

高階工程師:

為了成為Android資深工程師,需要學習的東西就更多了,並且有些並不是那麼具體了,如下所示:

  • 瞭解系統核心機制:
  1. 瞭解SystemServer的啟動過程
  2. 瞭解主執行緒的訊息迴圈模型
  3. 瞭解AMS和PMS的工作原理
  4. 能夠回答問題”一個應用存在多少個Window?“
  5. 瞭解四大元件的大概工作流程
  • 基本知識點的細節
  1. Activity的啟動模式以及異常情況下不同Activity的表現
  2. Service的onBind和onReBind的關聯
  3. onServiceDisconnected(ComponentName className)和binderDied()的區別
  4. AsyncTask在不同版本上的表現細節
  5. 執行緒池的細節和引數配置
  • 熟悉設計模式,有架構意識**

學習方法:

這個時候已經沒有太具體的學習方法了,無非就是看書、看原始碼和做專案,平時多種總結,儘量將知識融會貫通從而形成一種體系化的感覺。同時這個階段對架構是有一定要求的,架構是抽象的,但是設計模式是具體的,所以一定要加強下設計模式的學習。關於設計模式的學習,最近一本新書推薦給大家《Android 原始碼設計模式解析與實戰》,既可以學習設計模式,又可能體會到Android原始碼中的設計思想,我最近也在閱讀此書。

技術要求:

  • 稍微深入的知識點
  • 系統核心機制
  • 基本知識點的細節
  • 設計模式和架構
  • 書籍推薦
    《Android開發藝術探索》、《Android 原始碼設計模式解析與實戰》、《Android核心剖析》

最後

人這一輩子沒法做太多的事情,所以每一件都要做得精彩絕倫。 ——賈伯斯

對於程式設計師來說,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提升自己, 從來都是我們去適應環境,而不是環境來適應我們!

不用多說,相信大家都有一個共識:無論什麼行業,最牛逼的人肯定是站在金字塔端的人。所以,想做一個牛逼的程式設計師,那麼就要讓自己站的更高,成為技術大牛並不是一朝一夕的事情,需要時間的沉澱和技術的積累。

最後我在這裡分享一下這段時間從朋友,大佬那裡收集到的一些 2019-2020BAT 面試真題解析,裡面內容很多也很系統,包含了很多內容: Android 基礎、Java 基礎、Android 原始碼相關分析、常見的一些原理性問題等等,可以很好地幫助我們深刻理解Android相關知識點的原理以及面試相關知識。

《Android 工程師進階》:跳出舒適區,提升技術深度與廣度,走在行業前端!
《960全網最全Android開發筆記》

以上內容均放在了開源專案: github  中已收錄,大家可以自行獲取(或者 關注主頁掃描加微信獲取)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2733101/,如需轉載,請註明出處,否則將追究法律責任。

相關文章