前方高能!這是最新的一波Android大廠面試題彙總,不學則已,一學驚人

南方吳彥祖_藍斯發表於2021-08-25

前言

面試大廠,那就是考察你技術方向的一些專業技能,如果你面試 Android崗位,那 Android 方向的 專業技能就是考察很重要的一個方向。

但是話說回來,即便這條是所有人都知道的共識,也不是所有人都能搞得定。有些人就是覺得自己基礎差、非科班,要麼知難而退,要麼沒有決心啃下這塊硬骨頭,這時候就體現每個人面對困難的方式了。

再退一步講,即便你不想加入大廠,在IT 領域,如果你想吃技術這碗飯,長久來看,專業技能也會制約一個人的上限,等到工作室越長,年齡越來越大,專業技能的熟練程度就會讓你和別的程式設計師之間差距越來越明顯。

面試是測試一個人能力最直接的方式,我今年前前後後面了10家公司,下面就放上我遇到的所有面試題,並且提供一些面試技巧給各位即將面試的同志們。

因為篇幅原因,下面只放上面試題,答案整理成了一個文件,有需要的點選   可以看到全部內容。

1.Activity

  • Activity的啟動流程
  • onSaveInstanceState(),onRestoreInstanceState的掉用時機
  • activity的啟動模式和使用場景
  • Activity A跳轉Activity B,再按返回鍵,生命週期執行的順序
  • 橫豎屏切換,按home鍵,按返回鍵,鎖屏與解鎖螢幕,跳轉透明Activity介面,啟動一個 Theme 為 Dialog 的 Activity,彈出Dialog時Activity的生命週期
  • onStart 和 onResumeonPause 和 onStop 的區別
  • Activity之間傳遞資料的方式Intent是否有大小限制,如果傳遞的資料量偏大,有哪些方案
  • Activity的onNewIntent()方法什麼時候會執行
  • 顯示啟動和隱式啟動
  • scheme使用場景,協議格式,如何使用
  • ANR 的四種場景
  • onCreate和onRestoreInstance方法中恢復資料時的區別
  • activty間傳遞資料的方式
  • 跨App啟動Activity的方式,注意事項
  • Activity任務棧是什麼
  • 有哪些Activity常用的標記位Flags
  • Activity的資料是怎麼儲存的,程式被Kill後,儲存的資料怎麼恢復的

2.Service

  • service 的生命週期,兩種啟動方式的區別
  • Service啟動流程
  • Service與Activity怎麼實現通訊
  • IntentService是什麼,IntentService原理,應用場景及其與Service的區別
  • Service 的 onStartCommand 方法有幾種返回值?各代表什麼意思?
  • bindService和startService混合使用的生命週期以及怎麼關閉

3.BroadcastReceiver

  • 廣播的分類和使用場景
  • 廣播的兩種註冊方式的區別
  • 廣播傳送和接收的原理
  • 本地廣播和全域性廣播的區別

4.ContentProvider

  • 什麼是ContentProvider及其使用
  • ContentProvider[,]ContentObserver之間的關係
  • ContentProvider的實現原理* 4.ContentProvider的優點* 5.Uri 是什麼

5.Handler

  • Handler的實現原理
  • 子執行緒中能不能直接new一個Handler,為什麼主執行緒可以 主執行緒的Looper第一次呼叫loop方法,什麼時候,哪個類
  • 3.Handler導致的記憶體洩露原因及其解決方案
  • 4.一個執行緒可以有幾個Handler,幾個Looper,幾個MessageQueue物件
  • 5.Message物件建立的方式有哪些 & 區別?Message.obtain()怎麼維護訊息池的?
  • Handler 有哪些傳送訊息的方法
  • Handler的post與sendMessage的區別和應用場景
  • handler postDealy後訊息佇列有什麼變化,假設先 postDelay 10s, 再postDelay 1s, 怎麼處理這2條訊息
  • MessageQueue是什麼資料結構
  • Handler怎麼做到的一個執行緒對應一個Looper,如何保證只有一個MessageQueue,ThreadLocal在Handler機制中的作用
  • HandlerThread是什麼 & 好處 &原理 & 使用場景
  • IdleHandler及其使用場景
  • 訊息屏障,同步屏障機制
  • 子執行緒能不能更新UI
  • 為什麼Android系統不建議子執行緒訪問UI
  • Android中為什麼主執行緒不會因為Looper.loop()裡的死迴圈卡死,MessageQueue#next 在沒有訊息的時候會阻塞,如何恢復?
  • Handler訊息機制中,一個looper是如何區分多個Handler的,當Activity有多個Handler的時候,怎麼樣區分當前訊息由哪個Handler處理,處理message的時候怎麼知道是去哪個callback處理的
  • Looper.quit/quitSafely的區別
  • 透過Handler如何實現執行緒的切換
  • Handler 如何與 Looper 關聯的
  • Looper 如何與 Thread 關聯的
  • Looper.loop()原始碼
  • MessageQueue的enqueueMessage()方法如何進行執行緒同步的
  • MessageQueue的next()方法內部原理
  • 子執行緒中是否可以用MainLooper去建立Handler,Looper和Handler是否一定處於一個執行緒
  • ANR和Handler的聯絡

6.View繪製

  • View繪製流程
  • MeasureSpec是什麼
  • 子View建立MeasureSpec建立規則是什麼
  • 自定義Viewwrap_content不起作用的原因
  • 在Activity中獲取某個View的寬高有幾種方法
  • 為什麼onCreate獲取不到View的寬高
  • View#post與Handler#post的區別
  • Android繪製和螢幕重新整理機制原理
  • Choreography原理
  • 什麼是雙緩衝
  • 為什麼使用SurfaceView
  • 什麼是SurfaceView
  • View和SurfaceView的區別
  • SurfaceView為什麼可以直接子執行緒繪製
  • SurfaceView、TextureView、SurfaceTexture、GLSurfaceView
  • getWidth()方法和getMeasureWidth()區別
  • invalidate() 和 postInvalidate() 的區別
  • Requestlayout,onlayout,onDraw,DrawChild區別與聯絡
  • LinearLayout、FrameLayout 和 RelativeLayout 哪個效率高
  • LinearLayout的繪製流程
  • 自定義 View 的流程和注意事項
  • 自定義View如何考慮機型適配
  • 自定義控制元件最佳化方案
  • invalidate怎麼區域性重新整理
  • View載入流程(setContentView)

7.View事件分發

  • View事件分發機制
  • view的onTouchEvent,OnClickListerner和OnTouchListener的onTouch方法 三者優先順序
  • onTouch 和onTouchEvent 的區別
  • ACTION_CANCEL什麼時候觸發
  • 事件是先到DecorView還是先到Window
  • 點選事件被攔截,但是想傳到下面的View,如何操作
  • 如何解決View的事件衝突
  • 在 ViewGroup 中的 onTouchEvent 中消費 ACTION_DOWN 事件,ACTION_UP事件是怎麼傳遞
  • Activity ViewGroup和View都不消費ACTION_DOWN,那麼ACTION_UP事件是怎麼傳遞的
  • 同時對父 View 和子 View 設定點選方法,優先響應哪個
  • requestDisallowInterceptTouchEvent的呼叫時機

8.RecycleView

  • RecyclerView的多級快取機制,每一級快取具體作用是什麼,分別在什麼場景下會用到哪些快取
  • RecyclerView的滑動回收複用機制
  • RecyclerView的重新整理回收複用機制
  • RecyclerView 為什麼要預佈局
  • ListView 與 RecyclerView區別
  • RecyclerView效能最佳化

9.Viewpager&Fragment

  • Fragment的生命週期 & 結合Activity的生命週期
  • Activity和Fragment的通訊方式, Fragment之間如何進行通訊
  • 為什麼使用Fragment.setArguments(Bundle)傳遞引數
  • FragmentPageAdapter和FragmentStatePageAdapter區別及使用場景
  • Fragment懶載入
  • ViewPager2與ViewPager區別
  • Fragment巢狀問題

10.WebView

  • 如何提高WebView載入速度
  • WebView與 js的互動
  • WebView的漏洞
  • JsBridge原理

11.動畫

  • 動畫的型別
  • 補間動畫和屬性動畫的區別
  • ObjectAnimator,ValueAnimator及其區別
  • TimeInterpolator插值器,自定義插值器
  • TypeEvaluator估值器

12.Bitmap

  • Bitmap 記憶體佔用的計算
  • getByteCount() & getAllocationByteCount()的區別
  • Bitmap的壓縮方式
  • LruCache & DiskLruCache原理
  • 如何設計一個圖片載入庫
  • 有一張非常大的圖片,如何去載入這張大圖片
  • 如果把drawable-xxhdpi下的圖片移動到drawable-xhdpi下,圖片記憶體是如何變的。
  • 如果在hdpi、xxhdpi下放置了圖片,載入的優先順序。如果是400 800,10801920,載入的優先順序。

13.mvc&mvp&mvvm

  • MVC及其優缺點
  • MVP及其優缺點
  • MVVM及其優缺點
  • MVP如何管理Presenter的生命週期,何時取消網路請求

14.Binder

  • Android中程式和執行緒的關係,區別
  • 為何需要進行IPC,多程式通訊可能會出現什麼問題
  • Android中IPC方式有幾種、各種方式優缺點
  • 為何新增Binder來作為主要的IPC方式
  • 什麼是Binder
  • Binder的原理,Binder Driver 如何在核心空間中做到一次複製的?
  • 使用Binder進行資料傳輸的具體過程
  • Binder框架中ServiceManager的作用
  • 什麼是AIDL
  • AIDL使用的步驟
  • AIDL支援哪些資料型別
  • AIDL的關鍵類,方法和工作流程
  • 如何最佳化多模組都使用AIDL的情況
  • 使用 Binder 傳輸資料的最大限制是多少,被佔滿後會導致什麼問題
  • Binder 驅動載入過程中有哪些重要的步驟
  • 系統服務與bindService啟動的服務的區別
  • Activity的bindService流程
  • 不透過AIDL,手動編碼來實現Binder的通訊

15.記憶體洩漏&記憶體溢位

  • 什麼是OOM & 什麼是記憶體洩漏以及原因
  • Thread是如何造成記憶體洩露的,如何解決?
  • Handler導致的記憶體洩露的原因以及如何解決
  • 如何載入Bitmap防止記憶體溢位
  • MVP中如何處理Presenter層以防止記憶體洩漏的

16.效能最佳化

  • 記憶體最佳化
  • 啟動最佳化
  • 佈局載入和繪製最佳化
  • 卡頓最佳化
  • 網路最佳化

17.Window&WindowManager

  • 什麼是Window
  • 什麼是WindowManager
  • 什麼是ViewRootImpl
  • 什麼是DecorView
  • Activity,View,Window三者之間的關係
  • DecorView什麼時候被WindowManager新增到Window中

18.WMS

  • 什麼是WMS
  • WMS是如何管理Window的
  • IWindowSession是什麼,WindowSession的建立過程是怎樣的
  • WindowToken是什麼
  • WindowState是什麼
  • Android視窗大概分為幾種?分組原理是什麼
  • Dialog的Context只能是Activity的Context,不能是Application的Context
  • App應用程式如何與SurfaceFlinger通訊的,View 的繪製是如何把資料傳遞給 SurfaceFlinger 的
  • 共享記憶體的具體實現是什麼
  • relayout是如何向SurfaceFlinger申請Surface
  • 什麼是Surface

19.AMS

  • ActivityManagerService是什麼?什麼時候初始化的?有什麼作用?
  • ActivityThread是什麼?ApplicationThread是什麼?他們的區別
  • Instrumentation是什麼?和ActivityThread是什麼關係?
  • ActivityManagerService和zygote程式通訊是如何實現的
  • ActivityRecord ProcessRecord
  • ActivityManager ,ActivityManagerProxy的關係
  • 手寫實現簡化版AMS

20.系統啟動

  • android系統啟動流程
  • SystemServer,ServiceManager,SystemServiceManager的關係
  • 孵化應用程式這種事為什麼不交給SystemServer來做,而專門設計一個Zygote
  • Zygote的IPC通訊機制為什麼使用socket而不採用binder

21.App啟動&打包&安裝

  • 應用啟動流程
  • apk組成和Android的打包流程
  • Android的簽名機制,簽名如何實現的,v2相比於v1簽名機制的改變
  • APK的安裝流程

22.序列化

  • 什麼是序列化
  • 為什麼需要使用序列化和反序列化
  • 序列化的有哪些好處
  • Serializable 和 Parcelable 的區別
  • 什麼是serialVersionUID
  • 為什麼還要顯示指定serialVersionUID的值?

23.Art & Dalvik 及其區別

  • Art & Dalvik 及其區別

24.模組化&元件化

  • 什麼是模組化
  • 什麼是元件化
  • 元件化優點和方案
  • 元件獨立除錯
  • 元件間通訊
  • Aplication動態載入
  • ARouter原理

25.熱修復&外掛化

  • 外掛化的定義
  • 外掛化的優勢
  • 外掛化框架對比
  • 外掛化流程
  • 外掛化類載入原理
  • 外掛化資源載入原理
  • 外掛化Activity載入原理
  • 熱修復和外掛化區別
  • 熱修復原理

26.AOP

  • AOP是什麼
  • AOP的優點
  • AOP的實現方式,APT,AspectJ,ASM,epic,hook

27.jectpack

  • Navigation
  • DataBinding
  • Viewmodel
  • livedata
  • liferecycle

28.開源框架

  • Okhttp原始碼流程,執行緒池
  • Okhttp攔截器,addInterceptor 和 addNetworkdInterceptor區別
  • Okhttp責任鏈模式
  • Okhttp快取怎麼處理
  • Okhttp連線池和socket複用
  • Glide怎麼繫結生命週期
  • Glide快取機制,記憶體快取,磁碟快取
  • Glide與Picasso的區別
  • LruCache原理
  • Retrofit原始碼流程,動態代理
  • LeakCanary弱引用,原始碼流程
  • Eventbus
  • Rxjava

文末

好記性不如爛筆頭,永遠抱著一個“我應該會”的心態去刷面試題,在自己腦子過了一篇,感覺回答的上來,但往往一真跟面試官對上線就會卡殼,還是建議把每個面試題都去寫一遍,再去做延伸。當你能將每一道面試題都能富有邏輯性的寫出來的時候,那在面試的時候就絕對沒有問題了。

面試複習萬能路線

如果你覺得自己學習效率低,缺乏正確的指導,可以參考下下面分享我多年工作以來收集整理的學習路線,給大家做個參考:

確定好方向,梳理成長路線圖

不用多說,相信大家都有一個共識:無論什麼行業,最牛逼的人肯定是站在金字塔端的人。所以,想做一個牛逼的程式設計師,那麼就要讓自己站的更高,成為技術大牛並不是一朝一夕的事情,需要時間的沉澱和技術的積累。

關於這一點,在我當時確立好Android方向時,就已經開始梳理自己的成長路線了,包括技術要怎麼系統地去學習,都列得非常詳細。

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

學習一線大廠的各項技術:

1.2020大廠面試高頻知識點

  • 圖片
  • 網路和安全機制
  • 資料庫
  • 外掛化、模組化、元件化、熱修復、增量更新、Gradle
  • 架構設計和設計模式
  • 效能最佳化
  • Android Framework
  • Android優秀三方庫原始碼

2.Jetpack架構元件從入門到精通

  • Android Jetpack - Navigation
  • Android Jetpack - Data Binding
  • Android Jetpack - ViewModel & LiveData
  • Android Jetpack - Room
  • Android Jetpack - Paging
  • Android Jetpack - WorkManger
  • Android Jetpack架構元件之Lifecycle
  • Android Jetpack Compose 最全上手指南

3.Framework精編核心解析

主要內容包含:

  • 深入解析Binder
  • 深入解析Handler
  • Dalvik VM 程式系統
  • 深入解析 WMS
  • PackagerManagerService

4.Kotlin強化實戰(附Demo)

  • 第一章 Kotlin入門教程
  • 第二章 Kotlin 實戰避坑指南
  • 第三章 專案實戰《Kotlin Jetpack 實戰》
    • 從一個膜拜大神的 Demo 開始
    • Kotlin 寫 Gradle 指令碼是一種什麼體驗?
    • Kotlin 程式設計的三重境界
    • Kotlin 高階函式
    • Kotlin 泛型
    • Kotlin 擴充套件
    • Kotlin 委託
    • 協程“不為人知”的除錯技巧
    • 圖解協程:suspend

5.Android設計思想解讀開源框架

  • 熱修復
  • 外掛化
  • 元件化框架設計
  • 圖片載入框架
  • 網路請求框架
  • RXJava 響應式程式設計框架設計
  • IOC 架構設計
  • Android架構元件Jetpack

6.NDK模組開發

  • NDK 模組開發
  • JNI 模組
  • Native 開發工具
  • Linux 程式設計
  • 底層圖片處理
  • 音影片開發
  • 機器學習

看影片進行系統學習

前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因為Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以透過影片來學習,效果更好,也更全面。關於影片學習,個人可以推薦去B站進行學習,B站上有很多學習影片,唯一的缺點就是免費的容易過時。

另外,我自己也珍藏了好幾套影片,有需要的我也可以分享給你。

簡歷準備充分

可以去知乎上面搜搜別人寫的有關簡歷的帖子,怎麼準備,吸引hr, 突出自己的優點和能力,或者讓朋友幫你看看簡歷有沒有問題,比如過於簡單或者浮誇,沒有重點等。

儘量把你的亮點總結成一句簡練的話,再加上數字來說明它的影響和意義。

其次在簡歷裡中加入了可互動、可展示的內容,更能顯出你的能力與眾不同。

定期面試:

光學習了大廠的技術還不夠,如何瞭解當下Android市場需要哪些技術呢?

定期的面試足以讓你瞭解當下市場需要哪些技術,也更加容易確定自身的短板在哪,同時,也可以督促自己學習提升(小夥子,你瞭解的技術有點落伍了呀…)

萬一拿到了高薪Offer,豈不是更賺?

多看大佬的學習筆記,學習大佬的設計思想:

只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。

以上這些資料都已打包整理完畢,點選 可以看到全部內容。或者點選 【 】 檢視獲取方式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2788771/,如需轉載,請註明出處,否則將追究法律責任。

相關文章