膜拜大牛!3年Android開發工程師面試經驗分享,最全的BAT大廠面試題整理

小小陳刀仔發表於2020-12-19

開頭

最近發現一些讀者,留言提到跳槽面試的事情。當中,有幾個程式設計老兵,說他們從事Android 開發多年,薪資卻還在原地打轉,跳槽升職不是很順利,十分困惑。這顯然是遇到瓶頸期。

就目前大環境來看,今年跳槽成功的難度的確比往年要高。一個明顯的感受:今年的面試,無論一面還是二面,都很考驗Android程式設計師的技術沉澱。

近期這裡蒐集了近 100 套阿里、騰訊、美團、網易等公司2019 年的面試題,把技術點梳理成一份大而全的“Android 架構師”面試題(實際上比預期多花了不少精力),包含知識脈絡 + 分支細節,由於篇幅有限,這裡以圖片的形式給大家展示一部分。

JetPack裡的元件

上圖就是JetPack中包含的元件列表,每個元件都是相對獨立的,可以被單獨使用和構建。其中像被介紹的最多,也是最常被使用的LiveData, ViewModel, Room, Navigation, WorkManager之類的都發布了正式版,而CameraX, Compose之類的還處在Alpha版本,未正式釋出,官方並不建議在生產環境中使用。

然後說下,JetPack所有的元件都是基於AndroidX構建的,如果想在專案中使用JetPack需要先將專案中對Support Lib的依賴全部換成AndroidX

Android目前已經發展了11年,可以說是比較成熟的技術了,一開始時框架很少,也沒有什麼規範,所有的程式碼都是要自己寫,比如網路請求,資料庫請求,資料解析等等。後來出現了一些框架來幫助開發者快速進行開發,比如XUtils、Volley、OKHttp、EventBus等,隨著框架越來越多,一個應用可以有多種技術選型,直接導致應用開發越來越不規範,導致做出來的應用質量參差不齊,這顯然不是谷歌想看到的。谷歌隨後推出了MVP和MVVM相關的官方例子,效果很一般,而且覆蓋面只是在架構上,Goole I/O 2018大會上推出的Android Jetpack有望解決以上的問題。

三、Android Jetpack簡介

Jetpack並不是一個框架或者元件,它是一套庫、工具和指南的集合,可幫助開發者更輕鬆地編寫優質應用。這些元件可幫助開發者遵循最佳做法、擺脫編寫樣板程式碼的工作並簡化複雜任務,以便將精力集中放在所需的程式碼上。
Android Jetpack中的很多元件並不都是新開發的,而是很早就有了,比如在Goole I/O 2017大會時推出了 Android Architecture Component(AAC),它包括了LifeCycle、LiveData、ViewModel、Room。在Goole I/O 2018大會上,
用AndroidX替代了Android Support Library,並在Android Architecture Component的基礎上釋出了Android Jetpack,AndroidX也是屬於Android Jetpack。

Jetpack主要特性有以下三點:

1.加速開發
元件可單獨使用,也可以協同工作,當使用kotlin語言特性時,可以提高效率。

2.消除樣板程式碼
Android Jetpack可管理繁瑣的Activity(如後臺任務、導航和生命週期管理)。

3.構建高質量的強大應用
Android Jetpack元件圍繞現代化設計實踐構建而成,具有向後相容性,可以減少崩潰和記憶體洩漏。

四、Android Jetpack分類

下圖是Jetpack的分類。

谷歌仍舊不斷的完善Android Jetpack,截至到2019年8月已經有很多新加的元件並沒有顯示在上圖中,比如CameraX等。Android Jetpack分類有4種,分別是Architecture、Foundationy、Behavior、UI,下面分別介紹下。

1. Architecture(架構元件)

Architecture指的是架構元件,幫助開發者設計穩健、可測試且易維護的應用。架構元件可以說是對應用開發幫助最大的元件,本系列也是圍繞著架構元件進行講解。

DataBinding:以宣告方式將可觀察資料繫結到介面元素,通常和ViewModel配合使用。

Lifecycle:用於管理Activity和Fragment的生命週期,可幫助開發者生成更易於維護的輕量級程式碼。

LiveData: 在底層資料庫更改時通知檢視。它是一個可觀察的資料持有者,與常規observable不同,LiveData是生命週期感知的。
Navigation:處理應用內導航。

Paging:可以幫助開發者一次載入和顯示小塊資料,按需載入部分資料可減少網路頻寬和系統資源的使用。

Room:友好、流暢的訪問SQLite資料庫。它在SQLite的基礎上提供了一個抽象層,允許更強大的資料庫訪問。

ViewModel: 以生命週期的方式管理介面相關的資料,通常和DataBinding配合使用,為開發者實現MVVM架構提供了強有力的支援。

WorkManager: 管理Android的後臺的作業,即使應用程式退出或裝置重新啟動也可以執行可延遲的非同步任務。

官方推薦的Android應用架構如下圖所示。

這些架構元件既可以配合使用,也可以單獨使用,這裡建議還是儘量按照官方推薦的來。

2. Foundationy(基礎元件)

基礎元件提供橫向功能,例如向後相容性、測試、安全、Kotlin 語言支援,幷包括多個多個平臺開發的元件。

Android KTX:優化了供Kotlin使用的Jetpack和Android平臺API。幫助開發者以更簡潔、更愉悅、更慣用的方式使用Kotlin進行Android開發。
AppCompat:幫助較低版本的Android系統進行相容。
Auto: 開發Android Auto應用的元件,提供了適用於所有車輛的標準化介面和使用者互動。
檢測:從AndroidStudio中快速檢測基於Kotlin或Java的程式碼。
多Dex處理:為具有多個Dex檔案應用提供支援。
安全:安全的讀寫加密檔案和共享偏好設定。
測試:用於單元和執行時介面測試的Android 測試框架。
TV: 構建可讓使用者在大螢幕上體驗沉浸式內容的應用。
Wear OS:開發Wear應用的元件。

3. Behavior(行為元件)

行為元件可幫助開發者的應用與標準Android服務(如通知、許可權、分享)相整合。

CameraX:幫助開發簡化相機應用的開發工作。它提供一致且易於使用的介面,適用於大多數Android。 裝置,並可向後相容至Android 5.0(API 21)。
DownloadManager:處理長時間執行的HTTP下載的系統服務。
媒體和播放:用於媒體播放和路由(包括Google Cast)的向後相容API。
通知:提供向後相容的通知API,支援Wear和Auto。
許可權:用於檢查和請求應用許可權的相容性API。
設定:建立互動式設定,建議使用AndroidX Preference Library庫將使用者可配置設定整合到應用中。
分享操作:可以更輕鬆地實現友好的使用者分享操作。
切片:切片是一種UI模板,建立可在應用外部顯示應用資料的靈活介面元素。

4. UI(介面元件)

Animation and Transition:該框架包含用於常見效果的內建動畫,並允許開發者建立自定義動畫和生命週期回撥。
Emoji Compatibility:即便使用者沒有更新Android系統也可以獲取最新的表情符號。
Fragment:元件化介面的基本單位。
佈局:用XML中宣告UI元素或者在程式碼中例項化UI元素。
調色盤:從調色盤中提取出有用的資訊。

五、在應用中引入Jetpack相關元件

在專案build.gradle中新增google() 庫,如下所示。

  allprojects {
        repositories {
            google()
            jcenter()
        }
    }

如果想引入Room,可以在模組build.gradle中這麼寫:

    implementation   "android.arch.persistence.room:runtime:1.1.1"
    annotationProcessor   "android.arch.persistence.room:compiler:1.1.1 "
    androidTestImplementation  "android.arch.persistence.room:testing:1.1.1"

總結

這篇文章內部不多,旨在讓大家瞭解Android Jetpack是什麼,包括什麼,如何引用,從下一篇開始,就開始學習Android Jetpack的架構元件。

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

文末

初級工程師拿到需求會直接開始做,然後做著做著發現有問題了,要麼技術實現不了,要麼邏輯有問題。

而高階工程師拿到需求會考慮很多,技術的可行性?對現有業務有沒有幫助?對現有技術架構的影響?擴充套件性如何?等等…之後才會再進行設計編碼階段。

而現在隨著跨平臺開發,混合式開發,前端開發之類的熱門,Android開發者需要學習和掌握的技術也在不斷的增加。

通過和一些行業裡的朋友交流討論,以及參考現在大廠面試的要求。我們花了差不多一個月時間整理出了這份Android高階工程師需要掌握的所有知識體系。你可以看下掌握了多少。

混合式開發,微信小程式。都是得學會並且熟練的

這些是Android相關技術的核心,還有Java進階

高階進階必備的一些技術。像移動開發架構專案實戰等

Android前沿技術;包括了元件化,熱升級和熱修復,以及各種架構跟框架的詳細技術體系

以上即是我們整理的Android高階工程師需要掌握的技術體系了。可能很多朋友覺得很多技術自己都會了,只是一些新的技術不清楚而已。應該沒什麼太大的問題。

而這恰恰是問題所在!為什麼別人高階工程師能年限突破30萬,而你只有十幾萬呢?

就因為你只需補充你自己認為需要的,但並不知道企業需要的。這個就特別容易造成差距。因為你的技術體系並不系統,是零碎的,散亂的。那麼你憑什麼突破30萬年薪呢?

我這些話比較直接,可能會戳到一些人的玻璃心,但是我知道肯定會對一些人起到點醒的效果的。而但凡只要有人因為我的這份高階系統大綱以及這些話找到了方向,並且付出行動去提升自我,為了成功變得更加努力。那麼我做的這些就都有了意義。

喜歡的話請幫忙轉發點贊一下能讓更多有需要的人看到吧。謝謝!

以上系統大綱裡包含的所有技術資料,我這裡都有的。可以免費分享給有需要的朋友!

玻璃心,但是我知道肯定會對一些人起到點醒的效果的。而但凡只要有人因為我的這份高階系統大綱以及這些話找到了方向,並且付出行動去提升自我,為了成功變得更加努力。那麼我做的這些就都有了意義。

喜歡的話請幫忙轉發點贊一下能讓更多有需要的人看到吧。謝謝!

以上系統大綱裡包含的所有技術資料,我這裡都有的。可以免費分享給有需要的朋友!

資料領取方式:點選我的GitHub

相關文章