MVC、MVP和MVVM的原理和區(qū)別
設計的六大基礎原則
使用UML畫一下訪問者設計模式
組件化、字節(jié)碼注入、包體積的極致優(yōu)化
直播的架構設計
設計一個上傳日志的大小,涉及到,性能、文件大小、怎樣壓縮、時機、TopK問題等
OpenGL一些知識,頂點著色器、片元著色器的工作原理,什么是VBO(這個沒想起來),以及shader的一些簡單問題
View的事件傳遞機制
包體積優(yōu)化
JVM相關知識,Dalvik和ART的區(qū)別
組件化的實現方案
算法題,ViewGroup的層級深度,轉換為二叉樹的層級深度
RecyclerView防止內存OOM的一道題,充分利用自身的緩存機制,可能我始終沒理解問題所在,雖然給出解決方案,但是面試官不滿意,太繁瑣
討論LRUcache的實現和時間復雜度
查找兩個字符串的交集和字符串1中有字符串2中沒有的問題。
熱修復,主要說了ClassLoader的方式和Rubost的插裝方式,重點介紹了Rubost的原理。
實現直播禮物的一些技術選型,和播放帶有alpha通道MP4的解決方案
怎么實現字節(jié)碼注入
抖音組件的探索,SPI到字節(jié)碼注入,優(yōu)缺點。
接下來就是兩道算法題
String字符串的數字相加
使用三個線程順序打印有序的數組
包體積優(yōu)化:靜態(tài) Lint , Proguard , AndResGuard 和刪除R.java中的所有字段,刪除access方法,在gradle的transform階段將壓縮png和jpeg,使用google開源的redex方案,每種方案的原理以及優(yōu)缺點
MVVM-livedata的實現原理
屬性動畫的原理,這里沒看過,不太清楚
Kotlin寫一個let的擴展函數,大體寫了一下代碼。
算法,可能是我寫的太慢了,所以就只有一道
- 給定一個有序的數組和目標數,找出與目標數最近接的index,要求復雜度是log(n)的時間復雜度
二叉樹的深度和廣度,要求一次遍歷
給定一個二叉樹和一個目標數,在二叉樹中是否存在一條路徑的所有節(jié)點的和與目標數是相同的case,并且打印。
在抖音上顯示自己做的功能,框架的搭建,實現原理,所做的優(yōu)化點等。
組件化的實現,為什么做組件化,不同實現的優(yōu)缺點。
hashmap的實現原理
view的優(yōu)化,減少層級,異步加載,x2c框架引入,優(yōu)缺點,textview的優(yōu)化。
mp4播放alpha視頻實現的原理
冷啟優(yōu)化的一些方案。
數據驅動業(yè)務的理解,怎么做,和pm產生分歧怎么解決。
我所有做的優(yōu)化的收益是什么,有什么數據支撐。
事件分發(fā)機制,舉了一個具體的例子來解決。
http的一些問題,1.1和2.0區(qū)別,心跳機制,https怎么建立鏈接,怎么進行數據加密等。
為什么離開抖音,職業(yè)發(fā)展,訴求等。
聊了大概一個小時,面試官的思路相對獨特,不是為做技術而做技術,技術始終要服務于業(yè)務,我非常認可。
聊了一下項目中做過的東西,字節(jié)碼注入相關知識,transform優(yōu)化,mp4禮物實現等
從桌面點擊icon圖標開始,整個啟動activity的啟動過程
Binder的實現原理
插件化的原理,以及hook點,大概有兩個,可以網上搜索一下
hashmap的實現原理
單例的實現,sychrnized的實現原理,以及雙鎖不加violate,會不會有線程安全問題
代碼設計的基礎原則,以及用UML畫出工廠模式
將兩個有序的鏈表合并成一個有序的鏈表,遞歸和循環(huán)兩中方式
時間分發(fā)機制,并且需要從Android的sensor開始到應用層,我只知道從Activity開始的流程。
聊操作系統(tǒng)Unix,汗顏,我知之甚少。
線程安全的問題,sychronized和viloated的使用
實現一個CAS(樂觀鎖)的方法
HashMap的實現原理,怎么優(yōu)化內存占用,優(yōu)化resize的過程,這個是開放的問題
對新技術的看法(flutter),瓜子二手車也已經開始在項目中使用fultter相關技術
二叉樹,讀取每一層最右邊的節(jié)點
雙鎖單例,為什么要價violate
內部類訪問外部類
函數值傳遞的一些題
子類繼承父類,個字都有靜態(tài)變量、靜態(tài)代碼塊、構造函數,執(zhí)行的順序
圖片壓縮原理,以及在transform階段進行的必要性,討論的還挺激烈
內部類引用外部函數的參數,為什么要final定義,值傳遞
判斷一個應用是否切到后臺
組件化的探討,假設場景,怎么處理
一個疑難雜癥,也是自定義插件,討論是否有更好的方式,最后結果是,他想了一個比較巧妙的方式,沒有實踐過,但是告訴我可以,保留自己的意見。
字節(jié)碼相關知識,ASM以及MD5的實現原理,png的壓縮原理,這里比較亂,就是說到哪問道哪,比較發(fā)散。
mp4實現alpha通道的原理,優(yōu)缺點,收益是什么
m*n的二維數組,做(0,0)出發(fā),可以上下左右走,0為暢通,1為阻塞,目標位置(k,j),問是否能到達這個位置,類似迷宮的算法
對成為架構師的幾點看法
插件化的實現方式,以及對相應的場景進行討論
int數組,除了一個數字外,其他數字都出現兩次,找出這個只出現一次的數字
Android中的引用關系
自定義view步驟
常用的播放器,以及優(yōu)缺點
opengl的繪制流程
性能優(yōu)化,包體積優(yōu)化,冷啟優(yōu)化,卡頓優(yōu)化的一些實現方案
mvc mvp mvvm的區(qū)別,以及自己實現的輕量級mvvm的原理
編解碼的相關知識
ijkplayer的優(yōu)缺點,以及是否看過相關源碼
多線程怎么保證線程安全,violated、sychronized、reenterLock,這三個鎖的原理以及區(qū)別,JVM是怎樣實現sychronized線程安全的。
HashMap的實現原理,put()原理。hash沖突,resize,1.8的改動,什么是紅黑樹,優(yōu)點。
ui優(yōu)化,主要從檢測和優(yōu)化兩個部分說明,優(yōu)化又分為通用的優(yōu)化,和改變繪制流程的優(yōu)化。
jvm的介紹,內存介紹,gc等
hashmap是否線程安全,concurenthashmap實現原理,1.8之后有什么改變
播放透明的mp4的原理
冷啟優(yōu)化和ui卡頓的監(jiān)測和優(yōu)化
thinker實現插件化的原理,我們使用什么什么實現熱更新,熱更新的通用方案,以及優(yōu)缺點
binder機制
flutter的探討
音視頻編解碼的流程
activity生命周期
實現mp4播放alpha視頻的原理
是否使用過kotlin,kotlin的一些特性
內存泄漏和oom怎么產生的,內存泄漏的監(jiān)控,leakcanery的實現原理
activity生命周期 以及各個函數的含義
activity task的四種類型
fragment的生命周期
啟動server的兩種方式
intent傳輸數據的大小限制
binder的原理
activity的啟動流程
hashmap實現原理,1.8的改動,紅黑樹概念
組件化實現方案 spi的缺點,怎么使用字節(jié)碼注入
Dex的組成,為什么每個dex會有65536的限制
還有好多,時間太長記不太清楚了
合并兩個有序的鏈表
看過哪些第三方框架的源碼,具體的實現原理。retrofit、okhttp和eventbus等
Activity的生命周期、fragment的生命周期,onRestart()什么時候調用
service的兩種啟動方式,service的生命周期
binder機制
進程?;睿?.防止進程被殺 2.殺死后再拉起,詳細的答案網上搜一下,這里就不列舉出來了
app的包體積優(yōu)化,lint、proguard、andresguard原理,字節(jié)碼注入,刪除R.java的變量,刪除access001方法,壓縮圖片資源和使用redex等。
對JNI和C++了解嗎?基本不了解,就略過了
Activity的launchMode,每個Mode的含義,Activity的啟動流程
怎么樣實現MP4播放alpha的視頻,編解碼的一些流程,NV20、YUV、RGB一些概念,SurfaceView和TextureSurfaceView的區(qū)別
組件化的實現,都有什么技術方案,優(yōu)缺點
使用數組實現一個隊列,有void add(int val)和void pop()兩個函數,而且需要考慮擴容
哪兩件事情做得最有成就感
怎樣重構代碼,基本的6大原則,詳細討論每個原則的含義,使用過的設計模式
假定場景,接口定義的有缺陷,第二版需要修改,是增加還是直接修改,以及還有沒有其他的方案,怎么去做,為什么,這個是開放的題,結合設計原則,以及真實的情況和自己的一些例子說明即可
組件化,依賴版本號不同的解決辦法
包體積優(yōu)化,Lint、proguard、andResGuard的原理,以及抖音做的一些包體積優(yōu)化的方案
線程和線程池的討論,為什么要用線程池,線程池各個參數的含義,如果隊列滿了會發(fā)生什么,為什么線程池的數量是cpu核數+1
插件化,一些實際問題的,具體是什么記不太清楚了
線程安全的方式,sychronized和violated的區(qū)別
怎么自定義Transform、自定義Task,Task之間怎么依賴,大致順序是什么,增量編譯的概念,異步加快文件的讀取,ASM接口的使用
cookie、session、token的含義和區(qū)別,這里我確實不熟悉,就直接說我不太清楚了。
音視頻的相關知識,NV20,YUV,RGB的關系,為什么mp4的壓縮率比webp的動畫要高,編解碼的流程,通用的編碼格式,軟硬解的區(qū)別。
View的繪制流程,硬件加速的原理和軟件繪制的區(qū)別,以及相關的view的優(yōu)化
動畫實現的方式,幀動畫和屬性動畫的實現原理
一張圖片加載到手機內存中真正的大小是怎么計算的
OOM產生的原理,內存泄漏是由于什么引起的,GCRoot有哪幾種類型,JVM等
一個二分查找的變形題,具體的題目記不清楚了
為什么要做組件化,組件化的實現方案都有什么,優(yōu)缺點
Activity的啟動流程
View的繪制流程,從VSYNC信號開始
性能優(yōu)化,包體積優(yōu)化,R.java優(yōu)化,access$xx方法優(yōu)化,資源優(yōu)化原理
MVVM是什么,我自己做的輕量級的MVVM的實現方式,優(yōu)點是什么
看過什么第三方的源碼,retrofit原理,動態(tài)代理和靜態(tài)代理的區(qū)別,是否使用反射,okhttp的原理,Http和Https的區(qū)別,Https的socket security layer的握手,EventBus的原理,3.0的區(qū)別,APT的使用以及怎樣處理字節(jié)碼(ASM、javaassit、BECEL等)
從Activity A跳到Activity B的生命周期的調用過程,如果是異步進程呢
冷起優(yōu)化,systrace怎么使用,實現原理
ANR是什么,怎么上報ANR,有些手機拿不出,有些手機拿不出anr/traces.txt,怎么查找ANR問題
插件化的原理,Activity的啟動流程,hook點
一個類,內部有一個鏈表的數據結構,實現void add(Node n)和void remove(int index)的函數
HashMap的實現原理
在抖音做的工作,主要說了ui優(yōu)化和冷起優(yōu)化兩個部分,擴展開來,討論了很多相關的知識點
手寫消費者生產者模型的代碼
handler介紹,為什么阻塞不會造成anr,屏障消息,產生內存泄露原因,handler內存泄露的引用鏈
事件攔截機制,view的繪制流程
android的系統(tǒng)渲染原理,renderthread的解釋,三緩沖機制播放透明mp4的原理,surfaceview和textureview的區(qū)別
opengl的繪制流程,texturesurface是什么,頂點著色器和片元著色器各自作用,VOB是什么
一個無序的int數組,給一個target數字,找出數組中兩個數字相加為target,并輸出坐標
hashmap的實現原理,怎樣找到index,size為什么是2的倍數,怎樣resize,resize過后,之前的hash沖突還存在嗎?currenthashmap的實現原理
怎樣保證多線程的安全,什么是樂觀鎖,怎么使用
設計一個發(fā)送語音模塊的架構,需要寫出所有接口函數,并且需要詳細說明,可能面試官更加在意設計能力,這里討論的時間非常長。
view的繪制流程,onMeasure、onLayout、onDraw,各個參數是什么含義,尤其是widthMeasureSpec、heightMeasureSpec以及對應的AT_MOST、EXACTLY和UNSPECIFIED
數組中存有1-3的三種數字,例如[1,2,3,1,2,2,1,3,3],將其排序為[1,1,1,2,2,2,3,3,3],要求時間復雜度,后續(xù)將內容變?yōu)橐粋€對象,繼續(xù)排序
mp4播放alpha視頻的原理,與其他方案的對比,收益點是什么
"之"字形打印二叉樹
1~100盞燈,都是亮的,第一次將能被1整除的數的燈按下,變暗,第二次將能被2整除的數的等按下,變亮,第三次將能被3整除的數的等按下,變暗…第100次將能被100整除的數的燈按下,問,最后有多少盞燈是亮的。