1. Android
1.1 View相關(guān)
1.1.1 基礎(chǔ)
- Q:SurfaceView和View的區(qū)別肠阱?
- Q:自定義View/ViewGroup需要注意什么票唆?
1.1.2 系統(tǒng)View組件
-
ListView
- Q:
ListView
為什么可以加載1000個條目不崩? - Q:什么是
RecycleBin
屹徘,它是怎么和ListView
回收和復(fù)用的走趋? - Q:你知道
notifyDataSetChanged
方法干了啥嗎?調(diào)用之后為啥ListView
就刷新了噪伊? - Q:你知道
ListView
的跟手滑動和fling
是怎么實現(xiàn)的嗎簿煌?
- Q:
-
ScrollView
- Q:
ScrollView
的測量過程,滑動過程以及fling
的實現(xiàn)鉴吹?
- Q:
-
FrameLayout
- Q:
FrameLayout
的布局過程姨伟?
- Q:
-
LinearLayout
- Q:
LinearLayout
的布局過程?
- Q:
RecyclerView
CoordinatorLayout(協(xié)同布局)
ConstraintLayout(約束布局)
1.1.3 測量
- Q:View的三次measure,兩次layout和一次draw
- Q:onMeasure里面的MeasureSpec哪里來的?它的數(shù)據(jù)結(jié)構(gòu)怎么樣豆励?怎么用夺荒?
- Q:LinearLayout和RelativeLayout選擇哪個更好?為什么RelativeLayout需要測量2次
- Q:requestLayout()的原理,什么是責(zé)任鏈模式?
1.1.4 繪制相關(guān)
- Q:什么是
SurfaceFlinger
FrameBuffer
Surface
技扼? - Q:為什么我們說主線程的操作不要操作16ms伍玖?
- Q:什么是VSYNC(垂直同步)、格柵化剿吻?
- Q:什么是掉幀jank窍箍,怎么處理?(雙緩沖和三緩存機制)
- Q:invalidate()和postInvalidate()的區(qū)別?
1.1.5 事件傳遞
- Q:談一談View的事件分發(fā)機制和橙?
- Q:MotionEvent是什么?包含幾種事件造垛?什么條件下會產(chǎn)生魔招?
- Q:如何解決View的滑動沖突(方向相同、方向不同)五辽?
- Q:onTouch()办斑、onTouchEvent()和onClick()關(guān)系?
- Q:
InputManageService
的事件是怎么傳遞到Activity的杆逗? - Q:主線程和InputManageService的通信建立乡翅?(
WindowState
、WindowSession
) - Q:InputReader罪郊、InputDispatcher線程是干嘛的蠕蚜?運行在哪個進程?
1.1.6 滑動
- Q:Scroller中最重要的兩個方法是什么悔橄?主要目的是靶累?
- Q:scrollTo()和scrollBy()的區(qū)別?
- Q:fling方法的實現(xiàn)癣疟?
2. 圖片相關(guān)
- Q:什么是LRU挣柬,什么是LinkedHashMshap?
- Q:本地、內(nèi)存2級緩存怎么設(shè)計睛挚?
- Q:怎么加載一張大圖又防止OOM邪蛔?
- Q:了解哪些Drawable?適用場景扎狱?
3 系統(tǒng)組件
3.1 Activity
- Q:Activity的啟動過程侧到?
- Q:說下Activity的生命周期?
- Q:onStart()和onResume()/onPause()和onStop()的區(qū)別淤击?
- Q:Activity A啟動另一個Activity B會回調(diào)哪些方法床牧?如果Activity B是完全透明呢?如果啟動的是一個Dialog呢遭贸?
- 狀態(tài)存儲
- Q:談?wù)刼nSaveInstanceState()方法戈咳?何時會調(diào)用?
- Q:onSaveInstanceState()與onPause()的區(qū)別?
- Q:如何避免配置改變時Activity重建著蛙?
- Q:優(yōu)先級低的Activity在內(nèi)存不足被回收后怎樣做可以恢復(fù)到銷毀前狀態(tài)删铃?
- ActivityStack
- Q:說下Activity的四種啟動模式?(有時會出個實際問題來分析返回棧中Activity的情況)
- Q:談?wù)剆ingleTop和singleTask的區(qū)別以及應(yīng)用場景
- Q:onNewIntent()調(diào)用時機踏堡?
- Q:了解哪些Activity啟動模式的標(biāo)記位猎唁?
- Q:如何啟動其他應(yīng)用的Activity?
3.2 Fragment
Q:談一談Fragment的生命周期顷蟆?
Q:Activity和Fragment的異同诫隅?
Q:Activity和Fragment的關(guān)系?
Q:何時會考慮使用Fragment帐偎?
3.3 Service
Q:談一談Service的生命周期逐纬?
Q:Service的兩種啟動方式?區(qū)別在哪削樊?
Q:一個Activty先start一個Service后豁生,再bind時會回調(diào)什么方法?此時如何做才能回調(diào)Service的destory()方法漫贞?
Q:Service如何和Activity進行通信甸箱?
Q:用過哪些系統(tǒng)Service?
Q:是否能在Service進行耗時操作迅脐?如果非要可以怎么做芍殖?
Q:AlarmManager能實現(xiàn)定時的原理?
Q:前臺服務(wù)是什么谴蔑?和普通服務(wù)的不同围小?如何去開啟一個前臺服務(wù)?
Q:是否了解ActivityManagerService树碱,談?wù)勊l(fā)揮什么作用肯适?
Q:如何保證Service不被殺死?
3.4 Broadcast Receiver
- Q:廣播的注冊成榜、解綁過程框舔?發(fā)送廣播過程?
- Q:廣播有幾種形式赎婚?什么特點刘绣?
- Q:廣播的兩種注冊形式?區(qū)別在哪挣输?
3.5 ContentProvider
- Q:ContentProvider啟動過程纬凤?原理?有哪些坑撩嚼?
3.6 Window
- Q:Activity停士、View挖帘、Window三者之間的關(guān)系?
- Q:Window(phoneWindow)恋技、WindowManager(WindowManagerImpl)拇舀、WindowState、WindowSession蜻底、WMS分別是什么骄崩?
- Q:Window有哪幾種類型?
- Q:Activity創(chuàng)建和Dialog創(chuàng)建過程的異同薄辅?
3.7 ActivityManagerService
- Q:Instrumentation要拂、ActivityStack、PackageInfo是什么站楚?
3.8 Context
- Q:Context脱惰、ContextImpl、ContextWrapper是什么源请?
4 線程
4.1 線程通信
-
Handler
- Q:談?wù)勏C制Hander枪芒?作用彻况?有哪些要素谁尸?流程是怎樣的?
- Q:可以在子線程直接new一個Handler嗎纽甘?那該怎么做良蛮?
- Q:使用Hanlder的postDealy()后消息隊列會發(fā)生什么變化?
-
Looper
- Q:這里的ThreadLocal有什么作用悍赢?為什么Looper是ThreadLocal的决瞳?
- Q:主線程中Looper死循環(huán)為何沒有卡死主線程?
-
Message
- Q:Message可以如何創(chuàng)建左权?哪種效果更好(回收池)皮胡?為什么需要回收池?
- Q:為什么系統(tǒng)不建議在子線程訪問UI赏迟?
- Q:一個Thread可以有幾個Looper(1)屡贺?幾個Handler(多個)?
- Q:如何將一個Thread線程變成Looper線程(prepare loop)锌杀?Looper線程有哪些特點甩栈?
- Q:MessageQueue是怎么實現(xiàn)取消息時擁塞,放置消息時喚醒的(epoll糕再、pipe)量没?
- Q:Thread直接調(diào)用run方法會怎么樣?start方法作用是什么突想?
5 進程通信IPC
5.1基礎(chǔ)
- Q:Android中進程和線程的關(guān)系殴蹄?區(qū)別究抓?
- Q:為何需要進行IPC?多進程通信可能會出現(xiàn)什么問題饶套?
- Q:什么是序列化漩蟆?Serializable接口和Parcelable接口的區(qū)別?為何推薦使用后者妓蛮?
5.2 binder
- Q:Android中為何新增Binder來作為主要的IPC方式怠李?
- Q:使用Binder(binder binderProxy BBinder BpBinder)進行數(shù)據(jù)傳輸?shù)木唧w過程?
- Q:Binder框架中ServiceManager的作用蛤克?
- Q:Android中有哪些基于Binder的IPC方式(Messenger捺癞、Aidl)?簡單對比下构挤?
- Q:是否了解AIDL髓介?原理(stub(binder) proxy(binderProxy的代理))是什么?如何優(yōu)化多模塊都使用AIDL的情況筋现?
線程模塊
- Q:AsyncTask的原理唐础,以及線程池?
- Q:HandlerThread是什么(自帶looper的線程矾飞,通過getHandler方法對外暴露Handler給外部使用)一膨?
- Q:IntentService是什么(自帶looper線程的工作Service,回調(diào)onHandleIntent方法)洒沦?
- Q:線程池的好處豹绪、原理、類型申眼?
Animation
- Q:Android中有哪幾種類型的動畫瞒津?
- Q:幀動畫在使用時需要注意什么?
- Q:View動畫和屬性動畫的區(qū)別括尸?
- Q:View動畫為何不能真正改變View的位置巷蚪?而屬性動畫為何可以?
- Q:屬性動畫插值器和估值器的作用濒翻?
數(shù)據(jù)存儲
- Q:Android中提供哪些數(shù)據(jù)持久存儲的方法屁柏?
- Q:Java中的I/O流讀寫怎么做?
- Q:SharePreferences適用情形肴焊?使用中需要注意什么前联?
-
SQLite
- Q:了解
SQLite
中的事務(wù)處理嗎?是如何做的娶眷? - Q:使用
SQLite
做批量操作有什么好的方法嗎似嗤? - Q:如果現(xiàn)在要刪除
SQLite
中表的一個字段如何做? - Q:使用
SQLite
時會有哪些優(yōu)化操作?
- Q:了解
2. 性能優(yōu)化
- Q:
merge
標(biāo)簽届宠、ViewStub
標(biāo)簽烁落、include
標(biāo)簽 - Q:性能優(yōu)化方向(繪制優(yōu)化乘粒、內(nèi)存泄露、布局優(yōu)化)
- Q:如何優(yōu)化app啟動伤塌?
- Q:了解哪些性能優(yōu)化的工具(內(nèi)存灯萍、方法時間、布局結(jié)構(gòu)分析)每聪?
- Q:布局上如何優(yōu)化旦棉?列表呢?
- Q:什么情況會導(dǎo)致內(nèi)存溢出药薯?
- Q:內(nèi)存泄漏和內(nèi)存溢出的區(qū)別绑洛?
- Q:內(nèi)存泄漏是什么?為什么會發(fā)生童本?常見哪些內(nèi)存泄漏的例子真屯?都是怎么解決的?
遇到的問題
- Q:什么是ANR穷娱?什么情況會出現(xiàn)ANR绑蔫?如何避免?在不看代碼的情況下如何快速定位出現(xiàn)ANR問題所在泵额?
2.Java
2.1 基礎(chǔ)
- Q:Java封裝配深、集成、多態(tài)
- Q:重寫和重載的區(qū)別梯刚?
- Q:抽象類和接口的異同凉馆?
- Q:泛型的本質(zhì)是什么薪寓?什么是泛型擦除亡资?
- Q:怎么使用注解?注解的本質(zhì)是什么向叉?
- Q:String锥腻、StringBuffer和StringBuilder的區(qū)別?
- Q:String a=""和String a=new String("")的的關(guān)系和異同母谎?
- Q:裝箱瘦黑、拆箱什么含義?為什么ArrayList<Integer>能夠添加int 數(shù)字?
- Q:int和Integer的區(qū)別奇唤?
- Q:遇見過哪些運行時異常幸斥?異常處理機制知道哪些?
- Q:什么是反射咬扇,有什么作用和應(yīng)用甲葬?
- Q:final、finally懈贺、finalize()分別表示什么含義经窖?
-
Object
- Q:有哪些公用方法(finalize坡垫、toString、hashcode画侣、clone冰悠、getclass、wait配乱、notify)溉卓?
- Q:深克隆與淺克隆搬泥?
- Q:
wait
的诵、notify
方法怎么使用? - Q:
Object
的equal()
和==
的區(qū)別佑钾?
- Q:動態(tài)代理的原理西疤?
-
system.out.println
是怎么實現(xiàn)不同終端(windows、mac)打印效果不同的休溶? - 內(nèi)部類
- Q:內(nèi)部類的作用代赁?
- Q:匿名內(nèi)部類、靜態(tài)內(nèi)部類兽掰、內(nèi)部類的區(qū)別芭碍?
- Q:為什么內(nèi)部類可以訪問外部類的私有成員和方法?外部類能夠訪問內(nèi)
部類的私有變量和方法孽尽? - Q:為什么匿名內(nèi)部類中使用局部變量要用final修飾窖壕?
2.2 集合
- Q:Java集合框架中有哪些類?都有什么特點
- Q:集合杉女、數(shù)組瞻讽、泛型的關(guān)系,并比較
- Q:ArrayList和LinkList的區(qū)別(數(shù)組與鏈表)熏挎?
- Q:ArrayList和Vector的區(qū)別速勇?
- Q:HashSet和TreeSet的區(qū)別?
- HashMap
- Q:
HashMap
和Hashtable
的區(qū)別坎拐? - Q:
HashMap
在put烦磁、get元素的過程?數(shù)據(jù)結(jié)構(gòu)是什么樣的哼勇?如何解決Hash沖突(拉鏈法)都伪? - Q:如何保證
HashMap
線程安全?什么原理积担? - Q:
HashMap
是有序的嗎陨晶?如何實現(xiàn)有序(LinkedHashMap
)? - Q:
HashMap
是如何擴容的磅轻?如何避免擴容珍逸?
- Q:
- Q:hashcode()的作用逐虚,與equal()有什么區(qū)別?
- Q:ConcurrentHashmap的同步原理谆膳?
- Q:Lru算法與LinkedHashMap叭爱?
2.3 并發(fā)
- Q:什么是ThreadLocal?原理(主內(nèi)存與工作內(nèi)存)
- Q:開啟一個線程的方法有哪些漱病?銷毀一個線程的方法呢买雾?
- Q:同步和非同步、阻塞和非阻塞的概念
- Q:Thread的join()有什么作用杨帽?
- Q:線程的有哪些狀態(tài)漓穿?
- Q:什么是線程安全?保障線程安全有哪些手段注盈?
- Q:ReentrantLock和synchronized的區(qū)別?
- Q:synchronized和volatile的區(qū)別晃危?
- Q:synchronized同步代碼塊還有同步方法本質(zhì)上鎖住的是誰?為什么老客?
- Q:sleep()和wait()的區(qū)別僚饭?
- Q:怎么安全停止一個線程任務(wù)?原理是什么胧砰?線程池里有類似機制嗎鳍鸵?
- Q:Java有哪些線程池?他們的區(qū)別是什么尉间?線程池工作流程是怎樣的偿乖?線程池實現(xiàn)原理是怎樣的?Cache線程池有哪些弊端哲嘲?
3. JVM
- Q:JVM內(nèi)存是如何劃分的贪薪?
- Q:談?wù)劺厥諜C制?為什么引用計數(shù)器判定對象是否回收不可行撤蚊?知道哪些垃圾回收算法古掏?
- Q:介紹下分代回收?
- Q:Java中引用有幾種類型损话?在Android中常用于什么情景侦啸?
- Q:類加載的全過程是怎樣的?什么是雙親委派模型丧枪?
- Q:工作內(nèi)存和主內(nèi)存的關(guān)系光涂?在Java內(nèi)存模型有哪些可以保證并發(fā)過程的原子性、可見性和有序性的措施拧烦?
- Q:JVM忘闻、Dalvik、ART的區(qū)別恋博?
- Q:Java中堆(對象)和棧(局部變量)的區(qū)別齐佳?
- Q:垃圾回收機制私恬?有哪些對象可以作為GC roots?
4. 計算機網(wǎng)絡(luò)
4.1 基礎(chǔ)
- Q:五層協(xié)議的體系結(jié)構(gòu)分別是什么炼吴?每一層都有哪些協(xié)議本鸣?
- Q:為何有MAC地址還要IP地址?
4.2 TCP
- Q:TCP和UDP的區(qū)別硅蹦?
- Q:TCP如何保證傳輸是可靠的荣德?數(shù)據(jù)不丟失?連續(xù)且按序童芹?
- Q:擁塞控制和流量控制都是什么涮瞻,兩者的區(qū)別?
- Q:談?wù)凾CP為什么要三次握手假褪?為什么要四次揮手署咽?
- Q:播放視頻用TCP還是UDP?為什么生音?
- Q:cookie是用來干嘛的艇抠?
4.3 HTTP
- Q:HTTP報文樣式與header字段
- Q:了解哪些響應(yīng)狀態(tài)碼?
- Q:get和post的區(qū)別久锥?
- Q:Http1.0家淤、Http1.1、Http2.0的區(qū)別瑟由?
- Q:HTTP和TCP的區(qū)別?
- Q:HTTP和HTTPS的區(qū)別?
- Q:HTTP和Socket的區(qū)別?
- Q:在地址欄打入http://www.baidu.com會發(fā)生什么(DNS -> HTTPS -> HTTP -> TCP -> IP -> 數(shù)據(jù)鏈路)絮重?
5. 設(shè)計模式
- 依賴注入
- 代理模式與動態(tài)代理
- 觀察者模式
- 單例模式
- 談?wù)凪VC、MVP和MVVM歹苦?
6. 操作系統(tǒng)
- Q:操作系統(tǒng)中進程和線程的區(qū)別青伤?
- Q:死鎖的產(chǎn)生和避免(銀行家算法)?
- Q:如何理解生產(chǎn)者消費者模型?
7. 算法
- Q:什么是斐波那契數(shù)列殴瘦?
- Q:迭代和遞歸的特點狠角,并比較優(yōu)缺點
- Q:了解哪些查找算法,時間復(fù)雜度都是多少蚪腋?
- Q:了解哪些排序算法丰歌,并比較一下,以及適用場景
- Q:快排的基本思路是什么屉凯?最差的時間復(fù)雜度是多少立帖?如何優(yōu)化?
- Q:100盞燈問題
- Q:老鼠和毒藥問題悠砚,加個條件晓勇,必須要求第二天出結(jié)果
- Q:海量數(shù)據(jù)問題
- Q:(手寫算法)二分查找
- Q:(手寫算法)反轉(zhuǎn)鏈表
- Q:(手寫算法)用兩個棧實現(xiàn)隊列
- Q:(手寫算法)多線程輪流打印問題
- Q:(手寫算法)如何判斷一個鏈有環(huán)/兩條鏈交叉
- Q:(手寫算法)快速從一組無序數(shù)中找到第k大的數(shù)/前k個大的數(shù)
- Q:(手寫算法)最長(不)重復(fù)子串
8.數(shù)據(jù)結(jié)構(gòu)
- Q:AVL樹插入或刪除一個節(jié)點的過程是怎樣的?
- Q:什么是紅黑樹?
為什么不寫答案
這篇文章主要是把題目總結(jié)下來绑咱,做一個拋磚引玉绰筛,實際上技術(shù)的題目沒有標(biāo)準答案,不同的人看的維度和深度是不同的描融,下篇文章2019最全Android面試題總結(jié)解密(持續(xù)更新中别智。。稼稿。)將會提供題目答案薄榛,僅是我自己的理解,大佬請勿拍我让歼。