目錄

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)。

接下來就是兩道算法題

  1. String字符串的數(shù)字相加

  2. 使用三個(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ù),大體寫了一下代碼。

算法,可能是我寫的太慢了,所以就只有一道

  1. 給定一個(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ù)的燈按下,問,最后有多少盞燈是亮的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,034評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,337評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,883評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,114評(píng)論 0 286
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,625評(píng)論 1 332
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,555評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,737評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,973評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,343評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,699評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容