先說一下個人狀況,8月被導員通知優研資格沒有我,開始準備考上交819,9月華爲大規模秋招,第一批集招offer拿到,拒了,以後學姐給了白金碼,選擇放棄考研全力備戰字節面試,準備了一個月,10.13面試,三輪面完,10.19收到offer call秋招結束,在此期間拿到360和keep的offer,可是我都拒絕了,由於個人目標很明確!字節跳動,不面試上不罷休,其實騰訊,頭條待遇都不錯,可是年少輕狂,結果愣是面了9面纔拿到字節跳動offer!java
這篇文章就講一寫我9面字節跳動的面試經歷!android
1. 介紹項目,講述一下實習的工做內容和感想(~10min)git
2. 什麼是內存泄漏,Android裏有哪些內存泄漏的場景,緣由是什麼程序員
3. JVM的GC過程,GC的算法都有哪些github
4. 進程和線程的概念,Android裏怎樣實現多線程?(Thread Handler AsyncTask IntentService等等)面試
5. Handler的原理和使用算法
6. Handler是怎麼和線程綁定的(Looper),爲何Looper.loop()要設計成死循環數組
7. Java的幾種內部類,區別是什麼緩存
8. Activity的生命週期和啓動模式微信
9. 寫題:二叉樹的右視圖(層序遍歷便可)
一面比較短,問的問題也比較基礎,大概30分鐘後開始二面
1. 自我介紹
2. 介紹項目,爲何要自學安卓(~5min)
3. Android如何實現多進程,應用場景是什麼(答的很差)
4. Android的IPC機制(Binder)是否瞭解(答的也很差)
5. 如何用兩個隊列(FIFO)實現棧(FILO)
6. HashMap和HashTable區別,HashMap原理和實現,hash()的算法
7. 若是本身設計hash算***怎麼設計,爲何(答的素數取餘)
8. String的hashCode()和Object的hashCode()
7. 虛擬內存和物理內存的概念和關係,內存分頁的調度算法
8. 怎麼實現LRU緩存(參考leetcode T146)
9. 能夠本身寫一個java.lang.Object類嗎,系統會加載哪個
10. Java裏泛型的實現
12. Java里加鎖的方式,synchornized關鍵字的原理,悲觀鎖和樂觀鎖都有哪些實現
13. 死鎖的條件和解決方法,講講銀行家算法
14. TCP的三次握手四次揮手,爲何要四次揮手
16. 怎麼解決用戶高頻點擊打開新Activity致使的多實例問題(Activity啓動模式)
17. 怎麼判斷兩個無環單鏈表是否相交
18. 寫題:leetcode 445
19. 反問
二面問題量很是的大,集中在Java/OS/算法,但並無特別難以回答的問題,認真準備的話大部分都能答出來。面試官也很是友好,給了不少引導和提示。
由於三面面試官的時間問題,約了兩天後的三面
1. 自我介紹
2. 介紹一下實習作的工做,是本身完成的嗎,遇到什麼困難,成果怎麼樣
3. RecyclerView怎麼實現的item緩存,跟ListView有什麼區別(由於項目用到了因此被問了)
4. 寫題:leetcode 1233
5. 設計題:微信的聯繫人列表功能
(1)設計添加聯繫人的API(從可能的方式,數據形式,接口參數方面回答)
(2)怎麼實現聯繫人列表的UI(答的RecyclerView)
(3)怎麼實現A-Z首字母的快速定位功能
6. 是自學的Android嗎,爲何選擇這個方向,有沒有什麼經驗給一樣想自學的學弟學妹
7. 是哪裏人,爲何想到上海來就業
8. 反問
三面的問題很少,不過由於多數問題沒有標準答案,難度其實高於一二面
主要問java,以及虛擬機,問了一點android
1.實習項目有關的介紹以及問題回答
2.反射與代理的區別,動態代理,靜態代理,兩者的區別,以及代理模式的UML圖
3.字節碼技術
4.虛擬機的雙親委派,以及好處
5.虛擬機棧的做用,以及什麼狀況下會發送Stack Overflow
6.誰能作GCRoot,爲何計數法不如可達性好
7.爲何要分新生代和老年代,如何區分
8.GC算法都介紹一下
9.類加載的過程,方法區中存的是什麼,類型信息都包括什麼,如何判斷兩個Class是否相等。
10.HashMap的put方法講一下,講一下如何擴容,講一下一個類做爲HashMap,要實現哪些方法,equals和hashCode有什麼區別和聯繫
11.消息機制講一下,講一下ThreadLoacal,講一下Handler處理信息有什麼方法(除了handleMessage還有什麼),MessageQueue是否有長度限制,android中Message多很少?
12.Activity A到Activity B跳轉的一個生命週期的過程
13.Activity A(standard模式)跳轉到B(單例模式),B再跳轉到A,此時返回,會出現什麼狀況
14.InVisible和Gone的區別,Gone和ViewStub的區別
15.字符串第一次出現一個的字符
計算機網絡相關
1.osi七層架構,物理層作什麼的
2.輸入網址以後發生的一些列事情
3.DNS用了什麼協議,具體是怎麼作的
4.TCP的三次握手,以及流量控制
5.HTTP報文裏有什麼
6.HTTP與HTTPS有什麼區別,加密算法是什麼
7.HTTP的響應碼有哪些?
8.get與post的區別
9.兩個有序數組,找到中位數
深刻android方面以及實習經歷
1.實習項目有關(包括一些具體實現,以及一些關鍵問題)
2.LayoutManager的做用
3.RecyclerView用的多麼有哪些瞭解,如何去實現雙層瀑布
4.如何去設計一個SDK(不少細節的問題)
5.撲克牌,抽五張是同花的機率,抽五張是順子的機率
6.RN以及Redux的瞭解,好處,以及使用,以及工做中對於android和RN的比重
7.單例模式的好處,那麼何時不去用單例呢?
8.SP的內部實現瞭解麼?如何實現的序列化
9.瞭解注入麼?
字節跳動,一共面試了3次,一共六面,總算是拿到了Offer!
最後面試字節跳動的時候一個就是三面的面試官是我 leader,他當時問我,若是給你一個兩個星期才能作完的活,你想怎麼辦。我說,先跟您商量一下,表達一下本身的觀點,若是您堅持安排給我,我就加班唄。。。還能咋整。。。。直到作完唄。。。。他噗嗤一下就笑了。。。他問了我這個問題,我就知道他是 leader了。並且我以爲可能就是這個問題救了我。說實話我自己就是比較耿直的山東漢子,我以爲加班沒啥, leader也可能比較喜歡我這種耿直的,因此撈了我。很感謝本身的性格給了本身機會。
另外一個問題爲何要拒了華爲。其實華爲給我開的工資算不錯的了,除了hr讓我有點以爲本身被瞧不起了,主要的緣由是面試太水了,讓我以爲進去的人水平都不會很高,而後就不想去了....我一直堅信,只有在高水平的環境裏才能得到更大的成長。固然華爲仍是很強的,我很但願過幾年能跳華爲去。。。。
改變人生,沒有什麼捷徑可言,這條路須要本身親自去走一走,只有深刻思考,不斷反思總結,保持學習的熱情,一步一步構建本身完整的知識體系,纔是最終的制勝之道,也是程序員應該承擔的使命。
以上進階大廠面試題以及系統學習資料能夠免費分享給你們,須要完整版的朋友,點這裏能夠看到所有內容。