1. 程式人生 > 其它 >android移動開發專案化教程,目前最穩定和高效的UI適配方案!幫你突破瓶頸

android移動開發專案化教程,目前最穩定和高效的UI適配方案!幫你突破瓶頸

前言

對於很多沒有學歷優勢的人來說,面試大廠是非常困難的,這對我而言,也是一樣,出身於專科,原本以為就三點一線的生活度過一生,直到生活上的變故,才讓我有了新的想法和目標,因此我這個專科渣渣也奮鬥了起來,面試百度、騰訊、網易、位元組跳動、阿里等大廠,竟拿下了阿里P6崗。今天就分享一下大廠面試難點和麵經,主要是希望能夠激勵到同樣被學歷所困擾的技術人,能夠對職業生涯和技術規劃有一個參考價值,感謝!

從初中級到高階,移動端程式設計師的進階寶典

想要成為一名優秀的Android開發,你需要一份完備的 知識體系,在這裡,讓我們一起成長為自己所想的那樣。

下面我們就以 Android 開發為例,從硬技能和軟技能兩方面,梳理大前端趨勢下移動端程式設計師從初級到高階進階所需的技能點,並且推薦一些實用的書籍資料。

(一) 硬技能:專業的技術知識

1. Java / Kotlin開發語言

(1) Java

常用資料結構:ArrayList、Vector、CopyOnWriteArrayList、HaspMap、ConcurrentHashMap、HashTable 等使用場景。

JVM 虛擬機器包括 Java 記憶體管理,GC 垃圾回收機制,類載入機制。推薦書籍:《深入理解 Java 虛擬機器 JVM 高階特性與***實踐》。

多執行緒程式設計,包括執行緒池,鎖機制,執行緒同步 。推薦書籍:《Java 併發程式設計實戰》和《Java 多執行緒程式設計核心技術》。

AOP 程式設計實現,包括 JDK 動態代理實現,ASM 直接操作位元組碼、CGLIB 實現,其原理封裝了 ASM,使用更方便。

Javassist:在位元組碼載入前直接修改需要切入的方法,以及註解處理器 APT,這在 Android 中開源的庫應用較多,比如 DataBinding , ButterKnife, EventBus3 等等。

異常處理 Exception,包括檢查性異常、執行時異常處理。

IO 流相關,包括堵塞型 IO 和非堵塞型 IO。

Java 的一些高性特級,比如反射、代理、泛型、列舉、正則表示式等等;同時瞭解一下 jdk1.8,1.9,1.10 等新特性。相關書籍比較多,推薦《Thinking in Java》《Effective Java》

(2) Kotlin

Kotlin 是一個基於 JVM 的新程式語言,在 Google IO 2017 中被 Google 宣佈成為 Android 官方開發語言。

Kotlin 有哪些優點?

**①簡潔性: **提供了很多標準函式,大大減少樣板程式碼的數量。

②安全性:避免空指標異常等錯誤。

③互操作性:充分利用 JVM、Android 和瀏覽器的現有庫。

**④工具友好: **可用任何 Java IDE 或者使用命令列構建。

在 Kotlin 中要樹立函數語言程式設計思想。把函式理解為一個值到另一個值的對映關係,以函式作為單元來處理各個業務邏輯,函式既可以做引數,也可以作為返回值。多使用 Kotlin 提供的標準函式,比如 let、run、with、apply、also、 Lambda 表示式。儘量使用閉包和高階函式。

Kotlin 的另一個突出特點是協程,為設計非同步、非阻塞的程式提供了強大的正規化。協程是一種輕量級的執行緒,它提供避免阻塞且更廉價可控的操作: 協程掛起。將複雜非同步操作放入底層庫中,程式邏輯可順序表達,以此簡化非同步程式設計。

簡單說下 Kotlin/Native,它的設計初衷是支援在非 JVM 虛擬機器平臺環境的程式設計,如 iOS、嵌入式平臺等,同時支援與 C 互操作。推薦書籍: 《Kotlin 實戰》

2. Android 進階技術點

程序相關,包括 App 程序原理以及 AIDL 原理。

效能優化,包括:記憶體,cpu,耗電量、網路請求、UI 佈局、執行緒、資料庫等優化方法以及優化工具的使用。

Android 原始碼相關,包括:Binder 機制,Activity 啟動流程,Handler 原理,AMS ,PMS,WMS 原理,View 的繪製流程,Touch 事件傳遞機制等等。

編譯打包流程,從 java/kotlin 原始碼到最終形成 APK 的過程。

熱修復的實現原理,目前熱修復框架的種類繁多,常見的包括底層替換、類載入和 Instant Run 方案。

逆向工程原理,主要是為了防止 apk 被反編譯破解,以及瞭解 apk 加固方案。

外掛化,目前方案同樣很多,主流的技術實現是 Hook 方式,註冊 Activity 進行佔坑,使用佔坑 Activity 通過 AMS 驗證,還原外掛 Activity,其他元件的原理也大致類似。

NDK 開發,呼叫 JNI 以及回撥 Java 的方式。

自定義控制元件,需要注意 onMeasure,onLayout,onDraw 的呼叫時機,以及 Touch 事件分發機制。

動畫 View Animation,檢視動畫在很早的 Android 版本系統中就已經提供了,只能被用來設定 View 的動畫。

屬性動畫 Property Animation,只對 3.0 以上版本,可以設定給任何 Object,包括還沒有渲染到螢幕上的物件。這種動畫是可擴充套件的,可自定義任何型別和屬性的動畫。

Webview 中 Native JS 互動,常用的 JSBridge 等。

Gradle 的特性以及 DSL 語法,比如 Gradle Transform API 的使用,它允許第三方外掛在 class 檔案轉為 dex 檔案前操作編譯好的 class 檔案。利用這一特性,我們可以在程式碼編譯階段實現程式碼注入或者程式碼修改,這也是很多埋點技術和熱修復技術的基礎。

安全性:HTTPS 通訊原理,資料加密方式,包括 MD5,RSA 等,webview 安全性,程式碼混淆,資料驗籤,元件通訊安全,伺服器通訊。

CI 持續整合:Jenkins ,Gitlab CI 等搭建持續整合開發工具。

Sersor 感測器:包括陀螺儀,加速感測器,方向感測器,重力感測器,光線感測器等。

Android 開發國際化

ART 和 Dalvik 虛擬機器的區別,主要是 AOT,Ahead-Of-Time 預編譯。

熟悉 DEX 檔案結構。

單元測試:JUnit4,AndroidJUnitRunner,Mockito 框架的使用。

自動化測試:Monkey / Monkey Runner ,Espresso ,UI Automator 等。

掌握模組化開發方式:主要注意分好層、模組間跳轉通訊。

程式碼重構能力,推薦書籍:《重構改善既有程式碼的設計》、《重構與模式》

Google 動態化框架 App Bundles

Jetpack,Google 推出的新一代元件、工具和架構指導,旨在加快 Android 應用開發速度。Jetpack 主要分為 4 部分:

大前端趨勢下移動端程式設計師要涼?這些進階技能助你逆襲

Android開發常用的第三方庫:

響應式程式設計:RxJava、RxAndroid,Google 的Agera

網路庫:包括Retrofit,OkHttp,Volley

圖片:Fresco,Gilde,Picasso

依賴注入:Dagger2

資料庫:Realm,ORMLite,GreenDAO,ObjectBox

資料匯流排:EventBus,otto

記憶體洩漏檢測工具 LeakCanary 等

各個技能點如果詳細拓展開,會形成相當龐雜的一張知識圖譜,建議大家自行梳理總結消化。

3. OOAD 和設計模式

在架構設計方面,首先要掌握的就是面向物件的開發和設計。具體知識點包括:

面向物件三大特性:封裝,繼承,多型。

五大基本原則(SOLID 原則),單一職責原則,開放封閉原則,里氏替換原則,依賴倒置原則,介面分離原則。

23 種設計模式:常用的有工廠、單例、介面卡、橋接、組合、代理、命令、觀察者、策略、狀態模式等等。

4. APP架構設計

包括 MVC、MVP、MVVM、MVI、VIPER、Clean Architecture、Flux。目前除了 MVC 外 MVP 和MVVM 用得比較多,具體的架構設計還要結合業務去考慮。

(二) 軟技能

人在職場,行走江湖,想進階高階程式設計師光有技術深度是不夠的,還需要掌握眾多軟技能,注意綜合職業素養的磨練。有很多人一開始重視程度不足,在職場後半段的上升過程中,容易遇到瓶頸。

下面是我個人總結出的高階程式設計師必備軟技能,供大家參考。

1. 快速學習能力:包括技術深度和廣度,能夠不斷探究新技術,不斷學習。

2. 溝通能力:加強表達、閱讀、編寫能力,即使在技術發達的今天也絕不會過時。因為任何方式的溝通在企業內部都是非常有必要的。

3. 團隊協作能力:開發人員很容易陷入孤立的人際交往狀態,但開發工作永遠都不可能是一個人完成,只有成員真正能融入團隊內,順利與其他同事溝通合作,才能體現出其真正的價值,被列為未來職位晉升候選人的機率也更大。

4. 時間管理能力:可以參考時間管理「四象限法則」,有重點地把精力和時間集中用於處理重要但不緊急的工作,這樣可以做到未雨綢繆。

大前端趨勢下移動端程式設計師要涼?這些進階技能助你逆襲

5. 影響力:一方面是業務影響力,另一方面是技術影響力。其中,提高技術影響力的方式包括:多參與技術分享,把積累的知識進行總結和傳播;參加技術方案評審,把技術經驗分享出去;幫助新同學解決技術問題;在部落格、Github、StackOverflow 等平臺上對外分享。

6. 文件編寫能力:

程式碼註釋。很多程式設計師很少寫註釋,或者註釋過多,都是不合適的。多參考開源專案的註釋規範。

編寫技術設計文件。包括流程圖,類圖,功能時序圖等等。

最後

贈送大家一套完整的Android學習資料吧。

以前一直是自己在網上東平西湊的找,找到的東西也是零零散散,很多時候都是看著看著就沒了,時間浪費了,問題卻還沒得到解決,很讓人抓狂。

後面我就自己整理了一套資料,還別說,真香!

資料有條理,有系統,還很全面,我不方便直接放出來,大家可以先看看有沒有用得到的地方吧。

附上白嫖地址:《Android架構視訊+BATJ面試專題PDF+學習筆記》