5年Android程式設計師面試位元組跳動兩輪後被完虐,請查收給你的面試指南

Android木子李老師發表於2020-10-24

大家應該看過很多分享面試成功的經驗,但根據倖存者偏差的理論,也許多看看別人面試失敗在哪裡,對自己才更有幫助。

最近跟一個朋友聊天,他準備了幾個月,剛剛參加完位元組跳動面試,第二面結束後,嗯,掛了…

所以啊,不管怎麼樣,不論是什麼樣的大小面試,要想不被面試官虐的不要不要的,只有刷爆面試題題做好全面的準備,當然除了這個還需要在平時把自己的基礎打紮實,這樣不論面試官怎麼樣一個知識點裡往死裡鑿,你也能應付如流~

位元組跳動Android實習面試涼涼經

一面問的 Java 和 Android 基礎

1、Jvm虛擬機器
2、messageQueue會不會阻塞ui執行緒
3、物件鎖和類鎖
4、之字形列印樹
5、還有其他的記不清了,主要是我對二面印象太深刻了。

二面問的 Flutter 和 Dart

1、dart是值傳遞還是引用傳遞
2、Widget和element和RenderObject之間的關係
3、widget的root節點
4、mixin extends implement之間的關係(除了extends其他的沒怎麼用過。。)
5、jvm記憶體模型(感覺這個是面試官可憐我,看我什麼都不會才問的=。=)
6、Future和microtask執行順序
7、dart中..的用法(基本沒用過。。)
8、await for(沒用過。。)
說實話,第一個、第三個、第六個我準備的話應該能答出來的,但是一個多月沒碰Flutter了,忘了都差不多。。。

此外GitHub和部落格維護好很重要,像我這種demo隨手寫,隨手刪的人直接GG。。

面試位元組兩輪後被完虐,位元組面試官給你的技術面試指南,請查收

 

面試位元組跳動需要做哪些準備?

接下來將分:面試前、面試中、面試後 三個部分,解答一些常見的問題。

面試前

如何尋找一個面試機會?

  1. 內推:首先推薦大家走內推途徑,內推的簡歷通過率遠高於其他方式;內推的途徑有:聯絡工作的師兄師姐、在論壇上找對應的內推貼、參加校招宣講會 等
  2. 對應公司招聘官網直接投遞:需要大家明確自己想投哪些公司,直接搜尋公司的官方招聘官網(大公司普遍都有),找到自己想投的崗位投遞
  3. 相關招聘網站投遞:在各類招聘網站上HR也會發布對應招聘資訊,可以對應的投遞

需要為面試做哪些準備?

  1. 一份優秀的簡歷:要能說明 學校、學歷、實習經歷、在校期間技術專案經歷 等,具體的在姊妹篇《校招啦——來自位元組跳動面試官的技術簡歷指南》,敬請期待。
  2. 瞭解投遞的崗位要求:就是我們常說的JD(Job Description),公司的招聘官網或釋出的招聘資訊裡面會詳細描述,如果找不到或公司沒寫,可以聯絡HR發郵件說明。
  3. 複習面試崗位相關知識:校招同學需要複習 計算機基礎(網路、作業系統、計算機組成原理、數學等)、編碼能力(資料結構、演算法) 、技術方向基礎知識(如前端同學主要看html/css/js)
  4. 整理自己做過的專案:包括實習專案、個人專案、科研學術專案、參與社群開源專案等,在面試時需要做自我介紹,面試官也可能會根據你的簡歷詢問專案內容。
  5. 適當的做一些演算法題:前端、測試等一些崗位可能不是特別重視演算法,但做一些演算法題能訓練你的思維、程式碼能力;常用的刷題網站:LeetCoode、牛客網、各大高校OJ等

面試中

如何自我介紹?

技術面試自我介紹時請focus在技術方向上,有些同學會準備一段華麗的開場白,介紹自己大學期間的學生會、組織活動等經驗,這些內容對於技術面試沒有太多吸引力,不利於面試官找到對應你的合適問題,有時候反而會在面試官心目中減分(感覺不夠專注技術)。 建議是:

  1. 有技術實習經歷的同學,重點介紹實習中做過的專案,說明自己在專案中的角色、負責研發了那些部分、使用了什麼技術棧、學習到了什麼。
  2. 沒有實習經歷的同學,可以介紹自己在目標崗位的技術方向上學習了哪些內容、有做過什麼個人專案 或者一些Demo專案。
  3. 有ACM等計算機競賽獲獎經歷的要說明,加分項。
  4. 有參與開源專案或社群建設的,建議說明,加分項。
  5. 學術大牛同學也可以說明自己發表論文、參與會議情況,也是加分項。如果學術方向和工作內容沒有太多關係,建議不要滔滔不絕的詳細介紹,如果學術方向剛好和崗位match 或 面試官有興趣,面試官一般會主動繼續聊下去。

沒有實習經歷可以嗎?

答案是——可以的。 有技術實習經歷當然好事,但是對於校招/實習同學來說,不一定人人都有實習經驗,或者實習經驗可能與當前崗位不match。所以不用過分擔心,一般能過簡歷參與面試的同學,都是得到了初步的認可的。沒有相關實習經驗的同學,面試時可以突出自己在其他方面的優勢(如:個人專案、開源專案、競賽、學術,參考上個問題),面試官如果認可你的知識儲備、能力、潛力就會通過。

沒有 相關實習經歷 和 沒有相關知識能力 是兩回事,有實習經歷缺沒有積累知識能力的同學,可能最終評價會不如 通過自己學習探索具備相關知識的同學。所以請一定要做好面試前的準備,讓自己符合面試崗位的要求,比如投遞前端崗位的同學,至少要學習html/css/js相關基礎知識,對當前常用前端技術棧有一定的瞭解,並且有動手實踐的經歷。

需要對業務瞭解嗎?

校招/實習 來說,並不強求對業務的瞭解,一般來說在校同學也很難對業務有深入的理解,有相關經驗瞭解當然是加分項。

面試整體流程

通常來說,一次完整的面試包括:筆試、技術面試、崗位match、HR面試。

筆試:可能是線上筆試 或 當場筆試,校招筆試題目範圍較寬,會涉及計算機基礎知識、面試方向的知識技能、程式碼coding、資料結構 & 演算法 等。

技術面試:以位元組跳動為例,校招一般是2-3輪交叉技術面試,實習一般是1-2輪,考察 計算機基礎、編碼能力 、技術方向基礎知識以及技術深度、系統設計能力、抽象能力和工程化能力、軟素質 等。一面更偏向基礎知識、技術廣度,二三面偏向技術深度、進階能力。

崗位match:一般是通過技術面試後,由業務部門負責人面試,偏向軟素質、專業能力、個人發展與規劃等。

HR面試:通常是最後一輪面試,主要聊一下職業規劃、個人訴求、面試過程中的一些問題、入職相關資訊(如可入職時間、實習時間、工作地點等)

遇到不會的問題如何處理?

首先要明確——誰都會有不會的問題。即便是工作多年的社招同學也會有知識盲區,有部分不會的問題並不會影響你的整個面試評價。所以,千萬不要不懂裝懂,這樣反而會留下負面印象。 確實不會的問題請直接和麵試官說明,可以讓面試官給一些提示,或者徵詢面試官意見看能否現場查閱相關資料(一定要在面試官許可下查詢,否則容易被算作作弊)。如果在提示或查詢資料後,解決了原本不會的問題,也是加分項——說明學習能力、應變能力、抗壓能力不錯。

面試時可以問面試官什麼問題?

在一輪面試結束後,面試官可能會說:“你有什麼問題想問的嗎?” —— 注意,這個可能也是一道面試題,面試官想通過你的問題,瞭解到你的職業訴求、個人規劃、學習能力等,所以要慎重的選擇自己的問題。 技術面試環節不建議問一些與當前面試無關、涉及公司機密、個人隱私的問題,如:加班多少/工資待遇(這個在HR面試環節可問)、公司當前收益情況、業務線具體使用的核心技術、面試官聯絡方式等 可以問一些與自己相關的技術方向問題,如:如果通過面試需要學習哪些內容做準備、面試官對你本輪的評價和建議(如果面試官不方便說,也不要追問)、面試過程中某個困惑問題的解決方法(時間限制面試官可能只能給出思路)等。

面試後

長時間沒有得到回應如何處理?

面試後請注意查收自己的郵箱、保持電話暢通,如果長時間(3-5天)沒有得到回應,建議和HR聯絡。校招的同學通常比較畏懼與HR交流,擔心本身“薛定諤的貓”狀態的結果在自己聯絡HR後就變得負向了,這個心理一定要克服,及時的確認面試結果才有利於安排之後的面試/offer選擇。 如果真的得到了不好的結果,也可嘗試問一下HR面試評價中自己的問題,不一定能得到答覆,但如果HR能告訴你也利於你及時發現、解決自己的不足,為下一次面試打基礎。

面試沒有通過可以再次投遞嗎?

有的公司有面試不通過鎖簡歷機制(一段時間內投遞無效),這個也可以和HR問清楚。 我司(位元組跳動)是不鎖簡歷的,某一崗位面試不通過任然可以繼續投遞。但是建議大家每次投遞都認真準備,你的每一次投遞、面試都可能被記錄,如果多次面試、投遞沒有體現出成長,也還是會影響後續的簡歷篩選與面試。

面試後可以在分享面試題嗎?

可以自己記錄面試相關題目、經驗,為自己未來的面試做準備資料,但不建議立即分享(包括分享再網路上和分享給其他同學),有些公司筆試、面試時時會簽署協議的,如果發現分享最新面試、筆試題目,可能會直接取消錄用資格。

面試位元組兩輪後被完虐,位元組面試官給你的技術面試指南,請查收

 

面試位元組跳動需要儲備哪些知識?

很多人準備面試的時候,大多數就會這樣的,開啟百度,輸入 “Android 面試題”,找幾個多的開始看。

這雖然看起來很自然,但是並不是一種 健康的方式,面試題的作用應當是查缺補漏,上學的時候也不是直接發習題冊然後對著答案學習吧?

知乎上有個問題,叫做 如何高效學習,裡面有一個回答我覺得很符合我自己的觀點,就是 建立起自己的知識體系,建立知識體系的目的在於:

  • 鞏固記憶。
  • 認識自己,找到自己的優勢及不足。
  • 把握複習的進度。
  • 經驗總結。

目前我自己的總結的會分為以下幾個大點:

Java 基礎知識

  • 物件導向的基本思想
  • Object類相關:Object類的幾個關鍵函式、String涉及到的常量池概念,序列化 & 反序列化。
  • 重要關鍵字:final、static。
  • 內部類:內部類的分類、應用場景、內部類編譯成class後是怎麼樣的。
  • 抽象類 & 介面:區別、應用場景。
  • 編碼:編碼的目的、分類。
  • 異常:異常體系、自定義異常。
  • 註解:註解的基本概念、分類、編譯時註解 & 執行時註解。
  • 容器:重要容器的內部實現、容器間的對比。
  • 記憶體模型。
  • 垃圾回收。
  • 類載入的過程。
  • 泛型:分類、萬用字元 & 上下邊界、泛型擦除。
  • 反射:使用。

Android 基礎知識

  • Dalvik、Art虛擬機器
  • Activity:生命週期、launchMode。
  • Fragment:生命週期、懶載入、兩種Adapter之間的區別。
  • BroadcastReceiver:基本概念、廣播分類、許可權。
  • Service:生命週期、onStartCommand的返回值、startService和bindService的區別、相同程式 & 不同程式的互動、IntentService實現原理。
  • 重要的工具類 & 原始碼實現:AsyncTask、HandlerThread、Handler、IntentService、LruCache、LinkedHashMap、SparseArray。
  • RecyclerView:快取原理、和ListView的對比、Adapter如何適配多種layout。
  • 儲存:資料庫升級 & 優化、ContentProvider,SharePreference。
  • SDK版本升級的相容問題。
  • Android的許可權管理機制。

圖片

  • Bitmap相關:Bitmap的大小計算、質量、inJustDecodeBounds、inBitmap。
  • 幾種圖片格式的對比、壓縮。
  • 大圖載入:BitmapRegionDecoder

演算法

  • 別無捷徑,刷題,但是刷題的時候,要按照題的型別去總結。

開源框架

  • RxJava:操作符的應用場景、重點操作符的內部實現、和RxJava的對比。
  • Glide:流程、快取相關的實現。
  • Retrofit:流程、動態代理 & 註解解析。
  • OkHttp:流程、佇列實現、快取實現。

效能

  • 效能優化技巧:啟動速度優化、佈局優化、記憶體優化、電量優化、APK大小優化、列表滑動優化。
  • 效能優化工具:TraceView、Systrace、除錯GPU過度繪製 & GPU呈現模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker、LeakCanary、Lint。
  • ANRANR原因ANR產生過程原始碼分析資訊收集過程trace檔案分析分析基本流程具體示例如何避免產生ANR
  • 效能實踐:解決過的效能問題,從 遇到問題、分析問題、解決問題、結果 四個點進行闡述。

View

  • 繪製流程:measure、layout、draw三個關鍵流程。
  • 事件分發:事件分發的原理、處理過的滑動衝突問題。
  • 自定義View:Canvas & Path,實現過的比較複雜的自定義View。

架構

  • MVP:MVP的思想 & 優劣勢、在專案中的應用、

原始碼

  • AMS
  • WMS
  • Binder
  • 應用啟動流程
  • APK相關知識點APK構成:resources.arsc組成、AndroidManifest.xml、aapt作用及原理APK打包過程APK安裝過程APK簽名 & 校驗原理dexopt原理

網路

  • 基礎知識:看一下對於 <<計算機網路>> ,重點是網路分層模型、TCP/UDP、HTTP/HTTPS。

設計模式

按照23種網路模型、三個分類進行總結,每種設計模式包含以下三個方面,至少要準備常用的幾個:

  • 基本概念:UML圖、簡單例子、應用場景、優勢 & 劣勢。
  • Android原始碼中的實現
  • 專案中的應用

多執行緒

  • 看併發程式設計的藝術,這本書的目錄就是多執行緒最好的知識體系。
  • 遇到過的多執行緒問題、怎麼解決的。

Gradle

  • 常用配置。
  • 多渠道打包。

外掛化

  • 外掛化的核心思想。
  • 幾種外掛化框架實現的原理。

元件化

  • 元件化的優勢。
  • Arouter:使用方式、實現原理。

Kotlin

  • 有用到的可以看看。

多媒體

  • 音訊、視訊播放。

大前端

  • ReactNative、Flutter:沒學過的可以瞭解一下思想。

JNI

  • 呼叫實現方式。

最後,面試前該準備哪些資源複習?

其實客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。

這裡再分享一下我面試期間的複習路線:(以下體系的複習資料是我從各路大佬收集整理好的)

《Android開發七大模組核心知識筆記》

面試位元組兩輪後被完虐,位元組面試官給你的技術面試指南,請查收

 

面試位元組兩輪後被完虐,位元組面試官給你的技術面試指南,請查收

 

面試位元組兩輪後被完虐,位元組面試官給你的技術面試指南,請查收

 

《960全網最全Android開發筆記》

面試位元組兩輪後被完虐,位元組面試官給你的技術面試指南,請查收

 

《379頁Android開發面試寶典》

歷時半年,我們整理了這份市面上最全面的安卓面試題解析大全
包含了騰訊、百度、小米、阿里、樂視、美團、58、獵豹、360、新浪、搜狐等一線網際網路公司面試被問到的題目。熟悉本文中列出的知識點會大大增加通過前兩輪技術面試的機率。

如何使用它?

1.可以通過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數

面試位元組兩輪後被完虐,位元組面試官給你的技術面試指南,請查收

 

《507頁Android開發相關原始碼解析》

只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。

面試位元組兩輪後被完虐,位元組面試官給你的技術面試指南,請查收

 

資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖;

需要的朋友,可以點選我的GitHub免費領取

相關文章