跳槽助力!B站Android面試小記
大家好,我是劉望舒,騰訊最具價(jià)值專家,著有三本業(yè)內(nèi)知名暢銷書,連續(xù)五年蟬聯(lián)電子工業(yè)出版社年度優(yōu)秀作者,百度百科收錄的資深技術(shù)專家。
前華為面試官、獨(dú)角獸公司技術(shù)總監(jiān)。
BAT?即可。作者:
dreamgyf?地址:https://juejin.cn/post/7077879634326454280
看著我同學(xué)最近也在到處投簡歷,我想著我也投一下看看行情,于是在2022-02-28號,我向B站投出了第一封簡歷,說實(shí)話當(dāng)初只是想練練手,沒想到最后接了B站的offer,也是造化弄人了
一面
技術(shù)面,45min左右,基本圍繞你簡歷上寫的亮點(diǎn)和你的工作經(jīng)歷展開
1、自我介紹
2、你在項(xiàng)目中負(fù)責(zé)什么
3、用過什么設(shè)計(jì)模式,或在Android中常常會碰見的設(shè)計(jì)模式
單例模式,策略模式,責(zé)任鏈模式(問了一下使用場景),工廠模式等
Android中的觀察者模式,適配器模式等
4、有沒有做過什么比較有難度的模塊
camera2,自定義照片裁剪View
5、你對自定義View有什么了解
回答了一些Path繪制以及觸摸事件的處理
6、Android動畫
屬性動畫,ObjectAnimator
7、多線程并發(fā)(鎖、信號量、syncnorized),syncnorized對象和class有什么區(qū)別
ConcurrentHashMap線程安全的原理
1.8之前用的分段式鎖,1.8之后用的synchronized,至于具體的細(xì)節(jié)沒有答上來,因?yàn)榇_實(shí)也沒看過這邊源碼
8、jni,如何定位jni崩潰
這個(gè)我當(dāng)時(shí)回答的是打log,因?yàn)轫?xiàng)目中用到j(luò)ni的地方確實(shí)不多,當(dāng)然jni也是可以斷點(diǎn)調(diào)試的
9、你所開發(fā)的應(yīng)用有多進(jìn)程嗎?進(jìn)程間是怎么通信的
這個(gè)我當(dāng)時(shí)只回答了mmap,稍微聊了一下mmap原理和binder性能對比,后來復(fù)盤想起來項(xiàng)目中用到的Broadcast和aidl binder通信都沒有回答
10、Webview和native怎么交互的
onUrlLoading攔截Schema
注冊js方法(addJavascriptInterface)
11、Android編譯打包過程
aapt -> class -> dex -> 簽名
12、插樁
ASM插樁,字節(jié)碼操作
13、性能監(jiān)控
因?yàn)槲抑白鲞^一個(gè)性能監(jiān)控庫,cpu和mem使用TOP命令解析,Anr通過給MainLooper設(shè)置Printer
14、LeakCanary原理
WeakReference + ReferenceQueue,加了一些改進(jìn)點(diǎn):new一個(gè)弱引用的Object,等這個(gè)Object確認(rèn)被回收后再確認(rèn)Activity是否正常被回收
15、Jetpack Compose
稍微談了一下看法,是否在項(xiàng)目中用過
16、算法題:最長公共前綴
LeetCode 14題,easy難度:leetcode-cn.com/problems/lo…
二面
一面結(jié)束后5min左右,B站HR就給我打電話過來約了二面 二面也是技術(shù)面,20min左右,因?yàn)槭峭砩?點(diǎn)面的,估計(jì)人家急著想下班(笑)
1、自我介紹
2、工作職責(zé)
工作中有什么亮點(diǎn) 拍照裁剪業(yè)務(wù) 單元測試庫 性能監(jiān)控 內(nèi)存泄漏檢測
3、單元測試的庫是怎么做的
基于Mockito和Robolectric:
封裝了一個(gè)反射庫用來方便測試 做了一個(gè)AutoCloser類用來自動關(guān)閉釋放mock的資源,這里提到了使用MockedStatic,如果在使用完后沒有釋放,那在下一次使用到同一個(gè)類的MockedStatic的時(shí)候會報(bào)錯(cuò),這里我自定義了一個(gè)注解@MockedStatic用來自動mock和釋放資源 針對kotlin做了一些mock工具,比如說頂層函數(shù)的mock(這個(gè)在我以前的文章Android-Kotlin單元測試之 如何配合Mockito模擬頂層函數(shù)中介紹過)
4、開發(fā)模式(流程規(guī)范):
開發(fā)規(guī)范參考了阿里的Java規(guī)范和Android規(guī)范,選取了一些比較重要的條例和一些自己長時(shí)間開發(fā)的經(jīng)驗(yàn)做成了一篇文檔
5、崩潰率的優(yōu)化,做了哪些事情
感覺這里沒答好,有點(diǎn)答非所問的意思,我就說了說目前處理bug的一個(gè)流程,沒有談到怎么解決一個(gè)bug
6、數(shù)據(jù)打點(diǎn)是怎么做的
我們用的是神策第三方服務(wù)
7、內(nèi)存泄漏工具是怎么做的
這部分同一面LeakCanary原理
8、看你之前做過一個(gè)MQTT協(xié)議的客戶端,是出于個(gè)人興趣嗎
是的,當(dāng)時(shí)是想要做一個(gè)IM應(yīng)用
9、在項(xiàng)目中有遇到需要3D渲染展示的內(nèi)容嗎
目前沒有
10、兩個(gè)Activity跳轉(zhuǎn)時(shí)方法執(zhí)行的順序
一個(gè)Activity創(chuàng)建是:onCreate -> onStart -> onResume(之后便在屏幕上顯示了)
假設(shè)從A Activity跳轉(zhuǎn)到B Activity:A.onPause -> B.onCreate -> B.onStart -> B.onResume -> A.onStop從B返回到A:B.onPause -> A.onRestart -> A.onResume -> B.onStop -> B.onDestory
11、兩個(gè)Activity傳遞數(shù)據(jù)可以通過什么方式
Intent
如果是同一個(gè)進(jìn)程的話,可以用全局變量或者單例等
SharedPreference
文件
12、什么時(shí)候使用Service
后臺任務(wù),比如說后臺播放音樂等,這里提了一下IntentService是開了一個(gè)子線程的
13、Service怎么啟動,怎么停止
startService <---> stopService
bindService <---> unbindService
14、包體積優(yōu)化
清理資源(字體、圖片、代碼等)
HR面
二面結(jié)束后過了2-3天,HR發(fā)微信過來恭喜我進(jìn)入下一輪面試,我問她接下來是還有三面和HR面嗎,她回答我說后面就直接是HR面了,說實(shí)話我還是挺驚訝的 HR面15min左右,大概就問了一下,為什么要從上家公司離職,我們是一個(gè)新部門,處于項(xiàng)目初期,有什么看法之類的,然后問了一下目前的薪資和期望薪資,over~
總結(jié)
說實(shí)話感覺這次面試太簡單了,有點(diǎn)白瞎了我準(zhǔn)備了那么多,還做了查漏補(bǔ)缺 ㄟ( ▔, ▔ )ㄏ ,最后祝大家都能找到心儀的工作 (??????)??
? 耗時(shí)2年,Android進(jìn)階三部曲第三部《Android進(jìn)階指北》出版!
為了防止失聯(lián),歡迎關(guān)注我的小號
??微信改了推送機(jī)制,真愛請星標(biāo)本公號??

