2021年已經開幕了很久,很快就要迎來“金三銀四”這個面試高潮,這是簡書大佬的一篇面經分享,希望對大家有幫助,
原文地址:https://www.jianshu.com/p/c1ca59809fa
下面是博主個人基本情況還有面經,
文中附有詳細的面試真題目,文末有我當時刷的面試真題還有一些對我幫助良多的復習資料,特別有用,希望也可以幫大家順利上岸,順便攢攢人品!

筆者的基本情況
筆者是普通家庭,學歷一般,非985也非211,就是一個普通本科生應屆畢業生,有過一些簡單的實習,也做過一些專案經歷,但個人覺得都很普通吧(所以,我能進位元組我真的覺得自己特別幸運!!!),
在面試前,我刷了很多面經、面試題,這里也把自己的面經分享給大家,當做回報社區好了,順便攢攢人品,希望往后可以一切順利,
面試是以遠程視頻的形式進行的,在牛客網里進行,界面我就不貼了,哈哈哈,比較緊張,沒有截圖,
首先是面試的基本流程(我不怎么會寫文,這里就直接記敘文了,哈哈哈)
- 自我介紹
- 隨后面試官問我一些基本問題
- 后面就是根據你的簡歷還有前面說的內容啊來問一些針對性的問題
- 問我有沒有問題
(差不多每一面都是這樣的吧……)
PS:會問很多基本知識,像是計算機網路、作業系統、編譯原理這些底層什么的,大廠好像都挺喜歡深挖,建議大家多復習一下,鉆一下底層,

一面面經
不知道是不是Android部門的人比較忙或者是人手不足,面我的面試官是做 iOS 開發的,沒問我太多 Android 專業相關的東西,
1、ipv6 答不上來
2、http 狀態碼
3、http 請求
4、https 請求程序、網路安全
5、傳送大圖到服務器,進度功能實作
(這里扯了很多,一開始我理解成斷點續傳了,后面就是給的方案是 http 每次傳一部分,根據狀態碼是否成功來處理,后面面試官覺得這個答案不行,讓我從 TCP UDP Socket 這些角度去想,我說這些實作起來就更簡單了,比如TCP就雙向通信之類的,,)
6、gc
7、資料庫索引,b tree b+ tree
8、設計模式
9、行程間通信,我說了幾個,面試官說可以說 Android 的,好得!
10、rxjava,我說我之前封裝過一個 rxbus,來實作訊息總線,后面我是說了下訊息總線對代碼的影響還是比較大的,我到后面是盡量避免這樣的操作,
11、演算法: 字串匹配,回傳對應 index, 我用的 HashMap 實作,
總體感覺就是,面試官大多數都是問的網路,網路不是我擅長的領域,有些別的想不起來了……
另外一個特點就是——深挖底層,不止是題目,面試官會深入一些小地方一直往下問(感覺他一直在懟我,我說一個,他就順著往下又挖,一直挖到我完全回答不上來為止)……
不過,面試官人還是挺不錯的,中途有提醒我很多東西,體驗不錯(我當時想的是,服務很棒,下次還來?哈哈哈,開玩笑的直接成為同事更好),

二面面經
這一面就有些尷尬了……面試官依舊很不錯,是個大佬,就是貌似他那邊的網路狀態不是很好,
大佬呀:我看上一面問了你網路層面比較多的問題,那我接著問了
小渣渣:……好的(我沒有選擇,哭了),
- 固定程式自我介紹
- 技術問題
1、Http1.1 和 Http 1.0 區別
2、keepalive 作用
3、keepalive 底層實作,這塊我是不清楚的,我就猜測了下給了他一個答案,
4、作業系統怎么在堆上和堆疊上分配記憶體,我不太清楚,就說了 Java 虛擬機是咋分配的,結果問了我 Java 虛擬機是咋在作業系統上分配的,對不起我不知道!(后面強調了 c 的 api,我還是母雞啊!)
5、作業系統行程和執行緒
6、虛擬記憶體
7、虛擬記憶體的快取,我不清楚,依舊給了個猜測
8、手寫單例,寫了雙重檢索的,后面問我有別的嗎,我說了靜態內部類實作的,問我為啥靜態內部類安全,
9、Android Framework,我問是 AMS 那些的嗎,面試官說那太復雜了,你說下 handler , loop吧,然后問了一些相關的問題,(感動啊)
10、廣播和本地廣播的區別,實作原理
11、二面問我,一面評價說你覺得 rxjava 并不好,我趕緊說不是不行,rxbus 只是 rxjava 功能的一小部分,而是訊息總線這樣的方案有利有弊,后面說rxbus 具體封裝 ,太久遠了想不起來了,然后說了 rxjava 其他的用法和優點這一類的,
12、你用 map 寫個 lru 吧,我說能用 LinkedHashMap 嗎,不能, 后面我說了個思路,面試官覺得不行,然后說了 LruCache 怎么實作的, LinkedHashMap 怎么實作的,我說 LinkedHashMap 是用了 HashMap,在里面維護了一個雙向鏈表,每次訪問資料的時候修改鏈表,后面我就打算仿寫一個 LinkedHashMap 來實作,多虧面試官即使打斷,這個太費時間了,就不用寫了,
13、手寫生產者消費者,這里面試官一邊看代碼一邊提問題,我跟著問題修改代碼,其實就是把一個比較low 的生產者消費者優化成了面試官想要的樣子(面試官在這里終于笑了),
14、鎖, synchronized 和 ReenTrantLock
15、搶占式鎖和非搶占式鎖,ReenTrantLock 怎么實作非搶占式
16、notify 和 sleep 區別
17、onTouch 和 onClick (這個我隱約中好像被問過
……剩下的記不清了
- 問問題環節
Q:我想了解下相關的業務
A:這個職位是最后統一定的,我不能告訴你
Q: 問評價
A: 還是不能告訴你,
同樣大致問題是這些,其他的也想不起來了,這塊網路作業系統混合雙打(還好沒有再次一直挖網路),
這個面試官是真的很棒,是一個特別厲害的大佬(或者說這個人有豐富的面試經驗,比第一面的那個要熟稔很多),他會誘導你慢慢回答,考慮很周到,

三面面經
直接上面試題吧:
- 自我介紹
- 技術問題開始
1、因為自我介紹時介紹了自己實習寫的重繪加載的組件
2、 問我自己組件里怎么解決的嵌套滑動沖突,三個方面實作完美分發事件
3、 說 retrofit 動態***這塊
4、 retrofit 動態***里面如果傳的不是 interface 怎么辦,這塊我不清楚,我就直接說不太清楚,然后說了 retrofit 關于注解的處理
5、 注解生命周期,編譯時注解決議
6、 你用過 weex,說下weex實作原理,我說我沒有看過 weex 原始碼,但是我實作過一個動態頁面渲染框架,說了下我的渲染程序和實作方案,
7、 最近想學的技術,說了音視頻,但是因為準備春招放下了
8、 為什么想學,說了自己之前做一個 APP,里面播放器無法使用沒認證的 Https 請求,打算自定義一個播放器,在底層處理證書這塊,然后在說了下不知道這樣的方案可不可行,
9、 使用 https 請求這個不難的, 我說因為我這個是自己簽的,就沒法認證,
10、 那你 okhttp 里面怎么認證的, 說了攔截器
11、 還有個 ConcurrentHashMap 同步方案, 然后問了 CAS
12、 環狀鏈表
13、 TCP握手揮手
- 反問環節
問了下今年的怎么招聘的,涼面太多看的我很慌張,
介于面試的時候比較緊張一二三面問題可能有個別搞混了,順序也有些打亂,有些問題可能記不清了,當然,大家面試的時候也不會遇到完全一樣的問題,這些只能當做準備面試前查漏補缺的一個參考吧,
最后,第三面的面試官依然棒,雖然問題節奏很快,但是不管是態度還是提問都很有技巧也很棒,
兩星期后收到了offer,終于趕在畢業前上岸了,

經驗總結
其實我覺得自己屬于很普通的型別,并沒有很突出的地方,能夠進位元組有三分運氣,還有七分還是靠自己的努力,
大家也不必妄自菲薄,首先要有自信,如果有想要去的大公司,一定要好好做準備,努力提升自己,讓自己的能力和素質匹配得上目標公司,
我也一直相信天道酬勤,機會永遠是留給有準備的人,在位元組面試前我也準備了很久,刷了很多大廠面試題,
下面,我把自己面試前準備的知識點整理出來分享給大家【文中的面試真題決議和學習資料都在共享檔案夾(點擊此處可直達)】,(密碼找管理)
Java基礎
- Java Object類方法
- HashMap原理,Hash沖突,并發集合,執行緒安全集合及實作原理
- HashMap 和 HashTable 區別
- HashCode 作用,如何多載hashCode方法
- ArrayList與LinkList區別與聯系
- GC機制
- Java反射機制,Java代理模式
- Java泛型
- Synchronized原理
- Volatile實作原理
- 方法鎖、物件鎖、類鎖的意義和區別
- 執行緒同步的方法:Synchronized、lock、reentrantLock分析
- Java鎖的種類: 公平鎖、樂觀鎖、互斥鎖、分段鎖、偏向鎖、自旋鎖等
- ThreadLocal的原理和用法
- ThreadPool的用法和示例
- wait()和sleep()的區別
Java高階
- Java虛擬機,Java運行,Java GC機制(可達性分析法,參考計數法)
- Java物件的完整生命周期
- JVM記憶體模型
- 行程間通信,執行緒間通信
- JVM類加載機制
- Java參考型別
- 設計模式:除常用設計模式之外,特別的,反射機制,代理模式
- HTTP協議和HTTPS協議
- Socket協議,Socket實作長連接
- TCP和UDP協議
- HTTP協議中GET和POST的具體實作
- 序列化和反序列化
- 執行緒池的實作原理
- 資料庫基礎知識:多表查詢、索引、資料庫事務
上面我列出來的這些都挺重要的,這些點在大佬整理的《Android面試題手冊(中高級)》中都有收錄,大家有需要的可以去看看,

資料結構及演算法
資料結構
- 堆疊和佇列
- 陣列和鏈表,自定義一個動態陣列
- Hash表,及Hash沖突的解決
- 二叉樹
- B+ B-樹
- 基礎排序演算法:重點 快排、歸并排序、堆排序(大根堆、小根堆)
- 快排的優化
- 二分查找與變種二分查找
- 哈夫曼樹、紅黑樹
- 字串操作,字串查找,KMP演算法
- 圖的BFS、DFS、prim、Dijkstra演算法(高階技能)
- 經典問題:海量資料的處理 (10億個數中找出最大的10000個數 TOP K問題)
演算法
- 分治演算法
- 動態規劃
- 貪心演算法
- 分支限界法
這些點在PDF資料中也有收錄,因為內容較多,是以文章鏈接的形式收錄在《Android面試題手冊(中高級)》中,【有需要或者正在準備面試的朋友可以點擊此處獲取】,

Android基礎
- Application生命周期
- Android Activity生命周期
- Android Service、IntentService,Service和組件間通信
- Activity的onNewIntent
- Fragment的懶加載實作,引數傳遞與保存
- ContentProvider實體詳解
- BroadcastReceiver使用總結
- Android訊息機制
- Binder機制,共享記憶體實作原理
- Android 事件分發機制
- Android 多執行緒的實作:Thread、HandlerThread、AsyncTask、IntentService、RxJava
- ActivityThread作業原理
- 嵌套滑動實作原理
- RecyclerView與ListView(快取原理,區別聯系,優缺點)
- View的繪制原理,自定義View,自定義ViewGroup
- View、SurfaceView 與 TextureView
- 主執行緒Looper.loop為什么不會造成死回圈
- ViewPager的快取實作
- requestLayout,invalidate,postInvalidate區別與聯系
- AndroidP新特性
- Android兩種虛擬機
- ADB常用命令
- Asset目錄與res目錄的區別
- Android SQLite的使用入門
Android開發高級
這些是各種原理,經典第三方庫原始碼系列
- 自定義LayoutManager,RecyclerView中如何自定義LayoutManager
- VLayout實作原理,即如何自定義LayoutManager
- Glide加載原理,快取方案,LRU演算法
- Retrofit的實作與原理
- OKHttp3的使用,網路請求中的Intercept
- EventBus實作原理
- ButterKnife實作原理
- RxJava實作原理
- Dagger依賴注入
- 熱修復實作原理,解決方案
- 組件化原理和解決方案
Android系統
Android Studio編譯程序
其中使用到的編譯工具:
aapt、aidl、Java Compiler、dex、 zipalign
主要步驟描述:
1. 通過aapt打包res資源檔案,生成R.java、resources.arsc和res檔案(二進制 & 非二進制如res/raw和pic保持原樣)
2. 處理.aidl檔案,生成對應的Java介面檔案
3. 通過Java Compiler編譯R.java、Java介面檔案、Java源檔案,生成.class檔案
4. 通過dex命令,將.class檔案和第三方庫中的.class檔案處理生成classes.dex
5. 通過apkbuilder工具,將aapt生成的resources.arsc和res檔案、assets檔案和classes.dex一起打包生成apk
6. 通過Jarsigner工具,對上面的apk進行debug或release簽名
7. 通過zipalign工具,將簽名后的apk進行對齊處理,
以上內容檔案中也有收錄,需要的進圈自取,

移動開發外圍
這一塊的知識比較零散和雜亂,有服務器、SpringBoot技術、Restful API開發、網路協議理解、基本的資料庫技術、資料快取技術、訊息佇列技術等還有混合開發(如:flutter)什么的,
最后
代碼改變世界,希望大家早日成為技術大牛,從現在開始,還不晚!
下面是我刷的一些其他的題目,一個是在大佬的公眾號領的,一個是在網上找的(都已經上傳圈共享檔案夾,需要的可以直接進圈找管理),


最后祝愿大家也能順利拿下大廠offer,奧利給!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/265437.html
標籤:其他
上一篇:Android開發的環境搭建
