四年androider,2020年初疫情時期間面經

 

第一次視頻面試(歷時2小時)

  1. 簡短的自我介紹(涉及畢業院校,工作年限);
  2. 前幾家公司簡單的介紹下做過哪方面的項目;
  3. 你擅長的部分(架構,UI等等你肯定有一個擅長的吧?);
    1. 音視頻原理、編解碼
  4. 着重介紹一個項目你負責的部分以及架構
    1. mvp
  5. activity生命週期,區別
    1. onCreate:創建
    2. onStart:開啓
    3. onResume:展現
    4. onPause:暫停
    5. onStop:停止
    6. onDestory:銷燬
  6. activity4種啓動類型
    1. SingleInstance:單獨任務棧,該activity單獨佔用一個任務棧,相當於默認配置了一個單獨的TaskAffinity屬性
    2. SingleTask:站內複用,啓動時,如果當前任務棧中已經包含此activity,就清除該activity上面的activity,讓此activity處於棧頂,因此聲明週期不會走onCreate、onStart和onResume,但是會走onNewIntent,通過intent區分是不同的啓動;常用的場景是,從應用的主界面,跳轉到二級界面,再跳轉到三級界面,最後從界面條到主界面後,此時我們希望在按返回鍵就是退出界面而不是又回到二級界面,此時可以用站內複用
    3. SingleTop:獨佔頂端,啓動時,如果當前的activity已經在任務棧頂端,就不會重新創建,直接使用最頂端的activity,因此不會走聲明週期onCteate、onStart和onResume,但是會走onNewIntent,通過intent區分是不同的啓動;常用的場景是,一個應用可以通過多個方式啓動界面activity,如果當前已經在棧頂,在啓動的話就不會新建一個了。
    4. Standard:標準模式,每次啓動都會新建一個新的activity
    5. 另:啓動模式配置方法:
      1. 可以在manifest中設置launchMode
      2. 可以在代碼中通過intent.setFlag進行設置
    6. 啓動模式作用:
      1. 爲了避免每次啓動都新建activity,用完後銷燬,所以設計了activity的聲明週期和任務棧,當activity被創建和啓動後,都被放入了任務佔中,app啓動時系統會默認分配一個任務棧存放啓動的根activity
      2. 同一個任務棧,只要activity不是出於棧頂,其生命週期出於onPause狀態
      3. 任務棧的id是Integer類型的,自增的
      4. 新創建的activity會壓如棧頂,按back鍵會將棧頂的activity彈出,下面的activity會展現,回顧A->B->A跳轉聲明週期
      5. 如果想將不同的activity放入不同的任務棧管理,在manifest中對應的activity配置taskAffinity屬性,相同屬性的activity處於同一任務棧
    7. 場景應用:O公司遊戲空間應用需求開發時遇到問題:1.啓動遊戲空間主界面,再進入其二級界面,再按home鍵回到桌面,2.長按圖標進入應用詳情界面,在詳情界面有遊戲空間另一個入口,從此處進入遊戲空間主界面,3.此時按返回鍵,預期是返回應用詳情界面,實際是出現二級界面。原因是遊戲空間主界面是standard類型,第一次啓動,主界面壓入棧頂,進入二級界面,二級界面壓入棧頂;從應用詳情界面再次啓動時,又新增一個主界面到遊戲空間默認任務棧,所以此時從上到下下棧內情況是,主界面,二級界面,主界面。所以按返回鍵是進入二級界面而不是拉起應用詳情界面的任務棧。解決方案:將主界面設置爲SingleTask即可。
  7. service生命週期以及兩種不同啓動方式,對於生命週期的回調情況
    1. startService方式啓動,onCreate -> onStartCommand ,調用stop方式結束服務時,onDestory;重複多次startService時,onCreate不會每次都被調用,但每次都會走onStartCommand
    2. bindService方式啓動,onCreate -> onBind,調用unBindService結束綁定服務時,onUnbind -> onDestory;多次調用bingService時,onCreate和onBind不會被多次調用,服務的創建和綁定只會執行一次
    3. 另:IntentService,service是運行在主線程中的,當我們要使用服務進行耗時操作時,需要自己啓動服務並新建子線程做耗時操作,運行完成後還需要自己調用stopservice來結束服務,耗時操作什麼時候結束?什麼時候結束服務都比較麻煩;而谷歌提供的IntentService完美的解決了這個問題,和普通服務一樣啓動一個intentservice,在intentservice中重寫onHandleIntent方法,該方法是運行在子線程中的,可以進行耗時操作,運行完了之後會自動結束服務,無需主動調用stopservice
  8. 廣播有哪幾種,廣播的原理
    1. 普通廣播 :通過sendBroadcast(intent)來發送一個廣播,廣播可以在manifest中靜態註冊,也可以在代碼中動態註冊,靜態廣播始終慢於動態廣播
    2. 有序廣播:發送的廣播是有順序的,通過sendOrderBroadcast發送有序廣播,接收者priority值大的先接收,priority相同時,動態註冊的先接收;有序廣播可以被攔截,被修改
    3. 系統廣播:息屏廣播,網絡變化,電量變化等都會有系統廣播
    4. 應用內廣播:註冊廣播時,設置屬性exported爲false時,發送時設置權限並通過intent.setPackage設置包名可以實現應用內或者給制定應用發廣播;或者通過LocalBroadcastMannager發送應用內廣播,更加高效和安全
    5. 粘性廣播(廢棄)
  9. 項目中遇到的難點(不一定要多麼難,面試官着重看你的研究領域以及解決問題的能力)
    1. 引入到音視頻編解碼專業領域
  10. 在技術方面還有哪些興趣?最近在看哪些技術方面的書
  11. 你提升自己一般從什麼途徑
    1. 寫博客,自建github項目更新並維護
  12. 找出數組中數量超過一半元素算法複雜度越低越好(這個挺簡單、可以用map統計,可以排序然後取中間元素,我說的摩爾投票方法,這個是最優的O(1)複雜度)
  13. 字符串匹配,類似*?這種的正則符號的匹配算法

和一面同一天視頻2面(歷時2小時)

  1. 簡短的自我介紹
  2. 前幾家公司簡單的介紹下做過哪方面的項目,着重介紹一個項目架構
  3. git操作怎麼樣,上家公司有codereview嗎
    1. 參見歷史:https://blog.csdn.net/zhangzhuo1024/article/details/89034336
  4. kotlin幾個操作符,let、run、apply、also的區別,內聯函數,擴展方法原理
  5. Glide緩存機制,okhttp源碼,Rxjava設計,Retrofit設計
  6. 圖片處理、大圖片加載有什麼技巧(縮放、壓縮、RegionDecoder局部加載)
  7. HashMap原理
  8. binder,aidl,跨進程通信方式,線程間通信方式,binder權鑑,ContentProvider用法
  9. 從點擊啓動圖標開始App的啓動過程
  10. 事件分發機制
  11. 自定義view流程
  12. Android消息機制,Looper,MessageQueue
  13. view繪製流程viewrootImpl那些,屏幕刷新機制(vsync,異步消息那些)、深點可以說下Surfaceflinger那些
  14. ThreadLocal
  15. Recyclerview 優化、item複用原理,和ListView區別
  16. Android開機涉及的過程
  17. 多線程實現方式,樂觀鎖、CAS、悲觀鎖,volatile
  18. AOP是什麼,在Android之中有哪些應用
  19. 死鎖以及產生的原因,HashMap多線程操作下爲什麼會死鎖
  20. 生產者消費者模型寫代碼(可以實現個消息隊列進行解耦)

4月上旬視頻3面 (歷時2小時)

  1. 前幾家公司簡單的介紹下做過哪方面的項目,着重介紹一個項目架構
  2. 項目中遇到的難點
  3. 挑簡歷裏的問了,帶入了我擅長的領域、圖像處理算法、四叉樹搜索區域,sobel、邊緣提取、低多邊形,字符畫生成算法
  4. 你擅長Android哪方面
  5. EventBus原理
  6. mvp,mvvm,組件化通信、插件化原理、多渠道打包、熱更新
  7. 類加載機制(雙親委派等等)
  8. 談談你知道的設計模式
  9. JVM的內存模型
  10. JVM垃圾回收機制以及算法
  11. Thread的幾種狀態
  12. 3個線程依次切換打印數字從1到100
  13. 複雜度去除單詞中多餘的空格順便奇數位單詞首字母大寫

4月上旬視頻4面:(歷時半小時)

1、簡短的自我介紹
2. 你是怎麼開始接觸Android的,學校裏做過哪些項目
3. 你在項目中遇到哪些難點 (又是這個問題- -,大廠聽說都愛問這個問題,這個老鐵們就八仙過海吧 - -)
4. 你認爲Android的未來發展 (千萬不要讓面試官認爲你是個左右搖擺的人)
5. 你在項目開發進行中中是出於主動還是被動,這個問題不明所以
6. 你UI界面優化的技巧
7. 你做項目時有什麼心得
8. 數據庫、操作系統(本人非科班,操作系統老老實實說不甚瞭解)

4月中旬Hr面 (電話幾分鐘)

  1. 薪資意向
  2. 目前其他offer有無
  3. 是否還會面其他公司
  4. 多長時間內會到崗
  5. 是否已經到北京14天(疫情非常時期,你懂得)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章