文章目錄:

  • 冷啟動和熱啟動面試題
  • 其他優化面試題
  • 架構模式面試題
  • 插件化面試題
  • 熱更新面試題
  • 進程保活面試題
  • Lint面試題
  • Kotlin面試題

一、冷啟動和熱啟動面試題

1、什麼是冷啟動和熱啟動

  • 冷啟動:在啟動應用前,系統中沒有該應用的任何進程資訊
  • 熱啟動:在啟動應用時,在已有的進程上啟動應用(用戶使用返回鍵退出應用,然後馬上又重新啟動應用)

2、冷啟動和熱啟動的區別

  • 冷啟動:創建Application後再創建和初始化MainActivity
  • 熱啟動:創建和初始化MainActivity即可

3、冷啟動時間的計算

這個時間值從應用啟動(創建進程)開始計算,到完成視圖的第一次繪製為止

4、冷啟動流程

  • Zygote進程中fork創建出一個新的進程
  • 創建和初始化Application類、創建MainActivity
  • inflate布局、當onCreate/onStart/onResume方法都走完
  • contentView的measure/layout/draw顯示在界面上

總結:Application構造方法->attachBaseContext()->onCreate()->Activity構造方法->onCreate()->配置主題中背景等屬性->onStart()->onResume()->測量布局繪制顯示在界面上

5、冷啟動優化

  • 減少第一個界面onCreate()方法的工作量
  • 不要讓Application參與業務的操作
  • 不要在Application進行耗時操作
  • 不要以靜態變量的方式在Application中保存數據
  • 減少布局的復雜性和深度
  • 不要在mainThread中加載資源
  • 通過懶加載方式初始化第三方SDK

二、其他優化面試題

1、Android不用靜態變量存儲數據

  • 靜態變量等數據由於進程已經被殺死而被初始化
  • 使用其他數據傳輸方式:文件/sp/contentProvider

2、SharePreference安全問題

  • 不能跨進程同步
  • 文件不宜過大

3、內存對象序列化

  • Serializeble:是java的序列化方式,Serializeble在序列化的時候會產生大量的臨時對象,從而引起頻繁的GC
  • Parcelable:是Android的序列化方式,且性能比Serializeble高,Parcelable不能使用在要將數據存儲在硬盤上的情況

4、避免在UI線程中做繁重的操作

三、架構模式面試題

四、插件化面試題

1、插件化解決的問題

  • 動態加載APK(反射、類加載器)
  • 資源加載(反射、AssetManager、獨立資源、分段資源)
  • 代碼加載(反射獲取生命周期)

2、類加載器(Java中位元組碼添加到虛擬機中)

  • DexClassLoader:能夠加載未安裝的jar/apk/dex,主要用於動態加載和代碼熱更新
  • PathClassLoader:只能加載系統中已經安裝過的apk

五、熱更新面試題

1、熱更新主要流程

  • 線上檢查到Crash
  • 拉出Bugfix分支修復Crash問題
  • jenkins構建和補丁生成
  • app通過推送或主動拉取補丁文件
  • 將Bugfix代碼合到master上

2、熱更新主流框架

  • Dexposed
  • AndFix
  • Nuwa
  • Tinker

3、熱更新的原理

  • 在ClassLoader創建一個dexElements數組
  • 將修復好的dex文件存放在dexElements數組的最前面
  • ClassLoader會遍歷dexElements數組,找到最前面的dex文件優先加載

六、進程保活面試題

1、進程的優先級

  • 空進程
  • 後台進程
  • 服務進程
  • 可見進程
  • 前台進程

2、Android進程回收策略

  • Low memory Killer(定時執行):通過一些比較復雜的評分機制,對進程進行打分,然後將分數高的進程判定為bad進程,殺死並釋放內存
  • OOM_ODJ:判別進程的優先級

3、Android保活方案

  • 利用系統廣播拉活
  • 利用系統Service機制拉活
  • 利用Native進程拉活
  • 利用JobScheduler機制拉活
  • 利用賬號同步機制拉活

七、Lint面試題

1、什麼是Android Lint

Android Lint是一個靜態代碼分析工具,它能夠對你的Android項目中潛在的Bug、可優化的代碼、安全性、性能、可用性、可訪問性、國際化等進行檢查

2、Lint工作流程

3、配置Lint

  • 創建Lint.xml到根目錄下,自定義Lint安全等級等
  • 在Java文件中可以使用@suppressLint(「NewApi」)來忽視Lint的報錯
  • 在xml文件中可以使用tool:ignore(「UnusedResources」)來忽視Lint的報錯
  • 自定義Lint檢查,可以創建類,繼承Detector和實現JavaPsiScanner

八、Kotlin面試題

1、什麼是Kotlin

  • Kotlin是一種基於JVM的編程語言
  • 對Java的一種拓展,比Java更簡潔
  • Kotlin支持函數式編程
  • Kotlin類和Java類可以相互調用

2、Kotlin環境搭建

  • 直接在Plugin中下載Kotlin插件即可
  • 系統會自動配置到Kotlin環境

針對於上面的面試題,我總結出了網際網路公司Android程序員面試涉及到的絕大部分面試題及答案,並整理做成了文檔,以及系統的進階學習視訊資料,免費分享給大家。
(包括Java在Android開發中應用、APP框架知識體系、高級UI、全方位性能調優,NDK開發,音視訊技術,人工智慧技術,跨平台技術等技術資料),希望能幫助到你面試前的復習,且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。
資料領取方式:加Android技術開發交流②;979045005,找群管理免費領取。備注一下芳網看到的來領取資料就可以了!