2017下半年,一二線互聯網公司Android面試題匯總
android的小夥伴收藏起來,看機會的時候過一遍,事半功倍呦~
轉眼就到了2017年10月,離2018就剩下幾個月了,很多人估計正在跳槽的路上,整理一份Android高級開發工程師面試集錦,對照這些問題進行複習,將會事半功倍。廢話不多說,直接上乾貨,由於是整理於網路,就不標明原創,希望大家多多分享和轉發給有需要的同學。
阿里巴巴
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()方法區別
線程池
常用數據結構簡介
判斷環(猜測應該是鏈表環)
排序,堆排序實現
鏈表反轉
騰訊
synchronized用法
volatile用法
動態許可權適配方案,許可權組的概念
網路請求緩存處理,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的作用,優缺點
我的微信:Cathy-LYY
簡歷請投:cathy.liu@gitalent.cn
推薦閱讀:
※中國用戶願意為哪些類型的手機應用付費?
※Android 平台上有沒有類似 Flipboard 的新聞閱讀器?
※黑域補丁一鍵製作工具
※Android 的 synthetic back stack 是好設計嗎?
※對於Android客戶端程序,不依賴於發布下載而實現交互方案有哪些?