先說下個人情況吧,雙非本科大四,基本從大一下學期開始自學Android,有美圖公司兩個月實習經驗,然後截止到現在面了頭條、小米、快手和美團。下面是自己整理的一些面經,基本我能回憶起來的都寫上了,希望能幫到大家。
頭條四面(跪)
頭條這個是在校招提前批前大概兩週面的,很感謝學長給的內推機會,雖然最後玄學掛掉了,不過還是很不錯的面試體驗。
一面
- 層次遍歷二叉樹
- 改變陣列使其奇數在前偶數在後且相對順序不變
- Activity四種啟動模式
- 倆App的activtiy很奇葩的互相啟動來啟動去,然後依次按返回鍵判斷當前activity
- 強軟弱虛四種啟動型別
- Handler原理
- EventBus原始碼
- 執行緒通訊
- 廣播
- 服務的分類
- 如何與服務互動
- 如何終止執行緒
- 服務所在的執行緒
- IntentService的原理以及好處
二面
- Binder原理
- 服務相關
- 說說設計模式並且結合Android原始碼解釋
- OkHttp原始碼深入講解
- 責任鏈模式
- 事件分發
- 以及幾個一面稍微重合的問題,就不寫出來了
三面
曠日持久的Leader面,問的問題是在太多,下面是我回憶起來的一部分。而且Leader面一般問一個問題會問的越來越深,知道你打不出來為止。當時Leader還說我面的不錯,然後就給掛掉了。。。
計組
- Arm與X86的區別
- Android使用的是哪兒一個
- RISC與CISC
- 兩者的優劣
- 大小端問題
- 原碼,反碼和補碼
- 補碼的優勢
- 浮點數的表示
- 浮點數的運算
計網
- TCP與OSI相比少了哪兒幾層
- 表示層和會話層的功能
- TCP與UDP的區別
- ARQ協議
- 擁塞控制演算法
- 路由器與交換機的區別
編譯原理
- 並沒有學過
軟體工程
- 問了好幾個名詞,然而我都沒聽說過
資料結構
- HahMap的原理
- 衝突,擴容等。。
- Java中equal與hashCode的意義
- 如果hashCode返回相同的值的後果
- 如果equal返回true造成的後果
- Set,Map講講原理
作業系統(問的很細)
- 作業系統的功能
- 程式與執行緒的區別
- CPU排程的實現
- 執行緒組成
- TCB的組成
- 執行緒怎樣對映到硬體實現
- 執行緒同步
- Sync與Lock的區別
- Android多程式
- 如何實現多程式
- 多程式的必要性
- 多程式通訊
- 詳細講每種多程式通訊以及相應優缺點
- 程式排程
Android
- Glide原始碼
- Glide與其他圖片載入框架的優劣
- 三級快取機制
- Lru演算法
- 詳細講解Glide的圖片快取
Hr面
- 對頭條的看法
- 談談短視訊的未來
快手二面(跪)
只能說快手的畫風清奇,難度很大。
一面+二面
- 二叉樹交叉層次遍歷
- Activity四種啟動模式
- 任務棧相關
- 訊息分發
- 如何使當前訊息分發停止
- EventBus扯好久,原理,優劣,使用場景
- MVP,MVC,MVVM的對比,以及如何去改進
- OkHttp原始碼
- Glide原始碼
- RxJava基礎
- 手寫RxJava實現十個請求當請求全部完成列印輸出,若有錯誤列印停止請求,並且處理執行緒切換
- 手寫AsyncTask
- 事件分發機制
- 如何實現一個不規則遮罩層實現遮罩層只蓋住一部分,而未遮住部分可以響應事件(可以有多種方法)
- 自定義View流程
- 如何自定義View實現隨著百分比改變View的背景顏色(例如下載進度百分之三十,左邊百分之三十是黑色,右面為白色)
- 跨程式相關
- Binder原理
小米五面(offer)
一面+二面
- 手寫快排
- 最大子序列
- Activity的四個啟動方法
- Activity的生命週期
- Fragment的生命週期
- Fragment相比Activity有什麼優劣
- Fragment和Activity的互動
- Fragment的使用場景
- 本地廣播的用法
- 本地廣播的原理
- 如何讓廣播只傳送給特定的App
- Intent如何傳遞大檔案
- Intent傳遞超出範圍的檔案的後果
- 如何傳遞大檔案
- 如何避免大圖片OOM
- 圖片壓縮的原理
- Glide原始碼
- 圖片的三級快取
- Lru演算法
- EventBus原理
- RemoteView使用場景及其方法
- RemoteView能使用的View的範圍
- Notification能否使用自定義View以及原因
- RemoteView原理
- 簡述事件分發機制
- 事件分發中的方法名、方法引數以及不同的返回值的意義
- ListView中如何使不同的Item載入不同的樣式
- ListView中convertview的作用以及意義
- RecyclerView與ListView的區別
- 如何解決ListView非同步載入圖片的問題
- ContentProvider的用法,詳細到方法
- 跨程式通訊的方式
- AIDL原理
- Binder原理,詳細到方法
- 啟動一個Server和繫結Server的區別
- 舉例Server和繫結Server的不同使用場景
- IntentServer與普通Server的區別
- IntentServer的使用場景
- IntentServer原理
- 如何保證Server不被殺死
- 實現多執行緒的幾種方法
- 幾種動畫
- 如何自己去實現一個動畫,具體到方法
- 屬性動畫的原理
一面和二面是連著的,然後面完之後面試官告訴我leader不在,讓我等訊息。。。我當時還以為掛掉了,還好幾天後接到了面試電話。不過話說一面二面的題量可真大。
三面
- 兩個連結串列尋找交叉
- 探討Json解析器的實現(詞法分析 語法分析 採用何種資料結構並且為什麼等問題)
- 圖片的三級快取
- MVC,MVP,MVVC區別
- Android中使用MVP而不用MVC的原因
- 講解MVP(手寫程式碼)
- MVVM與DataBinding
- 實現監聽手機拍照和截圖,悄悄地將一些資料隱藏進入圖片並且可以通過圖片恢復資料
交叉面
- Fragment與Activity的生命週期
- Fragment在哪兒個生命週期方法呼叫後真正加入Activity,在哪兒個生命週期方法getActivity()返回null或者不為null,為什麼
- 講一下實習中覺得比較不錯的東西
- 以下是實習專案相關
- 圖片壓縮
- 圖片快取
- 高斯模糊
- 高斯模糊動態效果
- 以上是實習專案相關
- 雙棧實現佇列
- Java記憶體模型
- GC演算法
- 專案中遇到的記憶體洩漏型別
- 解決記憶體洩漏問題的方法
- MAT
- LeakCanary
- Handler記憶體洩漏的原因
- 軟引用與弱引用
- 虛擬機器棧以及棧幀
- Binder原理
- Java中的同步方法
- Sync與Lock的區別
- Sync的原理
- Lock的內部實現
- AQS的內部實現
- CAS
- startActivity框架層實現
- ActivityMamagerService
- ApplicationThread
五面
- 總監大大和你談人生
美團三面(offer)
一面+二面
- 0~n求1的個數
- n個點,要求畫一個圓,使其可以覆蓋一般的點
- Sql多表查詢
- 訊息分發機制原理
- 執行緒通訊
- 四種執行緒池的配置
- 執行緒池內部實現
- JMM
- GC演算法
- 為什麼要Stop The Wrold
- 為什麼多次GC會卡頓
- 記憶體洩露原理以及如何發現記憶體洩露
- 自定義View
- 舉例measureSpec在父佈局和當前佈局分別使用精確數值和matchparent和wrapcontent的時候分別是哪兒種Mode,裡面的數值又分別為多少
三面
- 基本都是開放題目,也沒什麼固定答案
- 以及談談以後的工作
到這裡我的秋招基本已經結束了,希望這篇面經能幫到大家拿到喜歡的offer吧。