看著我同學最近也在到處投簡歷,我想著我也投一下看看行情,于是在2022-02-28號,我向B站投出了第一封簡歷,說實話當初只是想練練手,沒想到最后接了B站的offer,也是造化弄人了
一面
技術面,45min左右,基本圍繞你簡歷上寫的亮點和你的工作經歷展開
1、自我介紹
2、你在項目中負責什么
3、用過什么設計模式,或在Android中常常會碰見的設計模式
單例模式,策略模式,責任鏈模式(問了一下使用場景),工廠模式等
Android中的觀察者模式,適配器模式等
4、有沒有做過什么比較有難度的模塊
camera2,自定義照片裁剪View
5、你對自定義View有什么了解
回答了一些Path繪制以及觸摸事件的處理
6、Android動畫
屬性動畫,ObjectAnimator
7、多線程并發(鎖、信號量、syncnorized),syncnorized對象和class有什么區別
ConcurrentHashMap
線程安全的原理 1.8之前用的分段式鎖,1.8之后用的synchronized
,至于具體的細節沒有答上來,因為確實也沒看過這邊源碼
8、jni,如何定位jni崩潰
這個我當時回答的是打log,因為項目中用到jni的地方確實不多,當然jni也是可以斷點調試的
9、你所開發的應用有多進程嗎?進程間是怎么通信的
這個我當時只回答了mmap,稍微聊了一下mmap原理和binder性能對比,后來復盤想起來項目中用到的Broadcast和aidl binder通信都沒有回答
10、Webview和native怎么交互的
onUrlLoading攔截Schema
注冊js方法(addJavascriptInterface)
11、Android編譯打包過程
aapt -> class -> dex -> 簽名
12、插樁
ASM插樁,字節碼操作
13、性能監控
因為我之前做過一個性能監控庫,cpu和mem使用TOP命令解析,Anr通過給MainLooper
設置Printer
14、LeakCanary原理
WeakReference + ReferenceQueue
,加了一些改進點:new一個弱引用的Object,等這個Object確認被回收后再確認Activity是否正常被回收
15、Jetpack Compose
稍微談了一下看法,是否在項目中用過
16、算法題:最長公共前綴
LeetCode 14題,easy難度:leetcode-cn.com/problems/lo…
二面
一面結束后5min左右,B站HR就給我打電話過來約了二面 二面也是技術面,20min左右,因為是晚上8點面的,估計人家急著想下班(笑)
1、自我介紹
2、工作職責
- 工作中有什么亮點
- 拍照裁剪業務
- 單元測試庫
- 性能監控
- 內存泄漏檢測
3、單元測試的庫是怎么做的
基于Mockito和Robolectric:
- 封裝了一個反射庫用來方便測試
- 做了一個AutoCloser類用來自動關閉釋放mock的資源,這里提到了使用MockedStatic,如果在使用完后沒有釋放,那在下一次使用到同一個類的MockedStatic的時候會報錯,這里我自定義了一個注解@MockedStatic用來自動mock和釋放資源
- 針對kotlin做了一些mock工具,比如說頂層函數的mock(這個在我以前的文章Android-Kotlin單元測試之 如何配合Mockito模擬頂層函數中介紹過)
4、開發模式(流程規范):
開發規范參考了阿里的Java規范和Android規范,選取了一些比較重要的條例和一些自己長時間開發的經驗做成了一篇文檔
5、崩潰率的優化,做了哪些事情
感覺這里沒答好,有點答非所問的意思,我就說了說目前處理bug的一個流程,沒有談到怎么解決一個bug
6、數據打點是怎么做的
我們用的是神策第三方服務
7、內存泄漏工具是怎么做的
這部分同一面LeakCanary原理
8、看你之前做過一個MQTT協議的客戶端,是出于個人興趣嗎
是的,當時是想要做一個IM應用
9、在項目中有遇到需要3D渲染展示的內容嗎
目前沒有
10、兩個Activity跳轉時方法執行的順序
一個Activity創建是:onCreate -> onStart -> onResume
(之后便在屏幕上顯示了) 假設從A Activity跳轉到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、兩個Activity傳遞數據可以通過什么方式
- Intent
- 如果是同一個進程的話,可以用全局變量或者單例等
- SharedPreference
- 文件
12、什么時候使用Service
后臺任務,比如說后臺播放音樂等,這里提了一下IntentService是開了一個子線程的
13、Service怎么啟動,怎么停止
startService <---> stopService
bindService <---> unbindService
14、包體積優化
清理資源(字體、圖片、代碼等)
HR面
二面結束后過了2-3天,HR發微信過來恭喜我進入下一輪面試,我問她接下來是還有三面和HR面嗎,她回答我說后面就直接是HR面了,說實話我還是挺驚訝的 HR面15min左右,大概就問了一下,為什么要從上家公司離職,我們是一個新部門,處于項目初期,有什么看法之類的,然后問了一下目前的薪資和期望薪資,over~
總結
說實話感覺這次面試太簡單了,有點白瞎了我準備了那么多,還做了查漏補缺 ㄟ( ▔, ▔ )ㄏ ,最后祝大家都能找到心儀的工作 (??????)??