今年小紅書這邊發完年終獎之后,心里隱隱覺得要出去看看機會,因為在小紅書這邊已經呆了快三年了,對于一些技術,業務總覺得有點麻木了,內心里總覺得自己啥都會了,但是很多只是知道個皮毛。
有句話是這么說的,一個人在一個地方待久了,內心里以為他所處的這個環境就是全世界,所以想著做些改變,不管結果如何,至少讓自己走出舒適區,同時也想著能去大廠看看。
其實大家也不能特別迷信大廠,認為加入大廠就沒有后顧之憂了,只能說目前對我現在這個階段來說,加入大廠刷一下自己的大廠背景這個對于自己當下來說還是有益的。
一開始也是不確定到底要不要出去看機會,一個是因為疫情,另一個是內心里總覺得沒有準備好,其實很多事情在你開始行動的時候就沒有那么多顧慮了,就像很多人在學生時代考試時一樣,永遠都會覺得自己沒有復習好,但勇敢地邁出第一步,后面基本就沒啥可恐懼的了。
自己這段時間主要就面試了三家公司吧,字節,騰訊和阿里,但經歷的面試場次感覺有十來場了,有的對應的是同一公司的不同業務吧,字節面的兩個業務部門都失敗了,騰訊那邊QQ音樂團隊給了Offer,阿里這邊也給了Offer,說實話,面試還是蠻累的,于是后面其他的公司也沒有再嘗試了。
字節
最開始面試的是字節在上海這邊的在線教育部門,這算是自己今年的第一次面試吧。
由于當時是處于一個基本沒有啥準備的狀態下面試的,最早是由于之前同事海哥幫忙內推的,我一開始的時候也是有點沒想好是不是要面試,但因為海哥說了幾次,索性我就面面看看吧,因為自己這個時間點基本是沒有怎么準備,所以面試答的不怎么好,另外就是字節對于算法比較看重,我當時算法題沒些出來,所以這一面基本就沒有后續了。
這次主要問了以下幾個問題,都是我面試完通過記憶記錄下來的。
首先是自我介紹吧,介紹之前的一些經歷和項目
- 做過哪些app的性能優化
- 使用什么工具進行內存分析
- 講講事件攔截機制
- 對于網絡的理解,http和https的區別
- 講講對于UI的理解
- 安全,怎么保證安全,除了網絡層的安全,app其他地方如何保證安全
- App為什么要簽名
- 算法題,最大區間問題 已知一天內用戶登錄登出的日志(數據量較大),求這一天用戶在線的最大峰值和持續時間段 日志包含字段(userid, login_time, logout_time) 登錄登出時間精確到秒
從這次我也還是懶懶散散地在準備中,可能面試失敗對我并沒有產生多太多觸動。
這次面試沒有后續之后,后來字節這邊有個安全的團隊也說是要和我聊聊,這次面試的時間是在周六,當時一共進行了兩場面試,為什么是安全團隊呢,因為他們看我的簡歷發現我是信息安全畢業的,但是說句實話,學校里學的那些關于信息安全相關的知識離工程實踐還是有點遠的,所以這次面試我基本上都是全程懵逼狀態。
下面列舉的是這次面試的一些問題:
- bindService的流程
- 應用雙開的機制
- 第三方的權限攔截
- 自我hook
- gps的定位模擬
- imei號的偽造
- socket通信 JNI 輸入
- WebView的讀文件flag在4.4是否開啟
- Android中的網絡通信方式有哪些
- IPC的方式
- 廣播實現IPC方式的話有什么安全隱患,需要注意什么
字節這邊后面還面過抖音的上海部門,這會已經是后面了,因為這時基本已經拿到騰訊的Offer了,阿里這邊也還在面試流程中,所以就想著面面看看情況,這次是一個之前的同事的同事幫忙內推的,這里同樣列舉下問的問題:
- 問了我簡歷中做的那個吸頂效果,怎么實現的
- 對象的創建的流程
- 事件分發的流程
- OOM發生在哪些區域
- 方法區加載的類是否會被GC
- startActivity的流程
- 開機啟動的流程
- RN的工作原理
- fluter了解嘛
- RN有些時候為什么有留白
- 包體積優化
- Android的系統架構
- 小紅書首頁過渡嚴重,過度繪制的解決
- 優化做過哪些,數據是怎么樣的
- 小紅書筆詳的引導是怎么做的
- Android為什么有多進程,單進程都沒有多進程通信的問題了,不挺好的嘛
- 雙指按下去一個View不抬起將View滑出屏幕這個流程是怎么樣的
- yogo是干什么的
- litho的原理是什么
- 指定start和end位置的鏈表的翻轉
相對來說,我覺得抖音的這次面試有些問題問的還是比較有難度的,加上我后面給了個算法題也還是沒能寫出來。所以基本上后續也沒有消息了,唉,感覺自己還是太菜了。字節每一輪面試都會問一個算法,對于算法的考察應該算是大廠里面比較嚴格的。
騰訊
后面有個獵頭說是微信那邊要招人,說是機會不錯,于是我決定試試。當時想著就當增加增加面試經歷吧。
后面獵頭推薦后,廣州那邊有個人打電話過來說是要進行電話面試。我當時其實關于算法這一塊還是沒怎么復習,于是這次微信的面試直接上來就是筆試,我記得是5道算法題,還有一個關于多線程的編程問題,要求45分鐘內完成。
大概的題目如下:
題目1(算法):給出n(n>=1),請把1,2,...,n,最小分成m組,使得每組內的數字都互質,求m值。例如n=7,可最小劃分成3組,{1, 2, 3}, {4, 5}, {6, 7}
int findmin(int n) {
// TODO
}
題目2(算法):給定一個遞增循環整數數組,從里面找出最小的元素,使用的算法越快越好。特別地,最小的元素可能出現在數組中間。比如:50, 52, 63, 90, 3, 8, 15, 44。
class Problem2 {
int findmin(int[] arr) {
//TODO
}
}
題目3(算法):在二叉排序樹上面找出第3大的節點。注意:不能把二叉樹全量存儲到另外的存儲空間,比如存儲到數組中,然后取出數組的第三個元素。
class TreeNode {
int value;
TreeNode left, right;
};
class Problem3 {
TreeNode find(TreeNode root) {
// TODO 請完成實現部分
}
}
題目4(語法):用Java語言實現System#arraycopy數組拷貝,注意:不能直接使用System.arraycopy
class Problem4 {
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) {
// TODO 請完成實現部分
}
}
題目5(多線程):閱讀下面代碼,在2線程環境下,設計一個方案,判斷無限數據流(Stream)每個正整數是否素數,越快越好
interface Stream {
long get(); // 獲取下一個需判斷的整數
void put(boolean result); // 返回整數是否素數的結果
static boolean isPrimeNumber(long num) { // 判斷一個整數是否素數
if (num < 2) return false;
for (long i = 2, s = (long) Math.sqrt(num); i <= s; i++) {
if (num % i == 0) return false;
}
return true;
}
static Stream getInstance() {
try {
return (Stream) Class.forName("StreamImpl").newInstance(); // 運行環境保證不會異常
} catch (Exception e) {
return null;
}
}
}
//比如:Stream={1,2,3,4,...}, Result={false,true,true,false,...},注意輸出順序。
public class Problem {
private Stream stream = Stream.getInstance();
public static void main(String[] args) {
Problem instance = new Problem();
new Thread(() -> {
while (true) {
try {
instance.thread1();
} catch (InterruptedException e) {
}
}
}, "thread1").start();
new Thread(() -> {
while (true) {
try {
instance.thread2();
} catch (InterruptedException e) {
}
}
}, "thread2").start();
}
public void thread1() throws InterruptedException {
// TODO 請完成實現部分
}
public void thread2() throws InterruptedException {
// TODO 請完成實現部分
}
}
因為之前沒準備,我當時連二叉搜索樹是有序的這個概念都忘了,把二叉搜索樹當做普通的二叉樹去處理了,感覺當時在45分鐘過后,面試官操著一口廣東味的普通話來我和溝通的時候,讓我當時有種直接掛斷電話的沖動,總之,就感覺這次面試體驗很不好,讓我有種想去撞墻的沖動。
也是從這個時候開始,開始意識到要好好準備算法,不然真的是沒有繼續面下去的必要。
微信這邊的面試基本沒有后續了,答得這么差,有后續才怪咧。
后面我的簡歷應該是被收到騰訊的人才庫里去了,于是有深圳那邊的業務開始打電話給我說是要面試。
一開始是深圳的一個做SDK的部門,和我進行了一次騰訊會議的視頻面試。這次基本就是聊技術,這個面試官對我的評價不錯,主要聊了聊我在小紅書做的一些東西和自己平時做的一些技術沉淀,然后問了一些Android相關的技術問題,覺得我的表現不錯,但是因為他們是做SDK的,和我這邊的經歷不是特別匹配,面試官當時也直接說了可能不是特別匹配,但是他說會在面試反饋中給予我比較好的面試評價。
可能也是因為這個原因,后面我的簡歷又被騰訊的其他業務部門撈起來了。
首先是手機QQ團隊,一面面試官問的都是一些Java和Android 基礎問題,但是問的比較多,基本上各個知識點都問到了一些。
一面基本上問了下面一些問題:
做過哪些內存優化
內存抖動,如何定位內存抖動
view移動用動畫實現有哪些方式
自己實現區域解碼,decodeFileDescriptor
scrollto 和 scrollby 的區別
內存泄漏如何分析
mvc,mvp和mvvm的區別
mvvm的缺點是什么,mvvm為啥不用DataBinding,不用DataBinding怎么實現雙向綁定
leakcanary 的原理
事件沖突如何自己解決
RecyclerView和ListView的區別
Service和IntentService的區別
Service如何stop,bindService的方式如何stop
aidl 的原理
多進程通信方式
自己實現過多進程嗎
HashMap的原理是什么
紅黑樹的原理是什么
Handler可以在多個線程里使用嘛,有幾個消息隊列,每個線程的消息是如何發到另一個線程的
aidl 自己寫如何實現
用過哪些設計模式,設計模式
工廠和抽象工廠的區別(因為上面我說在項目中實踐過工廠設計模式,所以他就問了工廠和抽象工廠的區別)
手Q二面是視頻面試,問的問題是比較抽象一點,感覺一般沒有固定的答案。如果不采用改變Bitmap config的這種方式,如何做Bitmap的內存優化
網絡優化怎么做
單元測試
硬件加速的原理,硬件加速是如何工作的
RecyclerView 滑動到item不可見后,這部分內存時是如何回收的
卡頓檢測怎么做,如何上報
寫個死鎖的代碼
假如字符串中所有字符都不重復,如何輸出字符串的所有組合。例如:abc,結果應是a,b,c,ab,ac,bc,abc。
二面答的問題基本沒怎么答好,有的是自己不怎么涉及這些,有些則是對于某些理解不夠深入。其實我覺得這次面試失敗是因為這個幾個問題沒回答好,我能感覺到面試官有種不想繼續聊下去的沖動了,后面則是象征性地出了一道算法題。
接著收到了QQ音樂的面試邀請,這次面了好幾輪,一開始是那邊的HR給我打了個電話,基本就是聊為啥換工作,能不能去深圳這樣,以及在小紅書的工作內容等等。
接著面了好幾輪,兩輪技術面,一輪交叉面,還有總經理面試,最后還有HR面,因為面的輪次比較多,當時對于面試題也沒有特殊整理,不過大概問的問題都是這些東西,和之前的面試問題大差不差。
面到后來QQ音樂這邊算是通過了,給的Offer還可以。
騰訊這邊還面過騰訊視頻的崗位,這個是在自己懶散的情況下進行的,因為基本確定要去哪了,當時就想著漲漲面試經驗啥的。這次面試基本面試完之后我就覺得沒有后續了。下面是問的一些問題:
算法題:輸入[“eat”,”ate”,””tea”,”and”,”den”] 要求輸出“換位詞”,[[“eat”,”ate”,””tea”],[”and”],[”den”]]
- 業務上做的有挑戰性的東西是啥
- RxJava底層進行數據通信的原理
- RxJava和EventBus做通信的區別
- 線程的狀態
- 線程的兩種創建狀態
- 線程池的種類,以及內部是如何管理線程的,什么時候創建,什么時候讓線程運行
阿里
阿里這邊就讓同事認識的一個阿里員工內推了阿里的崗位,這次面的是淘寶下面的一個業務。當時是在差不多拿到QQ音樂Offer的時候開始的,當時也沒有想太多,反正就是想試試,因為當時想的是,拿不到這邊的機會,就去深圳工作去。
阿里的面試一面問的基本都是業務相關的,基本就是講自己在小紅書做的東西和一些Android基礎知識。這幾次面試我也沒有做什么面試題的記錄。
二面上來也是問技術啥的,后來搞了三個筆試題,一個是排序問題,一個是用棧來模擬隊列,還有一個是寫一個小的商品feed流的demo,難度不是特別大,關于問的一些具體的面試題我也忘了,差不多都是那些東西吧。
最后一面是HR和Leader一起的終面,Leader應該是這個業務線的領導,沒有問具體的技術問題,問的都是一些比較開放的問題,阿里的這次面試整體感覺還算順利吧,后面就是算是通過了,給了Offer。
基本上,自己面試比較順利的幾次都沒有記錄下來。關于Offer的選擇,騰訊相對阿里,杭州相對深圳,壓力要小很多,所以決定去阿里,所以就拒了QQ音樂這邊的機會,但是心里還是蠻喜歡這個工作崗位的。
總結
整體說來,這段時間的面試不能算是成功的,很多面試都沒有通過,通過的還有運氣成分在里面吧,這也提醒我自己要學習的東西還有好多吧,尤其自己在算法這一塊還是比較薄弱的,對大多數人來說,算法題這塊沒有啥捷徑吧,就是多刷題吧。
我記錄這些希望能對面試的人有些幫助吧,因為之前很多人讓我寫面經啥的,我也不太清楚怎么寫,就是把一些問題記錄下來吧,如果你覺得有幫助,可以幫忙點贊分享下,感謝。