2020年Android面試題(BAT最新面試題)包含詳細答案

2020年Android面試題彙總,面試必看,輕鬆拿BAT大廠Offer。完全免費。

基礎問題相關(答案在文末)

1、接口的意義-百度
2、抽象類的意義-百度
3、內部類的作用-樂視
4、Java 虛擬機的特性-百度-樂視
5、哪些情況下的對象會被垃圾回收機制處理掉-美團-小米
6、進程和線程的區別-獵豹-美團
7、java中==和equals和hashCode的區別-樂視
8、HashMap的實現原理-美團
9、string-stringbuffer-stringbuilder區別-小米-樂視-百度
10、什麼導致線程阻塞-58-美團
11、多線程同步機制-獵豹
12、ArrayMap對比HashMap
13、hashmap和hashtable的區別-樂視-小米-360
14、容器類之間的區別-樂視-美團
15、抽象類接口區別-360

java深入源碼級的面試題(有難度)

哪些情況下的對象會被垃圾回收機制處理掉?
講一下常見編碼方式?
utf-8編碼中的中文佔幾個字節;int型幾個字節?
靜態代理和動態代理的區別,什麼場景使用?
Java的異常體系
談談你對解析與分派的認識。
修改對象A的equals方法的簽名,那麼使用HashMap存放這個對象實例的時候,會調用哪個equals方法?
Java中實現多態的機制是什麼?
如何將一個Java對象序列化到文件裏?
說說你對Java反射的理解
說說你對Java註解的理解
說說你對依賴注入的理解
說一下泛型原理,並舉例說明
Java中String的瞭解
String爲什麼要設計成不可變的?
Object類的equal和hashCode方法重寫,爲什麼?

騰訊面試題精選
45、2000萬個整數,找出第五十大的數字?
46、從網絡加載一個10M的圖片,說下注意事項
47、自定義View注意事項
48、項目中常用的設計模式
49、JVM的理解

阿里面試題精選
50、進程間通信方式
51、什麼是協程
52、內存泄露是怎麼回事
53、程序計數器,引到了邏輯地址(虛地址)和物理地址及其映射關係
54、數組和鏈表的區別
55、二叉樹的深度優先遍歷和廣度優先遍歷的具體實現
56、堆的結構
57、bitmap對象的理解
58、什麼是深拷貝和淺拷
59、對象鎖和類鎖是否會互相影響
60、looper架構
61、自定義控件原理
62、自定義控件原理
63、ActivityThread,Ams,Wms的工作原理
64、Java中final,finally,finalize的區別
65、一個文件中有100萬個整數,由空格分開,在程序中判斷用戶輸入的整數是否在此文件中。說出最優的方法
66、兩個進程同時要求寫或者讀,能不能實現?如何防止進程的同步?
67、volatile 的意義?
68、燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?

數據結構

常用數據結構簡介
併發集合瞭解哪些?
列舉java的集合以及集合之間的繼承關係
集合類以及集合框架
容器類介紹以及之間的區別(容器類估計很多人沒聽這個詞,Java容器主要可以劃分爲4個部分:List列表、Set集合、Map映射、工具類(Iterator迭代器、Enumeration枚舉類、Arrays和Collections),具體的可以看看這篇博文 Java容器類)
List,Set,Map的區別
List和Map的實現方式以及存儲方式
HashMap的實現原理
HashMap數據結構?
HashMap源碼理解
HashMap如何put數據(從HashMap源碼角度講解)?
HashMap怎麼手寫實現?
ConcurrentHashMap的實現原理
ArrayMap和HashMap的對比
HashTable實現原理
TreeMap具體實現
HashMap和HashTable的區別
HashMap與HashSet的區別
HashSet與HashMap怎麼判斷集合元素重複?
集合Set實現Hash怎麼防止碰撞
ArrayList和LinkedList的區別,以及應用場景
數組和鏈表的區別
二叉樹的深度優先遍歷和廣度優先遍歷的具體實現
堆的結構
堆和樹的區別
堆和棧在內存中的區別是什麼(解答提示:可以從數據結構方面以及實際實現方面兩個方面去回答)?
什麼是深拷貝和淺拷貝
手寫鏈表逆序代碼
講一下對樹,B+樹的理解
講一下對圖的理解
判斷單鏈表成環與否?
鏈表翻轉(即:翻轉一個單項鍊表)
合併多個單有序鏈表(假設都是遞增的)

線程、多線程和線程池

開啓線程的三種方式?
線程和進程的區別?
爲什麼要有線程,而不是僅僅用進程?
run()和start()方法區別
如何控制某個方法允許併發訪問線程的個數?
在Java中wait和seelp方法的不同;
談談wait/notify關鍵字的理解
什麼導致線程阻塞?
線程如何關閉?
講一下java中的同步的方法
數據一致性如何保證?
如何保證線程安全?
如何實現線程同步?
兩個進程同時要求寫或者讀,能不能實現?如何防止進程的同步?
線程間操作List
Java中對象的生命週期
Synchronized用法
synchronize的原理
談談對Synchronized關鍵字,類鎖,方法鎖,重入鎖的理解
static synchronized 方法的多線程訪問和作用
同一個類裏面兩個synchronized方法,兩個線程同時訪問的問題
volatile的原理
談談volatile關鍵字的用法
談談volatile關鍵字的作用
談談NIO的理解
synchronized 和volatile 關鍵字的區別
synchronized與Lock的區別
ReentrantLock 、synchronized和volatile比較
ReentrantLock的內部實現
lock原理
死鎖的四個必要條件?
怎麼避免死鎖?
對象鎖和類鎖是否會互相影響?
什麼是線程池,如何使用?
Java的併發、多線程、線程模型
談談對多線程的理解
多線程有什麼要注意的問題?
談談你對併發編程的理解並舉例說明
談談你對多線程同步機制的理解?
如何保證多線程讀寫文件的安全?
多線程斷點續傳原理
斷點續傳的實現

Android 方面
16、如何導入外部數據庫?
17、本地廣播和全局廣播有什麼差別?
18、intentService作用是什麼,AIDL解決了什麼問題-小米
19、Ubuntu編譯安卓系統-百度
20、LaunchMode應用場景-百度-小米-樂視
21、Touch事件傳遞流程-小米
22、View繪製流程-百度
23、多線程-360
24、Handler,Thread和HandlerThread的差別-小米
25、線程同步-百度
26、什麼情況導致內存泄漏-美團
27、ANR定位和修正
28、什麼情況導致oom-樂視-美團
29、Service與Activity之間通信的幾種方式
30、如何保證service在後臺不被Kill
31、Requestlayout,onlayout,onDraw,DrawChild區別與聯繫-獵豹
32、Android動畫框架實現原理
33、Android爲每個應用程序分配的內存大小是多少-美團
34、優化自定義view百度-樂視-小米
36、volley-美團-樂視
37、Glide源碼解析
38、Android設計模式
39、Android屬性動畫特性-樂視-小米
40、Activity Window View三者的差別,fragment的特點-360
41、invalidate和postInvalidate的區別及使用-百度
42、LinearLayout和RelativeLayout性能對比-百度
43、View刷新機制-百度-美團
44、架構設計-搜狐

(一)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的作用與理解

微信掃描二維碼關注公衆號,回覆2020,即可查看最新面試題以及答案。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章