當前位置:網站首頁>一場面試結束,某度員工從事Android 5年為何還是初級工程師?

一場面試結束,某度員工從事Android 5年為何還是初級工程師?

2022-01-27 17:45:01 m0_66264798

  • 怎麼處理在線app出現的閃退問題,比如是偶現的那種,怎樣查找原因?

  • 如果是報oom,怎麼去定比特哪裏內存泄漏了?

  • 有沒有用過kotlin開發…

3面阿裏釘釘

  • 阿裏的面試基本上都是邊聊邊問,根據你的工作經曆以及面試過程中的內容進行展開。

  • 面試官先問,你最擅長Android中的哪個方向呢?

我答了插件化、組件化、熱修複、React Native,最近也在鑽研Flutter,對flutter有一些自己的理解。(我故意這麼講,希望面試官可以多問一下flutter。)

  • 面試官:插件化和熱修複有什麼區別嗎?

我:插件化是把需要實現的模塊或功能獨立提取出來,减少宿主的規模,需要相應功能時再去加載相應模塊;而熱修複則是從修複bug的角度出發,不需要二次安裝應用、用戶無感知的情况下就可以修複已知bug。(這麼基礎的問題,回答的時候自信滿滿…)

  • 面試官:熱修複的核心原理是什麼?

我:主要是利用Android類加載機制,把需要修複的類打包成dex文件,把這個修複過的dex文件排在dexElements最前面,ClassLoader在修複過的dex文件加載到類之後就不會再去加載錯誤的類了。(還好面試前有看過)

  • 面試官:類加載為什麼要使用雙親委托機制?

我:…(我記得我看過的來著,一下子想不起來了。)

  • 面試官:jvm和dalvik、art的區別是什麼?

我:jvm是基於棧的,dalvik和art是基於寄存器的。(這時候我慌得一比,快頂不住了…)

  • 面試官又追問:那什麼是基於棧的虛擬機,什麼又是基於寄存器的虛擬機?

我說不知道。(那時完全不懂面試官為什麼要問這個)

  • 面試官:art加載類的流程和Dalvik有區別嗎?

我:有區別嗎?不就是ClassLoader嗎?(面試官稍微提了一下機器碼。)

後續查資料才知道,原來art水這麼深,7.0以前直接編譯為機器碼。之後又變成混合aot、jit和解釋執行了,加載類底層使用classlinker,先從classtable緩存查找,如果沒有再從oat文件查找,否則就解釋執行

  • 面試官:那art下,熱修複的實現上有什麼需要注意的地方?

最後一個問題聽完之後直接懵逼了…查資料才感覺到面試官其實還是在問:art下類加載的流程。原來aot會生成一個ba
se.art文件,在ClassLoader創建之後就會把base.art中的類注入到緩存中去,所以會導致這些類無法修複。

  • 面試官又問了我遇到的最難的內存優化問題和解决方案;未來三年計劃,技術發展縱深的選擇。

感覺凉了…

3面小米

  • 對okhttp的源碼解析;用rxjava遇到過哪些坑;

  • 用過最複雜的自定義view和優化處理;

  • 用EventBus遇到的坑;

  • glide如何檢測生命周期;

  • 底層替換熱修複和冷啟動熱修複有什麼區別,怎麼實現?

  • 用過最複雜的自定義view和優化處理;

  • 用EventBus遇到的坑;

  • glide如何檢測生命周期;

  • 底層替換熱修複和冷啟動熱修複有什麼區別,怎麼實現?

版權聲明
本文為[m0_66264798]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201271745011046.html