阿里釘釘,字節(jié)抖音 Android 面經(jīng)分享!
BAT
阿里巴巴 -- 釘釘部門
自我介紹,對自己項目的介紹,架構(gòu)圖呈現(xiàn)
因為說自己以后的發(fā)展方向是音視頻,所以問了我用過哪些現(xiàn)有框架
項目中的一些優(yōu)化問題,MVC -> MVP,Handler的內(nèi)存泄漏情況分析等,對MVP和MVVM的理解。
項目中的第三方庫選擇的問題,因為簡歷中寫了我對第三方庫選擇的問題,比如選ObjectBox和greenDao的問題,圖片加載框架問題
HashMap和HashTable,引申ConCurrentHashmap的深入,version1.7和1,8的區(qū)別,以及高并發(fā)下HashMap發(fā)生的問題
四大啟動模式,以及場景對應(yīng)
Handler的機(jī)制介紹,不存在消息時的IdleHandler的運作機(jī)制,為什么不能在子線程初始化問題
設(shè)計模式中的單例介紹,使用場景(Okhttp的Seesion存儲等等),在線編寫
快排算法
OkHttp的源碼分析,及整體架構(gòu)的流程圖繪制
四大組件的完整介紹,及深入,答了IntentService、LocalBroadcast
四大引用的問題和MVP框架相結(jié)合進(jìn)行回答
網(wǎng)絡(luò)中的響應(yīng)碼對大體進(jìn)行回答,具體回答了200、404、500、304等
View繪制流程問題,如何不使用xml,來實現(xiàn)中間位置的定位
事件分發(fā)機(jī)制流程講解,以及如何實現(xiàn)單擊事件和長按事件的判定
關(guān)于為什么選用mqtt協(xié)議的問題,優(yōu)勢,原理等等(沒答上來,只說針對性做過測壓,以及oceanlink和mqtt的對比)
自我介紹,優(yōu)缺點的,以及未來希望的發(fā)展方向
目整體介紹,如何做到分壓啊之類的問題
如果給我阿里、騰訊、頭條、谷歌的offer的一個選擇(不摻雜地域性的問題),首先直接否定了google我就的一個企業(yè)的商業(yè)模式進(jìn)行分析。
我對釘釘這個產(chǎn)品的理解,我的回答是就的是釘釘前身的對標(biāo)項目微信,已經(jīng)后期轉(zhuǎn)型的商業(yè)模式作出的分析,最后給出的我的結(jié)論是一個企業(yè)性質(zhì)的辦公軟件
給出了釘釘一個mac平臺的關(guān)于共享屏幕的耗CPU的問題
讓我提問,提的是關(guān)于音視頻發(fā)展方向的問題,具體是一個發(fā)展空間。
自我介紹唄,還是一樣,項目介紹,項目的優(yōu)缺點對比
對MVC和MVP的理解,還有Handler的內(nèi)存泄漏問題具體是什么,解決方案知道有什么,空數(shù)據(jù)的時候Handler的阻塞問題,但是我還是沒在Looper的源碼中找到,這里讓我好好再看一下。
另外為什么使用MVP,他的優(yōu)勢是什么,內(nèi)存泄漏是什么樣的。
http的長連接和短連接這兩個概念,怎么去理解。我把它理解為持久化連接是什么,然后對http的3個版本的主要區(qū)別做一個介紹
http一整個流程,什么Baidu.com輸入,經(jīng)過了什么。比較簡單的問題了,必答內(nèi)容DNS、TCP的三次握手、四次揮手,當(dāng)然我再答一些IP路由、鏈路還有物理層的內(nèi)容
RecyclerView的一個復(fù)用機(jī)制,和ListView的一個區(qū)別在哪里
HashMap、ConcurrentHashMap、Hashtable的問題,數(shù)據(jù)結(jié)構(gòu),線程安全啊之類的問題了,當(dāng)然還是考了version 1.7和1.8。
一個app的啟動流程,冷啟動和熱啟動,我說底層我不太了解,只知道會有AMS去調(diào)一些東西,但是具體內(nèi)容不知道,后面就是一些初始化和Activitiy生命周期問題了。
一到算法題三值之和求目標(biāo)值,沒寫暴力,因為大家都會寫,但是浪費了很多時間,剛開始是通過二值求和的方式,但是想做成O(n),其實不太可能,后面改成了O(n^2)
字節(jié)跳動 -- 抖音部門
接口和抽象的理解
進(jìn)程和線程的理解
各種單例創(chuàng)建的理解,以及DCL的同步機(jī)制為什么這么做,其他的設(shè)計模式知道的,以及應(yīng)用場景。
MVP和MVVM的理解,P層它主要做什么工作,你如何實現(xiàn)的M、V、P三層的通信。
Handler的工作流程,Handler能否在子線程初始化以及用什么方案來替代Handler的在子線程初始化。
JVM的組成成分,以及你對四大引用的理解
四大啟動模式的啟動方式以及場景分析,如過一個按鈕對應(yīng)頁面跳轉(zhuǎn),如何點多次只進(jìn)行一次跳轉(zhuǎn),兩種方式回答
對http和https的理解
Broadcast和LocalBroadcast他的一個區(qū)別
Static變量他的用處是什么,具體應(yīng)用場景。
一道兩個鏈表的相加問題。思路+偽碼實現(xiàn)(這里和阿里不一樣,因為是牛客的平臺,其實編碼體驗沒有特別好,面試官讓我用偽碼來實現(xiàn)思路就可以了)
字節(jié)抖音二面(面試時長70min)
先自我介紹,問項目,老樣子的MVP、MVC的理解,Handler中的內(nèi)存泄漏
重點要講Handler的內(nèi)存泄漏,為什么會引起內(nèi)存泄漏?(源碼角度分析)解決方案有哪些?(說了三種)
為什么我的庫中的MVP要基于范型實現(xiàn),實現(xiàn)思路,還有泛形擦除(主要說了公共邏輯抽離這一塊的內(nèi)容)
對View自定義的一個了解
基于對網(wǎng)盤的理解,讓我分析上傳、下載這兩塊的內(nèi)容,讓我來做,會做什么樣的處理,啟發(fā)內(nèi)容見下文:
關(guān)于上傳方面:定時上傳和立刻上傳兩方面的分析,針對的是數(shù)據(jù)量的大小
關(guān)于下載方面:線程安全(voliate / sync),線程池的使用,參數(shù)理解等等,斷點重傳的問題,應(yīng)該怎么去進(jìn)行實現(xiàn)。
還有整個的如果Activity突然斷了,或者被kill了,如何對數(shù)據(jù)或者下載的位置進(jìn)行保存
ButterKnife原理實現(xiàn)
一道深度遍歷和公共節(jié)點尋找的題(給出了復(fù)雜度極高的方案,面試官給了好的方案,但是問題停留在了公共節(jié)點尋找)
字節(jié)抖音三面(面試時長70min,有概率通,要等hr)
問了項目架構(gòu),覺得項目有什么樣可以升級的地方
泛型擦除,通配符的問題,主要做了extends和super的回答
從哪里了解的
objectBox,和greenDao相比覺得他有什么樣的優(yōu)點,性能有進(jìn)行過測試嘛(只看過官方數(shù)據(jù)),圖像加載框架的選用。從內(nèi)存泄漏問題推倒到j(luò)vm的深層次問題,可達(dá)性分析的
GC Root有什么,虛擬機(jī)棧和堆的關(guān)系,方法是怎么實現(xiàn)的。問我覺得自己的優(yōu)勢是什么,說了我對一些框架的理解
對
Kotlin和Flutter的一個了解程度的理解,還有為什么學(xué)習(xí)的一個現(xiàn)實原因,和學(xué)習(xí)方法。數(shù)學(xué)題了,類似于斐波那契數(shù)列,但是關(guān)系式還沒推倒出來。
用循環(huán)的方式去實現(xiàn)一個先序遍歷,說的一些方案不用寫代碼。
以上就是釘釘和抖音的面試經(jīng)歷,如果有什么我沒有思考到的地方或是文章內(nèi)存在錯誤,歡迎與我分享。
最后
還需要在平時把自己的基礎(chǔ)打扎實,這樣不論面試官怎么樣一個知識點里往死里鑿,你也能應(yīng)付如流啊~
推薦閱讀
? 耗時2年,Android進(jìn)階三部曲第三部《Android進(jìn)階指北》出版!
? 『BATcoder』做了多年安卓還沒編譯過源碼?一個視頻帶你玩轉(zhuǎn)!
BATcoder技術(shù)群,讓一部分人先進(jìn)大廠
大家好,我是劉望舒,騰訊云最具價值專家TVP,著有暢銷書《Android進(jìn)階之光》《Android進(jìn)階解密》《Android進(jìn)階指北》,蟬聯(lián)四屆電子工業(yè)出版社年度優(yōu)秀作者,谷歌開發(fā)者社區(qū)特邀講師,百度百科收錄的技術(shù)專家。
前華為面試官,現(xiàn)大廠技術(shù)負(fù)責(zé)人。
想要加入 BATcoder技術(shù)群,公號回復(fù)BAT 即可。
為了防止失聯(lián),歡迎關(guān)注我的小號
微信改了推送機(jī)制,真愛請星標(biāo)本公號??
