2022年最新Android開發(fā)面試經(jīng)驗(一):字節(jié)跳動

以下純屬個人面試經(jīng)驗分享,望對各位同仁有幫助


面試過程

1、主要是項目經(jīng)驗(占面試時間的40%)
沒有問所有項目,突出項目難點,項目特色,項目突出貢獻,要做到通俗易懂,視頻面試沒法畫框架圖

項目經(jīng)驗

1、地理圍欄的項目難點

2、進程啟動優(yōu)化的思路
核心思想:少干活,多線程

3、插件化
3.1、插件化的實現(xiàn)方式
核心思想:雙親委托模式
1)原生機制,AndroidManifest文件聲明為插件
2)自定義ClassLoader,宿主通過反射跨層加載類

3.2、插件化,宿主APK和插件APK之間怎么通信
3.3、插件化的弊端,如何解決
弊端:
1)單獨升級更新維護麻煩
2)插件 APK 中不支持自定義資源的 Notification,通知欄限制。
3)插件 APK 中無法注冊具有特殊的 IntentFilter 的四大組件。

如果解決:
不是所有的業(yè)務(wù)都適合插件化,需要完全獨立、插件之間或宿主和插件之間沒有相互耦合的業(yè)務(wù)?;蛘咭蕾囍g的接口非常穩(wěn)定
1)明確好宿主APK與插件APK之間的邊界,盡量可以做到保持不變化
2)版本管理、捆綁升級,單一升級失敗,升級回滾

Android 基礎(chǔ)

1、性能優(yōu)化,快穩(wěn)?。ǜ鶕?jù)你的項目經(jīng)驗、擅長的挑選一項,包括:功耗、內(nèi)存、穩(wěn)定性(crash、ANR等))

參考:Android內(nèi)存優(yōu)化案例分析

2、AIDL,跨進程通信

Android跨進程通訊機制之Binder、IBinder、Parcel、AIDL_xk_一步一步來的博客-CSDN博客

2.1、AIDL底層原理

2.2、AIDL Listener自動生成的數(shù)據(jù)結(jié)構(gòu),內(nèi)部邏輯問題

2.3、AIDL執(zhí)行過程的,Server端的線程,并發(fā)訪問問題

算法題目

1、LeetCode? ?63. 不同路徑 II

一個機器人位于一個?m x n?網(wǎng)格的左上角 (起始點在下圖中標記為 “Start” )。機器人每次只能向下或者向右移動一步。機器人試圖達到網(wǎng)格的右下角(在下圖中標記為 “Finish”)。
現(xiàn)在考慮網(wǎng)格中有障礙物。那么從左上角到右下角將會有多少條不同的路徑?
網(wǎng)格中的障礙物和空位置分別用 1 和 0 來表示。

解題:
輸入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
輸出:2
解釋:3x3 網(wǎng)格的正中間有一個障礙物。
從左上角到右下角一共有 2 條不同的路徑:
a. 向右 -> 向右 -> 向下 -> 向下
b. 向下 -> 向下 -> 向右 -> 向右

解題過程參考LeetCode答案即可
PS:如果從高中數(shù)學問題解決,可以歸結(jié)為排列組合問題
1)無障礙情況下,路徑的情況,即為C(n, m)
2)有障礙情況下,就是無障礙情況的次數(shù) - 經(jīng)過障礙點的次數(shù)
如障礙點為(n1, m1),即所有路徑f(n, m) = C(n, m) - (C(n1 + m1, m1) * C(n - n1 + m - m1, m - m1))

2、兩數(shù)相加

給定一個整數(shù)的數(shù)組,找出其中的pair(a, b),使得a + b= 0, 并返回這樣的pair結(jié)果
要求更低的時間復(fù)雜度

解題:
1、最簡單的方式是,嵌套兩層遍歷,不過時間復(fù)雜度為n^2
2、先按照正負分組,使用小的組在遍歷,或者hash算法得出結(jié)果

可參考:算法題 數(shù)組中兩個數(shù)字和為0的組合種類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容