【Android】學習路線與建議

2020-09-29 14:00:46

簡介:大四學生黨一枚!主攻Android開發,轉游戲使用者端開發中
語錄取乎其上,得乎其中,取乎其中,得乎其下,以頂級態度寫好一篇的部落格。

最近有很多學弟學妹私信我,諮詢Android學習路線的問題,結合今年秋招Android崗的面試經驗,做個總結,僅代表個人看法。

一.企業要求

1.1 任職要求

下面是我在招聘網站上發現的幾個Android工程師的任職要求

騰訊社招
1、具備Android應用層偵錯分析能力,快速定位解決anr、crash等問題;
2、對Android開發相關的事件處理、記憶體處理、多執行緒程式設計、網路通訊及效能優化有深入理解;
3、熟悉Android應用框架和Android GUI庫。
4、有過Android系統應用軟體的開發。
5、有良好的原始碼閱讀能力和編碼習慣
網易社招
1、計算機及相關專業本科以上學歷,2年以上Android相關開發經驗
2、熟悉Android平臺的開發技術,如UI,網路,效能和記憶體優化等
3、瞭解各類常用開源框架實現原理,並能靈活運用;
4、紮實的計算機專業基礎,熟悉常用的資料結構、演演算法、設計模式
5、熟悉網路程式設計,熟練掌握tcp/udp等協定相關知識
6、具備良好的學習能力,自主分析和解決問題能力,以及良好的溝通共同作業能力

重點:從上面的要求中詳細提取了一些Android從中階邁向高階必備的技能。友情提示:基礎不牢,地動山搖。四大元件都不熟悉的童鞋可以先不要看下面的內容。

如果覺得自己四大元件掌握的還可以的同學,請回答以下幾個問題

1.Activity的啟動模式與標誌位分別有?每種啟動模式的使用場景。
2.Activity的生命週期,onStart和onResume的區別,Activity A跳轉到Activity B,生命週期如何?
3.廣播的幾種型別?粘性廣播瞭解過嗎?靜態註冊和動態註冊的區別。
4.關於Service,startService和bindService的區別。
5.ContentProvider可以暫時不做了解,涉及跨程序的資料互動。當了解了跨程序通訊後再學習。

1.2 推薦書籍

說實話,大三的我是不能完整回答任何一個問題的,建議閱讀《Android開發藝術探索》《Android進階之光》《Android自定義View實戰》《Android進階解密》
下面的問題,在這些書中都有完整的答案,我認為是進階必讀的書。每本書中都有相互重複的章節,可以有選擇性的閱讀。

大神級直接推薦《深入理解Android核心涉及思想》,比較深涉及到Android`核心比較多,沒有一定功力很難懂。

1.3 細分Android

  • UI:自定義View,View繪製流程,View事件分發機制,Android動畫(★★★★★

1.如何用自定義View的方式實現一個圓角控制元件(大體思路)
2.View的三大繪製流程,每一步的作用
3.如何處理滑動事件衝突
4.幾種Android動畫的區別
5.四大元件是基礎,面試必問。

  • 網路相關:常用網路框架的底層原理以及實現細節。(★★★★★

你瞭解目前目前流行的的網路框架Retrofit和Okhttp的實現細節嗎?
1.Retrofit的實現原理?動態代理技術瞭解多少?
2.OkHttp的五層攔截鏈分別是哪些?OkHttp中的快取如何實現的?

  • 多執行緒程式設計:Android中提供的實現多執行緒的方法(★★★★★

比如HandlerThread,AsyncTask,IntentService等方法
1.他們的區別,適用場景,實現的原理
2.執行緒同步的幾個方法,阻塞同步和非阻塞同步瞭解多少。
3.執行緒池有沒有了解過,優缺點有哪些,任務佇列呢?
4.Handler,MessageQueue,Message,Looper瞭解嗎?

  • 效能優化:各項指標優化讓app達到最佳執行效果。(★★★★

1.啟動和響應速度優化:阿里魔鏡檢測首幀顯示時間,耗時方法檢測
2.網路優化:網路快取,長連結,鏈路複用,連線池。
3.記憶體優化:記憶體漏失記憶體溢位等,業界常用的解決方案
4.UI優化:三大常用佈局,線性,約束和相對佈局,按需載入。
5.Apk安裝包體積減小的優化。

  • 建議(★★★★

架構方面:MVP和MVVM(MVP必須要了解)
路由:ARouter框架(可以瞭解,加分項)
儲存:資料持久化的解決方案,序列化與反序列化的原理。
底層原理:反射,動態代理,註解等。(必須瞭解,造輪子離不開的東西)
技術:Kotlin和Flutter(對於校招生應該是加分項,可以瞭解一下。)
閱讀原始碼的能力:可以拿OkHttp,View的原始碼練手。
程式設計風格:可複用,可延伸,比如Java中的多型,介面,抽象等等。
程式碼管理倉庫:git指令的使用

二.技術深度

上面的知識掌握以後,技術廣度可以,還有需要注意學習的地方。

  • Android

1.Zygote,Launcher程序
2.AMS,WMS,Context的理解
3.IPC和Binder(IPC程序間通訊)
上面處理IPC和Context,其他可以選擇性掌握,也不一定都會問。這部分內容都是比較難的。

  • Java

1.Java虛擬機器器
2.Java多型的原理
3.反射,動態代理,註解
4.Java執行時記憶體
關於Java的深度遠不止這些,建議閱讀《深入瞭解Java虛擬機器器》這本書。

三.建議

現在已經10月了,距離春招還有半年左右的時間,其實時間真不多了。

假設序列執行:
1.《Android開發藝術探索》和《Android進階之光》兩本書大概需要啃一個月。
2.計算機基礎知識如資料結構,計算機網路,資料庫,作業系統突擊複習半個月。
3.演演算法大概需要在leetcode刷幾十道中等難度的題。時間未知
4.簡歷上至少需要兩個拿得出手的專案,圖書管理系統就可以pass了。假設之前沒有比較厲害的專案,要花一個月做專案。
大三上學期課程還是挺多的,加上上學期是網課,大家都懂的。所以到2021/01/22,還有大概四個月,週末時間大概有一個月。如果抓緊一些,大概可以擠出兩個月空閒時間吧。

時間真的很緊啊
  • 專案帶動學習

這個就是一邊做專案一邊學習相關技術。(上上之選)

  • 開源專案來幫您

開源專案改改,深入原始碼分析。(時間不夠可以嘗試一下)

現階段最重要的仍是提高技術和做專案吧。加油,送給學習Android的學弟學妹們。