這裏簡單說一下我的個人情況:
本人本碩985軟件工程,17年畢業後在TP-Link做過接近一年的安卓開發,後來才辭職考研回母校繼續提升自我。原本是打算找一份算法的實習,但今年算法崗的形勢不容樂觀,競爭激烈。所以在2月初決定把重心放在開發上,做自己喜歡的安卓,然後就開始投遞簡歷了。
2月初的時候很多大廠都還沒開始招聘暑假實習,我就在牛客網上找大廠的內推貼來看,當時字節跳動每天都有十幾個內推貼,甚是瘋狂!我就找了三四個字節的內推郵箱發去了自己的簡歷。大概2月7號發的簡歷,10號就收到了來自北京的HR約面試的電話,郵件中給的是牛客的視頻面試鏈接。然後14號連着一面二面,完了直接電話約三面,16號三面完,當晚8點收到了HR的Offer Call。(三次技術面)
由於疫情的原因,字節跳動的崗位base北京又太遠了,去到要隔離14天。想了很久,大概到了3月3號決定投一下base深圳的騰訊,4號官網投遞了簡歷,然後約了9號一面,接着12號二面,當晚三面的面試官加了QQ,約了15號三面。接着17號HR面,最後19號晚上8點順利收到HR的Offer Call。(三次技術面 + HR面)
字節跳動 - 安卓開發崗
一面(45min):
1. Activity的創建流程與原理(OnStart、OnCreate、OnResume等)
2. Handler的原理(Handler、Looper、MessageQueue等)
3. View的繪製過程(OnMeasure、OnLayout、OnDraw)
4. Binder機制以及原理(binder驅動、共享內存等)
5. 談談設計模式(23種設計模式,MVC和MVP的區別)
6. 談談對操作系統中的進程的理解
7. 操作系統中有哪些跨進程通信(IPC)的方法(信號量、管道、共享內存等)
8. 講講Java中類的加載過程
還有一些問題遺忘了,最後是做一道編程題,二叉樹查找相關的,用遞歸完成了。
二面(60min):
1. TCP三次握手原理及細節,談及爲什麼不能兩次握手的原因
2. ShareReference的用法和原理
3. Java垃圾回收的過程
4. 內存泄漏問題(Java中static引起的內存泄漏問題等)
5. JVM內存管理相關問題
6. 智力題:兩個骰子(6面)如何表示2月全部日期
還有一些非常難的Java方面的問題遺忘了,編程題考查二叉樹Z字型遍歷,不能用STL庫。
三面(30min):
1. Activity的創建原理,談及ActivityManagerService偏Framework層的理解
2. 談談WindowManagerService的工作機制和原理
3. 談談讀過哪些開源的安卓庫源碼
4. 數學題:兩個人輪流投擲硬幣,規定正面贏,正反面各50%概率,計算先投的人獲勝的概率(用級數去解決)
5. HTTP和HTTPS原理,區別,各自的優勢
6. 談談對token的理解
這次面試沒有編程題,很簡短但是較爲嚴肅,前兩次氣氛都較爲輕鬆。
HR電話(10min):
簡單聊了一下以前的工作經歷和學習經歷,爲什麼辭職考研,對未來的職業規劃,然後就介紹公司的待遇和福利等等,發了口頭Offer,三天後郵件正式Offer。
騰訊 - 移動客戶端開發崗
一面(60min):
1. 自我介紹後直接聊起了以前在TP做過的兩個項目。第一個項目問到了設計模式中MVC和MVP的區別,ListView和RecyclerView的區別,如何用ListView實現RecyclerView等同的效果;第二個項目比較大,當時代碼量有三千行左右,從Framework層到應用層都有涉及,然後問到了跨進程通信,一個大的數據包跨進程通信中如何保證安全(拆包、安全校驗等)
2. Java的類型擦除
3. HashMap的原理(哈希映射、衝突解決的方法等)
3. 安卓的一系列基礎問題
這次面試非常注重過往項目的經驗,還有些問題遺忘了,編程題兩道:中序和後序推導出前序(二叉樹遞歸完成)、給出一個鏈表刪除倒數第五個節點
二面(60min):
1. 談談對Handler、Looper的理解,他們倆的數量關係
2. Java中內部類和靜態內部類的區別
3. Java的泛型擦除問題(因爲一面沒答好,二面又重新拿出來問我了,還好我提前準備過)
這次面試非常注重基礎知識的考察,當然有很多問題遺忘了,編程題是:數組中每個值看作一棟樓的高度,站在數組中的一個位置求前後能看到的樓的數目(高樓擋在前面會看不到後面的樓)
三面(1h20min):
1. 談談以前自己的學習方式,有沒有讀書做筆記的習慣或者寫技術博客的習慣等
2. 談談以前在學校做過的項目(本科做過兩個科研項目,NLP、EEG,我都分別詳細講了)
3. 談談之前在TP工作的項目,每個項目的時間分配和具體流程,包括技術細節,以及遇到的比較困難的問題,還有自己的成長
4. 談談Activity的原理,生命週期(面試官希望我答出Native層的原理,雖然我讀過安卓源碼的書籍,但當時一緊張就答得不太全面)
5. 廣播的收發過程,如何做一個有序廣播
6. 談談對四大組件的理解
7. 講一下HashMap的原理(爲什麼到了8個節點就變成紅黑樹)
8. 以前做過哪些優化相關的工作
9. 談談webview的原理和通信機制
10. 概率題:x%的人喜歡籃球、y%的人喜歡排球、z%的人喜歡足球,問同時喜歡籃球和排球的人是多少
這次面試從家庭背景學習情況問到過往項目,再問到基礎知識,真的細緻入微哈哈~當然還是有些問題遺忘了,中間還問了能過來實習的時間。最後編程題是:兩個超大的字符串文件,求他們的最長迴文子串,要求不能調用庫(當時用動態規劃完成,但是時間複雜度爲N^2,其實用馬拉車算法可以降低複雜度,但當時我並沒有練過,所以就把代碼交上去了)
HR面(30min):
1. 首先自我介紹一下,談談能過來實習的時間
2. 辭職考研的原因
3. 考研之後的半年做了啥(當時我在研究生入學前實習了一下)
4. 講講之前在TP工作的成長
5. 談談本科到現在的學習方式(在學習課本知識的過程有沒有自己打代碼實現demo之類)
6. 研究生階段學習成績如何,排名什麼位置
7. 上學期參與了實驗室的什麼項目,具體負責什麼
6. 談談自己的優缺點
8. 相比其他實習生,覺得自己比他們的優勢的地方
9. 談談之前面試的三個面試官,逐位評價一下
10. 上一份TP的工作是校招的嗎?當時還有沒有面試其他公司?當時面試公司這麼少是處於什麼考慮的?
11. 現在實習還有沒有找別的公司,有沒有拿到其他公司的Offer(這裏我如實說了字節跳動的Offer)
12. 對比騰訊和字節跳動,談談自己的想法,會如何做選擇,選擇的原因是什麼
13. 最後,覺得騰訊爲什麼需要你?
總結和給各位同學的建議
無論是本科生還是研究生,實習生還是正式工作(社招除外),面試永遠考察的都是基礎!所以萬變不離其中,好好複習計算機學科相關的基礎知識,特別是常問的那一系列問題,每次面試完立刻覆盤,查缺補漏。不要害怕失敗,每次的失敗都會換來一段成長,這是非常寶貴的~然後編程題,平時花些時間上牛客或者leetcode刷一下題就好了。
面試的時候,保持自信心,回答問題不要着急保證思路清晰。然後對每個問題都誠實回答,不會的不能裝懂,可以謙虛請教面試官。最重要的是,堅定自己的目標,不要因爲一兩次的面試失利就影響到自己的情緒和狀態,不斷的總結失敗的原因,總有一天會收到心儀公司的Offer。祝各位學子2020年學業進步,Offer收到手軟!