Android校招面經乾貨分享(頭條、快手、小米、美團)|掘金技術徵文

Dawnning發表於2017-09-18

先說下個人情況吧,雙非本科大四,基本從大一下學期開始自學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吧。

附掘金秋招徵文大賽連結

相關文章