以下純屬個人面試經(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等))
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é)果