MVC栖秕、MVP和MVVM的原理和區(qū)別
設計的六大基礎原則
使用UML畫一下訪問者設計模式
組件化晓避、字節(jié)碼注入、包體積的極致優(yōu)化
直播的架構設計
設計一個上傳日志的大小暑塑,涉及到锅必,性能、文件大小驹愚、怎樣壓縮劣纲、時機、TopK問題等
OpenGL一些知識蒸甜,頂點著色器余佛、片元著色器的工作原理,什么是VBO(這個沒想起來)恨憎,以及shader的一些簡單問題
View的事件傳遞機制
包體積優(yōu)化
JVM相關知識郊楣,Dalvik和ART的區(qū)別
組件化的實現(xiàn)方案
算法題,ViewGroup的層級深度钥组,轉換為二叉樹的層級深度
RecyclerView防止內(nèi)存OOM的一道題今瀑,充分利用自身的緩存機制,可能我始終沒理解問題所在屿附,雖然給出解決方案挺份,但是面試官不滿意,太繁瑣
討論LRUcache的實現(xiàn)和時間復雜度
查找兩個字符串的交集和字符串1中有字符串2中沒有的問題匀泊。
熱修復探赫,主要說了ClassLoader的方式和Rubost的插裝方式撬呢,重點介紹了Rubost的原理。
實現(xiàn)直播禮物的一些技術選型毛仪,和播放帶有alpha通道MP4的解決方案
怎么實現(xiàn)字節(jié)碼注入
抖音組件的探索芯勘,SPI到字節(jié)碼注入,優(yōu)缺點衡怀。
接下來就是兩道算法題
String字符串的數(shù)字相加
使用三個線程順序打印有序的數(shù)組
包體積優(yōu)化:靜態(tài) Lint 安疗, Proguard , AndResGuard 和刪除R.java中的所有字段怖现,刪除access方法玉罐,在gradle的transform階段將壓縮png和jpeg吊输,使用google開源的redex方案,每種方案的原理以及優(yōu)缺點
MVVM-livedata的實現(xiàn)原理
屬性動畫的原理讨韭,這里沒看過,不太清楚
Kotlin寫一個let的擴展函數(shù)透硝,大體寫了一下代碼濒生。
算法,可能是我寫的太慢了罪治,所以就只有一道
- 給定一個有序的數(shù)組和目標數(shù)觉义,找出與目標數(shù)最近接的index,要求復雜度是log(n)的時間復雜度
二叉樹的深度和廣度霉撵,要求一次遍歷
給定一個二叉樹和一個目標數(shù)洪囤,在二叉樹中是否存在一條路徑的所有節(jié)點的和與目標數(shù)是相同的case,并且打印喇完。
在抖音上顯示自己做的功能剥啤,框架的搭建,實現(xiàn)原理刻诊,所做的優(yōu)化點等富腊。
組件化的實現(xiàn)赘被,為什么做組件化,不同實現(xiàn)的優(yōu)缺點浮入。
hashmap的實現(xiàn)原理
view的優(yōu)化羊异,減少層級彤断,異步加載易迹,x2c框架引入睹欲,優(yōu)缺點,textview的優(yōu)化袋哼。
mp4播放alpha視頻實現(xiàn)的原理
冷啟優(yōu)化的一些方案闸衫。
數(shù)據(jù)驅動業(yè)務的理解,怎么做弟翘,和pm產(chǎn)生分歧怎么解決身冬。
我所有做的優(yōu)化的收益是什么岔乔,有什么數(shù)據(jù)支撐雏门。
事件分發(fā)機制,舉了一個具體的例子來解決宙帝。
http的一些問題募闲,1.1和2.0區(qū)別,心跳機制靴患,https怎么建立鏈接要出,怎么進行數(shù)據(jù)加密等患蹂。
為什么離開抖音砸紊,職業(yè)發(fā)展囱挑,訴求等平挑。
聊了大概一個小時,面試官的思路相對獨特否淤,不是為做技術而做技術棠隐,技術始終要服務于業(yè)務,我非常認可啰扛。
聊了一下項目中做過的東西嗡贺,字節(jié)碼注入相關知識,transform優(yōu)化煞茫,mp4禮物實現(xiàn)等
從桌面點擊icon圖標開始续徽,整個啟動activity的啟動過程
Binder的實現(xiàn)原理
插件化的原理亲澡,以及hook點,大概有兩個客情,可以網(wǎng)上搜索一下
hashmap的實現(xiàn)原理
單例的實現(xiàn)癞己,sychrnized的實現(xiàn)原理末秃,以及雙鎖不加violate,會不會有線程安全問題
代碼設計的基礎原則惰匙,以及用UML畫出工廠模式
將兩個有序的鏈表合并成一個有序的鏈表,遞歸和循環(huán)兩中方式
時間分發(fā)機制哑梳,并且需要從Android的sensor開始到應用層绘盟,我只知道從Activity開始的流程。
聊操作系統(tǒng)Unix吠卷,汗顏沦零,我知之甚少路操。
線程安全的問題,sychronized和viloated的使用
實現(xiàn)一個CAS(樂觀鎖)的方法
HashMap的實現(xiàn)原理搞坝,怎么優(yōu)化內(nèi)存占用魁袜,優(yōu)化resize的過程慌核,這個是開放的問題
對新技術的看法(flutter)申尼,瓜子二手車也已經(jīng)開始在項目中使用fultter相關技術
二叉樹,讀取每一層最右邊的節(jié)點
雙鎖單例粟按,為什么要價violate
內(nèi)部類訪問外部類
函數(shù)值傳遞的一些題
子類繼承父類霹粥,個字都有靜態(tài)變量后控、靜態(tài)代碼塊、構造函數(shù)捌朴,執(zhí)行的順序
圖片壓縮原理,以及在transform階段進行的必要性洼怔,討論的還挺激烈
內(nèi)部類引用外部函數(shù)的參數(shù)左驾,為什么要final定義诡右,值傳遞
判斷一個應用是否切到后臺
組件化的探討,假設場景嗜闻,怎么處理
一個疑難雜癥桅锄,也是自定義插件,討論是否有更好的方式翠肘,最后結果是辫秧,他想了一個比較巧妙的方式盟戏,沒有實踐過,但是告訴我可以邮旷,保留自己的意見蝇摸。
字節(jié)碼相關知識貌夕,ASM以及MD5的實現(xiàn)原理,png的壓縮原理险毁,這里比較亂,就是說到哪問道哪离唐,比較發(fā)散问窃。
mp4實現(xiàn)alpha通道的原理域庇,優(yōu)缺點,收益是什么
m*n的二維數(shù)組熟呛,做(0,0)出發(fā)尉姨,可以上下左右走又厉,0為暢通,1為阻塞侄旬,目標位置(k,j)煌妈,問是否能到達這個位置璧诵,類似迷宮的算法
對成為架構師的幾點看法
插件化的實現(xiàn)方式,以及對相應的場景進行討論
int數(shù)組族操,除了一個數(shù)字外澈缺,其他數(shù)字都出現(xiàn)兩次姐赡,找出這個只出現(xiàn)一次的數(shù)字
Android中的引用關系
自定義view步驟
常用的播放器柠掂,以及優(yōu)缺點
opengl的繪制流程
性能優(yōu)化涯贞,包體積優(yōu)化危喉,冷啟優(yōu)化辜限,卡頓優(yōu)化的一些實現(xiàn)方案
mvc mvp mvvm的區(qū)別严蓖,以及自己實現(xiàn)的輕量級mvvm的原理
編解碼的相關知識
ijkplayer的優(yōu)缺點颗胡,以及是否看過相關源碼
多線程怎么保證線程安全,violated哑蔫、sychronized弧呐、reenterLock俘枫,這三個鎖的原理以及區(qū)別,JVM是怎樣實現(xiàn)sychronized線程安全的巡球。
HashMap的實現(xiàn)原理酣栈,put()原理汹押。hash沖突,resize窖维,1.8的改動铸史,什么是紅黑樹怯伊,優(yōu)點。
ui優(yōu)化崭篡,主要從檢測和優(yōu)化兩個部分說明琉闪,優(yōu)化又分為通用的優(yōu)化颠毙,和改變繪制流程的優(yōu)化。
jvm的介紹咱扣,內(nèi)存介紹,gc等
hashmap是否線程安全涵防,concurenthashmap實現(xiàn)原理闹伪,1.8之后有什么改變
播放透明的mp4的原理
冷啟優(yōu)化和ui卡頓的監(jiān)測和優(yōu)化
thinker實現(xiàn)插件化的原理,我們使用什么什么實現(xiàn)熱更新壮池,熱更新的通用方案偏瓤,以及優(yōu)缺點
binder機制
flutter的探討
音視頻編解碼的流程
activity生命周期
實現(xiàn)mp4播放alpha視頻的原理
是否使用過kotlin,kotlin的一些特性
內(nèi)存泄漏和oom怎么產(chǎn)生的椰憋,內(nèi)存泄漏的監(jiān)控厅克,leakcanery的實現(xiàn)原理
activity生命周期 以及各個函數(shù)的含義
activity task的四種類型
fragment的生命周期
啟動server的兩種方式
intent傳輸數(shù)據(jù)的大小限制
binder的原理
activity的啟動流程
hashmap實現(xiàn)原理,1.8的改動橙依,紅黑樹概念
組件化實現(xiàn)方案 spi的缺點,怎么使用字節(jié)碼注入
Dex的組成窗骑,為什么每個dex會有65536的限制
還有好多女责,時間太長記不太清楚了
合并兩個有序的鏈表
看過哪些第三方框架的源碼,具體的實現(xiàn)原理创译。retrofit抵知、okhttp和eventbus等
Activity的生命周期、fragment的生命周期软族,onRestart()什么時候調(diào)用
service的兩種啟動方式刷喜,service的生命周期
binder機制
進程保活:1.防止進程被殺 2.殺死后再拉起立砸,詳細的答案網(wǎng)上搜一下掖疮,這里就不列舉出來了
app的包體積優(yōu)化,lint仰禽、proguard氮墨、andresguard原理纺蛆,字節(jié)碼注入吐葵,刪除R.java的變量,刪除access001方法规揪,壓縮圖片資源和使用redex等。
對JNI和C++了解嗎温峭?基本不了解猛铅,就略過了
Activity的launchMode,每個Mode的含義凤藏,Activity的啟動流程
怎么樣實現(xiàn)MP4播放alpha的視頻奸忽,編解碼的一些流程,NV20揖庄、YUV栗菜、RGB一些概念,SurfaceView和TextureSurfaceView的區(qū)別
組件化的實現(xiàn)蹄梢,都有什么技術方案疙筹,優(yōu)缺點
使用數(shù)組實現(xiàn)一個隊列,有void add(int val)和void pop()兩個函數(shù)禁炒,而且需要考慮擴容
哪兩件事情做得最有成就感
怎樣重構代碼而咆,基本的6大原則,詳細討論每個原則的含義幕袱,使用過的設計模式
假定場景暴备,接口定義的有缺陷,第二版需要修改们豌,是增加還是直接修改涯捻,以及還有沒有其他的方案,怎么去做望迎,為什么障癌,這個是開放的題,結合設計原則擂煞,以及真實的情況和自己的一些例子說明即可
組件化混弥,依賴版本號不同的解決辦法
包體積優(yōu)化,Lint对省、proguard蝗拿、andResGuard的原理,以及抖音做的一些包體積優(yōu)化的方案
線程和線程池的討論蒿涎,為什么要用線程池哀托,線程池各個參數(shù)的含義,如果隊列滿了會發(fā)生什么劳秋,為什么線程池的數(shù)量是cpu核數(shù)+1
插件化仓手,一些實際問題的胖齐,具體是什么記不太清楚了
線程安全的方式,sychronized和violated的區(qū)別
怎么自定義Transform嗽冒、自定義Task呀伙,Task之間怎么依賴,大致順序是什么添坊,增量編譯的概念剿另,異步加快文件的讀取,ASM接口的使用
cookie贬蛙、session雨女、token的含義和區(qū)別,這里我確實不熟悉阳准,就直接說我不太清楚了氛堕。
音視頻的相關知識,NV20野蝇,YUV讼稚,RGB的關系,為什么mp4的壓縮率比webp的動畫要高浪耘,編解碼的流程乱灵,通用的編碼格式,軟硬解的區(qū)別七冲。
View的繪制流程痛倚,硬件加速的原理和軟件繪制的區(qū)別,以及相關的view的優(yōu)化
動畫實現(xiàn)的方式澜躺,幀動畫和屬性動畫的實現(xiàn)原理
一張圖片加載到手機內(nèi)存中真正的大小是怎么計算的
OOM產(chǎn)生的原理蝉稳,內(nèi)存泄漏是由于什么引起的,GCRoot有哪幾種類型掘鄙,JVM等
一個二分查找的變形題耘戚,具體的題目記不清楚了
為什么要做組件化,組件化的實現(xiàn)方案都有什么操漠,優(yōu)缺點
Activity的啟動流程
View的繪制流程收津,從VSYNC信號開始
性能優(yōu)化,包體積優(yōu)化浊伙,R.java優(yōu)化撞秋,access$xx方法優(yōu)化,資源優(yōu)化原理
MVVM是什么嚣鄙,我自己做的輕量級的MVVM的實現(xiàn)方式吻贿,優(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的生命周期的調(diào)用過程冒冬,如果是異步進程呢
冷起優(yōu)化,systrace怎么使用摩渺,實現(xiàn)原理
ANR是什么简烤,怎么上報ANR,有些手機拿不出摇幻,有些手機拿不出anr/traces.txt横侦,怎么查找ANR問題
插件化的原理,Activity的啟動流程绰姻,hook點
一個類枉侧,內(nèi)部有一個鏈表的數(shù)據(jù)結構,實現(xiàn)void add(Node n)和void remove(int index)的函數(shù)
HashMap的實現(xiàn)原理
在抖音做的工作狂芋,主要說了ui優(yōu)化和冷起優(yōu)化兩個部分榨馁,擴展開來,討論了很多相關的知識點
手寫消費者生產(chǎn)者模型的代碼
handler介紹帜矾,為什么阻塞不會造成anr翼虫,屏障消息,產(chǎn)生內(nèi)存泄露原因屡萤,handler內(nèi)存泄露的引用鏈
事件攔截機制珍剑,view的繪制流程
android的系統(tǒng)渲染原理,renderthread的解釋死陆,三緩沖機制播放透明mp4的原理招拙,surfaceview和textureview的區(qū)別
opengl的繪制流程,texturesurface是什么措译,頂點著色器和片元著色器各自作用,VOB是什么
一個無序的int數(shù)組别凤,給一個target數(shù)字,找出數(shù)組中兩個數(shù)字相加為target瞳遍,并輸出坐標
hashmap的實現(xiàn)原理闻妓,怎樣找到index,size為什么是2的倍數(shù)掠械,怎樣resize由缆,resize過后注祖,之前的hash沖突還存在嗎?currenthashmap的實現(xiàn)原理
怎樣保證多線程的安全均唉,什么是樂觀鎖是晨,怎么使用
設計一個發(fā)送語音模塊的架構,需要寫出所有接口函數(shù)舔箭,并且需要詳細說明罩缴,可能面試官更加在意設計能力,這里討論的時間非常長层扶。
view的繪制流程箫章,onMeasure、onLayout镜会、onDraw檬寂,各個參數(shù)是什么含義,尤其是widthMeasureSpec戳表、heightMeasureSpec以及對應的AT_MOST桶至、EXACTLY和UNSPECIFIED
數(shù)組中存有1-3的三種數(shù)字,例如[1,2,3,1,2,2,1,3,3],將其排序為[1,1,1,2,2,2,3,3,3]匾旭,要求時間復雜度镣屹,后續(xù)將內(nèi)容變?yōu)橐粋€對象,繼續(xù)排序
mp4播放alpha視頻的原理价涝,與其他方案的對比女蜈,收益點是什么
"之"字形打印二叉樹
1~100盞燈,都是亮的飒泻,第一次將能被1整除的數(shù)的燈按下鞭光,變暗,第二次將能被2整除的數(shù)的等按下泞遗,變亮惰许,第三次將能被3整除的數(shù)的等按下,變暗…第100次將能被100整除的數(shù)的燈按下史辙,問汹买,最后有多少盞燈是亮的。