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客戶端程序,不依賴於發布下載而實現交互方案有哪些?

TAG:Android | 面試技巧 | 互聯網 |