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