1. 程式人生 > >分享一份非常強勢的Android面試題

分享一份非常強勢的Android面試題

是時候看一些面試題去鵝廠了,接下來我將分享一些面試題,每天總結一點點,希望對大家有所幫助!

ListView和RecyclerView區別

參考連結:

blog.csdn.net/shu_lan...

既然RecyclerView在很多方面能取代ListView,Google為什麼沒把ListView劃上一條過時的橫線?

答案: 可以沿著回收機制來回答。ListView採用的是RecyclerBin的回收機制在一些輕量級的List顯示時效率更高

你用過MVP和MVVM的區別

參考連結:
www.cnblogs.com/dubo-...

歡迎加入Android開發技術交流QQ群:653583088,本群可免費獲取Gradle、RxJava、小程式、Hybrid、移動架構、NDK、React Native、效能優化等技術教程!

HashMap的內部實現原理?

1) HashMap可以接受null鍵值和值,而HashTable則不能,HashMap是非synchronized的;儲存的是鍵值對。
2) HashMap是基於hashing原理,使用put(key,value)儲存物件到HashMap中,使用get(key)從HashMap中獲取物件,當我們給put方法傳遞鍵和值時,我們先對鍵呼叫hashCode()方法,返回的hashCode用於找到bucket位置來儲存鍵物件和值物件,作為Map.Entry.
3) 如果兩個物件hashCode相同:
儲存時:他們會找到相同的bucket位置,發生碰撞,因為HashMap使用連結串列儲存物件(每個Map.Entry都有一個next指標),這個Entry會儲存在連結串列中。

獲取時:會用hashCode找到bucket位置,然後呼叫key.equals()方法找到連結串列中正確的節點.最終找到要找的值物件.

減少碰撞:使用final修飾的物件、或不可變的物件作為鍵,使用(Integer、String)(是不可變、final的,而且已經重寫了equals和hashCode方法)這樣的wrapper類作為鍵是非常好的,(我們可以使用自定義的物件作為鍵嗎?答:當然可以,只要它遵守了equals和hashCode方法定義規則,並且當物件插入到Map中之後將不會再改變。)

4) HashMap負載因子預設是0.75,可設定,當map填滿了75%的bucket時候,將會建立原來HashMap大小兩倍的bucket陣列,來重新調整map的大小,並將原來的物件放入新的bucket陣列中,這個過程叫做rehashing,因為它呼叫hash方法找到新的bucket位置。
5) 重新調整map大小可能會發生競爭問題:如果兩個執行緒都發現HashMap需要調整大小了,它們都會嘗試進行調整,在調整中,儲存在連結串列中的元素的次序會反過來,因為移動bucket位置的時候,HashMap並不會將元素放在連結串列的尾部,而是放在頭部,這是為了避免尾部遍歷,如果條件競爭發生了,就死迴圈了。
你用過AsyncTask,說一說AsyncTask的內部實現原理?

參考連結:
www.cnblogs.com/absfr...

AsyncTask內部維護了一個執行緒池,是序列還是並行,怎麼維護的?

序列

參考連結:
www.cnblogs.com/absfr...

那你說說執行緒池的四種初始化吧?

你用過MD,你知道怎麼定義一個Behavior嗎?

參考連結:
www.jianshu.com/p/82d...

RecyclerView的拖拽怎麼實現的?

參考連結:
blog.csdn.net/aiynmim...

寫一個單利模式,應注意哪三個條件?

1、建構函式私有 2、含有一個該類的靜態私有物件 3、有一個靜態的公有的函式用於建立或獲取它本身的靜態私有物件 4、其次才是考慮執行緒同步!

一個按升序排列好的陣列int[] arry = {-5,-1,0,5,9,11,13,15,22,35,46},輸入一個x,int x = 31,在資料中找出和為x的兩個數,例如 9 + 22 = 31,要求演算法的時間複雜度為O(n);

如何向一個數據庫具有int型別A,B,C,D四列的表中隨機插入10000條資料?如何按升序取出A列中前10個數?

service兩種啟動方式有什麼區別?

參考連結:
blog.csdn.net/siwen12...

說說三級快取、Handler機制 ?

參考連結:
blog.csdn.net/wenzhi2...

Handler機制

www.cnblogs.com/denda...

阿里巴巴

LRUCache原理
圖片載入原理
模組化實現(好處,原因)
JVM
視訊加密傳輸
統計啟動時長,標準
如何保持應用的穩定性
ThreadLocal 原理
談談classloader
動態佈局
熱修復,外掛化
HashMap原始碼,SpareArray原理
效能優化,怎麼保證應用啟動不卡頓
怎麼去除重複程式碼
SP是程序同步的嗎?有什麼方法做到同步
介紹下SurfView
HashMap實現原理,ConcurrentHashMap 的實現原理
BroadcastReceiver,LocalBroadcastReceiver 區別
Bundle 機制
Handler 機制
android 事件傳遞機制
執行緒間 操作 List
App啟動流程,從點選桌面開始
動態載入
類載入器
OSGI
Https請求慢的解決辦法,DNS,攜帶資料,直接訪問IP
GC回收策略
畫出 Android 的大體架構圖
描述清點選 Android Studio 的 build 按鈕後發生了什麼,大體說清一個應用程式安裝到手機上時發生了什麼;
對 Dalvik、ART 虛擬機器有基本的瞭解;
Android 上的 Inter-Process-Communication 跨程序通訊時如何工作的;
App 是如何沙箱化,為什麼要這麼做;
許可權管理系統(底層的許可權是如何進行 grant 的)
程序和 Application 的生命週期;
系統啟動流程 Zygote程序 –> SystemServer程序 –> 各種系統服務 –> 應用程序
recycleview listview 的區別,效能
排序,快速排序的實現
樹:B 樹的介紹
圖:有向無環圖的解釋
TCP/UDP的區別
synchronized與Lock的區別
volatile
Java執行緒池
Java中物件的生命週期
類載入機制
雙親委派模型
Android事件分發機制
MVP模式
RxJava
抽象類和介面的區別
集合 Set實現 Hash 怎麼防止碰撞
JVM 記憶體區域 開執行緒影響哪塊記憶體
垃圾收集機制 物件建立,新生代與老年代
二叉樹 深度遍歷與廣度遍歷
B樹、B 樹
訊息機制
程序排程
程序與執行緒
死鎖
程序狀態
JVM記憶體模型
併發集合瞭解哪些
ConCurrentHashMap實現
CAS介紹
開啟執行緒的三種方式,run()和start()方法區別
執行緒池
常用資料結構簡介
判斷環(猜測應該是連結串列環)
排序,堆排序實現
連結串列反轉
動態許可權適配方案,許可權組的概念
網路請求快取處理,okhttp如何處理網路快取的
圖片載入庫相關,bitmap如何處理大圖,如一張30M的大圖,如何預- - 防OOM
程序保活
listview圖片載入錯亂的原理和解決方案
https相關,如何驗證證書的合法性,https中哪裡用了對稱加密,哪裡用了非對稱加密,對加密演算法(如RSA)等是否有了解
滴滴

MVP
廣播(動態註冊和靜態註冊區別,有序廣播和標準廣播)
service生命週期
handler實現機制(很多細節需要關注:如執行緒如何建立和退出訊息迴圈等等)
多執行緒(關於AsyncTask缺陷引發的思考)
資料庫資料遷移問題
設計模式相關(例如Android中哪裡使用了觀察者模式,單例模式相關)
x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完
TCP與UDP區別與應用(三次握手和四次揮手)涉及到部分細節(如client如何確定自己傳送的訊息被server收到) HTTP相關 提到過Websocket 問了WebSocket相關以及與socket的區別
是否熟悉Android jni開發,jni如何呼叫java層程式碼
程序間通訊的方式
java註解
計算一個view的巢狀層級
專案元件化的理解
多執行緒斷點續傳原理
Android系統為什麼會設計ContentProvider,程序共享和執行緒安全問題
jvm相關
Android相關優化(如記憶體優化、網路優化、佈局優化、電量優化、業務優化)
EventBus實現原理
美團

static synchronized 方法的多執行緒訪問和作用,同一個類裡面兩個synchronized方法,兩個執行緒同時訪問的問題
內部類和靜態內部類和匿名內部類,以及專案中的應用
handler發訊息給子執行緒,looper怎麼啟動
View事件傳遞
activity棧
封裝view的時候怎麼知道view的大小
arraylist和linkedlist的區別,以及應用場景
怎麼啟動service,service和activity怎麼進行資料互動
下拉狀態列是不是影響activity的生命週期,如果在onStop的時候做了網路請求,onResume的時候怎麼恢復
view渲染
今日頭條

資料結構中堆的概念,堆排序

死鎖的概念,怎麼避免死鎖
ReentrantLock 、synchronized和volatile(n面)
HashMap
singleTask啟動模式
用到的一些開源框架,介紹一個看過原始碼的,內部實現過程。
訊息機制實現
ReentrantLock的內部實現
App啟動崩潰異常捕捉
事件傳遞機制的介紹
ListView的優化
二叉樹,給出根節點和目標節點,找出從根節點到目標節點的路徑
模式MVP,MVC介紹
斷點續傳的實現
集合的介面和具體實現類,介紹
TreeMap具體實現
synchronized與ReentrantLock
手寫生產者/消費者模式
邏輯地址與實體地址,為什麼使用邏輯地址
一個無序,不重複陣列,輸出N個元素,使得N個元素的和相加為M,給出時間複雜度、空間複雜度。手寫演算法
.Android程序分類
前臺切換到後臺,然後再回到前臺,Activity生命週期回撥方法。彈出Dialog,生命值週期回撥方法。
Activity的啟動模式
愛奇藝

RxJava的功能與原理實現
RecycleView的使用,原理,RecycleView優化
ANR的原因
四大元件
Service的開啟方式
Activity與Service通訊的方式
Activity之間的通訊方式
HashMap的實現,與HashSet的區別
JVM記憶體模型,記憶體區域
Java中同步使用的關鍵字,死鎖
MVP模式
Java設計模式,觀察者模式
Activity與Fragment之間生命週期比較
廣播的使用場景
百度

Bitmap 使用時候注意什麼?
Oom 是否可以try catch ?
記憶體洩露如何產生?
介面卡模式,裝飾者模式,外觀模式的異同?
ANR 如何產生?
String buffer 與string builder 的區別?
如何保證執行緒安全?
java四中引用
Jni 用過麼?
多程序場景遇見過麼?
關於handler,在任何地方new handler 都是什麼執行緒下
sqlite升級,增加欄位的語句
bitmap recycler 相關
強引用置為null,會不會被回收?
glide 使用什麼快取?
Glide 記憶體快取如何控制大小?
如何保證多執行緒讀寫檔案的安全?
攜程

Activity啟動模式
廣播的使用方式,場景
App中喚醒其他程序的實現方式
AndroidManifest的作用與理解
List,Set,Map的區別
HashSet與HashMap怎麼判斷集合元素重複
Java中記憶體區域與垃圾回收機制
EventBus作用,實現方式,代替EventBus的方式
Android中開啟攝像頭的主要步驟
網易

concurrenthashmap
volatile
synchronized與Lock
Java執行緒池
wait/notify
NIO
垃圾收集器
Activity生命週期
AlertDialog,popupWindow,Activity區別
小米

String 為什麼要設計成不可變的?
fragment 各種情況下的生命週期
Activity 上有 Dialog 的時候按 home 鍵時的生命週期
橫豎屏切換的時候,Activity 各種情況下的生命週期
Application 和 Activity 的 context 物件的區別
序列化的作用,以及 Android 兩種序列化的區別。
List 和 Map 的實現方式以及儲存方式。
靜態內部類的設計意圖。
執行緒如何關閉,以及如何防止執行緒的記憶體洩漏
360

軟引用、弱引用區別
垃圾回收
多執行緒:怎麼用、有什麼問題要注意;Android執行緒有沒有上限,然後提到執行緒池的上限
JVM

OOM,記憶體洩漏
ANR怎麼分析解決
LinearLayout、RelativeLayout、FrameLayout的特性、使用場景
如何實現Fragment的滑動
ViewPager使用細節,如何設定成每次只初始化當前的Fragment,其他的不初始化
ListView重用的是什麼
程序間通訊的機制
AIDL機制
AsyncTask機制
如何取消AsyncTask
序列化
Android為什麼引入Parcelable
有沒有嘗試簡化Parcelable的使用
AIDL機制
專案:拉活怎麼做的
應用安裝過程
某海外直播公司
執行緒和程序的區別?
為什麼要有執行緒,而不是僅僅用程序?
演算法判斷單鏈表成環與否?
如何實現執行緒同步?
hashmap資料結構?
arraylist 與 linkedlist 異同?
object類的equal 和hashcode 方法重寫,為什麼?
hashmap如何put資料(從hashmap原始碼角度講解)?
簡述IPC?
fragment之間傳遞資料的方式?
簡述tcp四次揮手?
threadlocal原理
記憶體洩漏的可能原因?
用IDE如何分析記憶體洩漏?
OOM的可能原因?
執行緒死鎖的4個條件?
差值器&估值器
簡述訊息機制相關
程序間通訊方式?
Binder相關?
觸控事件的分發?
簡述Activity啟動全部過程?
okhttp原始碼?
RxJava簡介及其原始碼解讀?
效能優化如何分析systrace?
廣播的分類?
點選事件被攔截,但是相傳到下面的view,如何操作?
Glide原始碼?
ActicityThread相關?
volatile的原理
synchronize的原理
lock原理
翻轉一個單項鍊表
string to integer
合併多個單有序連結串列(假設都是遞增的)
Android中資料儲存方式
微信主頁面的實現方式
微信上訊息小紅點的原理
兩個不重複的陣列集合中,求共同的元素。
上一問擴充套件,海量資料,記憶體中放不下,怎麼求出。
Java中String的瞭解。
ArrayList與LinkedList區別
堆排序過程,時間複雜度,空間複雜度
快速排序的時間複雜度,空間複雜度
RxJava的作用,與平時使用的非同步操作來比,優勢
Android訊息機制原理
Binder機制介紹
為什麼不能在子執行緒更新UI
JVM記憶體模型
Android中程序記憶體的分配,能不能自己分配定額記憶體
垃圾回收機制與呼叫System.gc()區別
Android事件分發機制
斷點續傳的實現
RxJava的作用,優缺點
歡迎加入Android開發技術交流QQ群:653583088,本群可免費獲取Gradle、RxJava、小程式、Hybrid、移動架構、NDK、React Native、效能優化等技術教程!