《Android 工程師進階》:跳出舒適區,提升技術深度與廣度,走在行業前端!
前言
我一直相信這樣一句話:真正的危機,來源於在正確的時間做不正確的事。沒有在正確的時間,為下一步做出積累,這才是危機的根源。
我也一直相信這樣一句話,當你把你的眼淚流乾了,你唯一剩下的就只有行動和努力了。
如果你正在這條成長路上的朋友,晚醒不如早醒,這就是我想說的。千萬別等到中年才發現自己沒有建立好自己的護城河,這個時候才知道努力。在自己努力的階段,不僅不努力反了選擇了縱容自己,這才是危機的根源。
而我們能做的就是: 跳出舒適區,走在行業前端
面試,是技術深度與廣度的試金石
每隔一段時間要出去面試一下。
對於 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 的大體架構圖
- .......
跳出舒適區,走在行業前端
意識到自己的不足之後,我開始瘋狂惡補各種開源庫的實現原理,比較各個"輪子"之間的優缺點,同時也嘗試自己去寫開源控制元件。
因此只有瞭解原始碼,並從原始碼的角度分析,才會找到更完美的解決方案。
內容概要:微信 MMKV 原始碼、阿里巴巴路由框架ARouter 原始碼、AsyncTask 原始碼、Volley 原始碼、Retrofit、OkHttp、ButterKnife、Okio、SharedPreferences、EventBus、Android 自定義註解、View 的工作機制、Android 觸控事件分發機制、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資深工程師,需要學習的東西就更多了,並且有些並不是那麼具體了,如下所示:
- 瞭解系統核心機制:
- 瞭解SystemServer的啟動過程
- 瞭解主執行緒的訊息迴圈模型
- 瞭解AMS和PMS的工作原理
- 能夠回答問題”一個應用存在多少個Window?“
- 瞭解四大元件的大概工作流程
- …
- 基本知識點的細節
- Activity的啟動模式以及異常情況下不同Activity的表現
- Service的onBind和onReBind的關聯
- onServiceDisconnected(ComponentName className)和binderDied()的區別
- AsyncTask在不同版本上的表現細節
- 執行緒池的細節和引數配置
- …
- 熟悉設計模式,有架構意識**
學習方法:
這個時候已經沒有太具體的學習方法了,無非就是看書、看原始碼和做專案,平時多種總結,儘量將知識融會貫通從而形成一種體系化的感覺。同時這個階段對架構是有一定要求的,架構是抽象的,但是設計模式是具體的,所以一定要加強下設計模式的學習。關於設計模式的學習,最近一本新書推薦給大家《Android 原始碼設計模式解析與實戰》,既可以學習設計模式,又可能體會到Android原始碼中的設計思想,我最近也在閱讀此書。
技術要求:
- 稍微深入的知識點
- 系統核心機制
- 基本知識點的細節
- 設計模式和架構
- 書籍推薦
《Android開發藝術探索》、《Android 原始碼設計模式解析與實戰》、《Android核心剖析》
最後
人這一輩子沒法做太多的事情,所以每一件都要做得精彩絕倫。 ——賈伯斯
對於程式設計師來說,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提升自己, 從來都是我們去適應環境,而不是環境來適應我們!
不用多說,相信大家都有一個共識:無論什麼行業,最牛逼的人肯定是站在金字塔端的人。所以,想做一個牛逼的程式設計師,那麼就要讓自己站的更高,成為技術大牛並不是一朝一夕的事情,需要時間的沉澱和技術的積累。
最後我在這裡分享一下這段時間從朋友,大佬那裡收集到的一些
2019-2020BAT 面試真題解析,裡面內容很多也很系統,包含了很多內容:
Android 基礎、Java 基礎、Android 原始碼相關分析、常見的一些原理性問題
等等,可以很好地幫助我們深刻理解Android相關知識點的原理以及面試相關知識。
以上內容均放在了開源專案: 【 github 】 中已收錄,大家可以自行獲取(或者 關注主頁掃描加微信獲取)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2733101/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 技術破局:AI程式設計師2021如何跳出舒適圈?!AI程式設計師
- 前端工程師的技術進階點在哪裡?前端工程師
- 前端工程師的進階之路前端工程師
- 高階 Android 工程師的進階之路Android工程師
- 你的Android資深工程師進階之路Android工程師
- 前端工程師的技術進階點,月薪5萬難嗎?難!前端工程師
- 【招聘】前端軟體工程師、高階前端軟體工程師前端軟體工程工程師
- 掘金 AMA:聽《Android進階解密》作者--劉望舒聊 Android 開發、進階那些事Android解密
- 職場瓶頸:2~4 年前端走出離職困境與舒適區前端
- 識別這5個錯誤,進階高階web前端工程師!Web前端工程師
- 讀懂深度學習,走進“深度學習+”階段深度學習
- 【React學習路線】從零進階前端核心工程師React前端工程師
- Git Message能引起極度舒適?Git
- 前端工程師做事的三重境界:我的進階之路前端工程師
- Airbnb資料工程師的進階指南:技術基礎AI工程師
- 廣州辦公室出租,舒適靈活性
- 受教之韓佬講述技術工程師如何進階技術管理工程師
- 業餘草 2018 技術文章合集整理,適合入門、中級、高階、架構師進階架構
- 深度優先與廣度優先
- 設計模式與前端工程師設計模式前端工程師
- 前端工程師進階之旅-手撕程式碼【前端常用方法以及面試常見題】前端工程師面試
- 數字技術變革:廣度、深度和溫度
- 「美菜網」招高階前端工程師啦前端工程師
- 報名中 | Serverless 技術進階研讀班,碎片時間提升技術新方式Server
- 大咖說·圖書分享|了不起的JavaScript工程師:從前端到全端高階進階JavaScript工程師前端
- [廣州壞猴子科技] 招聘中高階 golang 開發工程師/技術組長(base 廣州天河)Golang工程師
- 「進擊的前端工程師」CSS色彩揭秘前端工程師CSS
- 開放報名 | Serverless 技術進階研讀班,碎片時間提升技術新方式Server
- 【廣州】招聘中高階golang開發工程師/技術組長15-30KGolang工程師
- 面試高階前端工程師必問之流-stream面試前端工程師
- 七牛雲招聘~高階前端開發工程師前端工程師
- 如何進入Web前端開發行業 怎麼不斷提升技能Web前端行業
- Android開發工程師(雲技術方向)--急聘Android工程師
- 【位元組跳動(今日頭條)熱招·技術職位·北京】Android、iOS 、前端 、後端、Rust工程師/C++工程師AndroidiOS前端後端Rust工程師C++
- 每個高階前端工程師都應該知道的前端佈局前端工程師
- Android:ListView的擴充與進階AndroidView
- Android高階工程師普遍進階難題:遇到瓶頸我們該如何去提升自己?哪個方向?Android工程師
- 程式設計師職場之路,如何提升技術能力?程式設計師