金九銀十要來了?不要慌,這些Android BAT高階面試題刷一刷

南方吳彥祖_藍斯發表於2020-09-15

金九銀十要來了?不要慌,這些Android BAT高階面試題刷一刷

已經九月中旬了,差不多很多程式設計師都準備在這個時候跳槽或者找工作了。。。

如果想變得優秀那就去看那些優秀的人在學什麼,做什麼,想盡一切辦法和他們交流;多出去看看這個世界,然後把自己逼到往si裡學。

這篇攻略是我從事開發工作七八年來,去面試,以及面試別人的經驗總結。其中大部分都是大企業面試常問的面試題,可以對照這查漏補缺,當然了,這裡所列的肯定不可能覆蓋全部方式,希望對大家之後找工作有幫助!

一、效能最佳化

App穩定性最佳化

  • 你們做了哪些穩定性方面的最佳化?
  • 效能穩定性是怎麼做的
  • 業務穩定性如何保障?
  • 如果發生了異常情況,怎麼快速止損?

App啟動速度最佳化

  • 啟動最佳化是怎麼做的?
  • 是怎麼非同步的,非同步遇到問題沒有?
  • 啟動最佳化有哪些容易忽略的注意點?
  • 版本迭代導致的啟動變慢有好的解決方式嗎?
  • 開放問題:如果提高啟動速度,設計一個延遲載入框架或者sdk的方法和注意的問題

App記憶體最佳化

  • 你們記憶體最佳化專案的過程是怎麼做的?
  • 你做了記憶體最佳化最大的感受是什麼?
  • 如何檢測所有不合理的地方?

App繪製最佳化

  • 你在做佈局最佳化的過程中用到了哪些工具?
  • 佈局為什麼會導致卡頓,你又是如何最佳化的?
  • 做完佈局最佳化有哪些成果產出?
  • 你是怎麼做卡頓最佳化的?
  • 你是怎麼樣自動化的獲取卡頓資訊?
  • 卡頓的一整套解決方案是怎麼做的?
  • TextView setText耗時的原因,對TextView繪製層原始碼的理解?
  • 開放問題:最佳化一個列表頁面的開啟速度和流暢性

App瘦身
網路最佳化

  • 移動端獲取網路資料最佳化的幾個點
  • 客戶端網路安全實現
  • 設計一個網路最佳化方案,針對移動端弱網環境

App電量最佳化
安卓的安全最佳化

  • 提高app安全性的方法?
  • 安卓的app加固如何做?
  • 安卓的混淆原理是什麼?
  • 談談你對安卓簽名的理解

為什麼WebView載入會慢呢?
如何最佳化自定義View
FC(Force Close)什麼時候會出現?
Java多執行緒引發的效能問題,怎麼解決
TraceView的實現原理,分析資料誤差來源
是否使用過SysTrace,原理的瞭解?
mmap + native 日誌最佳化?

二、Android Framework相關

Android系統架構

  • 應用程式
  • Java API 框架
  • 系統執行庫
  • 硬體抽象層 (HAL)
  • Linux 核心

View的事件分發機制?滑動衝突怎麼解決?

  • 瞭解Activity的構成
  • 觸控事件的型別
  • 事件分發流程
  • ACTION_CANCEL什麼時候觸發,觸控button然後滑動到外部抬起會觸發點選事件嗎,再滑動回去抬起會麼?
  • 如何解決View的事件衝突?舉個開發中遇到的例子?

View的繪製流程?

  • 瞭解繪製的整體流程
  • 理解MeasureSpec
  • 如何根據MeasureSpec去實現一個瀑布流的自定義ViewGroup?
  • View的繪製流程之Layout
  • View的繪製流程之Draw
  • Requestlayout,onlayout,onDraw,DrawChild區別與聯絡?

跨程式通訊

  • Android中程式和執行緒的關係?區別?
  • 如何開啟多程式?應用是否可以開啟N個程式?
  • 為何需要IPC?多程式通訊可能會出現的問題?
  • Android中IPC方式、各種方式優缺點?
  • 講講AIDL?如何最佳化多模組都使用AIDL的情況?
  • 為什麼選擇Binder?
  • Binder機制的作用和原理?
  • Binder框架中ServiceManager的作用?
  • Binder 的完整定義
  • 手寫實現簡化版AMS(AIDL實現)
  • 簡單講講 binder 驅動吧?
  • 跨程式傳遞大記憶體資料如何做?

Android系統啟動流程是什麼?(提示:init程式 -> Zygote程式 –> SystemServer程式 –> 各種系統服務 –> 應用程式)

  • 系統是怎麼幫我們啟動找到桌面應用的?

啟動一個程式,可以主介面點選圖示進入,也可以從一個程式中跳轉過去,二者有什麼區別?
AMS家族重要術語解釋
App啟動流程(Activity的冷啟動流程)
ActivityThread工作原理
說下四大元件的啟動過程,四大元件的啟動與銷燬的方式
廣播傳送和接收的原理了解嗎?
AMS是如何管理Activity的?
理解Window和WindowManager
WMS是如何管理Window的?
大體說清一個應用程式安裝到手機上時發生了什麼?
Android的打包流程?(即描述清點選 Android Studio 的 build 按鈕後發生了什麼?)apk裡有哪些東西?簽名演算法的原理?

  • apk打包流程
  • apk組成
  • 為什麼要簽名?
  • 什麼是簽名?
  • 簽名和校驗的主要過程
  • keystore和證照格式
  • jarsigner和apksigner的區別
  • 在簽名時,除了要指定keystore檔案和密碼外,也要指定alias和key的密碼,這是為什麼呢?
  • Android Apk V1 簽名原理

說下安卓虛擬機器和java虛擬機器的原理和不同點?(JVM、Davilk、ART三者的原理和區別)

  • JVM 和Dalvik虛擬機器的區別
  • Android2個虛擬機器的區別(一個5.0之前,一個5.0之後)
  • ART和Davlik中垃圾回收的區別?

安卓採用自動垃圾回收機制,請說下安卓記憶體管理的原理?

  • 開放性問題:如何設計垃圾回收演算法?

Android中App是如何沙箱化的,為何要這麼做?
一個圖片在app中呼叫R.id後是如何找到的?
JNI

  • Java呼叫C++
  • C++呼叫Java
  • 如何在jni中註冊native函式,有幾種註冊方式?
  • so 的載入流程是怎樣的,生命週期是怎樣的?
    請介紹一下NDK?
金九銀十要來了?不要慌,這些Android BAT高階面試題刷一刷

三、Android優秀三方庫原始碼

你專案中用到哪些開源庫?說說其實現原理?

  • 網路底層框架:OkHttp實現原理
    • 這個庫是做什麼用的?
    • 為什麼要在專案中使用這個庫?
    • 這個庫都有哪些用法?對應什麼樣的使用場景?
    • 這個庫的優缺點是什麼,跟同型別庫的比較?
    • 這個庫的核心實現原理是什麼?如果讓你實現這個庫的某些核心功能,你會考慮怎麼去實現?
    • 你從這個庫中學到什麼有價值的或者說可借鑑的設計思想?
    • OKhttp針對網路層有哪些最佳化?
    • 網路請求快取處理,okhttp如何處理網路快取的?
    • HttpUrlConnection 和 okhttp關係?
    • Volley與OkHttp的對比
    • 自己去設計網路請求框架,怎麼做?
    • 從網路載入一個10M的圖片,說下注意事項?
    • http怎麼知道檔案過大是否傳輸完畢的響應?
    • 談談你對WebSocket的理解?
    • WebSocket與socket的區別?
  • 網路封裝框架:Retrofit實現原理
    • 這個庫是做什麼用的?
    • 為什麼要在專案中使用這個庫?
    • 這個庫都有哪些用法?對應什麼樣的使用場景?
    • 這個庫的優缺點是什麼,跟同型別庫的比較?
    • 這個庫的核心實現原理是什麼?如果讓你實現這個庫的某些核心功能,你會考慮怎麼去實現?
    • 你從這個庫中學到什麼有價值的或者說可借鑑的設計思想?
    • Android:主流網路請求開源庫的對比(Android-Async-Http、Volley、OkHttp、Retrofit)
  • 響應式程式設計框架:RxJava實現原理
    • RxJava 變換運算子 map flatMap concatMap buffer?
    • 你認為Rxjava的執行緒池與你們自己實現任務管理框架有什麼區別?
  • 圖片載入框架:Glide實現原理
    • 這個庫是做什麼用的?
    • 為什麼要在專案中使用這個庫?
    • 這個庫都有哪些用法?對應什麼樣的使用場景?
    • 這個庫的優缺點是什麼,跟同型別庫的比較?
    • 這個庫的核心實現原理是什麼?如果讓你實現這個庫的某些核心功能,你會考慮怎麼去實現?
    • Glide原始碼機制的核心思想
    • 你從這個庫中學到什麼有價值的或者說可借鑑的設計思想?
    • Glide如何確定圖片載入完畢?
    • Glide使用什麼快取?
    • Glide記憶體快取如何控制大小?
    • 計算一張圖片的大小
    • 載入bitmap過程(怎樣保證不產生記憶體溢位)
    • Android裡的記憶體快取和磁碟快取是怎麼實現的
    • LruCache原理
    • LruCache put方法核心邏輯
    • LruCache get方法核心邏輯
    • LinkedHashMap原理
    • DisLruCache原理
    • Bitmap 壓縮策略
    • Bitmap的處理
    • 實現一個ImageLoader的流程
    • Bitmap在decode的時候申請的記憶體如何複用,釋放時機
    • 圖片庫對比
    • Fresco與Glide的對比
    • Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM?
    • Bitmap物件的理解。
    • 對inBitmap的理解。
    • 自己去實現圖片庫,怎麼做?(對擴充套件開發,對修改封閉,同時又保持獨立性,參考Android原始碼設計模式解析實戰的圖片載入庫案例即可)
    • 寫個圖片瀏覽器,說出你的思路?
  • 事件匯流排框架:EventBus實現原理
  • 記憶體洩漏檢測框架:LeakCanary實現原理
    • 這個庫是做什麼用?
    • 為什麼要在專案中使用這個庫?
    • 這個庫都有哪些用法?對應什麼樣的使用場景?
    • 這個庫的優缺點是什麼,跟同型別庫的比較?
    • 這個庫的核心實現原理是什麼?如果讓你實現這個庫的某些核心功能,你會考慮怎麼去實現?
    • 你從這個庫中學到什麼有價值的或者說可借鑑的設計思想?
    • leakCannary中如何判斷一個物件是否被回收?如何觸發手動gc?c層實現?
  • 依賴注入框架:ButterKnife實現原理
  • 依賴全域性管理框架:Dagger2實現原理
  • 資料庫框架:GreenDao實現原理
    • 資料庫框架對比?
    • 資料庫的最佳化
    • 資料庫資料遷移問題
    • 資料庫索引的資料結構
    • 平衡二叉樹
    • B-Tree
    • B+Tree
    • B*Tree

四、熱修復、外掛化、模組化、元件化、Gradle、編譯插樁技術

1、熱修復和外掛化

  • Android中ClassLoader的種類&特點
  • 熱修補技術是怎樣實現的,和外掛化有什麼區別?
  • 熱修復原理
  • 為什麼選用外掛化?
  • 外掛化的思想
  • 外掛化的定義
  • 外掛化的優勢
  • 外掛化框架對比
  • 外掛化原理

2、模組化和元件化

  • 模組化的好處
  • 分析現有的元件化方案
  • 元件化開發的好處
  • 跨元件通訊
  • 跨元件通訊方案分析
  • 如何管理過多的路由表?
  • ARouter路由原理
  • 多模組開發的時候不同的負責人可能會引入重複資源,相同的字串,相同的icon等但是檔名並不一樣,怎樣去重?

3、gradle

  • gradle熟悉麼,自動打包知道麼?
  • 如何加快 Gradle 的編譯速度?
  • Gradle的Flavor能否配置sourceset?
  • Gradle生命週期

4、編譯插樁

  • 談談你對AOP技術的理解?
  • 說說你瞭解的編譯插樁技術?

五、架構設計

  • MVC MVP MVVM原理和區別?
  • MVC的情況下怎麼把Activity的C和V抽離?
  • MVP 架構中 Presenter 定義為介面有什麼好處;
  • MVP如何管理Presenter的生命週期,何時取消網路請求?
  • aop思想
  • Fragment如果在Adapter中使用應該如何解耦?
  • 專案框架裡有沒有Base類,BaseActivity和BaseFragment這種封裝導致的問題,以及解決方法?
  • 設計一個音樂播放介面,你會如何實現,用到那些類,如何設計,如何定義介面,如何與後臺互動,如何快取與下載,如何最佳化(15分鐘時間)
  • 從0設計一款App整體架構,如何去做?
  • 說一款你認為當前比較火的應用並設計(比如:直播APP,P2P金融,小影片等)
  • 實現一個庫,完成日誌的實時上報和延遲上報兩種功能,該從哪些方面考慮?
  • 你最優秀的工程設計專案,是怎麼設計和實現的;擴充套件,如何做成一個平臺級產品?

六、其它高頻面試題

  • 如何保證一個後臺服務不被殺死?(相同問題:如何保證service在後臺不被kill?)比較省電的方式是什麼?
  • Android動畫框架實現原理
  • Activity-Window-View三者的差別?
  • 低版本SDK如何實現高版本api?
  • 說說你對Context的理解?
  • Android的生命週期和啟動模式
  • ListView和RecyclerView系列
    • 想改變listview的高度,怎麼做?
    • listview跟recyclerview上拉載入的時候分別應該如何處理?
    • 如何自己實現RecyclerView的側滑刪除?
    • RecyclerView的ItemTouchHelper的實現原理
  • 如何實現一個推送,訊息推送原理?推送到達率的問題?
  • 動態許可權系列
  • 自定義View系列
    • Canvas的底層機制,繪製框架,硬體加速是什麼原理,canvas lock的緩衝區是怎麼回事?
    • 雙指縮放拖動大圖
    • TabLayout中如何讓當前標籤永遠位於螢幕中間
    • TabLayout如何設定指示器的寬度包裹內容?
    • 自定義View如何考慮機型適配?
  • 對谷歌新推出的Room架構。
  • 沒有給許可權如何定位,特定機型定位失敗,如何解決?
  • Debug跟Release的APK的區別?
  • android檔案儲存,各版本儲存位置的許可權控制的演進,外部儲存,內部儲存
  • 有什麼提高編譯速度的方法?
  • Scroller原理。
  • Hybrid系列
  • 如果在當前執行緒內使用Handler postdelayed 兩個訊息,一個延遲5s,一個延遲10s,然後使當前執行緒sleep 5秒,以上訊息的執行時間會如何變化?
  • Android中程式記憶體的分配,能不能自己分配定額記憶體?
  • 下拉狀態列是不是影響activity的生命週期,如果在onStop的時候做了網路請求,onResume的時候怎麼恢復
  • Android長連線,怎麼處理心跳機制
  • CrashHandler實現原理?
  • SurfaceView和View的最本質的區別?
  • Android程式執行時許可權與檔案系統許可權
  • 曲面屏的適配。
  • TextView呼叫setText方法的內部執行流程。
  • 怎麼控制另外一個程式的View顯示(RemoteView)?
  • 如何實現右滑finish activity?
  • 如何在整個系統層面實現介面的圓角效果。(即所有的APP開啟介面都會是圓角)
  • 非UI執行緒可以更新UI嗎?
    如何解決git衝突?
  • 單元測試有沒有做過,說說熟悉的單元測試框架?
    Jenkins持續整合。
  • 工作中有沒有用過或者寫過什麼工具?指令碼,外掛等等;比如:多人協同開發可能對一些相同資源都各自放了一份,有沒有方法自動檢測這種重複之類的。
  • 如何繞過9.0限制?
  • 對檔案描述符怎麼理解?
  • 如何實現程式安全寫檔案?

結尾

學習技術是一條慢長而艱苦的道路,不能靠一時激情,也不是熬幾天幾夜就能學好的,必須養成平時努力學習的習慣。所以: 貴在堅持!

最後為了幫助大家深刻理解 Android相關知識點的原理以及面試相關知識,這裡放上我搜集整理的 2019-2020BAT 面試真題解析,我把大廠面試中 常被問到的技術點整理成了PDF,包知識脈絡 + 諸多細節。

節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習。

《960全網最全Android開發筆記》

金九銀十要來了?不要慌,這些Android BAT高階面試題刷一刷

《379頁Android開發面試寶典》

歷時半年,我們整理了這份市面上最全面的安卓面試題解析大全
包含了騰訊、百度、小米、阿里、樂視、美團、58、360、新浪、搜狐等一線網際網路公司面試被問到的題目。熟悉本文中列出的知識點會大大增加透過前兩輪技術面試的機率。

如何使用它?

1.可以透過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數

金九銀十要來了?不要慌,這些Android BAT高階面試題刷一刷

《507頁Android開發相關原始碼解析》

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

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

金九銀十要來了?不要慌,這些Android BAT高階面試題刷一刷

騰訊、位元組跳動、阿里、百度等BAT大廠 2019-2020面試真題解析

金九銀十要來了?不要慌,這些Android BAT高階面試題刷一刷

資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,大家可以 點選這裡自行獲取(或者關注主頁掃描加微信獲取)。

最後,祝願即將跳槽和準備求職的大家都能找到一份好的工作!

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

相關文章