Android開發:個人大廠面經,輕鬆斬獲騰訊Offer

寫在前面

那天恰好是下午 oppo hr 面完,大約 3 點左右騰訊來電,我在電梯裏沒太注意沒接到電話,下午就一直盼呀盼,大約九點剛下班到公司樓下來電了,問方不方便我固然說方便,就在馬路邊上面了大約 50 來分鐘,我感受應該是掛了的,由於過程當中電話總是斷加上環境又比較吵,次日問獵頭說,下班前查了一下同一批面試的都釋放了,你應該是過了只說是應該過了。過了整整一週到了隔週五上午,接到了第二面的面試通知,約的是隔週三上午 10:30 。第二面面試官時不時的面帶笑容,給人很輕鬆的感受。二面完後要我稍等一下接着面三面,三面面完面試官問我下午還有事沒?咱們***(應該是領導)有點事,下午四點左右能夠面第四面,具體我也沒聽清楚是誰我也不敢問。我說下午要上班就先回去了,下午接到 hr 電話約的是隔週二的上午。總共五輪面試含 hr 面,持續週期一個月左右。面試

技術一面

  1. mmap + native 日誌優化?
  2. 講了傳統日誌打印的兩個性能問題,一個是反覆操做文件描述符表,一個是反覆進入內核態,而後講了 mmap 的原理機制。
  3. 廣播和 EventBus 的區別?
  4. 說 EventBus 的實現原理是基於反射,裏面管理了兩張表,且代碼之間關聯性不大不易於維護,EventBus 不支持跨進程通訊,被面試官反問你肯定不支持跨進程?我說個人看的源碼是不支持,面試官說那好吧。
  5. 經常使用設計模式你瞭解哪些?
  6. 我開始巴拉巴拉說了一大堆,其中說到了裝飾設計模式,被面試官打斷了,請你具體說說裝飾設計模式。
  7. 跨進程通訊有哪些?
  8. 管道,信號,信號量,文件,本地套接字,共享內存,binder 驅動
  9. 簡單講講 binder 驅動吧?
  10. 從 Java 層來看就像訪問本地接口同樣,客戶端基於 BinderProxy 服務端基於 IBinder 對象,從 native 層來看來看客戶端基於 BpBinder 到 ICPThreadState 到 binder 驅動,服務端由 binder 驅動喚醒 IPCThreadSate 到 BbBinder 。而後又講了虛擬內存、物理內存和內存映射,跨進程通訊的原理是要基於內核的, 當我講到 binder_open 、binder_mmap 和 binder_ioctl 是被面試官打斷了,估計是怕我講過久了。
  11. 跨進程傳遞大內存數據如何作?
  12. 我說 binder 確定是不行的,由於映射的最大內存只有 1M-8K,能夠採用 binder + 匿名共享內存的形式,像跨進程傳遞大的 bitmap 須要打開系統底層的 ashmem 機制。
  13. 說說 ConcurrentHashMap 的實現原理說下,初始化大小是多少?
  14. 是線程安全的,實現原理採用的是分段鎖,初始化大小是 16 ,必須是 2 的冪次。
  15. 啓動優化怎麼優化?
  16. 我說了關鍵優化 Application ,被面試官打斷了,說你們都能想到的東西你不要說了,我想聽的是你能不能站在系統的角度去作一些優化,我提到了優化包體積大小能優化啓動速度,優化 dex 分包能優化啓動速度,能夠參考最新的華爲方舟編譯器等等。
  17. 你寫的 rxpay 和 rxlogin 具體怎麼實現的?
  18. 通常咱們集成第三方登陸和第三方支付 SDK 都須要監聽 onActivityResult 方法,我是參考了 RxPermission 的實現方案添加了透明 Activity 。
  19. kotlin + fullter 方面的
  20. kotlin 本身學了語法可是開發項目中沒用上,fullter 我是瞭解了它的實現原理可是開發中也沒用上。

技術二面

  1. 單例設計模式都寫寫,靜態內部類是怎麼保證線程安全的?
  2. synchronized 底層實現原理,ReentrantLock 公平鎖與非公平鎖。
  3. 主線程等待全部線程執行完畢,再執行某個特定任務怎麼實現?原理和源碼看過沒?
  4. 自定義 view 的通常流程,要注意些什麼如何優化,點擊事件和長按時間分別是怎麼實現的?
  5. 四種啓動模式,在源碼分析中的原理是怎樣的?
  6. 講講 bindService 的過程,你當初是怎麼優化後臺服務進程的?
  7. 開發中你都用到了哪些設計模式?說說當時具體的場景。爲何你要用方法工廠,另外兩種呢?
  8. RxJava 在使用過程當中碰到了某些不友好的錯誤通常怎麼解決?發現了內存泄露通常怎麼解決分析,有沒有碰到過系統服務內存泄露的問題?
  9. 大家用的 okhttp ?那你有沒有作過一些網絡優化呢?好比弱網環境。
  10. 給你個數 1 吧,好比 1000011 裏面有幾個 1 ?
  11. 快排瞭解不?最壞的狀況是怎樣?若是有大量重複數據怎麼優化?

技術三面

  1. 講講 handler 的底層實現原理?
  2. 這麼簡單?問到碗裏來了,後面漸漸說到延遲消息是 nativePollOnce 來處理的,在 6.0 以上用的是 epoll 方式來監聽文件描述符。接着問道了爲何要用這種方案?它跟 poll 和 select 比起來有哪些優點?它是怎麼監聽的你看過它的內部實現原理沒?反正感受很難受了。
  3. 說說你作的日誌記錄優化?
  4. 把第一輪面試的又講了一通,你在每一個文件的最後寫入了當前內容的大小,你有沒有想過若是文件被破壞的狀況?這種異常狀況怎麼處理?後面還問到了加密和壓縮。
  5. 你看過 binder 驅動的源碼,說說他的內存映射過程,說說客戶端等待服務端處理返回的流程,若是要跨進程傳遞大內存數據你具體會怎麼作?簡單寫一寫吧。
  6. 在公司作過哪些優化?
  7. 內存優化,啓動優化,網絡優化,包體積優化,具體說說包體積優化。我提到了包體積優化不只僅是優化了包的大小,包體積太大從安裝的那一刻開始,咱們的應用就可能比較慢了,由於 pms 會去拷貝解壓解析咱們的 apk 安裝文件,會去優化咱們的 dex 等等,包體積太大還會影響咱們的啓動速度。而後就巴拉巴拉說具體怎麼作,問到了爲啥混淆資源能減小包體積大小?你當時優化的時候效果是怎樣的減小了多少?
  8. 開發過程當中遇到的一些最難解決的問題?
  9. 提到了動態修復替換加載 so ,那你知道怎麼修復 class 嗎?怎麼修復資源呢?後面又聊到了插件化,提到了 360 用的是借屍還魂,那若是咱們在插件的 Androidmanifest.xml 中註冊了其它屬性該怎麼解決,資源方面怎麼處理?
  10. 還有什麼要問個人?

我的體會

要是換幾年前我也跟你們同樣,感受這些面試題估計一個也答很差,可是今天回過頭再來看其實感受也就通常般吧。當咱們讀小學時感受初中知識比較難,但當咱們讀到高中時再回過頭來看就很簡單了。所以咱們沒必要在意如今的本身能力是否足夠強,一口也是吃不成胖子的,只要今天比昨天有進步這就足夠了。但道理咱們都懂,但是能堅持下來的同窗卻比較少了,人生貴在堅持!設計模式

隨着年齡的增加意味着咱們的時間也愈來愈少了,因此咱們本身內心要明白想要什麼?是想成爲某個領域的專家,仍是想多方面發展之後作領導型人才。一個時間段每每只能作好一件事情,有舍必會有得。當咱們開着拖拉機在鄉村道路時,不要看着別人開着跑車就羨慕,覺得拖拉機也能上高速,但心裏要有換噴氣式飛機的勇氣和決心。安全

大廠的正常面試流程週期通常是一到兩個月,就算薪資談完到 offer 最終審批下來可能都須要一到兩週,這段時間心理是比較難熬的,所以建議你們儘可能不要裸辭。面試完畢通常都會透露多久給答覆,若是是獵頭推的多跟獵頭聯繫,你們要儘可能想辦法打聽到最新的動態。網絡

二本大學也會有一流的專業,因此並不必定說一線互聯網企業就是最好的,所以在面試的時候必定要問一下部門和項目,本身根據自身的狀況來選擇企業和項目組。通常狀況下經過面試的難易程度就能判斷出部門的技術沉澱,那種幾乎不問技術很容易過的狀況,並不見得就必定是好現象,仍是得根據自身的狀況和之後的打算來判斷,有時選擇可能會大於努力。架構

Android學習PDF+架構視頻+面試文檔+源碼筆記源碼分析

最後

感謝你們能耐着性子,看完我囉哩囉嗦的文章。性能

願與各位堅守在Android開發崗位的同胞們互相交流學習,共同進步!學習

在這裏我也分享一份本身收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料幫助你們學習提高進階,也節省你們在網上搜索資料的時間來學習,也能夠分享給身邊好友一塊兒學習優化

相關文章
相關標籤/搜索