三年啦,跳槽成功的Android開發面經總結!

Android小安發表於2020-10-15

1簡歷

首先是簡歷,一般找一個模板,填寫掌握的技能和專案經歷即可。

github上有一個不錯的模板,詳情可見:
https://github.com/CyC2018/Markdown-Resume
專案clone後,個性Resuem.md即可,然後匯出為pdf檔案。

簡歷建議長度為2頁,太長太短都不好。

建議用掌握與熟練掌握取代瞭解與精通。

2刷題

演算法題可以說是現在找工作必刷的了。不過根據我面試的經驗,演算法題總得來說問的還是比較少,還有一些公司是基本不問演算法的。

當然如果碰到位元組,快手這種每輪都問演算法的公司,如果因為演算法題拿不到offer就很可惜了。
演算法題就好像高考語文的古詩詞默寫一樣,分不多,但丟了就很可惜了。

根據我的經驗,大概刷了,掌握100道題就足以應付面試了。
當然完全掌握需要重複練習,不是刷了一遍就可以的。
這裡推薦一下極客時間上覃超的五遍刷題法:

五遍刷題法

1.第一遍,直接看解法

多解法,比較解法優劣,默寫好的解法

2.第二遍,開啟leetcode,直接開始寫

多種解法比較,調優

3.第三遍,過一天之後,再重複做題

4.第四遍,過了一週,再來反覆練、

5.第五遍,面試前一週,恢復性訓練

通過以上方法重複練習,大概刷100題就足以應付面試,如果每天刷3道,大概準備一個月即可。

3題庫

刷題也要注意,不要一題一題刷,比如Leetcode的每日一題。

建議按知識點分類,這樣比較方便重複練習與知識點掌握。
在知識點刷過一遍後,也可以按照公司分類或者LeetCode熱題100刷,一般公司出演算法題也是有題庫的。

下面推薦幾個題庫供大家使用

按知識點分類
https://github.com/yuanguangxin/LeetCode
https://github.com/zhangyixing1007/leetcode

按公司分類
https://github.com/afatcoder/LeetcodeTop

熱題100
https://zhuanlan.zhihu.com/p/84230862

4面經

接下來就是各公司的面經了,分享出來供大家參考。

尚德公司面試

1.java有什麼特性,繼承有什麼用處,多型有什麼用處
2.反射是什麼,在哪裡用到,怎麼利用反射建立一個物件
3.代理模式與裝飾模式的區別,手寫一個靜態代理,一個動態代理
4.物件載入的過程,屬性先載入還是方法先載入
5.垃圾回收機制與jvm結構
6.自定義View,事件分發機制講一講
7.http與https有什麼區別
8.Activity啟動模式,以及各啟動模式生命週期問題
9.靜態方法,靜態物件為什麼不能繼承
10.Activity怎麼啟動Service,Activity與Service互動,Service與Thread的區別
11.介紹一下android動畫
12.Launcher啟動App的流程,中間有幾種跨程式通訊(socket)
13.Handler通訊,Binder通訊
14.你碰到過什麼記憶體洩漏,怎麼處理
15.RXJava怎麼切換執行緒
16.Fragment hide show生命週期
17.平常有用到什麼鎖,synchronized底層原理是什麼

Vivo公司

1.簡單描述下Handler,Handler是怎麼切換執行緒的,Handler同步屏障
2.Glide的快取,有用過Glide的什麼深入的API,自定義model是在Glide的什麼階段
3.講講mvc,mvp模式,presenter記憶體洩漏的問題
4.ANR瞭解過嗎?有沒有實際的ANR定位問題的經歷
5.效能優化你做過哪些?
6.有什麼實際解決UI卡頓優化的經歷
7.有做過什麼Bitmap優化的實際經驗
8.專案搭建過程中有什麼經驗,有用到什麼gradle指令碼,分包有做什麼操作
9.元件化有詳細瞭解過嗎?ARouter詳細原理
10.講一下事件分發機制,RecyclerView是怎麼處理內部ViewClick衝突的
11.mainfest中配置LargeHeap,真的能分配到大記憶體嗎?

B站

1.一個大致有序的陣列如何排序,最快時間複雜度
2.如果叫你實現,你會怎樣實現一個多主題的效果
3.如何自定義實現一個FlexLayout
4.tinker的原理是什麼,還用過什麼熱修復框架,robust的原理是什麼?
5.說說你對註解的瞭解,是怎麼解析的
6.synchronized是公平鎖還是非公平鎖,ReteranLock是公平鎖嗎?是怎麼實現的
7.泛型是怎麼解析的,比如在retrofit中的泛型是怎麼解析的
8.mvp與mvvm的區別,mvvm怎麼更新UI,databinding用得多嗎,databinding的原理?
9.kotlin ?的原理
10.在專案中有直接使用tcp,socket來傳送訊息嗎
11.如何在網路框架裡直接避免記憶體洩漏,不需要在presenter中釋放訂閱
12.生命週期都是通過什麼呼叫的?有用過AIDL嗎?
13.講一下RecyclerView的快取機制,滑動10個,再滑回去,會有幾個執行onBindView
14.如何實現RecyclerView的區域性更新,用過payload嗎,notifyItemChange方法中的引數?
15.講講LinkedHashMap的資料結構
16.put post有什麼區別
17.A Activity開啟B Activity的生命週期變化,會有什麼方法打斷嗎?
18.Fragment hide show生命週期變化
19.Fragment replace生命週期變化

B站二面

1.為什麼考慮換工作
2.螢幕適配做過什麼工作?
3.你們網路框架用的什麼?為什麼?
4.如果讓你來開發B站的一個頁面,哪一個頁面可以很快入手
5.效能優化你做過什麼工作?
6.h5與native通訊你做過什麼工作?
7.外掛化的主要優點和缺點是什麼?
8.你覺得B站目前的APP有什麼問題?
9.如果產品要求你開發一個音訊播放功能,你會怎麼著手?預計會有什麼坑?
10.ViewPager切換Fragment什麼最耗時?
11.執行緒間同步的方法
12.鎖之間的區別

B站三面

1.介紹一下你自已和專案
2.說說為什麼考慮離職
3.說說對你們原來公司的印象
4.為什麼想來B站?你在B站上常常在看什麼?
5.期望薪資是多少?
6.你對搬到上海有什麼想法?

騰訊

1.介紹一下你們專案的架構
2.Rxjava是怎麼實現執行緒切換的
3.Rxjava自定義操作符
4.ARouter的原理
5.ARouter怎麼實現介面呼叫
6.ARouter怎麼實現頁面攔截
7.MVP怎麼處理記憶體洩漏
8.OkHttp怎麼實現連線池
9.如果讓你來實現一個網路框架,你會考慮什麼
10.你做過什麼效能優化的工作
11.熱修復的原理,資源的熱修復的原理,會不會有資源衝突的問題
12.ViewPager中巢狀ViewPager怎麼處理滑動衝突
13.android原始碼中有哪些設計模式
14.說說binder機制的原理

騰訊二面

1.為什麼考慮換一份工作?
2.在你們公司這幾年感覺怎麼樣?
3.技術選型上,為什麼這麼考慮?從開發效率,產品效能,產品質量,產品體驗等方面考慮
4.你們的產品為什麼被砍掉,從哪方面考慮
5.在這幾年裡,你有做過什麼覺得最有價值的工作
6.你還有什麼要問我的嗎?目前有幾個offer,傾向性是怎樣的?

網易雲音樂

1.ViewPager2原理
2.LifeCycle的原理是怎樣的?
3.ViewModel為什麼在旋轉螢幕後不會丟失狀態
4.Drawable與View有什麼區別,Drawable有哪些子類
5.屬性動畫更新時會回撥onDraw嗎?
6.OkHttp網路攔截器,應用攔截器?OKHttp有哪些攔截器,分別起什麼作用
7.自定義實現一個九宮格如何實現
8.PathClassLoader與DexClassLoader有什麼區別
9.這些年有做一些什麼比較難的工作?
10.編譯時註解與執行時註解,為什麼retrofit要使用執行時註解?什麼時候用執行時註解?
11.kotlin lazy使用,lazy viewmodel
12.有沒有看一下Google官方的ViewModel demo
13.ViewModel在Activity初始化與在Fragment中初始化,有什麼區別?
14.kotlin與Java互相呼叫有什麼問題?
15.retrofit怎麼做post請求
16.介面優化的一些方法,ConstraintLayout實現三等分,ConstraintLayout動畫.
17.CoordinatorLayout自定義behavior,可以攔截什麼?

網易雲音樂二面

1.你們的專案中做過什麼比較難的工作?
2.視訊播放,一個player怎麼實現預載入,避免loading
2.webView載入本地圖片,如何從安全方面考慮
3.http1.0,http1.1,http1.2有什麼區別
4.https與http有什麼區別
5.有用過什麼加密演算法?AES,RAS什麼原理?
6.android跨程式通訊瞭解嗎?共享記憶體用過嗎?binder怎麼驗證pid?binder驅動了解嗎?
7.SharedParence可以跨程式通訊嗎?如何改造成可以跨程式通訊的.commit和apply的區別.
8.Seriazable與Parceable的區別
9.Bundle是什麼資料結構?利用什麼傳遞資料
10.Jvm的記憶體結構,Jvm的垃圾回收,方法區有什麼東西?
11.h5與native互動,webView.loadUrl與webView.evaluateUrl區別

網易雲音樂三面

1.有沒有做過什麼WebView秒開的一些優化
2.你們的專案中有什麼難點?
3.native如何對h5進行鑑權,讓某些頁面可以調,某些頁面不能調
4.有看過哪些框架的原始碼嗎?
5.viewModel是怎麼實現雙向資料繫結的?
6.viewModel怎麼實現自動處理生命週期?
7.圖片載入優化有什麼經驗嗎?
8.viewpager切換掉幀有什麼處理經驗?
9.一個wrap_content的ImageView,載入遠端圖片,傳什麼引數裁剪比較好?
10.兩個getDrawable取得的物件,有什麼區別?
11.補間動畫與屬性動畫的區別,哪個效率更高?
12.jsBridge實現方式
13.平常是怎麼了解一些新知識與業界動態的,最近有什麼印象深刻的文章
14.平常抓包用什麼工具?
15.Mvp與Mvvm有什麼區別?

跟誰學

1.專案中的Webview與native通訊
2.專案中對WebView的功能進行了怎樣的增強
3.synchronized跟ReentranLock有什麼區別?
4.synchronized與ReentranLock發生異常的場景.
5.演算法,刪除陣列中的重複元素
6.手寫雙檢查單例模式,各個步驟有什麼區別
7.Activity生命週期

快手

1.string,equals,==有什麼區別
2.AsyncTask記憶體洩露
3.dispatchTouchEvent,onInterceptEvent,onTouchEvent順序,關係
4.onMeasure,onLayout,onDraw關係
5.演算法題,反轉陣列
6.演算法題,連結串列求和
7.說說你對協程的理解
8.協程怎麼取消
9.說說MVP與MVVM的區別

快手二面

1.演算法題,二叉樹的最大深度
2.如果android端和IOS端調一個介面,一個通了一個沒通,你會如何解決
3.如果android端和IOS端調一個介面,一個比較慢,一個比較快,有什麼思路
4.ARouter的原理是什麼?如果不用ARouter,你會怎麼去解藕。介面?設計介面有什麼需要
注意的?
5.h5與native互動做過什麼工作?
6.登陸功能,登陸成功然後跳轉到一個新Activity,中間涉及什麼?從事件傳遞,網路請求,AMS互動角度分析
7.AMS互動呼叫生命週期是順序的嗎?
8.binder程式間通訊可以呼叫原程式方法嗎?
9.mvp與mvvm有什麼區別?
10.token放在本地如何儲存?如何加密比較好?

快手三面

1.viewModel的原理,為什麼可以在Activity銷燬後儲存資料
2.mvvm雙向資料繫結的原理是怎樣的?ViewModel
3.說說你們專案中的難點是怎樣的?
4.虛擬碼實現一個長按事件
5.實現一個下載功能的介面

猿輔導

1.泛型有什麼優點?
2.動態代理有什麼作用?
3.拉圾回收的GCRoot是什麼?
4.Handler機制瞭解嗎?一個執行緒有幾個Looper?為什麼?
5.你瞭解協程嗎?協程有什麼作用?可以完全取代rxjava嗎?
6.你們用的什麼訊息通訊機制
7.你的專案有什麼難點?介紹一下?
8.演算法題,二叉樹最長結點集合

猿輔導2面

1.你們專案中的難點是什麼?
2.編譯期註解處理的是位元組碼還是java檔案
3.你在專案中有用到什麼設計模式嗎?
4.ARouter的原理是怎樣的?
5.外掛化的原理是怎樣的?
6.演算法題,K個一組反轉連結串列
7.廣播與RxBus的區別,全域性廣播與區域性廣播區別

猿輔導3面

1.你們專案中有什麼難點?
2.@JavaScriptInterface為什麼不通過多個方法來實現?
3.為什麼不利用同步方法來做jsBridge互動?同步可以做非同步,非同步不能做同步
4.網路封裝怎麼實現?
5.演算法題,不同面值的幾個硬幣,怎麼求滿足條件的最小值

鬥魚

1.說說HashMap的原理
2.說說Java的記憶體分割槽
3.講講你對垃圾回收機制的瞭解,老年代有什麼演算法?
4.說說你對volatile欄位有什麼用途?
5.說說事件分發機制,怎麼寫一個不能滑動的ViewPager
6.說說你對類載入機制的瞭解?DexClassLoader與PathClassLoader的區別
7.說說外掛化的原理,資源的外掛化id重複如何解決?
8.mvp與mvvm模式的區別是什麼?
9.JetPack元件用過哪些?lifeCycle的原理是什麼?如果在onStart裡面訂閱,會回撥onCreate嗎?
10.單例模式有什麼缺點?
11.說說App的啟動過程,在ActivityThread的main方法裡面做了什麼事,什麼時候啟動第一個Activity?
12.說說你對Handler機制的瞭解,同步訊息,非同步訊息等
13.說說你對螢幕重新整理機制的瞭解,雙重緩衝,三重緩衝,黃油模型
14.onCreate,onResume,onStart裡面,什麼地方可以獲得寬高
15.為什麼view.post可以獲得寬高,有看過view.post的原始碼嗎?
16.attachToWindow什麼時候呼叫?
17.DataBinding的原理了解嗎?

滴滴一面

1.JVM類載入機制瞭解嗎,類什麼時候會被載入?類載入的過程具體生命週期是怎樣的?
2.Handler記憶體洩漏的GCRoot是什麼?
3.動畫裡面用到了什麼設計模式?
4.OkHttp裡面用到了什麼設計模式?
5.OkHttp連線池是怎麼實現的?裡面怎麼處理SSL?
6.泛型為什麼要擦除?kotlin的泛型瞭解嗎?泛型的pecs原則
7.同步屏障
8.效能優化做過什麼工作?
9.RecyclerView的快取結構是怎樣的?快取的是什麼?cachedView會執行onBindView嗎?
10.RecyclerView巢狀RecyclerView,NestScrollView巢狀ScrollView滑動衝突
11.ViewGroup在Action_Move時onIntercept返回true,事件怎麼傳遞
12.Launcher啟動圖示,有幾個程式?
13.JMM可見性,原子性,有序性,synchronized可以保證什麼?
14.原始碼中有哪裡用到了AtomicInt
15.AQS瞭解嗎?
16.Activity內LinearLayout紅色wrap_content,包含View綠色wrap_content,求介面顏色
17.ViewModel的使用中有什麼坑?
18.有用DSL,anko寫過佈局嗎?
19.HashMap查詢的時間複雜度是多少?
20.阿里程式設計規範不建議使用執行緒池,為什麼?
21.四種執行緒池原理?
22.瞭解哪些演算法?
23.IdleHandler用過嗎?

滴滴二面

1.如何封裝一個字串轉數字的工具類
2.如何求當前Activity View的深度
3.多程式怎麼實現?如果啟動一個多程式APP,會有幾個程式執行?
4.反射可以反射final修飾的欄位嗎?
5.Activity與AppCompactActivity區別,Activity會打包到包裡面去嗎?
6.如何讓兩個執行緒迴圈交替列印
7.怎麼中止一個執行緒,Thread.Interupt一定有效嗎?
8.動畫連續呼叫的原理是什麼?
9.做過一些SDK的操作嗎?
10.協程可以在Java專案中使用嗎?
11.SharedPreference原理?讀取xml是在哪個執行緒?
12.瞭解APK打包的過程嗎?
13.class檔案的組成?常量池裡面有什麼內容?
14.自動裝箱發生在什麼時候?編譯期還是執行期
15.bugly日誌收集的原理是什麼?
16.啟動優化做過什麼工作?如果首頁就要用到的初始化?
17.DataBinding原理

滴滴3面

1.外掛化的原理是什麼?有沒有什麼非執行時外掛化的解決方案?
2.ARouter的原理是怎樣的?註解處理器是處理java還是位元組碼
3.java和位元組碼有什麼區別?
4.kotlin空安全的原理是什麼?
5.效能優化做過什麼工作?有用過什麼工具?有沒有精確測量的工具?
6.kotlinc與javac編譯位元組碼有什麼區別?
7.你在團隊中是怎樣一個角色?
8.你有沒有做什麼推進專案的工作
9.說說熱修復的原理?

位元組跳動

1.你們的專案中有什麼難點?
2.你們專案的穩定性如何?有做過什麼穩定性優化的工作?
3.WebView效能優化做過什麼工作?
4.AIDL in out oneWay代表什麼意思?
5.執行緒池瞭解多少?拒絕策略有幾種,為什麼有newSingleThread
6.跨程式通訊瞭解多少?管道瞭解嗎?
7.協程介紹一下,講一個協程的scope與context,協程的+號代表什麼
8.Handler休眠是怎樣的?epoll的原理是什麼?如何實現延時訊息,如果移除一個延時訊息會解除休眠嗎?
9.演算法斐波那契臺階
10.手寫生產者訊息者模型
11.IdleHandler應用場景

位元組跳動2面

1.自定義圓角圖片
2.自定義LinearLayout,怎麼測量子View寬高
3.setFactory和setFactory2有什麼區別?
4.外掛化換膚方案
5.外掛化的原理,startActivity hook了哪個方法
6.手勢操作ActionCancel後怎麼取消
7.怎麼優化xml inflate的時間,涉及IO與反射。瞭解compose嗎?
8.演算法題:二叉樹的每一層最左邊節點
9.RecyclerView 快取結構,RecyclerView預取,RecyclerView區域性重新整理
11.setOnTouchListener,onClickeListener和onTouchEvent的關係

最後

Android 中高階面試展開的完整面試題完整版開放下載
請前往Github獲取下載方式

相關文章