其實不是Android不行了,而是你跟不上了
我的很多讀者都在回報說,現在一個崗位可以收到的履歷數,是前幾年的幾倍。我們必須承認,僧多粥少就是 Android 行業的現狀,别說國中級工程師,就是進階工程師也是一抓一大把。企業招人的眼光也越來越高,如果你沒點“真東西”,是真的挺難的。
前幾天和一位 Android 前輩聊天,他說面試中很多工程師,對特别基礎的問題都停留在“使用過”或者“聽說過”。沒有深入到技術細節裡,在競争激烈的市場中就隻能被淘汰。下面這些,是他提到的幾個問題,你能快速回答上麼?
- SoftReference(軟引用)在記憶體不足時會被虛拟機回收,那它會不會導緻 OOM?
- Android 的 Touch 事件中 CANCEL 事件是如何産生的?哪些場景下會發生 CANCEL 事件?
- Handler 中的 Looper 無限循環,為什麼沒有阻塞UI主線程?
- 你在履歷中寫“精通多線程”,那麼:線程中自己的“工作記憶體”指的是什麼? 為什麼阿裡開發規範中不允許使用 Executors 建立線程池?
你一定想說“面試造火箭,工作擰螺絲”。實際上,你的答案反映了你對技術了解的深度,以及解決問題的能力。 聽起來很套路,但企業需要的是能對自己送出代碼負責、對使用每一個工具負責的「進階/資深 Android 開發」。
OPPO面試
第一面
1、手寫算法題。貓撲素數;1到n,求1的個數;單詞反轉;
2、Activity的加載模式。
standard,singleTop,singleTask,singleInstance。
3、什麼時候會用到singleTask?
在MainActivity的時候用到
4、Handler機制?
5、一個線程是否隻有一個Looper?
6、如何保證一個線程隻有一個Looper?
7、多線程的方式有哪些?
8、ANR異常發生條件
(1)5s内沒有響應使用者輸入事件
(2)10s内廣播接收器沒有處理完畢
(3)20s内服務沒有處理完畢
9、如何分析ANR?
10、自定義View和ViewGroup
11、事件處理:分發,攔截,處理。
12、GC算法
13、View動畫,屬性動畫,幀動畫。再說下View和屬性動畫差別。
第二面
1、OkHttp原理?
2、Retrofit原理?為何用代理?代理的作用是什麼?
3、ButterKnife原理?用到反射嗎?為什麼?
4、ANR異常如何查找并分析?
5、JVM記憶體模型?性能調優?
6、垃圾搜集算法有哪些?G1算法?
7、Http和Https的差別?
(1)Https是ssl加密傳輸,Http是明文傳輸
(2)Https是使用端口443,而Http使用80
(3)HttpsSSL+HTTP協定建構的可進行加密傳輸、身份認證的網絡協定要比Http協定安全
(4)Https協定需要到CA申請證書
8、加密算法有哪些?對稱加密和非對稱加密的差別?
(1)MD5,SHA1,Base64,RSA,AES,DES
(2)對稱:使用相同密鑰,需要在網絡傳輸,安全性不高。
(3)非對稱:使用一對密鑰,公鑰和私鑰,私鑰不在網絡傳輸,是以安全性高。
9、TCP的三次握手?兩次行不行?為什麼?TCP攻擊知道嗎?如何進行攻擊?
10、記憶體優化如何做?
11、看過那些源碼?
12、會對代碼進行review嗎?何時review?怎麼review?
13、項目中遇到的讓你棘手的問題?多久解決,怎麼解決?
14、平時如何學習?何時學習?怎麼學習?學習管道?
第三面
1、前幾次面試感覺如何?
2、你現在的APP日活是多少?
3、你現在如何處理崩潰日志?
4、你覺得小團隊好還是大團隊好? 5 你的優點和缺點說下?
6、你的發展方向說下?是先講究寬度還是講究深度,為什麼?
7、為什麼離職?
8、其他小問題,如哪裡人啊?現在工資怎樣?要求如何,何時到崗啊?有什麼問題要問我的嗎?
騰訊
三輪面試 一面
1、算法題 通電小球
2、Android 沉浸式狀态欄 怎麼實作的
3、事件處理函數有哪幾個,父View 子View 監聽同一個事件,重寫哪些方法。在哪個View重寫?
4、ViewRootImpl接受事件嗎?
5、apk編譯打包流程 V1,V2 簽名差別
6、利用logging監聽方法耗時,會不會讓app增大延遲。
7、插件化怎麼加載資源的?
8、JVM怎麼保證gc效率跟線程運作效率的 ?
9、如果android沒用對應的view,flutter能運作嗎? 手寫單例模式,volatile 跟 synchronized差別?
10、接口暴露,但是不讓别人調用,有哪些辦法?
二面
1、為什麼采用flatbuffer? 比Json好在哪裡?
2、如何處理Crash,NativeCrash呢?Google是怎麼做到的?如果上報過程中再次産生Crash能不能捕捉到?
3、uncaughtException是被誰調用的,如果再次崩潰能不能捕獲到?
4、Linux是怎麼知道app崩潰的,如果想要在被kill前 做一些耗時操作,該怎麼做?
5、考慮設計一個crash捕捉子產品。
6、100萬個數字求100個最大值。
7、手寫快速排序算法。
三面 (GM面)
1、kotlin比Java好在哪裡,是函數式程式設計嗎?
2、如何防止DNS劫持?
3、如果讓你實作一個調試器,你會怎麼設計?靜态調試?動态調試呢?
最後
在此為大家準備了四節優質的Android進階進階視訊:
架構師項目實戰——全球首批Android開發者對Android架構的見解
下方二維碼直接領取:
附相關架構及資料
roid進階進階視訊:**
架構師項目實戰——全球首批Android開發者對Android架構的見解
下方二維碼直接領取:
[外鍊圖檔轉存中…(img-hkuXfMvo-1629362974665)]
附相關架構及資料
[外鍊圖檔轉存中…(img-91LNAWsi-1629362974667)]
領取擷取往期Android進階架構資料、源碼、筆記、視訊。進階UI、性能優化、架構師課程、NDK、混合式開發(ReactNative+Weex)微信小程式、Flutter全方面的Android進階實踐技術,群内還有技術大牛一起讨論交流解決問題。