Android 面試題10(重點)

2017-2018最新Android面試題

  • 基礎知識 – 四大組件(生命周期,使用場景,如何啟動)
  • java基礎 – 數據結構,線程,mvc框架
  • 通信 – 網絡連接(HttpClient,HttpUrlConnetion),Socket
  • 數據持久化 – SQLite,SharedPreferences,ContentProvider
  • 性能優化 – 布局優化,內存優化,電量優化
  • 安全 – 數據加密,代碼混淆,WebView/Js調用,https
  • UI– 動畫
  • 其他 – JNI,AIDL,Handler,Intent等
  • 開源框架 – Volley,Gilde,RxJava等(簡歷上寫你會的,用過的)
  • 拓展 – Android6.0/7.0/8.0特性,kotlin語言,I/O大會

Android面試題包括Android基礎,還有一些源碼級別的、原理這些等。所以想去大公司面試,一定要多看看源碼和實現方式,常用框架可以試試自己能不能手寫實現一下,鍛煉一下自己。

(一)Android基礎知識點
四大組件是什么

四大組件的生命周期和簡單用法

Activity之間的通信方式

Activity各種情況下的生命周期

橫豎屏切換的時候,Activity 各種情況下的生命周期

Activity與Fragment之間生命周期比較

Activity上有Dialog的時候按Home鍵時的生命周期

兩個Activity 之間跳轉時必然會執行的是哪幾個方法?

前臺切換到后臺,然后再回到前臺,Activity生命周期回調方法。彈出Dialog,生命值周期回調方法。

Activity的四種啟動模式對比

Activity狀態保存于恢復

fragment各種情況下的生命周期

Fragment狀態保存startActivityForResult是哪個類的方法,在什么情況下使用?

如何實現Fragment的滑動?

fragment之間傳遞數據的方式?

Activity 怎么和Service 綁定?

怎么在Activity 中啟動自己對應的Service?

service和activity怎么進行數據交互?

Service的開啟方式

請描述一下Service 的生命周期

談談你對ContentProvider的理解

說說ContentProvider、ContentResolver、ContentObserver 之間的關系

請描述一下廣播BroadcastReceiver的理解

廣播的分類

廣播使用的方式和場景

在manifest 和代碼中如何注冊和使用BroadcastReceiver?

本地廣播和全局廣播有什么差別?

BroadcastReceiver,LocalBroadcastReceiver 區別

AlertDialog,popupWindow,Activity區別

Application 和 Activity 的 Context 對象的區別

Android屬性動畫特性

如何導入外部數據庫?

LinearLayout、RelativeLayout、FrameLayout的特性及對比,并介紹使用場景。

談談對接口與回調的理解

回調的原理

寫一個回調demo

介紹下SurfView

RecycleView的使用

序列化的作用,以及Android兩種序列化的區別

差值器

估值器

Android中數據存儲方式

(二)Android源碼相關分析
Android動畫框架實現原理

Android各個版本API的區別

Requestlayout,onlayout,onDraw,DrawChild區別與聯系

invalidate和postInvalidate的區別及使用

Activity-Window-View三者的差別

談談對Volley的理解

如何優化自定義View

低版本SDK如何實現高版本api?

描述一次網絡請求的流程

HttpUrlConnection 和 okhttp關系

Bitmap對象的理解

looper架構

ActivityThread,AMS,WMS的工作原理

自定義View如何考慮機型適配

自定義View的事件

AstncTask+HttpClient 與 AsyncHttpClient有什么區別?

LaunchMode應用場景

AsyncTask 如何使用?

SpareArray原理

請介紹下ContentProvider 是如何實現數據共享的?

AndroidService與Activity之間通信的幾種方式

IntentService原理及作用是什么?

說說Activity、Intent、Service 是什么關系

ApplicationContext和ActivityContext的區別

SP是進程同步的嗎?有什么方法做到同步?

談談多線程在Android中的使用

進程和 Application 的生命周期

封裝View的時候怎么知道view的大小

RecycleView原理

AndroidManifest的作用與理解-

(三)常見的一些原理性問題
Handler機制和底層實現

Handler、Thread和HandlerThread的差別

handler發消息給子線程,looper怎么啟動?

關于Handler,在任何地方new Handler 都是什么線程下?

ThreadLocal原理,實現及如何保證Local屬性?

請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系

請描述一下View事件傳遞分發機制

Touch事件傳遞流程

事件分發中的onTouch 和onTouchEvent 有什么區別,又該如何使用?

View和ViewGroup分別有哪些事件分發相關的回調方法

View刷新機制

View繪制流程

自定義控件原理

自定義View如何提供獲取View屬性的接口?

Android代碼中實現WAP方式聯網

AsyncTask機制

AsyncTask原理及不足

如何取消AsyncTask?

為什么不能在子線程更新UI?

ANR產生的原因是什么?

ANR定位和修正

oom是什么?

什么情況導致oom?

有什么解決方法可以避免OOM?

Oom 是否可以try catch?為什么?

內存泄漏是什么?

什么情況導致內存泄漏?

如何防止線程的內存泄漏?

內存泄露場的解決方法

內存泄漏和內存溢出區別?

LruCache默認緩存大小

ContentProvider的權限管理(解答:讀寫分離,權限控制-精確到表級,URL控制)

如何通過廣播攔截和abort一條短信?

廣播是否可以請求網絡?

廣播引起anr的時間限制是多少?

計算一個view的嵌套層級

Activity棧

Android線程有沒有上限?

線程池有沒有上限?

ListView重用的是什么?

Android為什么引入Parcelable?

有沒有嘗試簡化Parcelable的使用?

(四)開發中常見的一些問題
ListView 中圖片錯位的問題是如何產生的?

混合開發有了解嗎?

知道哪些混合開發的方式?說出它們的優缺點和各自使用場景?(解答:比如:RN,weex,H5,小程序,WPA等。做Android的了解一些前端js等還是很有好處的);

屏幕適配的處理技巧都有哪些?

服務器只提供數據接收接口,在多線程或多進程條件下,如何保證數據的有序到達?

動態布局的理解

怎么去除重復代碼?

畫出 Android 的大體架構圖

Recycleview和ListView的區別

ListView圖片加載錯亂的原理和解決方案

動態權限適配方案,權限組的概念

Android系統為什么會設計ContentProvider?

下拉狀態欄是不是影響activity的生命周期

如果在onStop的時候做了網絡請求,onResume的時候怎么恢復?

Bitmap 使用時候注意什么?

Bitmap的recycler()

Android中開啟攝像頭的主要步驟

ViewPager使用細節,如何設置成每次只初始化當前的Fragment,其他的不初始化?

點擊事件被攔截,但是想傳到下面的View,如何操作?

微信主頁面的實現方式

微信上消息小紅點的原理

三、高端技術面試題
這里講的是大公司需要用到的一些高端Android技術,這里專門整理了一個文檔,希望大家都可以看看。這些題目有點技術含量,需要好點時間去研究一下的。

(一)圖片
圖片庫對比

圖片庫的源碼分析

圖片框架緩存實現

LRUCache原理

圖片加載原理

自己去實現圖片庫,怎么做?

Glide源碼解析

Glide使用什么緩存?

Glide內存緩存如何控制大小?

(二)網絡和安全機制
網絡框架對比和源碼分析

自己去設計網絡請求框架,怎么做?

okhttp源碼

網絡請求緩存處理,okhttp如何處理網絡緩存的

從網絡加載一個10M的圖片,說下注意事項

TCP的3次握手和四次揮手

TCP與UDP的區別

TCP與UDP的應用

HTTP協議

HTTP1.0與2.0的區別

HTTP報文結構

HTTP與HTTPS的區別以及如何實現安全性

如何驗證證書的合法性?

https中哪里用了對稱加密,哪里用了非對稱加密,對加密算法(如RSA)等是否有了解?

client如何確定自己發送的消息被server收到?

談談你對WebSocket的理解

WebSocket與socket的區別

談談你對安卓簽名的理解。

請解釋安卓為啥要加簽名機制?

視頻加密傳輸

App 是如何沙箱化,為什么要這么做?

權限管理系統(底層的權限是如何進行 grant 的)?

(三)數據庫
sqlite升級,增加字段的語句

數據庫框架對比和源碼分析

數據庫的優化

數據庫數據遷移問題

(四)算法
排序算法有哪些?

最快的排序算法是哪個?

手寫一個冒泡排序

手寫快速排序代碼

快速排序的過程、時間復雜度、空間復雜度

手寫堆排序

堆排序過程、時間復雜度及空間復雜度

寫出你所知道的排序算法及時空復雜度,穩定性

二叉樹給出根節點和目標節點,找出從根節點到目標節點的路徑

給阿里2萬多名員工按年齡排序應該選擇哪個算法?

GC算法(各種算法的優缺點以及應用場景)

蟻群算法與蒙特卡洛算法

子串包含問題(KMP 算法)寫代碼實現

一個無序,不重復數組,輸出N個元素,使得N個元素的和相加為M,給出時間復雜度、空間復雜度。手寫算法

萬億級別的兩個URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應用層面對尋址的優化)

百度POI中如何試下查找最近的商家功能(提示:坐標鏡像+R樹)。

兩個不重復的數組集合中,求共同的元素。

兩個不重復的數組集合中,這兩個集合都是海量數據,內存中放不下,怎么求共同的元素?

一個文件中有100萬個整數,由空格分開,在程序中判斷用戶輸入的整數是否在此文件中。說出最優的方法

一張Bitmap所占內存以及內存占用的計算

2000萬個整數,找出第五十大的數字?

燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?

求1000以內的水仙花數以及40億以內的水仙花數

5枚硬幣,2正3反如何劃分為兩堆然后通過翻轉讓兩堆中正面向上的硬8幣和反面向上的硬幣個數相同

時針走一圈,時針分針重合幾次

N*N的方格紙,里面有多少個正方形

x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完?

(五)插件化、模塊化、組件化、熱修復、增量更新、Gradle
對熱修復和插件化的理解

插件化原理分析

模塊化實現(好處,原因)

熱修復,插件化

項目組件化的理解

描述清點擊 Android Studio 的 build 按鈕后發生了什么

(六)架構設計和設計模式
談談你對Android設計模式的理解

MVC MVP MVVM原理和區別

你所知道的設計模式有哪些?

項目中常用的設計模式

手寫生產者/消費者模式

寫出觀察者模式的代碼

適配器模式,裝飾者模式,外觀模式的異同?

用到的一些開源框架,介紹一個看過源碼的,內部實現過程。

談談對RxJava的理解

RxJava的功能與原理實現

RxJava的作用,與平時使用的異步操作來比的優缺點

說說EventBus作用,實現方式,代替EventBus的方式

從0設計一款App整體架構,如何去做?

說一款你認為當前比較火的應用并設計(比如:直播APP,P2P金融,小視頻等)

談談對java狀態機理解

Fragment如果在Adapter中使用應該如何解耦?

Binder機制及底層實現

對于應用更新這塊是如何做的?(解答:灰度,強制更新,分區域更新)?

實現一個Json解析器(可以通過正則提高速度)

統計啟動時長,標準

(七)性能優化
如何對Android 應用進行性能分析以及優化?

ddms 和 traceView

性能優化如何分析systrace?

用IDE如何分析內存泄漏?

Java多線程引發的性能問題,怎么解決?

啟動頁白屏及黑屏解決?

啟動太慢怎么解決?

怎么保證應用啟動不卡頓?

App啟動崩潰異常捕捉

自定義View注意事項

現在下載速度很慢,試從網絡協議的角度分析原因,并優化(提示:網絡的5層都可以涉及)。

Https請求慢的解決辦法(提示:DNS,攜帶數據,直接訪問IP)

如何保持應用的穩定性

RecyclerView和ListView的性能對比

ListView的優化

RecycleView優化

View渲染

Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM

java中的四種引用的區別以及使用場景

強引用置為null,會不會被回收?

(八)NDK、jni、Binder、AIDL、進程通信有關
請介紹一下NDK

什么是NDK庫?

jni用過嗎?

如何在jni中注冊native函數,有幾種注冊方式?

Java如何調用c、c++語言?

jni如何調用java層代碼?

進程間通信的方式?

Binder機制

簡述IPC?

什么是AIDL?

AIDL解決了什么問題?

AIDL如何使用?

Android 上的 Inter-Process-Communication 跨進程通信時如何工作的?

多進程場景遇見過么?

Android進程分類?

進程和 Application 的生命周期?

進程調度

談談對進程共享和線程安全的認識

談談對多進程開發的理解以及多進程應用場景

什么是協程?

(九)framework層、ROM定制、Ubuntu、Linux之類的問題
java虛擬機的特性

談談對jvm的理解

JVM內存區域,開線程影響哪塊內存

對Dalvik、ART虛擬機有什么了解?

Art和Dalvik對比

虛擬機原理,如何自己設計一個虛擬機(內存管理,類加載,雙親委派)

談談你對雙親委派模型理解

JVM內存模型,內存區域

類加載機制

談談對ClassLoader(類加載器)的理解

談談對動態加載(OSGI)的理解

內存對象的循環引用及避免

內存回收機制、GC回收策略、GC原理時機以及GC對象

垃圾回收機制與調用System.gc()區別

Ubuntu編譯安卓系統

系統啟動流程是什么?(提示:Zygote進程 –> SystemServer進程 –> 各種系統服務 –> 應用進程)

大體說清一個應用程序安裝到手機上時發生了什么

簡述Activity啟動全部過程

App啟動流程,從點擊桌面開始

邏輯地址與物理地址,為什么使用邏輯地址?

Android為每個應用程序分配的內存大小是多少?

Android中進程內存的分配,能不能自己分配定額內存?

進程保活的方式

如何保證一個后臺服務不被殺死?(相同問題:如何保證service在后臺不被kill?)比較省電的方式是什么?

App中喚醒其他進程的實現方式

1.Activity的啟動過程(不要回答生命周期)
http://blog.csdn.net/luoshengyang/article/details/6689748

2.Activity的啟動模式以及使用場景
(1)manifest設置,(2)startActivity flag
http://blog.csdn.net/CodeEmperor/article/details/50481726
此處延伸:棧(First In Last Out)與隊列(First In First Out)的區別

3.Service的兩種啟動方式
(1)startService(),(2)bindService()
http://www.lxweimin.com/p/2fb6eb14fdec

4.Broadcast注冊方式與區別
(1)靜態注冊(minifest),(2)動態注冊
http://www.lxweimin.com/p/ea5e233d9f43
此處延伸:什么情況下用動態注冊

5.HttpClient與HttpUrlConnection的區別
http://blog.csdn.net/guolin_blog/article/details/12452307
此處延伸:Volley里用的哪種請求方式(2.3前HttpClient,2.3后HttpUrlConnection)

6.http與https的區別
http://blog.csdn.net/whatday/article/details/38147103
此處延伸:https的實現原理

7.手寫算法(選擇冒泡必須要會)
http://www.lxweimin.com/p/ae97c3ceea8d

8.進程保活(不死進程)
http://www.lxweimin.com/p/63aafe3c12af
此處延伸:進程的優先級是什么(下面這篇文章,都有說)
https://segmentfault.com/a/1190000006251859

9.進程間通信的方式
(1)AIDL,(2)廣播,(3)Messenger
AIDL : http://www.lxweimin.com/p/a8e43ad5d7d2
http://www.lxweimin.com/p/0cca211df63c
Messenger : http://blog.csdn.net/lmj623565791/article/details/47017485
此處延伸:簡述Binder , http://blog.csdn.net/luoshengyang/article/details/6618363/

10.加載大圖
PS:有家小公司(規模寫假的,給騙過去了),直接把項目給我看,讓我說實現原理。。
最讓我無語的一次面試,就一個點問的我底褲都快穿了,就差幫他們寫代碼了。。
http://blog.csdn.net/lmj623565791/article/details/49300989

11.三級緩存(各大圖片框架都可以扯到這上面來)
(1)內存緩存,(2)本地緩存,(3)網絡
內存:http://blog.csdn.net/guolin_blog/article/details/9526203
本地:http://blog.csdn.net/guolin_blog/article/details/28863651

12.MVP框架(必問)
http://blog.csdn.net/lmj623565791/article/details/46596109
此處延伸:手寫mvp例子,與mvc之間的區別,mvp的優勢

13.講解一下Context
http://blog.csdn.net/lmj623565791/article/details/40481055

14.JNI
http://www.lxweimin.com/p/aba734d5b5cd
此處延伸:項目中使用JNI的地方,如:核心邏輯,密鑰,加密邏輯

15.java虛擬機和Dalvik虛擬機的區別
http://www.lxweimin.com/p/923aebd31b65

16.線程sleep和wait有什么區別
http://blog.csdn.net/liuzhenwen/article/details/4202967

17.View,ViewGroup事件分發
http://blog.csdn.net/guolin_blog/article/details/9097463
http://blog.csdn.net/guolin_blog/article/details/9153747

18.保存Activity狀態
onSaveInstanceState()
http://blog.csdn.net/yuzhiboyi/article/details/7677026

19.WebView與js交互(調用哪些API)
http://blog.csdn.net/cappuccinolau/article/details/8262821/

20.內存泄露檢測,內存性能優化
http://blog.csdn.net/guolin_blog/article/details/42238627
這篇文章有四篇,很詳細。
此處延伸:
(1)內存溢出(OOM)和內存泄露(對象無法被回收)的區別。
(2)引起內存泄露的原因

21.布局優化
http://blog.csdn.net/guolin_blog/article/details/43376527

22.自定義view和動畫
以下兩個講解都講得很透徹,這部分面試官多數不會問很深,要么就給你一個效果讓你講原理。
(1)http://www.gcssloop.com/customview/CustomViewIndex
(2)http://blog.csdn.net/yanbober/article/details/50577855

23.設計模式(單例,工廠,觀察者。作用,使用場景)
一般說自己會的就ok,不要只記得名字就一輪嘴說出來,不然有你好受。
http://blog.csdn.net/jason0539/article/details/23297037/
此處延伸:Double Check的寫法被要求寫出來。

24.String,Stringbuffer,Stringbuilder 區別
http://blog.csdn.net/kingzone_2008/article/details/9220691

25.開源框架,為什么使用,與別的有什么區別
這個問題基本必問。在自己簡歷上寫什么框架,他就會問什么。
如:Volley,面試官會問我Volley的實現原理,與okhttp和retrofit的區別。
開源框架很多,我就選幾個多數公司都會用的出來(框架都是針對業務和性能,所以不一定出名的框架就有人用)
網絡請求:Volley,okhttp,retrofit
異步:RxJava,AsyncTask
圖片處理:Picasso,Glide
消息傳遞:EventBus
以上框架請自行查找,太多了就不貼出來了。

26.RecyclerView
http://blog.csdn.net/lmj623565791/article/details/45059587

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容