今年面試感覺好難啊,是不是我太菜了。給大家上點菜。
Java基礎
- java 內存模型
- 類的生命週期
- gc root 以及垃圾回收算法
- 字節碼相關 INVOKEVIRTUAL INVOKESPECIAL INVOKESTATIC之間的區別
- 「INVOKEVIRTUAL調用類的方法」
- 「INVOKESPECIAL 調用父類」
- 「INVOKESTATIC 調用靜態方法」
數據結構
- 聊聊紅黑樹
- 聊聊哈希桶
網絡
- https 流程以及原理
- tcp 三次握手
gradle相關
- gradle 編譯流程以及原理
- 混淆的時機,以及混淆的原理是什麼
「時機是在transform完成之後,要拆開R8之前和R8之後兩種處理邏輯。」
- aspectj gradle plugin 之間的區別 以及 plugin的增量編譯
Android
- 描述下事件攔截機制
- hanlder 機制
- ui卡頓 卡頓的原因 如何監控
- 熱修復的原理是什麼
- 聊聊組件化
- ndk 有沒有寫過(肯定沒寫過啊)
- sharedperfence原理 commit apply之間的差別 如果寫入失敗了會怎麼樣
- 如何做包體積優化,如果讓你做dex包體積優化你會怎麼做
- apt 和gradle transform的差別是什麼
apt生成的是java的class,而且不能更改原始的類,而transform這個東西你可以爲所欲爲,但是畢竟操作的是字節碼,風險係數更高,面試官還特地問了我下是不是有classnotfound問題,其實貌似真的發生過,但是想想感覺有些丟人沒敢承認,畢竟有點一知半解。
- .class .java .dex之間的區別是什麼
吐了,虛擬機什麼的我面試的時候都給忘了。哎,太難了。.java是給開發看的,.class是給機器看的,而.dex是給安卓虛擬機看的。當然這邊更多是想問安卓虛擬機相關的,反正答的稀爛
- okhttp 的攔截器機制 如果讓你監控網絡請求的耗時你會怎麼寫
把責任鏈說了,寫了關鍵字得分了,面試官也沒繼續往下問,其實還是可以聊聊dispatcher什麼的,okhttp的源代碼說實話有點深。
kotlin 協程和java的線程有什麼區別
啓動優化是如何做的
我個人拙見哦,啓動的東西要麼延遲,要換緩存。時間軸總長其實比較難以優化,我們參考的是阿里的starup的任務圖模式。
- 如何只拉起推送進程而不拉起app的進程
死亡題目,完全不知道答案,有沒有哪位老哥知道的 給我點思路啊。
- TraceView 和 Systrace直接的區別
哈哈哈 之前看過 然後忘了 這種東西一陣子不用吧就真的會忘掉
算法
- 無序數組中取出缺失的數字
項目經歷相關
剩下來的就是和項目經歷相關的啦。
- 主要是做了一些項目包體積的優化,因爲項目內有很多歷史債務的圖片,所以能優化的數量級還是比較大的。所以還是做出了一些成績的,自己寫了個python的命令集可以幫助項目快速的去把當前工程內的圖片進行一次壓制。
- 其次就是優化了下啓動速度,主要的方案還是參考阿里系的,講啓動任務task化,然後通過graph的方式將執行順序排列好,之後使用多線程以及countdownlaunch去完成同步,不需要鎖死application的延遲。
- 因爲要推進一部分代碼演進以及重構,所以需要有個工具快速去幫各業務去定位需要改動的點,所以我這邊通過自定義lint的方式去把需要更改的類做了一次標識。
- 將一些中間件給抽取了出來,以便後續更新優化等等,比如路由,圖片庫等等。
- 對項目內的post的請求做了一次cache的優化,通過annotation+retrofit的方式標識當前api是否可以進行緩存。
- dns 的二次緩存,由於運維設置的ttl時間過短,而且域名實在太多了,所以做了一次下發緩存以及策略的優化。
- 剩下的就是一些和業務相關的了,這裏就不多廢話了。
結尾
今年面試我的看法就是真的好難啊。要準備基礎還要刷算法題,不僅問安卓,還要問jvm虛擬機,順便問問併發,還要會kotlin,最好還能來個flutter,給各位跪了。
Android系統面試複習路線參考
成年人想要改變生活、逆轉狀態時,會不約而同做一件事,那就是再次學習。
接下來分享的系統學習資源以詳解各大互聯網公司的 Android 常見面試題爲主線,從面試的角度帶你介紹必備知識點,以及該知識點在項目中的實際應用。
幫你在現在的基礎上,重新梳理和建立 Android 開發的知識體系。無論是你短期內想提升 Android 內功實力,突破自己工作中的能力瓶頸,還是準備參加 Android 面試,都會在這份資料中有所一些收穫。
從架構基礎開始,分了8個模塊來逐步從基礎進階到架構師的環節:
多餘的話就不講了,接下來將分享面試的一個複習路線,如果你也在準備面試但是不知道怎麼高效複習,可以參考一下我的複習路線,有任何問題也歡迎一起互相交流,加油吧!
首先是超級詳細得不能再詳細的Android開發學習思維導圖,因爲圖片實在是太大了,所以我就只把二級目錄的內容放出來,更加詳細的你們可以點擊這裏。
接下來就需要梳理知識,提升儲備了!(Android移動架構師七大專題學習資源)
架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO
Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化
360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化
解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack
NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發
微信小程序:小程序介紹+UI開發+API操作+微信對接
Hybrid 開發與Flutter:Html5項目實戰+Flutter進階
知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。
然後再是通過源碼來系統性地學習
只要是程序員,不管是Java還是Android,如果不去閱讀源碼,只看API文檔,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。
真正最能鍛鍊能力的便是直接去閱讀源碼,不僅限於閱讀各大系統源碼,還包括各種優秀的開源庫。
刷大廠面試題備戰,增加大廠通過率
歷時半年,整理了這份市面上最全面的安卓面試題解析大全。
1.可以通過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數
以上這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者點擊 【這裏】 查看獲取方式。
最後還有耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記
等等,這些內容均免費分享給大家。