-
描述清點(diǎn)擊 Android Studio 的 build 按鈕后發(fā)生了什么
-
畫出 Android 的大體架構(gòu)圖
Android系統(tǒng)采用分層架構(gòu)唱遭,從下往上依次為:
Linux內(nèi)核
系統(tǒng)庫和Android運(yùn)行時(shí)
框架層
應(yīng)用程序?qū)?/p>
-
App啟動(dòng)流程卵佛,從點(diǎn)擊桌面開始
App啟動(dòng)
Android App啟動(dòng)流程(下)
Https請求慢的解決辦法: DNS攜帶數(shù)據(jù)缤沦,直接訪問IP
https相關(guān)图柏,如何驗(yàn)證證書的合法性崩掘,https中哪里用了對稱加密琴儿,哪里用了非對稱加密,對加密算法(如RSA)等是否有了解
-
Bundle 機(jī)制
-
Activity的啟動(dòng)模式
standard
singleTop
singleTask
singleInstance
啟動(dòng)模式
-
四大組件
-
Service的開啟方式
-
廣播的使用場景
-
service一些知識,Activity與Service通信的方式
-
簡述Activity啟動(dòng)全部過程纺酸?
-
fragment的生命周期,Activity與Fragment之間生命周期比較
-
簡述IPC嘲碱?
IPC是Inter-Process Communication的縮寫金砍,含義為進(jìn)程間通信或者跨進(jìn)程通信,是指兩個(gè)進(jìn)程之間進(jìn)行數(shù)據(jù)交換的過程麦锯。
IPC
IPC-2
http://www.reibang.com/p/96062c549b2a
-
fragment之間傳遞數(shù)據(jù)的方式恕稠?
1.Fragment 方法設(shè)置和調(diào)用。
2.采取接口回調(diào)的方式進(jìn)行數(shù)據(jù)傳遞扶欣。
3.使用三方開源框架:EventBus
fragment之間傳遞數(shù)據(jù)
-
四種啟動(dòng)模式鹅巍,用過哪些,出過什么問題料祠。(包括聊到了onSaveInstanceState跟onRestoreInstanceState的場景與時(shí)機(jī)骆捧,然后在一個(gè)點(diǎn)跟面試官看法不同,我說我調(diào)試時(shí)候遇到過相關(guān)問題术陶,面試官讓我回去再確認(rèn)下)
standard 標(biāo)準(zhǔn)模式凑懂,每次都新建一個(gè)實(shí)例對象
singleTop 如果在任務(wù)棧頂發(fā)現(xiàn)了相同的實(shí)例則重用煤痕,否則新建并壓入棧頂
singleTask 如果在任務(wù)棧中發(fā)現(xiàn)了相同的實(shí)例梧宫,將其上面的任務(wù)終止并移除灸促,重用該實(shí)例撮抓。否則新建實(shí)例并入棧
singleInstance 允許不同應(yīng)用呈宇,進(jìn)程線程等共用一個(gè)實(shí)例苫费,無論從何應(yīng)用調(diào)用該實(shí)例都重用
啟動(dòng)模式
onSaveInstanceState()方法會在什么時(shí)候被執(zhí)行尽纽,有這么幾種情況:
(1)叨咖、當(dāng)用戶按下HOME鍵時(shí)妖异。
這是顯而易見的谱邪,系統(tǒng)不知道你按下HOME后要運(yùn)行多少其他的程序楞泼,自然也不知道activity A是否會被銷毀驰徊,因此系統(tǒng)會調(diào)用onSaveInstanceState()笤闯,讓用戶有機(jī)會保存某些非永久性的數(shù)據(jù)。以下幾種情況的分析都遵循該原則
(2)棍厂、長按HOME鍵颗味,選擇運(yùn)行其他的程序時(shí)。
(3)牺弹、按下電源按鍵(關(guān)閉屏幕顯示)時(shí)浦马。
(4)、從activity A中啟動(dòng)一個(gè)新的activity時(shí)张漂。
(5)晶默、屏幕方向切換時(shí),例如從豎屏切換到橫屏?xí)r航攒。
數(shù)據(jù)恢復(fù)
-
BroadcastReceiver磺陡,LocalBroadcastReceiver 區(qū)別
一、應(yīng)用場景
1漠畜、BroadcastReceiver用于應(yīng)用之間的傳遞消息仅政;
2、而LocalBroadcastManager用于應(yīng)用內(nèi)部傳遞消息盆驹,比broadcastReceiver更加高效圆丹。
二、安全
1躯喇、BroadcastReceiver使用的Content API辫封,所以本質(zhì)上它是跨應(yīng)用的,所以在使用它時(shí)必須要考慮到不要被別的應(yīng)用濫用廉丽;
2倦微、LocalBroadcastManager不需要考慮安全問題,因?yàn)樗辉趹?yīng)用內(nèi)部有效正压。
LocalBroadcastReceiver
-
android 事件傳遞機(jī)制
事件傳遞機(jī)制
Android中事件傳遞機(jī)制(一) - 理論知識
-
如何保持應(yīng)用的穩(wěn)定性
- 提高編碼質(zhì)量 (靜態(tài)掃描工具:Lint欣福、Findbugs)
- 改進(jìn)Crash上報(bào)系統(tǒng),解決Crash問題
- 目前的策略:先在某一個(gè)渠道灰度,當(dāng)問題暴露的足夠多時(shí)焦履,再發(fā)布全量版本拓劝。
穩(wěn)定性
-
談?wù)刢lassloader,類加載機(jī)制 雙親委派模型
熱修復(fù)詳細(xì)的流程:
1.通過PathClassLoader 來加載自身App的dex,因?yàn)槲覀円薷淖约旱腷ug.
2.通過DexClassLoader來加載我們的補(bǔ)丁dex文件,這里面就是沒有bug的dex.
3.反射兩個(gè)classLoader的<DexPathList pathList;>,目的是拿到這個(gè)值.
4.接著我們來繼續(xù)反射兩個(gè)classloader中的pathList(注意:是兩個(gè)!一個(gè)是我們自己應(yīng)用的,另一個(gè)是我們補(bǔ)丁的,PathClassLoader和DexClassLoader都繼承BaseDexClassLoader),DexPathList里面的<Element[] dexElements;>,沒錯(cuò)還是拿到這個(gè)數(shù)組的值
5.合并兩個(gè)反射到的Element 數(shù)組!這里是重中之重.我們需要把我們的補(bǔ)丁dex放在數(shù)組的最前面!
6.將合并的新的數(shù)組,通過Field重新設(shè)置到我們自身App的DexPathList->dexElements.沒錯(cuò)!就是合并之后覆蓋有bug那個(gè)loader的Element 數(shù)組!!
7.通過Android build-tools 中的dx命令打包一個(gè)沒有bug的dex
注:假設(shè)你的App中有一個(gè)class A 出bug了,那么你就可以通過dx命令打包一個(gè)只有class A的dex文件.
-
動(dòng)態(tài)加載
-
SP是進(jìn)程同步的嗎?有什么方法做到同步
commit() 是同步提交到內(nèi)存后再同步提交到磁盤上嘉裤,如果 commit() 之前還有沒結(jié)束的異步任務(wù)(包括 apply() 的提交)郑临,就會一直阻塞到前面的提交都完成,才進(jìn)行提交屑宠。
apply() 是立即提交到內(nèi)存后異步提交到磁盤上厢洞。
commit() 有返回值,而 apply 沒有返回值。
存在內(nèi)存與磁盤數(shù)據(jù)不同步的情況躺翻,多進(jìn)程共享需要注意數(shù)據(jù)安全丧叽。
ContentProvider 多進(jìn)程共享 SharedPreferences 數(shù)據(jù)
-
介紹下SurfaceView
一是,如果屏幕刷新頻繁公你,onDraw方法會被頻繁的調(diào)用蠢正,onDraw方法執(zhí)行的時(shí)間過長,會導(dǎo)致掉幀省店,出現(xiàn)頁面卡頓嚣崭。而SurfaceView采用了雙緩沖技術(shù),提高了繪制的速度懦傍,可以緩解這一現(xiàn)象雹舀。
二是,view的onDraw方法是運(yùn)行在主線程中的粗俱,會輕微阻塞主線程说榆,對于需要頻繁刷新頁面的場景,而且onDraw方法中執(zhí)行的操作比較耗時(shí)寸认,會導(dǎo)致主線程阻塞签财,用戶事件的響應(yīng)受到影響,也就是響應(yīng)速度下降偏塞,影響了用戶的體驗(yàn)唱蒸。而SurfaceView可以在自線程中更新UI,不會阻塞主線程灸叼,提高了響應(yīng)速度神汹。
SurfaceView介紹
SurfaceView SurfaceView, TextureView, SurfaceTexture等的區(qū)別
http://www.reibang.com/p/03449246930b
-
OSGI
OSGi是java平臺(注意,是平臺而不是語言9沤瘛)的模塊化層
-
對 Dalvik屁魏、ART 虛擬機(jī)有基本的了解;
-
App 是如何沙箱化氓拼,為什么要這么做;
-
Application 的生命周期抵碟;
-
handler實(shí)現(xiàn)機(jī)制(很多細(xì)節(jié)需要關(guān)注:如線程如何建立和退出消息循環(huán)等等)
-
ThreadLocal 原理
-
ActicityThread相關(guān)桃漾?
-
進(jìn)程間通信的方式
- 使用Bundle的方式
- 使用文件共享的方式
- 使用Messenger的方式
- 使用AIDL的方式
- 使用Socket的方式
-
為什么不能在子線程更新UI
-
Handler為什么能夠更新UI
-
如何保證一個(gè)線程只有一個(gè)Looper
MVP模式
模式MVP,MVC介紹
recycleview listview 的區(qū)別,性能
Android ListView與RecyclerView對比淺析
ListView的優(yōu)化
ListView的優(yōu)化
RecycleView的使用立磁,原理呈队,RecycleView優(yōu)化
RecyclerView 性能優(yōu)化
ListView 和 RecyclerView 復(fù)用機(jī)制區(qū)別
網(wǎng)絡(luò)請求緩存處理剥槐,okhttp如何處理網(wǎng)絡(luò)緩存的
圖片加載庫相關(guān)唱歧,bitmap如何處理大圖,如一張30M的大圖,如何預(yù)防OOM
高效加載大圖, 有效避免程序OOM
listview圖片加載錯(cuò)亂的原理和解決方案
ListView異步加載圖片亂序問題颅崩,原因分析及解決方案
圖片加載原理
圖片加載之原理分析
Android圖片加載機(jī)制及其優(yōu)化
模塊化實(shí)現(xiàn)(好處几于,原因)
模塊化實(shí)現(xiàn)
熱修復(fù),插件化
-
OkHttp源碼?
-
Glide源碼沿后?
RxJava的作用沿彭,與平時(shí)使用的異步操作來比,優(yōu)勢
響應(yīng)式編程框架尖滚,響應(yīng)式編程是一種通過異步和數(shù)據(jù)流來構(gòu)建事務(wù)關(guān)系的編程模型
為什么使用RxJava
RxJava簡介及其源碼解讀喉刘?
源碼分析
RxJava的作用,優(yōu)缺點(diǎn)
TCP的三次握手四次揮手全流程(畫了每次握手揮手時(shí)候的報(bào)文內(nèi)容與控制位設(shè)定)
三次握手四次揮手過程
-
Volley的源代碼
http中緩存機(jī)制漆弄,Last-Modify的作用
徹底弄懂HTTP緩存機(jī)制及原理
-
EventBus實(shí)現(xiàn)原理
Android相關(guān)優(yōu)化(如內(nèi)存優(yōu)化睦裳、網(wǎng)絡(luò)優(yōu)化、布局優(yōu)化撼唾、電量優(yōu)化廉邑、業(yè)務(wù)優(yōu)化)
內(nèi)存優(yōu)化
網(wǎng)絡(luò)優(yōu)化
布局優(yōu)化
電量優(yōu)化
業(yè)務(wù)優(yōu)化
handler發(fā)消息給子線程,looper怎么啟動(dòng)
Handler之從主線程往子線程發(fā)消息
OOM倒谷,內(nèi)存泄漏
內(nèi)存泄漏
activity棧
Activity調(diào)用棧分析
封裝view的時(shí)候怎么知道view的大小
view渲染
View 渲染流程
Window蛛蒙、DecorView、ViewRootImp的關(guān)系
Measure渤愁、Layout牵祟、Draw
Bitmap 使用時(shí)候注意什么?
Bitmap 使用時(shí)候注意
OOM 是否可以try catch 抖格?
oom是否可以try catch
ANR 如何產(chǎn)生课舍?
ANR的產(chǎn)生和解決辦法
Jni 用過么?
CMake的編譯使用
native 通過JNI調(diào)用java的屬性跟方法
Glide 使用什么緩存他挎,內(nèi)存緩存如何控制大畜菸病?
從源碼的角度理解Glide的執(zhí)行流程
Glide中的緩存
如何實(shí)現(xiàn)Fragment的滑動(dòng)
如何實(shí)現(xiàn)Fragment的滑動(dòng)办桨?
ViewPager使用細(xì)節(jié)筹淫,如何設(shè)置成每次只初始化當(dāng)前的Fragment,其他的不初始化
Fragment 懶加載
Fragment 懶加載1
ListView重用的是什么
ListView 和 RecyclerView 復(fù)用機(jī)制區(qū)別
RxJava呢撞、EventBus底層原理
如何自我實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)請求框架
-
Retrofit原理损姜?為何用代理?代理的作用是什么殊霞?
-
ButterKnife原理摧阅?用到反射嗎?為什么绷蹲?
-
Hotfix 原理
ANR異常如何查找并分析棒卷?
Android ANR分析詳解
Git工作流
分支開發(fā)工作流
build.gradle 腳本依賴和打包配置(替換資源)
組件化開發(fā) context arouter
三次握手 四次揮手
三次握手四次揮手過程
svg path 大小長度限制
-
invalidate() postInvalidate() 全局刷新 局部刷新
invalidate
二次采樣顾孽,不壓縮圖片,實(shí)現(xiàn)
Android圖片壓縮(二次采樣)
SurfaceView View 區(qū)別
Android中的SurfaceView詳解
lrucache linkHashMap
LruCache帶你徹底解析Android緩存機(jī)制
動(dòng)態(tài)權(quán)限適配方案比规,權(quán)限組的概念
Android 動(dòng)態(tài)權(quán)限適配方案總結(jié)
Binder機(jī)制介紹
android中的Binder機(jī)制
權(quán)限管理系統(tǒng)(底層的權(quán)限是如何進(jìn)行 grant 的)
權(quán)限管理系統(tǒng)
系統(tǒng)啟動(dòng)流程 Zygote進(jìn)程 –> SystemServer進(jìn)程 –> 各種系統(tǒng)服務(wù) –> 應(yīng)用進(jìn)程
MVP模式
MVP設(shè)計(jì)模式
怎么啟動(dòng)service若厚,service和activity怎么進(jìn)行數(shù)據(jù)交互
Activity與Service的交互方式
Android系統(tǒng)為什么會設(shè)計(jì)ContentProvider,進(jìn)程共享和線程安全問題
Android系統(tǒng)為什么會設(shè)計(jì)ContentProvider
是否熟悉Android jni開發(fā)蜒什,jni如何調(diào)用java層代碼
Java與Native相互調(diào)用
計(jì)算一個(gè)view的嵌套層級
計(jì)算一個(gè)ViewGroup的嵌套層級
項(xiàng)目組件化的理解
下拉狀態(tài)欄是不是影響activity的生命周期测秸,如果在onStop的時(shí)候做了網(wǎng)絡(luò)請求,
onResume的時(shí)候怎么恢復(fù)
用到的一些開源框架,介紹一個(gè)看過源碼的灾常,內(nèi)部實(shí)現(xiàn)過程霎冯。
App啟動(dòng)崩潰異常捕捉
App啟動(dòng)崩潰異常捕捉
Android進(jìn)程分類
Android進(jìn)程分類
用IDE如何分析內(nèi)存泄漏?
如何處理內(nèi)存泄漏钞瀑。也提到了簡歷中20000*20000大小的圖片如何加載的
大尺寸圖片加載問題
App中喚醒其他進(jìn)程的實(shí)現(xiàn)方式
App中喚醒其他進(jìn)程的實(shí)現(xiàn)方式
AndroidManifest的作用與理解
- 為應(yīng)用的 Java 軟件包命名肃晚。軟件包名稱充當(dāng)應(yīng)用的唯一標(biāo)識符。
- 描述應(yīng)用的各個(gè)組件仔戈,包括構(gòu)成應(yīng)用的 Activity关串、服務(wù)、廣播接收器和內(nèi)容提供程序监徘。它還為實(shí)現(xiàn)每個(gè)組件的類命名并發(fā)布其功能晋修,例如它們可以處理的 Intent 消息。這些聲明向 Android 系統(tǒng)告知有關(guān)組件以及可以啟動(dòng)這些組件的條件的信息凰盔。
- 確定托管應(yīng)用組件的進(jìn)程墓卦。
- 聲明應(yīng)用必須具備哪些權(quán)限才能訪問 API 中受保護(hù)的部分并與其他應(yīng)用交互。還聲明其他應(yīng)用與該應(yīng)用組件交互所需具備的權(quán)限
- 列出 Instrumentation類户敬,這些類可在應(yīng)用運(yùn)行時(shí)提供分析和其他信息落剪。這些聲明只會在應(yīng)用處于開發(fā)階段時(shí)出現(xiàn)在清單中,在應(yīng)用發(fā)布之前將移除尿庐。
- 聲明應(yīng)用所需的最低 Android API 級別
- 列出應(yīng)用必須鏈接到的庫
AndroidManifest--你真的理解了嗎忠怖?
EventBus作用,實(shí)現(xiàn)方式抄瑟,代替EventBus的方式
Android中開啟攝像頭的主要步驟
String 為什么要設(shè)計(jì)成不可變的凡泣?
為什么String要設(shè)計(jì)成不可變的?
序列化的作用,以及 Android 兩種序列化的區(qū)別皮假。
Android 序列化 & 反序列化
進(jìn)程間通信的機(jī)制
AIDL機(jī)制
AsyncTask機(jī)制
AsyncTask機(jī)制原理分析
AsyncTask機(jī)制原理分析1
AsyncTask機(jī)制原理分析2
如何取消AsyncTask
取消AsyncTask
Android為什么引入Parcelable
Android為什么引入Parcelable
有沒有嘗試簡化Parcelable的使用
簡化Parcelable的使用
應(yīng)用安裝過程
APK安裝核心步驟為:
從AndroidManifest中解析出應(yīng)用信息鞋拟、各組件信息、權(quán)限信息
為應(yīng)用程序分配UID惹资,并讓PMS記錄個(gè)組件信息贺纲,AMS啟動(dòng)四大組件時(shí),需要這些信息
更新應(yīng)用程序權(quán)限信息褪测,授權(quán)應(yīng)用程序資源訪問權(quán)
AlertDialog,popupWindow,Activity區(qū)別
Activity 上有 Dialog 的時(shí)候按 home 鍵時(shí)的生命周期
橫豎屏切換的時(shí)候猴誊,Activity 各種情況下的生命周期
Application 和 Activity 的 context 對象的區(qū)別
性能優(yōu)化,怎么保證應(yīng)用啟動(dòng)不卡頓
用過React Native沒潦刃。(自己用過Ionic,但是面試官?zèng)]聽過稠肘,Ionic在2015年相對較火)
平時(shí)如何自我學(xué)習(xí)福铅,2017 Google I/O大會討論內(nèi)容有哪些
MVP框架萝毛,如何用项阴,怎么用。怎么解耦笆包。跟MVC的差別
問專業(yè)方向(GIS)环揽,問如何處理地理圍欄
如何省電又能實(shí)時(shí)跟服務(wù)器端交互(我說的是AlarmManager+Service),一直傳輸位置信息給服務(wù)器庵佣。用了什么協(xié)議
由上面的扯到OkHttp底層原理
Binder相關(guān)歉胶?
觸摸事件的分發(fā)?
點(diǎn)擊事件被攔截巴粪,但是相傳到下面的view通今,如何操作?
Android事件分發(fā)機(jī)制
翻轉(zhuǎn)一個(gè)單項(xiàng)鏈表
合并多個(gè)單有序鏈表(假設(shè)都是遞增的)
Android中數(shù)據(jù)存儲方式
Android中進(jìn)程內(nèi)存的分配肛根,能不能自己分配定額內(nèi)存
微信主頁面的實(shí)現(xiàn)方式
微信上消息小紅點(diǎn)的原理
項(xiàng)目的并發(fā)度多大辫塌,如何處理crash后的信息回傳
兩個(gè)不重復(fù)的數(shù)組集合中,求共同的元素派哲。
上一問擴(kuò)展臼氨,海量數(shù)據(jù),內(nèi)存中放不下芭届,怎么求出储矩。
如何對APP進(jìn)行內(nèi)存優(yōu)化
涉及到OpenGL的項(xiàng)目。以及OpenGL3.0與2.0的差別
View與SurfaceView
OpenGL褂乍、GLSurfaceView和Shader持隧,主要聊了OpenGL繪制方法
JNI/NDK開發(fā)如何使用,如何定義java文件與cpp文件中的方法(主要看是不是真的用過吧)
涉及到自己項(xiàng)目中用到的優(yōu)化方案與策略逃片,尤其針對圖片的
看到用過GreenDao舆蝴,問有沒有在一個(gè)事務(wù)中提交兩種不同的操作
MVP框架,混合開發(fā)相關(guān)
ANR異常發(fā)生條件
5s內(nèi)沒有響應(yīng)用戶輸入事件
2)10s內(nèi)廣播接收器沒有處理完畢
3)20s內(nèi)服務(wù)沒有處理完畢
如何分析ANR
log+trace.txt
內(nèi)存優(yōu)化如何做题诵?
自定義View和ViewGroup
說一下自己定義的組件就行
事件處理
分發(fā)洁仗,攔截,處理性锭。只是View沒有攔截處理
動(dòng)畫
View動(dòng)畫赠潦,屬性動(dòng)畫,幀動(dòng)畫草冈。再說下View和屬性動(dòng)畫區(qū)別她奥。
參考:https://developer.android.com/guide/topics/graphics/overview.html
Dalvik和Art區(qū)別瓮增?(Just In Time和Ahead Of Time)
會對代碼進(jìn)行review嗎?何時(shí)review哩俭?怎么review绷跑?
項(xiàng)目中遇到的讓你棘手的問題?多久解決凡资,怎么解決砸捏?(考的是你發(fā)現(xiàn)問題和解決問題的能力)
如何學(xué)習(xí)?何時(shí)學(xué)習(xí)?怎么學(xué)習(xí)隙赁?學(xué)習(xí)渠道?(考的是學(xué)習(xí)能力)
Android一些優(yōu)化方案
什么是過渡繪制垦藏,如何防止過渡繪制
事件分發(fā)機(jī)制
ListView的優(yōu)化
Binder機(jī)制
在多進(jìn)程中,Application會啟動(dòng)幾次
單例模式伞访,雙鎖原理掂骏,volatile原理,靜態(tài)內(nèi)部類實(shí)現(xiàn)單例的原理厚掷。
網(wǎng)絡(luò)的五層模型弟灼,又問了TCP和UDP,還有Android相關(guān)的長連接
事件分發(fā)機(jī)制
Binder實(shí)現(xiàn)機(jī)制冒黑,Stub類中asInterface函數(shù)作用田绑,BnBinder和BpBinder區(qū)別。
gradle中buildToolsVersion和TargetSdkVersion的區(qū)別是什么
手機(jī)適配一些方案
Java基礎(chǔ)知識薛闪。線程辛馆,java虛擬機(jī),內(nèi)存模型等豁延。
Android基礎(chǔ)知識昙篙。官方API,常用控件源碼诱咏,自定義控件苔可,動(dòng)畫,性能分析等袋狞。
app層面:第三方開源框架(okHttp,Retrofit,ButterKnife),熱修復(fù)技術(shù)(Andfix,Robust,Tinker等)焚辅,崩潰處理,日志處理苟鸯,內(nèi)存溢出內(nèi)存泄漏定位等同蜻。
網(wǎng)絡(luò)基礎(chǔ):TCP/IP,Http/Https,UDP,七層網(wǎng)絡(luò)協(xié)議等等。
Android是如何進(jìn)行資源管理的單例早处,快排湾蔓,回型打印二維數(shù)組
Acticity啟動(dòng)模式有幾種,分別代表什么意思
Binder機(jī)制砌梆,從java到framework再到kenral層默责,面試官問的都很詳細(xì)贬循,遇到不會的也都會跟我解釋
Serializable和Parcelable的區(qū)別。
View的繪制流程桃序,詳細(xì)到framework代碼杖虾,討論到不確定的地方,立馬打開電腦和我一起看源碼媒熊。
事件分發(fā)機(jī)制奇适。
常用設(shè)計(jì)模式,使用靜態(tài)內(nèi)部類實(shí)現(xiàn)單例的原理是什么泛释。
線程同步滤愕,CopyOnWriteArrayList怎樣實(shí)現(xiàn)温算。
Volley源碼
下拉listview的實(shí)現(xiàn)怜校,需要注意的地方和優(yōu)化的地方(不是lsitview的優(yōu)化,是下拉的優(yōu)化)
Android上一些優(yōu)化方案
聊項(xiàng)目注竿,GLSufaceView茄茁,OpengGL,Shader相關(guān)一些知識巩割,在項(xiàng)目中做的優(yōu)化
gc是根據(jù)什么來回收一個(gè)對象的裙顽,引用計(jì)數(shù)和gc root分別怎么實(shí)現(xiàn)。
怎樣會產(chǎn)生內(nèi)存泄露宣谈,舉一個(gè)具體的例子愈犹,使用什么檢查內(nèi)存泄露
自定義View的繪制流程
給出二叉樹和一個(gè)值,找出所有和為這個(gè)值的路徑闻丑;{1,3}{3,6}{3,4}{6,8}區(qū)間去重漩怎,最少去掉幾個(gè)集 合,可以讓這個(gè)集合沒有交集
什么是ANR嗦嗡,Activity勋锤、BroadcastReceiver、Service對ANR時(shí)間限制分別是多少侥祭,怎么處理ANR叁执,除了系統(tǒng)生成trace.txt文件,怎么在程序中檢測ANR矮冬。寫出偽代碼谈宛。
編解碼一些知識,I幀胎署,B幀吆录,P幀區(qū)別。
Android一些優(yōu)化方案硝拧。
算法 n/m径筏,怎么判斷得數(shù)是無限循環(huán)小數(shù)葛假。
事件分發(fā)機(jī)制。
算法滋恬,將一個(gè)字符串轉(zhuǎn)換成int型數(shù)字聊训,考慮 錯(cuò)誤輸入,溢出恢氯,正負(fù)值等一些條件带斑,考細(xì)心。
給出一個(gè)搜索二叉樹勋拟,輸出一個(gè)排序好的雙向鏈表
類的加載過程勋磕,Person person = new Person();為例進(jìn)行說明。
JVM相關(guān)知識敢靡,GC機(jī)制挂滓。
類的加載器,雙親機(jī)制啸胧,Android的類加載器赶站。
Android中進(jìn)程的級別,以及各自的區(qū)別纺念。
插件化原理贝椿。
集合框架,list陷谱,map烙博,set都有哪些具體的實(shí)現(xiàn)類,區(qū)別都是什么烟逊。
concurrentHashmap原理渣窜,原子類。
volatile原理焙格。
Binder機(jī)制图毕。
View的繪制流程,事件傳遞機(jī)制眷唉,Handler異步消息機(jī)制予颤。
Interger中的128(-128~127),這里考的是常量池的概念,這個(gè)沒回答上來冬阳。
線程池的相關(guān)知識蛤虐。
Handler機(jī)制,HandlerThread實(shí)現(xiàn)等等肝陪。
LRUCache算法是怎樣實(shí)現(xiàn)的驳庭。
內(nèi)存泄露,怎樣查找,怎么產(chǎn)生的內(nèi)存泄露饲常。
怎樣計(jì)算一張圖片的大小蹲堂,加載bitmap過程(怎樣保證不產(chǎn)生內(nèi)存溢出),二級緩存贝淤,LRUCache算法柒竞。
簡單介紹一下java中的泛型,泛型擦除以及相關(guān)的概念播聪。
Android優(yōu)化相關(guān)的只是朽基,布局優(yōu)化、內(nèi)存優(yōu)化等等离陶。
SQL相關(guān)的知識優(yōu)化的方案稼虎,這里我直接說不太了解,就過了招刨。
算法題霎俩,m * n的矩陣,能形成幾個(gè)正方形(2 * 2能形成1個(gè)正方形计济,2 * 3 2個(gè)茸苇,3 * 3 6個(gè))
Android優(yōu)化.排苍。
插件化相關(guān)技術(shù)沦寂,熱修補(bǔ)技術(shù)是怎樣實(shí)現(xiàn)的,和插件化有什么區(qū)別淘衙。
GLSurfaceView的相關(guān)知識传藏,OpenGL,Shader彤守,繪制流程毯侦。
多進(jìn)程間的通訊,Binder機(jī)制具垫。
詢問看過哪些框架源碼侈离,EventBus,Volley講了一下
Android一些源碼的閱讀
優(yōu)秀的第三方框架源碼閱讀
廣度:比較新的技術(shù)(Rxjava筝蚕,插件化等)卦碾,JVM,GC起宽,網(wǎng)絡(luò)洲胖,數(shù)據(jù)庫,Android(一般不會詢問之前面試官問過的問題)坯沪。
深度:一般會通過1或2個(gè)問題來考察绿映,例如:map接口下都有什么子類->hashmap和hashtable區(qū)別->hashmap實(shí)現(xiàn)原理->怎么解決hash沖突->是否了解concurrentHashmap->concurrentHashmap實(shí)現(xiàn)原理->volatile實(shí)現(xiàn)原理(concurrentHashmap讀是不加鎖的,使用到了volatile)
Android基礎(chǔ)
View的繪制流程;自定義View如何考慮機(jī)型適配叉弦;自定義View的事件分發(fā)機(jī)制丐一;View和ViewGroup分別有哪些事件分發(fā)相關(guān)的回調(diào)方法;自定義View如何提供獲取View屬性的接口淹冰;
Art和Dalvik對比钝诚;虛擬機(jī)原理,如何自己設(shè)計(jì)一個(gè)虛擬機(jī)(內(nèi)存管理榄棵,類加載凝颇,雙親委派);JVM內(nèi)存模型及類加載機(jī)制疹鳄;內(nèi)存對象的循環(huán)引用及避免
內(nèi)存回收機(jī)制與GC算法(各種算法的優(yōu)缺點(diǎn)以及應(yīng)用場景)拧略;GC原理時(shí)機(jī)以及GC對象;內(nèi)存泄露場景及解決方法瘪弓;OOM的避免及解決方法
四大組件及生命周期垫蛆;ContentProvider的權(quán)限管理(讀寫分離,權(quán)限控制-精確到表級腺怯,URL控制)袱饭;Activity的四種啟動(dòng)模式對比;Activity狀態(tài)保存于恢復(fù)
Fragment生命周期呛占;Fragment狀態(tài)保存
startActivityForResult是哪個(gè)類的方法虑乖,在什么情況下使用,如果在Adapter中使用應(yīng)該如何解耦
AsyncTask原理及不足;IntentService原理
AstncTask+HttpClient與AsyncHttpClient有什么區(qū)別
如何保證一個(gè)后臺服務(wù)不被殺死;比較省電的方式是什么
如何通過廣播攔截和abort一條短信;廣播是否可以請求網(wǎng)絡(luò)蚪黑;廣播引起anr的時(shí)間限制
進(jìn)程間通信,AIDL
Handler機(jī)制及底層實(shí)現(xiàn)
Binder機(jī)制及底層實(shí)現(xiàn)
ApplicationContext和ActivityContext的區(qū)別
一張Bitmap所占內(nèi)存以及內(nèi)存占用的計(jì)算
對于應(yīng)用更新這塊是如何做的糙捺?(灰度,強(qiáng)制更新笙隙,分區(qū)域更新)
混合開發(fā)洪灯,RN,weex竟痰,H5签钩,小程序(做Android的了解一些前端js等還是很有好處的)
說一款你認(rèn)為當(dāng)前比較火的應(yīng)用并設(shè)計(jì)(直播APP)
動(dòng)態(tài)權(quán)限適配方案,權(quán)限組的概念
網(wǎng)絡(luò)請求緩存處理凯亮,okhttp如何處理網(wǎng)絡(luò)緩存的
圖片加載庫相關(guān)边臼,bitmap如何處理大圖,如一張30M的大圖假消,如何預(yù)防OOM
Rtmp 協(xié)議
rtmp
Android一些優(yōu)化方案
什么是過渡繪制柠并,如何防止過渡繪制
事件分發(fā)機(jī)制
ListView的優(yōu)化
Binder機(jī)制
在多進(jìn)程中,Application會啟動(dòng)幾次
單例模式,雙鎖原理臼予,volatile原理鸣戴,靜態(tài)內(nèi)部類實(shí)現(xiàn)單例的原理。
Java多線程粘拾,synchronized
聊項(xiàng)目窄锅,都具體做了什么。
Binder機(jī)制
volley的源代碼缰雇,在圖片緩存部分討論了挺長時(shí)間入偷,http中緩存機(jī)制,Last-Modify的作用等械哟。
fragment的生命周期
service一些知識
事件分發(fā)機(jī)制
Binder實(shí)現(xiàn)機(jī)制疏之,Stub類中asInterface函數(shù)作用,BnBinder和BpBinder區(qū)別暇咆。
gradle中buildToolsVersion和TargetSdkVersion的區(qū)別是什么
手機(jī)適配一些方案
hashmap的實(shí)現(xiàn)原理
靜態(tài)方法是否能被重寫
3次握手和4次揮手的原因锋爪,以及為什么需要這樣做。
數(shù)據(jù)結(jié)構(gòu)爸业,搜索二叉樹的一些特性其骄,平衡二叉樹。
hashmap是如何解決hash沖突的
進(jìn)程與線程區(qū)別
寫了一個(gè)二分查找和單例模式
http中的同步和異步
聊了一些項(xiàng)目上做的東西,問了問職業(yè)規(guī)劃
我認(rèn)為Android做的優(yōu)秀的幾個(gè)地方扯旷,然后又根據(jù)我說的問了問比較深入問題拯爽。
Android是如何進(jìn)行資源管理的。
java比較重要的幾個(gè)特性
網(wǎng)絡(luò)五層結(jié)構(gòu)薄霜,每一層協(xié)議某抓,由于我網(wǎng)絡(luò)不是很好,還問了一些其他的問題(例如MAC地址和ip地址的區(qū)別等)惰瓜。
為什么離開原來公司,以及職業(yè)規(guī)劃汉矿,然后因?yàn)槊嬖囃甏蟾啪屯砩?點(diǎn)了崎坊,就先讓我回去,下周讓hr跟我聯(lián)系洲拇,我想這是應(yīng)該通過面試了吧奈揍。
單例,快排赋续,回型打印二維數(shù)組
寫一個(gè)死鎖男翰,死鎖是怎樣產(chǎn)生的,怎樣防止死鎖
Acticity啟動(dòng)模式有幾種纽乱,分別代表什么意思
聊項(xiàng)目都做了些什么
字符串反轉(zhuǎn)蛾绎,討論復(fù)雜度。
聊經(jīng)歷和項(xiàng)目
給定一個(gè)int型 n,輸出1~n的字符串例如 n = 4 輸出“1 2 3 4”
輸出所有的笛卡爾積組合
單例模式
最長上升子序列
對剛才做的題租冠,一些錯(cuò)的地方做了討論鹏倘,主要是類的加載和內(nèi)部類方面的知識,尤其一些深入到JVM層的知識的確自己有一些不足顽爹,不過大部分都還是能答出來纤泵。
雙親委托機(jī)制,類的五個(gè)加載過程镜粤。
java類加載器的加載流程捏题。
Binder機(jī)制,從java到framework再到kenral層肉渴,面試官問的都很詳細(xì)涉馅,遇到不會的也都會跟我解釋。
Serializable和Parcelable的區(qū)別黄虱。
View的繪制流程稚矿,詳細(xì)到framework代碼,討論到不確定的地方捻浦,立馬打開電腦和我一起看源碼晤揣。
事件分發(fā)機(jī)制。
常用設(shè)計(jì)模式朱灿,使用靜態(tài)內(nèi)部類實(shí)現(xiàn)單例的原理是什么昧识。
線程同步,CopyOnWriteArrayList怎樣實(shí)現(xiàn)盗扒。
Volley源碼跪楞,EventBus源碼。
項(xiàng)目介紹侣灶,聊一些項(xiàng)目上的問題
下拉listview的實(shí)現(xiàn)甸祭,需要注意的地方和優(yōu)化的地方(不是lsitview的優(yōu)化,是下拉的優(yōu)化)褥影。
Android上一些優(yōu)化方案
介紹了一下現(xiàn)在做的項(xiàng)目池户,大體說明了現(xiàn)在所用到的技術(shù)。
聊項(xiàng)目凡怎,GLSufaceView校焦,OpengGL,Shader相關(guān)一些知識统倒,在項(xiàng)目中做的優(yōu)化
gc是根據(jù)什么來回收一個(gè)對象的寨典,引用計(jì)數(shù)和gc root分別怎么實(shí)現(xiàn)。
怎樣會產(chǎn)生內(nèi)存泄露房匆,舉一個(gè)具體的例子耸成,使用什么檢查內(nèi)存泄露
自定義View的繪制流程
給出二叉樹和一個(gè)值报亩,找出所有和為這個(gè)值的路徑;{1,3}{3,6}{3,4}{6,8}區(qū)間去重墓猎,最少去掉幾個(gè)集合捆昏,可以讓這個(gè)集合沒有交集。
什么是ANR毙沾,Activity骗卜、BroadcastReceiver、Service對ANR時(shí)間限制分別是多少左胞,怎么處理ANR寇仓,除了系統(tǒng)生成trace.txt文件,怎么在程序中檢測ANR烤宙。寫出偽代碼遍烦。
編解碼一些知識,I幀躺枕,B幀服猪,P幀區(qū)別。
Android一些優(yōu)化方案拐云。
算法 n/m罢猪,怎么判斷得數(shù)是無限循環(huán)小數(shù)。
類的加載過程叉瘩,Person person = new Person();為例進(jìn)行說明膳帕。
JVM相關(guān)知識,GC機(jī)制薇缅。
類的加載器危彩,雙親機(jī)制,Android的類加載器泳桦。
Android中進(jìn)程的級別汤徽,以及各自的區(qū)別。
插件化原理蓬痒。
集合框架泻骤,list,map梧奢,set都有哪些具體的實(shí)現(xiàn)類,區(qū)別都是什么演痒。
concurrentHashmap原理亲轨,原子類。
volatile原理鸟顺。
Binder機(jī)制惦蚊。
View的繪制流程器虾,事件傳遞機(jī)制,Handler異步消息機(jī)制蹦锋。
Interger中的128(-128~127),這里考的是常量池的概念兆沙,這個(gè)沒回答上來。
線程池的相關(guān)知識莉掂。
Handler機(jī)制葛圃,HandlerThread實(shí)現(xiàn)等等。
LRUCache算法是怎樣實(shí)現(xiàn)的憎妙。
說了說項(xiàng)目中相關(guān)的知識库正。
聊了聊之前做過的項(xiàng)目。
內(nèi)存泄露厘唾,怎樣查找褥符,怎么產(chǎn)生的內(nèi)存泄露。
怎樣計(jì)算一張圖片的大小抚垃,加載bitmap過程(怎樣保證不產(chǎn)生內(nèi)存溢出)喷楣,二級緩存,LRUCache算法鹤树。
簡單介紹一下java中的泛型铣焊,泛型擦除以及相關(guān)的概念。
Android優(yōu)化相關(guān)的只是魂迄,布局優(yōu)化粗截、內(nèi)存優(yōu)化等等。
SQL相關(guān)的知識優(yōu)化的方案捣炬,這里我直接說不太了解熊昌,就過了。
算法題湿酸,m * n的矩陣婿屹,能形成幾個(gè)正方形(2 * 2能形成1個(gè)正方形,2 * 3 2個(gè)推溃,3 * 3 6個(gè))
項(xiàng)目相關(guān)昂利。
Android優(yōu)化.。
插件化相關(guān)技術(shù)铁坎,熱修補(bǔ)技術(shù)是怎樣實(shí)現(xiàn)的蜂奸,和插件化有什么區(qū)別。
詢問了我博客上寫的一些東西硬萍,從項(xiàng)目立意談起扩所,到設(shè)計(jì),再到詳細(xì)的技術(shù)實(shí)現(xiàn)朴乖,可謂是面面俱到祖屏,由于自己寫的博客還是比較熟悉助赞,回答的還不錯(cuò)。
GLSurfaceView的相關(guān)知識袁勺,OpenGL雹食,Shader,繪制流程期丰。
詢問當(dāng)前做的項(xiàng)目群叶,以及到具體的實(shí)現(xiàn)和優(yōu)化。
多進(jìn)程間的通訊咐汞,Binder機(jī)制盖呼。
詢問看過哪些框架源碼,EventBus化撕,Volley講了一下几晤。
hashmap實(shí)現(xiàn)原理
自定義view流程
事件機(jī)制
activity生命周期
handler機(jī)制
鏈表加法 例如 1->2->3 + 4->5->6->7 = 4->6->9->0
設(shè)計(jì)題
view繪制流程
事件機(jī)制
activity生命周期
service兩種啟動(dòng)方式,如果多次綁定植阴,會有什么結(jié)果
binder機(jī)制
volley框架
查找兩個(gè)鏈表的共同節(jié)點(diǎn)
Rxjava蟹瘾、Retrofit、okhttp相關(guān)的掠手,這些我了解的不是很深憾朴。
apk是打包過程,資源文件生成id的規(guī)則喷鸽,xml文件打包后放在哪里众雷?
聊了聊之前做的項(xiàng)目
Android中的引用以及使用場景
Volley框架,okHttp
數(shù)組實(shí)現(xiàn)隊(duì)列做祝,快排
fragment生命周期
集合相關(guān)的知識砾省,List,Set混槐,Map具體的實(shí)現(xiàn)類编兄,以及相應(yīng)的區(qū)別,ConcurrentHashMap實(shí)現(xiàn)原理声登。
多線程知識狠鸳,例如,volatile原理
內(nèi)部類和靜態(tài)內(nèi)部類的區(qū)別悯嗓,以及使用場景件舵。
一道關(guān)于多線程的設(shè)計(jì)題,下載一本書的章節(jié)1.下載一個(gè)list列表脯厨。2.從列表中并行下載相應(yīng)的內(nèi)容芦圾。3.顯示下載后的章節(jié)。要求:并行下載俄认、章節(jié)有順序个少,需要盡早顯示出來,出現(xiàn)異常錯(cuò)誤立馬停止下載眯杏。
自我介紹夜焦,大體聊了以下項(xiàng)目中做的東西。
Top K度算法題岂贩,給定一個(gè)數(shù)組茫经,求前n個(gè)最大的數(shù),堆排序萎津。 3. 判斷一個(gè)view的父類或者父父類是否為listview
listivew的優(yōu)化卸伞,使用復(fù)用機(jī)制,最多需要?jiǎng)?chuàng)建多少個(gè)view锉屈。 5. activity的啟動(dòng)模式荤傲。
如何計(jì)算Bitmap在內(nèi)存中的大小?
serizalable和parcelable的區(qū)別
volley源碼,HTTP緩存機(jī)制颈渊。
自我介紹
實(shí)現(xiàn)map接口的幾個(gè)類遂黍,以及各自的特點(diǎn)和區(qū)別。
ConcurrentHashMap實(shí)現(xiàn)原理俊嗽,Volatile原理雾家。
快排
Binder機(jī)制
單例模式實(shí)現(xiàn)方式,靜態(tài)內(nèi)部類實(shí)現(xiàn)單例的原理绍豁,內(nèi)部類和靜態(tài)內(nèi)部類的區(qū)別等 7. 插件化一些問題
自我介紹芯咧,聊了聊項(xiàng)目。
繪制OpenGL過程竹揍,Shader語言敬飒,GLSurfaceView等,說了說在渲染視頻的時(shí)候做的優(yōu)化鬼佣。
JVM相關(guān)知識驶拱。
又說了一遍Binder機(jī)制。
Android中一些優(yōu)化方案晶衷。
插件化原理蓝纲,主要是DL和 360 DroidPlugin的區(qū)別,因?yàn)槲抑豢戳薉L源碼晌纫,對DroidPlugin了解的不深税迷,就大體聊了下DL實(shí)現(xiàn)的過程。
自我介紹锹漱,項(xiàng)目介紹了一下箭养。
GC原理
插件化
職業(yè)發(fā)展
Android基礎(chǔ)知識
Java基礎(chǔ)知識,大概是多線程哥牍,線程安全毕泌,集合類喝检,JVM,類相關(guān)知識等撼泛。
Android一些源碼的閱讀
優(yōu)秀的第三方框架源碼閱讀
廣度:比較新的技術(shù)(Rxjava挠说,插件化等),JVM愿题,GC损俭,網(wǎng)絡(luò),數(shù)據(jù)庫潘酗,Android(一般不會詢問之前面試官問過的問題)杆兵。
深度:一般會通過1或2個(gè)問題來考察,例如:map接口下都有什么子類->hashmap和hashtable區(qū)別->hashmap實(shí)現(xiàn)原理->怎么解決hash沖突->是否了解concurrentHashmap->concurrentHashmap實(shí)現(xiàn)原理->volatile實(shí)現(xiàn)原理(concurrentHashmap讀是不加鎖的仔夺,使用到了volatile)
對MVC和MVP的理解
Android中的MVC與MVP
Handler的內(nèi)存泄漏問題具體是什么琐脏,解決方案知道有什么,空數(shù)據(jù)的時(shí)候Handler的阻塞問題囚灼。
Handler導(dǎo)致的內(nèi)存泄漏
http的長連接和短連接這兩個(gè)概念
http 長連接和短連接介紹
HashMap骆膝、ConcurrentHashMap、Hashtable的問題灶体,數(shù)據(jù)結(jié)構(gòu)阅签,線程安全啊之類的問題了,當(dāng)然還是考了version 1.7和1.8蝎抽。
HaskMap
數(shù)組和鏈表區(qū)別
數(shù)組和鏈表區(qū)別
數(shù)組和鏈表區(qū)別2
哈希表如何處理沖突
解決哈希沖突的方法
動(dòng)態(tài)代理原理
代理模式(動(dòng)態(tài)代理)及其原理分析
闭樱活機(jī)制
Android保活實(shí)現(xiàn)方案梳理
AMS
AMS
hook
Hook機(jī)制之動(dòng)態(tài)代理
Android 如何開啟多進(jìn)程樟结?應(yīng)用是否可以開啟N個(gè)進(jìn)程养交?
開啟多進(jìn)程
設(shè)計(jì)模式
JsBridge 原理
組件化
Android徹底組件化方案實(shí)踐
ARouter之基本使用(一)
可能是最詳細(xì)的ARouter源碼分析
static static {} 誰先執(zhí)行
1.靜態(tài)成員變量
特點(diǎn):
1.隨著類的加載,會在方法區(qū)的靜態(tài)區(qū)開辟內(nèi)存空間,初始化數(shù)據(jù)
2.可以通過類名直接訪問瓢宦,格式:類名.靜態(tài)成員變量
3.一般用于存儲所有類的共享數(shù)據(jù)
2.靜態(tài)成員方法
特點(diǎn):
1.靜態(tài)方法中只能訪問靜態(tài)成員變量(不能使用this引用)
2.非靜態(tài)方法中可以訪問靜態(tài)成員(都能訪問),在非靜態(tài)方法中可以訪問靜態(tài)方法
非靜態(tài)方法中即可以使用靜態(tài)成員碎连,也可以使用非靜態(tài)成員
3.靜態(tài)成員變量與非靜態(tài)成員的區(qū)別
1.生命周期
靜態(tài)成員變量是隨著類的加載在方法區(qū)的靜態(tài)區(qū)中初始化,在程序結(jié)束時(shí)而消失
成員變量是隨著對象的初始化在堆中創(chuàng)建與初始化驮履,在對象被垃圾回收時(shí)鱼辙,而消失
2.存儲的特點(diǎn)
靜態(tài)成員變量是所有對象共享存儲數(shù)據(jù)
成員變量是某一對象存儲的數(shù)據(jù)
3.訪問方式
靜態(tài)成員變量可以通過類名直接訪問,也可以通過對象訪問
成員變量只能通過對象來訪問
對象初始化過程
1.加載類的字節(jié)碼文件到j(luò)vm的方法區(qū)中
2.為靜態(tài)成員變量在靜態(tài)區(qū)開辟內(nèi)存空間玫镐,并初始化默認(rèn)值
3.加載靜態(tài)代碼塊倒戏,初始化靜態(tài)成員變量
4.在堆中開辟空間(根據(jù)成員變量的大小),并默認(rèn)初始化成員變量
5.加載構(gòu)造代碼塊恐似,顯式初始化成員變量
6.加載構(gòu)造方法杜跷,顯式初始化成員變量
7.將堆內(nèi)存空間的首地址賦給對象的引用
hashmap 初始大小
android整理之HashMap
probuf 為什么傳輸數(shù)據(jù)快
Android Protobuf應(yīng)用及原理
Google出品的Protocol Buffer
紅黑二叉樹
如何查找鏈表倒數(shù)第n個(gè)節(jié)點(diǎn)
lock 與 synchronzid 區(qū)別
ReentrantLock 顯示的獲得、釋放鎖,synchronized 隱式獲得釋放鎖
ReentrantLock 可響應(yīng)中斷葛闷、可輪回憋槐,synchronized 是不可以響應(yīng)中斷的,為處理鎖的
不可用性提供了更高的靈活性
ReentrantLock 是 API 級別的孵运,synchronized 是 JVM 級別的
ReentrantLock 可以實(shí)現(xiàn)公平鎖
ReentrantLock 通過 Condition 可以綁定多個(gè)條件
底層實(shí)現(xiàn)不一樣秦陋, synchronized 是同步阻塞,使用的是悲觀并發(fā)策略治笨,lock 是同步非阻
塞,采用的是樂觀并發(fā)策略
Lock 是一個(gè)接口赤嚼,而 synchronized 是 Java 中的關(guān)鍵字旷赖,synchronized 是內(nèi)置的語言
實(shí)現(xiàn)。
synchronized 在發(fā)生異常時(shí)更卒,會自動(dòng)釋放線程占有的鎖等孵,因此不會導(dǎo)致死鎖現(xiàn)象發(fā)生;
而 Lock 在發(fā)生異常時(shí),如果沒有主動(dòng)通過 unLock()去釋放鎖蹂空,則很可能造成死鎖現(xiàn)象俯萌,
因此使用 Lock 時(shí)需要在 finally 塊中釋放鎖。
Lock 可以讓等待鎖的線程響應(yīng)中斷上枕,而 synchronized 卻不行咐熙,使用 synchronized 時(shí),
等待的線程會一直等待下去辨萍,不能夠響應(yīng)中斷棋恼。
通過 Lock 可以知道有沒有成功獲取鎖,而 synchronized 卻無法辦到锈玉。
Lock 可以提高多個(gè)線程進(jìn)行讀操作的效率爪飘,既就是實(shí)現(xiàn)讀寫鎖等。
eventbus 源碼xxx
netty 機(jī)制
Netty的理解和使用
Netty在Android中使用
gradle 如何運(yùn)行
常量池
深入淺出java常量池
View 渲染
ViewGroup 子view 交叉繪制
getMeasureWidth getWidth
源碼解析通過getWidth() 與 getMeasuredWidth()獲取寬高的區(qū)別
onResume 能不能拿到width height
onCreate() 和 onResume() 獲取不到 View 的寬高
onResume() 中如何獲取 View 寬高
自定義view view draw() 主要做什么
handler postDelayMessage 原理
Handler postDelayed的原理
補(bǔ)間動(dòng)畫和屬性動(dòng)畫區(qū)別 原理(屬性改變)
談?wù)剬傩詣?dòng)畫和補(bǔ)間動(dòng)畫的原理及區(qū)別
invalide 一定會重新繪制嗎拉背?
為什么有時(shí)候不會回調(diào)onDraw
組件化
相機(jī)預(yù)覽數(shù)據(jù)格式
Android下攝像頭預(yù)覽數(shù)據(jù)只能 ImageFormat.NV21 格式
jpg png 區(qū)別原理
gif师崎、jpg、png椅棺、webp圖片格式比較
LinkedBlockingQueue(兩個(gè)獨(dú)立鎖提高并發(fā))
blockingqueue (如果數(shù)據(jù)放入過快)
生產(chǎn)者消費(fèi)者問題
字節(jié)跳動(dòng):
多指觸控
多點(diǎn)觸控最佳實(shí)踐
surfaceview
SurfaceView
seekto 優(yōu)化
seekTo不準(zhǔn)確的解決方案
視頻編碼之I幀 犁罩、P幀、B幀
視頻編碼之I幀 土陪、P幀昼汗、B幀
Mediaplayer
MediaPlayer狀態(tài)機(jī)
IjkMediaPlayer
ijkplayer 音視頻同步流程分析
rtmp m3u8協(xié)議
RTMP、HTTP-FLV鬼雀、HLS
glide 源碼
ArrayMap 源碼
ArrayMap
深入剖析 Android中的 ArrayMap
messagequeue 原理
深入理解 MessageQueue
兩個(gè)棧如何實(shí)現(xiàn)隊(duì)列
網(wǎng)易:
布局優(yōu)化
- 標(biāo)簽使用
標(biāo)簽使用- 異步加載
異步加載布局探索
merge標(biāo)簽使用
merge標(biāo)簽
內(nèi)存泄漏
內(nèi)存抖動(dòng)(寫一個(gè)內(nèi)存抖動(dòng))如何分析內(nèi)存抖動(dòng)顷窒,并解決
什么是過度繪制? 如何查看過度繪制,如何解決
如何獲取Activity 幀率
如何檢測卡頓
有哪些異步任務(wù),handleThared interservice 區(qū)別
線程優(yōu)先級
內(nèi)存優(yōu)化 hashmap arraymap 復(fù)雜度
性能優(yōu)化
如何查看奔潰日志信息
如何獲取logcat日志
快排序
約束布局優(yōu)點(diǎn)
- 減少View樹的嵌套鞋吉,從而減少了onMeasure和onLayout鸦做,使性能更加高效
- 約束的方式來指定各個(gè)控件的位置和關(guān)系的,它有點(diǎn)類似于RelativeLayout谓着,但遠(yuǎn)比RelativeLayout要更強(qiáng)大泼诱。
可以在子線程跳轉(zhuǎn)activity嗎
在子線程中是不可以進(jìn)行UI操作更新,但同時(shí)不要誤以為不可以進(jìn)行startActivity() ,進(jìn)行界面跳轉(zhuǎn)赊锚。startActivity(Intent) 的底層實(shí)現(xiàn)是將 intent分解成任務(wù)治筒,傳遞到mainLooper 輪詢的隊(duì)列中,最終由主線程執(zhí)行舷蒲。所以跟由哪個(gè)線程調(diào)用一點(diǎn)關(guān)系都沒有的耸袜。
可以在子線程inflater嗎
AsyncLayoutInflater官方提供了一個(gè)類,可以來進(jìn)行異步的inflate
從一個(gè)內(nèi)部類的實(shí)例拿到所在外部類的實(shí)例
this$0
如何實(shí)現(xiàn)3個(gè)線程依次執(zhí)行
如何實(shí)現(xiàn)3個(gè)線程依次執(zhí)行
synchronzid 用于方法牲平,靜態(tài)方法堤框,鎖的是什么,如何使用
synchronzid
pathclassloader
事件分發(fā)機(jī)制中, cancel 什么時(shí)候執(zhí)行
如何識別當(dāng)前頁面是native還是h5頁面(view邊界)
如何在application oncreate打斷點(diǎn)(開發(fā)者平臺)