面試位元組兩輪後被完虐,一份位元組跳動面試官給你的Android技術面試指南,請查收!
大家應該看過很多分享面試成功的經驗,但根據倖存者偏差的理論,也許多看看別人面試失敗在哪裡,對自己才更有幫助。
最近跟一個朋友聊天,他準備了幾個月,剛剛參加完位元組跳動面試,第二面結束後,嗯,掛了…
所以啊,不管怎麼樣,不論是什麼樣的大小面試,要想不被面試官虐的不要不要的,只有刷爆面試題題做好全面的準備,當然除了這個還需要在平時把自己的基礎打紮實,這樣不論面試官怎麼樣一個知識點裡往死裡鑿,你也能應付如流~
位元組跳動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。。
面試位元組跳動需要做哪些準備?
接下來將分:面試前、面試中、面試後 三個部分,解答一些常見的問題。
面試前
如何尋找一個面試機會?
- 內推:首先推薦大家走內推途徑,內推的簡歷透過率遠高於其他方式;內推的途徑有:聯絡工作的師兄師姐、在論壇上找對應的內推貼、參加校招宣講會 等
- 對應公司招聘官網直接投遞:需要大家明確自己想投哪些公司,直接搜尋公司的官方招聘官網(大公司普遍都有),找到自己想投的崗位投遞
- 相關招聘網站投遞:在各類招聘網站上HR也會發布對應招聘資訊,可以對應的投遞
需要為面試做哪些準備?
- 一份優秀的簡歷:要能說明 學校、學歷、實習經歷、在校期間技術專案經歷 等,具體的在姊妹篇《校招啦——來自位元組跳動面試官的技術簡歷指南》,敬請期待。
- 瞭解投遞的崗位要求:就是我們常說的JD(Job Description),公司的招聘官網或釋出的招聘資訊裡面會詳細描述,如果找不到或公司沒寫,可以聯絡HR發郵件說明。
- 複習面試崗位相關知識:校招同學需要複習 計算機基礎(網路、作業系統、計算機組成原理、數學等)、編碼能力(資料結構、演算法) 、技術方向基礎知識(如前端同學主要看html/css/js)
- 整理自己做過的專案:包括實習專案、個人專案、科研學術專案、參與社群開源專案等,在面試時需要做自我介紹,面試官也可能會根據你的簡歷詢問專案內容。
- 適當的做一些演算法題:前端、測試等一些崗位可能不是特別重視演算法,但做一些演算法題能訓練你的思維、程式碼能力;常用的刷題網站:LeetCoode、牛客網、各大高校OJ等
面試中
如何自我介紹?
技術面試自我介紹時請focus在技術方向上,有些同學會準備一段華麗的開場白,介紹自己大學期間的學生會、組織活動等經驗,這些內容對於技術面試沒有太多吸引力,不利於面試官找到對應你的合適問題,有時候反而會在面試官心目中減分(感覺不夠專注技術)。 建議是:
- 有技術實習經歷的同學,重點介紹實習中做過的專案,說明自己在專案中的角色、負責研發了那些部分、使用了什麼技術棧、學習到了什麼。
- 沒有實習經歷的同學,可以介紹自己在目標崗位的技術方向上學習了哪些內容、有做過什麼個人專案 或者一些Demo專案。
- 有 ACM等計算機競賽獲獎經歷的要說明,加分項。
- 有 參與開源專案或社群建設的,建議說明,加分項。
- 學術大牛同學也可以說明自己發表論文、參與會議情況,也是加分項。如果學術方向和工作內容沒有太多關係,建議不要滔滔不絕的詳細介紹,如果學術方向剛好和崗位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
。 -
ANR
-
ANR
原因 -
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 】 中已收錄,大家可以自行獲取(或者 關注主頁掃描加微信獲取)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2726640/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 5年Android程式設計師面試位元組跳動兩輪後被完虐,請查收給你的面試指南Android程式設計師面試
- 對線面試官 | 位元組跳動一面面試
- 2020最新位元組跳動面試經驗分享,已拿到offer (4輪技術面+hr面)面試
- 位元組跳動面試官:請用JS實現Ajax併發請求控制面試JS
- 「面經」你可能需要的位元組跳動三輪面經
- 位元組跳動面試官這樣問有關字串的問題!!面試字串
- 去面試位元組跳動,有些話不吐不快!面試官最青睞的候選人標準!面試
- 面試騰訊、位元組等大廠後,我總結一份面試文件給大家參考!面試
- 位元組跳動架構師講解Android開發!今年Android面試必問的這些技術面,值得收藏!架構Android面試
- 爽啊,終於又見面了,位元組跳動後端社招面試分享後端面試
- 剛面完位元組跳動,估計涼了。
- 位元組跳動ios面經iOS
- 1307頁位元組跳動Java面試全套真題解析火了,Java面試問題集合Java面試
- 位元組跳動前端研發面經-2020春招技術面前端
- 艱辛挺過位元組Android研發崗4輪面試,收到sp offer月薪45k!揭秘位元組面試流程及考點Android面試
- "坑多題又難"位元組跳動面試該怎麼破?面試
- 位元組跳動的演算法面試題是什麼難度?演算法面試題
- 面試阿里,位元組,騰訊90%被問到的springboot常見面試題,這次給你講的明明白白!阿里Spring Boot面試題
- 憑藉這份Java超硬核面試 “備戰” 手冊!我剛面試完位元組跳動、阿里、華為、小米等後端崗位Java面試阿里後端
- 社招兩年半10個公司28輪面試面經(含位元組、拼多多、美團、滴滴......)面試
- 位元組跳動-技術美術(抖音特效開發)一面特效
- 螞蟻、位元組、滴滴面試經歷總結面試
- 【校招/社招】面試位元組,寫了一份硬核簡歷!面試
- 面試必問的 Java 位元組流與字元流面試Java字元
- 位元組跳動-後端開發崗實習面經後端
- 位元組面試:SYN 包在什麼場景下會被丟棄?面試
- 給位元組的學姐講如何準備“系統設計面試”面試
- 兩年經驗前端:位元組跳動系—石墨文件面經前端
- 記一次位元組跳動Java研發崗的面試經歷,跪了Java面試
- 位元組跳動的演算法面試題是什麼難度?(第二彈)演算法面試題
- 位元組跳動視訊編解碼面經
- 位元組跳動web前端面試經歷Web前端面試
- 位元組跳動後端開發 面經(已收到意向書)後端
- 位元組跳動的技術架構架構
- 騰訊面試,面試官第一個問題是Int佔多少位元組,程式設計師不知所措面試程式設計師
- 技術面試中,當面試官「套路」你時,怎麼「反套路」回去?面試
- 小於n的最大數,記一道位元組面試題面試題
- 我是如何用 ThreadLocal 虐面試官的?thread面試