Android 高級進階攻略,輕鬆拿 Offer —— 高級工程師學習路線

思惟導圖

Android 基礎

相關原理

常見 IPC 方式

  • Binder 機制
  • AIDL 的使用

Handler 機制

  • ThreadLocal 原理
  • AsyncTask 原理

ListView 工做原理

  • 閱讀源碼
  • 熟悉常見優化

RecyclerView 工做原理

  • 閱讀源碼
  • 自定義 LayoutManager

Animation 工做原理

Activity 難點

  • setResult() 和 finish() 的順序關係?
  • onSaveInstanceState() 和 onRestoreInstanceState()
  • onNewIntent() 和 onConfigurationChanged()

Service 難點

  • startService 與 bindService 的區別?
  • Service 中 onStartCommand 返回值的做用?
  • bindService後,ServiceConnection 裏面的回調方法運行在哪一個線程?它們的調用時機分別是什麼?
  • Service 的 onCreate 運行在哪一個線程?

ContentProvider 難點

  • ContentProvider 的生命週期
  • ContentProvider 的 onCreate 和 CRUD 運行在哪一個線程?它們是線程安全的嗎?
  • ContentProvider 的內部存儲只能是 SQLite 嗎?

RemoteViews

  • 熟悉 RemoteViews 的使用,並瞭解其運行原理

Material Design(材料設計)

  • 熟練使用材料設計的控件及佈局

自定義 View

View 的繪製流程

  • onMeasure
  • onLayout
  • onDraw
  • invalidate() 與 postInvalidate()

事件分發機制

  • onDispatchTouchEvent
  • onInterceptTouchEvent
  • onTouchEvent
  • 事件衝突處理

貝塞爾曲線、粒子效果

性能優化

  • 佈局優化:ViewStub、include、merge 的使用,它們的區別?
  • 過分渲染的處理
  • ANR 的處理
  • 監控:埋點、Crash 上報

內存優化

  • OOM 的處理git

  • 內存泄露的處理github

  • 內存檢測算法

  • 內存分析編程

  • Bitmap 的優化:超大圖的加載原理設計模式

網絡優化

  • API 優化
  • 流量優化
  • 弱網優化

電量優化

  • WakeLock 機制
  • JobScheduler 機制

第三方開源庫

  • OKHttp 原理
  • Retrofit 原理
  • RxJava 原理
  • Glide 原理:加載原理、三級緩存、LRU 算法
  • Dagger2 原理
  • ButterKnife 原理
  • EventBus 原理
  • RxJava 原理

混合開發

  • WebView
  • React Native
  • Flutter

NDK 開發

熟悉調用 JNI 方法的方式,熟悉如何回調 Java 方法。緩存

安全

熟悉各類發編譯,二次打包工具,瞭解 smali。安全

動態化

閱讀 VirtualAPK、Tinker 的源碼,熟悉常見的熱修復和插件化原理。性能優化

Gradle

  • Groovy 語法
  • Gradle 插件開發基礎

設計模式與架構

  • 熟悉 6 大基本原則網絡

  • MVC、MVP、MVVM多線程

  • 組件化

  • Jetpack

其餘問題

  • Activity、Window,View 之間的關係?
  • 子線程訪問 UI 卻不報錯的緣由?
  • 主線程的消息循環是一個死循環,爲什麼不會卡死?
  • Binder、IBinder、IInterface 的關係?

Java 知識

  • String 常量池
  • 類型轉換原理
  • ArrayList 實現原理
  • HashMap 實現原理
  • 常見鎖(樂觀鎖、悲觀鎖),死鎖解決方法
  • synchronized 關鍵字
  • volatile 關鍵字
  • 常見 IO(AIO,BIO,NIO)
  • 常見併發框架
  • 瞭解類加載機制
  • 瞭解垃圾回收機制

總結

以上就是 Android 高級工程師 須要掌握的知識點,高級工程師須要掌握的知識點仍是比較多的。若是說初級工程師是打撈基礎的過程,那麼高級工程師就是一個沉澱技術進階的過程。

高級工程師通常是指 3 - 5 年工做經驗,若是學習能力比較強 3 工做經驗足夠進階到高級工程師的。應聘高級工程師薪資通常在 15k - 25k 左右,這裏的薪資範圍通常會根據是否有亮點上下浮動。

高級工程師對 Android 的理解,不該該還停留在對 API 的使用。初級工程師能夠說是對 API 熟悉的過程,高級工程師更應該注重的是 API 內部的原理,知其然而知其因此然。

這個階段閱讀源碼是最好的進階方式,固然閱讀源碼很容易陷入細節沒法自拔。這裏推薦看一下高質量的博客和一些進階書籍,根據博客和書的思路有針對性的看源碼是比較推薦的方式。

Android 方面推薦看下:

  • 任玉剛的《Android 開發藝術探索》
  • 劉望舒的《Android 進階揭祕》
  • 《Android 系統源代碼情景分析》
  • 《深刻理解 Android》系列
  • 《深刻理解 Android 熱修復技術原理》

因爲 Android 與 Java 有很大的淵源,因此 Java 知識對高級工程師來講也是很重要的。這個階段須要對 Java 有更深刻的理解,還要對 Java 虛擬機有必定的研究。

Java 方面推薦看下:

  • 《Java 併發編程的藝術》
  • 《Java 併發編程實戰》
  • 《Java 多線程編程核心技術》
  • 《深刻理解 Java 虛擬機》

若是想讓本身更加有亮點,推薦注重下面幾個方面:

  • 建立一個 GitHub 帳號,多輸出一些高質量的開源項目
  • 擁有一個持續輸出的技術博客
  • 閱讀源碼

作技術開發的前 5 年是努力學習知識和技術沉澱的一個過程。有些人天賦比較好,進階很快;有些人天賦雖然很差,但很勤奮,進階也能很塊。必定要讓本身的工做經驗與技術能力成正比,技術能力永遠跟薪資成正比,能力越強薪資越高。

若是以上知識點對你來講仍然太簡單了,那麼請接受我稱你爲「大佬」。敬請期待下一期 Android 資深/專家工程師 的學習指南,視頻和書籍對資深/專家級別的工程師來講幫助不大了,這裏不作推薦了。

個人 GitHub

github.com/jeanboydev/…

個人公衆號

歡迎你「掃一掃」下面的二維碼,關注個人公衆號,能夠接受最新的文章推送,有豐厚的抽獎活動和福利等着你哦!😍

Android波斯灣

若是你有什麼疑問或者問題,能夠 點擊這裏 提交 issue,也能夠發郵件給我 jeanboy@foxmail.com

同時歡迎你

Android技術進階:386463747
來一塊兒交流學習,羣裏有不少大牛和學習資料,相信必定能幫助到你!
相關文章
相關標籤/搜索