先說下我的狀況吧,雙非本科大四,基本從大一下學期開始自學Android,有美圖公司兩個月實習經驗,而後截止到如今面了頭條、小米、快手和美團。下面是本身整理的一些面經,基本我能回憶起來的都寫上了,但願能幫到你們。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吧。緩存
附掘金秋招徵文大賽連接數據結構