二本渣渣,抖音被刷了三次,終於拿下offer,還好沒放棄!

Android開發駱駝發表於2020-11-27

寫在開篇

兩句閒話:

2020年已經接近尾聲,疫情還偶有小範圍的爆發,大家出門在外注意做好防護工作,尤其是離家在外工作的朋友們,照顧好自己。

我個人也是離家找工作,因為個人想先去大城市發展,畢竟搞Android的在三線以外的城市是真的很難找到工作,有些公司甚至沒有設Android崗,只有小程式!!!

年輕,就該趁著熱情和拼勁,去外面闖蕩一下,既然是闖蕩,當然要進大廠,位元組跳動的抖音就是我的目標。

一開始的面試也是磕磕絆絆,但是我沒有放棄,繼續投,在被拒了三次後,我終於拿下位元組跳動的offer。前前後後,今年,我在位元組跳動面試了12次。

個人情況介紹:

湖南的一個農村家庭,學歷也是省內普通二本,資歷平平,沒什麼特別的優勢。

上半年海投簡歷後,接到了個別公司的面試電話,但是都是小公司,位元組跳動那邊石沉大海,沒有反應。

後面又投了兩次,還在牛客這些地方找了比較靠譜的人內推了一下,經過了三次面試,終於進入了位元組跳動。

以下主要分享面經和個人學習方法,會包括很多PDF文件,如面試題庫(含答案+解析)、學習筆記、實戰文件和腦圖等等,均可以免費分享,直接點選文件(https://github.com/xieyuliang/BiteDance-Android-Archieture/blob/master)即可領取~

第一面

一面面試官的思維非常跳躍,經常我說到一半的問題,突然詢問其他相關問題,然後回答完再繼續之前的說下去,有些許不適應這個節奏。順序可能不太對。

1.類的載入過程,Person person = new Person();為例進行說明。

2.JVM相關知識,GC機制。

3.類的載入器,雙親機制,Android的類載入器。

4.Android中程式的級別,以及各自的區別。

5.外掛化原理。

6.集合框架,list,map,set都有哪些具體的實現類,區別都是什麼。

7.concurrentHashmap原理,原子類。

8.volatile原理。

9.Binder機制。

10.View的繪製流程,事件傳遞機制,Handler非同步訊息機制。

11.Interger中的128(-128~127),這裡考的是常量池的概念,這個沒回答上來。

12.執行緒池的相關知識。

13.Handler機制,HandlerThread實現等等。

14.LRUCache演算法是怎樣實現的。

就這樣第一面基本結束。一共問了14個問題,其中美團的手寫演算法在業界算是比較出名,很多小夥伴可能卡在手寫演算法上。然後就是一些Android和Java的細節性東西,這些基礎內容只要有1年經驗的都基本能說出個一二三。

第二面

面試官可能沒注意我前面提到過的事情,時間上和別的事情衝突了,不過還好順利的約到第二天上午~

二面面試官感覺專業了很多,問問題也比較靈活。有時候會有點像在懟的打斷然後追問,但是有答得不好的地方也會很耐心的引導

1.寫個快速排序

2.生產者消費者虛擬碼(因為和麵試官思路不同加上緊張,程式碼反反覆覆改了很久,面試官也一直在寫程式碼引導我)

3.順帶講了一下wait() await()這一系列方法

4.如何用陣列實現佇列(直接說抽象的環,但面試官一直在引導細節如何更優化,比如怎麼判斷隊滿,決定插入位置怎麼省去if…感覺面試官真的很耐心)

5.如何用陣列實現棧

6.弱引用,有什麼用?有沒有用過?

7.如果寫一個庫中存在的類,包也一樣,會怎麼樣?

8.提到類載入要確保類的唯一性,怎麼確保?

9.三次握手,為什麼要三次

10.TCP怎麼保證可靠

11.如果包亂序到達會發生什麼

12.程式和執行緒的區別

13.追問程式之間為什麼會相對比較獨立?電腦上看起來執行著很多程式,是怎麼隔離的?

14.如果一個程式需要一直讀寫記憶體,會影響其他程式嗎?(這裡我開始結結巴巴瞎說了…面試官安慰了一下)

15.知道幾種單例模式的寫法?有什麼優缺點

16.Hashmap原理

17.擴容具體是怎麼做的?原本的元素要怎麼放進新陣列?

第三面

  1. 自我介紹

  2. 專案(專案懟了挺久的,一直深挖。建議大家要非常熟悉簡歷上的專案,一些細節也要注意到,這個環節差點被懟哭?)

  3. 有沒有了解過外掛化?外掛化和元件化什麼區別?

  4. Applicatipn Context在什麼情況下不能使用。(面試官提示dialog了我還不會,這個需要重點注意一下)

  5. 載入一張特別大的圖片,該如何操作?(一面面試官也問了這個問題!回答的特別流暢哈哈哈)

  6. 一定要在主執行緒中更新UI嗎?能不能在子執行緒更新?(這個我有一點印象,最後是面試官瘋狂提示才想出來的
    surfaceView)

  7. LRU的底層資料結構?雙向連結串列如何提高查詢效率?

  8. kotlin是如何相容Java的(這個我真不會,沒想到連這都問)

  9. 你覺得你最大的優勢是什麼?(balabala講了一堆,主要講自己的學習能力強,團隊合作能力強)

  10. 反問環節

三面總結: 三面主要是圍繞專案,然後面試官問的特別特別深。相比之下,二面比較注重廣度,考察你對整個安卓體系的知識。三面比較注重深度,考察你對安卓底層原始碼以及框架原始碼有沒有深入的研究。

hr面

  1. 自我介紹
  2. 實習在做什麼專案?有沒有遇到什麼困難,如何解決?
  3. 除了實習,有沒有其他安卓專案,如何分工。和組員有矛盾如何解決?
  4. 你覺得你應聘這個崗位最大的優勢是什麼?
  5. 反問環節

hr面總結:其實hr面大家基本上如實回答就可以了,hr只是想要通過聊天對你有一個基本的瞭解,不要回答的太偏激太離譜就行。最終刷人也是綜合一二三面的成績排序。

位元組跳動面試題答案:

因篇幅問題,面試題答案整理在pdf文件裡,裡面還有我在準備面試的那段時間裡蒐集整理出來的位元組跳動的其他的面試題,並且我根據出現的頻率進行了重要程度的標註,大家可以在短時間裡面進行更高效的複習,在時間充裕的情況下進行有側重點的全面複習。

需要這份位元組跳動面試真題解析的朋友可以評論區留言【面試】即可免費獲取~

位元組跳動面試題

為應對位元組跳動面試,我做了哪些準備?

(一)調整自己的心態,正確面對得失

面試中常見的問題,主要是心態,面試調整心態是第一位的,如何調整成最佳心態呢?很多求職者在面試過程中自己思路不清晰,語言不流暢,說話毫無邏輯,會不斷否定自己,歸根結底都是面試心態問題,所以調整自己的心態,正確面對得失是非常重要的,我的方法是給自己足夠的心理暗示。

(二)提升技術,擴寬知識

對於程式設計師來說,要想成長為一名行業內的大牛大神級別的人物,那麼唯一的辦法就是通過學習,來不斷提升自己的技術,擴寬知識,達到一定的高度和深度。那麼如何提升自己的技術,擴寬自己的知識儲備呢?

以下是我在21天內啃完1307頁的pdf文件**

系列資料圖片

(三)刷題

如何刷題?這是很多現在面試者心中的困惑,我們都知道,面試前刷題是很有必要的,畢竟很多題目都有一定的共性,刷足夠題目就能夠做到舉一反三,甚至在面試時,被問到原題,能夠侃侃而談,那麼刷題如何進行呢?建議:最好找一些歷年的面試原題,分專題來對自己進行訓練。

以下是我私藏的面試題庫:

安卓面試題

結束語

對於大廠面試,我最後想要強調的一點就是心態真的很重要,是決定你在面試過程中發揮的關鍵,若不能正常發揮,很可能就因為一個小失誤與offer失之交臂,所以一定要重視起來。另外提醒一點,充分複習,是消除你緊張的心理狀態的關鍵,但你複習充分了,自然面試過程中就要有底氣得多。

以上內容中所有的學習資料、面試資料,均可以免費提供,希望大家金三銀四面試順利,拿下自己心儀的offer!

需要的朋友:直接點選文件視窗(https://github.com/xieyuliang/BiteDance-Android-Archieture/blob/master/%)免費領取~
歡迎關注專欄:Java架構技術進階。裡面有大量batj面試題集錦,還有各種技術分享,如有好文章也歡迎投稿哦。

相關文章