一、前言
以下不作為Android學習路徑,只是匯總的社招Android客戶端開發面試考點(因為還有筆試考點,后面結合在一起給大家學習路徑),后續會為大家更新10w+字數的Android校招面試題庫,還有其他崗位的相關題庫和資料,想要什么崗位的可以留言哦~
本篇根據各個公司的面試問的問題的大資料進行總結,后面還會更新面試中考察所占比例,當然,本文只包括技術面,不包括hr面或者一些其他談人生理想的,
二、Android面試知識框架

三、Java 基礎叩關
3.1 資料結構與演算法
3.1.1 常用的資料結構有哪些?
3.1.2 陣列
(1).如何在一個1到100的整數陣列中找到丟失的數字?
(2).如何在給定的整數陣列中找到重復的數字? 小米
(3).如何在未排序整數陣列中找到最大值和最小值? 位元組跳動
(4).在Java中如何從給定陣列中洗掉多重復制?
(5).大數相加(今日頭條)
3.1.3 鏈表
(1).那查詢第一個跟倒數第二個呢?(這就不一樣了,第一個直接給了頭結點,倒數第二個需要從倒數第一個開始查詢,走兩步) 騰訊
(2).arrayList底層原理 滴滴 位元組跳動
(3).如何在一次遍歷中找到單個鏈表的中值? 中國平安
(4).如何證明給定的鏈表是否包含回圈?如何找到回圈的頭節點? 優酷
(5).兩個有交叉的單鏈表,求交叉點 華為
(6).如何得到單鏈表的長度? 360
(7).如何在不使用遞回的情況下逆轉單鏈表? 小米/美團
(8).怎么判斷鏈表有環? 滴滴
3.1.4 佇列&堆疊
(1).如何使用堆疊實作佇列的功能?(廣州荔枝FM)
(2).兩個堆疊實作一個佇列 蘑菇街
(3).兩個佇列實作一個堆疊 騰訊
(4).對比一下佇列和堆疊,以及它們底部實作 騰訊
3.1.5 二叉樹
(1).如何在給定的二叉樹中執行先序遍歷?百度
(2).如何實作后序遍歷演算法? 百度
(3).如何在給定陣列中執行二分法搜索? 蘇寧
(4).已知前序遍歷為{1,2,4,7,3,5,6,8},中序遍歷為{4,7,2,1,5,3,8,6},它的二叉樹是怎么樣的? 58
(5).輸入兩棵二叉樹 A 和 B,判斷 B 是不是 A 的子結構, 愛奇藝
(6).請實作兩個函式,分別用來序列化二叉樹和反序列化二叉樹, YY
(7).平衡二叉樹和紅黑樹的區別?位元組跳動
(8).什么是平衡二叉樹,它有什么特征 美團
(9).B 樹,B+樹
3.1.6 HashMap
(1).HashMap的底層原理是什么?執行緒安全么? 百度 美團
(2).HashMap中put是如何實作的? 滴滴
(3).談一下hashMap中什么時候需要進行擴容,擴容resize()又是如何實作的?
(4).什么是哈希碰撞?怎么解決? 滴滴 美團
(5).HashMap和HashTable的區別 小米
(6).HashMap中什么時候需要進行擴容,擴容resize()是如何實作的? 滴滴
(7).hashmap concurrenthashmap原理 美團
(8).arraylist和hashmap的區別,為什么取數快?位元組跳動
3.1.7圖
(1).旋轉輸出矩陣
( 2).給定一個矩陣 int matrixA[m][n],每行每列都是增序的,實作一個演算法去尋找矩陣中的某個元素 element. 搜狗
3.1.8排序演算法有哪些?
(1).top-k排序(堆排序,位圖法) 美團
(2).冒泡排序的手寫 華捷艾米
(3).堆排序演算法的手寫 華捷艾米
(4).橢圓形場地有兩個賽道,可以同時提供兩匹馬比賽,兩匹馬比賽后,可以獲知兩匹馬中跑的快的那匹馬,但是沒有計時工具,問題,如何最優的演算法(比賽次數最少),獲知10匹馬中速度最快的三匹馬 阿里
(5).輸入一個整型無序陣列,對堆排序的方法使得陣列有序 阿里
(6).如何使用快速排序演算法對整數陣列進行排序? CVTE
3.1.9 查找演算法
(1).有序陣列的二分查找演算法 百度
3.1.10 串
(1).給定一個字串,請你找出其中不含有重復字符的 最長子串的長度, 位元組跳動
(2).給定一個字串 s,找到 s 中最長的回文子串,你可以假設 s 的最大長度為 1000,
3.1.11 請寫出以下演算法的時間復雜度
冒泡排序法 插入排序法 堆排序法 二叉樹排序法
3.1.12 其他演算法
(1).常用的對稱加密演算法,有什么同? 位元組跳動
(2).如何在無序(有負數)的陣列中查找是否存在和為target的兩個陣列合,twoSum(); 位元組
3.2 Java基礎
(1).什么情況下會發生堆疊記憶體溢位?
(2).如果讓你寫一段堆疊溢位的代碼你會什么寫,一個堆疊大概有多大,為什么?每個執行緒都有這樣大小的一個堆疊嗎? (美團)
(3).JVM中一次完整的GC流程是怎樣的,物件如何晉升到老年代?
(4).介紹下GC回識訓制與分代回收策略,
(5).Java中有幾種參考關系,它們的區別是什么?
(6).GC收集演算法有哪些?它們的特點是什么?
(7).如何判斷一個物件是否被回收,有哪些GC演算法,實際虛擬機使用最多的是什么GC演算法?(美團)
(8).Jvm記憶體 結構說一下,
a.描述JVM記憶體模型,(東方頭條)
(9).JVM DVM ART的區別(360)
(10).描述GC機制,Class會不會回收?用不到的Class怎么回收?(東方頭條)
(11).StackOverFlow與OOM的區別?分別發生在什么時候,JVM堆疊中存盤的是什么,堆存盤的是什么?(美團)
(12).Java虛擬機和Dalvik虛擬機的區別?
(13).請描述new一個物件的流程,
(14).Java物件會不會分配到堆疊中?
(15).String, Stringbuffer, StringBuilder 的區別是什么?(東方頭條)
a.String StringBuffer StringBuilder在進行字串操作時的效率;這里主要考察String在記憶體中是如何創建的,(位元組跳動)
(16).String為什么是不可變的?(位元組跳動)
a.String為什么設計成final的?
(17).final 、finally、finalize 區別,
(18).抽象類和介面的區別,
(19).多載和重寫的區別 (京東)
(20).什么是值傳遞和參考傳遞,Java 是值傳遞還是參考傳遞?
(21).String s = new String(“”);創建了幾個物件?
(22).java里 equals和== 區別,
(23).try-catch-finally,try里有return,finally還執行么?
(24).Excption與Error區別,
(25).Static class 與non static class的區別,
(26).PathClassLoader與DexClassLoader的區別是什么?
(27).什么是雙親委托機制,為什么需要雙親委托機制?
(28).描述JVM類加載程序,
(29).動態代理是什么?如何實作?
(30).動態代理的方法怎么初始化的?(位元組跳動)
(31).CGLIB動態代理(位元組跳動)
(32).說說反射的應用場景,哪些框架,原理是什么?
(33).Java泛型的特點與優缺點,泛型擦除是怎么回事?
(34).List能否轉為List,
(35).泛型super和extends的區別,
a.說法2:Java 的泛型,<? super T> 和 <? extends T> 的區別,
(36).為什么IO是耗時操作?
3.3 并發編程
(1).假如只有一個cpu,單核,多執行緒還有用嗎 ?(美團)
(2).sychronied修飾普通方法和靜態方法的區別?什么是可見性?
(3).鎖分哪幾類?
(4).CAS無鎖編程的原理,(位元組跳動)
(5).ReentrantLock的實作原理,
(6).AQS原理 (小米 京東)
(7).Synchronized的原理以及與ReentrantLock的區別,(360)
(8).Synchronized在JDK1.8之后做了哪些優化 (京東)
(9).Synchronized static與非static鎖的區別和范圍(小米)
(10).volatile關鍵字干了什么?(什么叫指令重排) (位元組跳動)
(11).volatile 能否保證執行緒安全?在DCL上的作用是什么?
(12).volatile和synchronize有什么區別?(B站 小米 京東)
(13).兩個執行緒用不同的物件,怎么樣?(位元組跳動)
(14).什么是守護執行緒?你是如何退出一個執行緒的?
(15).sleep 、wait、yield 的區別,wait 的執行緒如何喚醒它?(東方頭條、位元組跳動)
(16).sleep是可中斷的么?(小米)
(17).實作非阻塞式生產者消費者(位元組跳動)
(18).如何開啟一個執行緒,開啟大量執行緒會有什么問題,如何優化?(美團)
(19).執行緒生命周期,
(20).ThreadLocal是什么?
(21).AyncTask的原理,
(22).AsyncTask中的任務是串行的還是并行的?
(23).執行緒池管理執行緒原理,
(24).執行緒池的相關引數,有哪些型別的執行緒池,執行緒池任務如何調度,任務佇列只是先進先出的佇列嗎,任務有優先級怎么辦,知道優先級反轉嗎? (美團)
(25).有三個執行緒T1,T2,T3,怎么確保它們按順序執行?
(26).Android中操作多執行緒的方式有哪些?
(27).怎樣獲取當前執行緒是否是主執行緒 (位元組跳動)
(28).HandlerThread是什么?
(29).執行緒間如何通信?
(30).RxJava執行緒切換原理,RxJava1和RxJava2的區別有哪些?
3.4 網路編程
(1).描述TCP三次握手與四次揮手的程序與意義,
a.TCP的三次握手程序?為什么會采用三次握手,若采用二次握手可以嗎?
b.三次握手為什么不是兩次一次 五次六次(美團)
(2).TCP與UDP的區別是什么?(騰訊)
(3).Http與Https的關系是什么?
(4).SSL握手的程序,
(5).Http的post與get請求的區別是什么?
(6).輸入一個URL到瀏覽器發生了什么?(美團)
四、Android體系
(1). Acitvity的生命周期是什么樣的?
a. Acitvity的生命周期,如何摧毀一個Activity? (美團)
(2). Activity的4大啟動模式,與開發中需要注意的問題,如onNewIntent() 的呼叫;
a. Activity的啟動模式,區別 (美團)
b. singleInstance如果不指定堆疊名,是怎么分配的?(位元組跳動)
(3). Intent顯示跳轉與隱式跳轉,如何使用?(美團)
(4). Activity A跳轉B,B跳轉C,A不能直接跳轉到C,A如何傳遞訊息給C?(美團)
(5). Activity如何保存狀態的?
(6). 請描訴Activity的啟動流程,從點擊圖示開始,(B站)
a. APP是怎么啟動的?
b. 啟動一個Activity的流程分析
(7). Service的生命周期是什么樣的?
a. Service兩種生命周期以及區別
(8). 你會在什么情況下使用Service?
(9). startServer和bindServier的區別?(美團)
(10). Service和Thread的區別?
(11). IntentService與Service的區別?
(12). ContentProvider如何自定義與使用場景是什么?
(13). BroadcastReciver的靜態注冊與動態注冊的區別?
(14). 廣播的分類與作業原理
(15). 可以再onReceive中開啟執行緒么,會有什么問題?
(16). 什么是有序廣播?
(17). Application、Activity、Service中context的區別?能否啟動一個activity、dialog?
(18). Fragment的生命周期? (美團)
(19). Fragment的建構式為啥不讓傳參?(B站)
(20). Fragment add與replace的區別,分別對Fragment的生命周期影響(美團)
五、View System
(1).View繪制流程與自定義View注意點,(東方頭條、美團)
Android中的每一個UI控制元件都是集成自View,然后這些View都具有相同的繪制流程,必須經過measure,layout和draw.
view的繪制流程是在Window添加程序中,ViewRootImpl類的setView方法開始的
(2).在onResume中可以測量寬高么
(3).事件分發機制是什么程序?(東方頭條)
(4).事件沖突怎么解決?(東方頭條)
(5).View分發反向制約的方法?(位元組跳動)
(6).自定義Behavior,NestScroll,NestChild,(東方頭條)
(7).View.inflater程序與異步inflater(東方頭條)
(8).inflater為什么比自定義View慢?(東方頭條)
(9).onTouchListener onTouchEvent onClick的執行順序,(58 京東)
(10).怎么攔截事件 onTouchEvent如果回傳false onClick還會執行么?(58 京東)
(11).事件的分發機制,責任鏈模式的優缺點 (美團)
(12).影片的分類以及區別(車和家)
(13).屬性影片與普通的影片有什么區別?(車和家)
(14).插值器 估值器的區別(車和家)
(15).RecyclerView與ListView的對比,快取策略,優缺點,(美團)
(16).WebView如何做資源快取?(位元組跳動)
(17).WebView和JS互動的幾種方式與攔截方法,(位元組跳動)
(18).自定義view與viewgroup的區別
(19).View的繪制原理
(20).View中onTouch,onTouchEvent和onClick的執行順序
(21).View的滑動方式
(22).invalidate() 和 postInvalicate() 區別
(23).View的繪制流程是從Activity的哪個生命周期方法開始執行的
(24).Activity,Window,View三者的聯系和區別
(25).如何實作Activity視窗快速變暗
(26).ListView卡頓的原因以及優化策略
(27).ViewHolder為什么要被宣告成靜態內部類
(28).Android中的影片有哪些? 影片占用大量記憶體,如何優化
(29).自定義View執行invalidate()方法,為什么有時候不會回呼onDraw()
(30).DecorView, ViewRootImpl,View之間的關系,ViewGroup.add()會多添加一個ViewrootImpl嗎
(31).如何通過WindowManager添加Window(代碼實作)?
(32).為什么Dialog不能用Application的Context?
(33).WindowMangerService中token到底是什么?有什么區別
(34).RecyclerView是什么?如何使用?如何回傳不一樣的Item
(35).RecyclerView的回收復用機制
(36).如何給ListView & RecyclerView加上拉重繪 & 下拉加載更多機制
(37).如何對ListView & RecycleView進行區域重繪的?
(38).ScrollView下嵌套一個RecycleView通常會出現什么問題?
(39).一個ListView或者一個RecyclerView在顯示新聞資料的時候,出現圖片錯位,可能的原因有哪些 & 如何解決?
(40_.Requestlayout,onlayout,onDraw,DrawChild區別與聯系
(41).如何優化自定義View
(42).Android屬性影片實作原理,補間影片實作原理
六、Android FrameWork
1.Android中多行程通信的方式有哪些?
a.行程通信你用過哪些?原理是什么?(位元組跳動、小米)
2.描述下Binder機制原理?(東方頭條)
3.Binder執行緒池的作業程序是什么樣?(東方頭條)
4.Handler怎么進行執行緒通信,原理是什么?(東方頭條)
5.Handler如果沒有訊息處理是阻塞的還是非阻塞的?(位元組跳動、小米)
6.handler.post(Runnable) runnable是如何執行的?(位元組跳動、小米)
7.handler的Callback和handlemessage都存在,但callback回傳true handleMessage還會執行么?(位元組跳動、小米)
8.Handler的sendMessage和postDelay的區別?(位元組跳動)
9.IdleHandler是什么?怎么使用,能解決什么問題?
10.為什么Looper.loop不阻塞主執行緒?
a.Looper無限回圈為啥沒有ANR(B站)
11.Looper如何在子執行緒中創建?(位元組跳動、小米)
12.Looper、handler、執行緒間的關系,例如一個執行緒可以有幾個Looper可以對應幾個Handler?(位元組跳動、小米)
13.如何更新UI,為什么子執行緒不能更新UI?(美團)
14.ThreadLocal的原理,以及在Looper是如何應用的?(位元組跳動、小米)
15.Android 有哪些存盤資料的方式?
16.SharedPreference原理,commit與apply的區別是什么?使用時需要有哪些注意?
17.如何判斷一個 APP 在前臺還是后臺?
18.如何做應用保活?
19.一張圖片100x100在記憶體中的大小?(位元組跳動)
20. Intent的原理,作用,可以傳遞哪些型別的引數?
21.如果需要在Activity間傳遞大量的資料怎么辦?
22.打開多個頁面,如何實作一鍵退出?
23.LiveData的生命周期如何監聽的?(B站)
七、性能優化專題
1.App穩定性優化
2.App啟動速度優化
3.3、App記憶體優化
4、App繪制優化
5.App瘦身
6.網路優化
7.App電量優化
8.安卓的安全優化
9.為什么WebView加載會慢呢?
10.如何優化自定義View
11.FC(Force Close)什么時候會出現?
12.Java多執行緒引發的性能問題,怎么解決?
13.TraceView的實作原理,分析資料誤差來源,
14.是否使用過SysTrace,原理的了解?
15.mmap + native 日志優化?
八、三方原始碼理解
1.Glide :加載、快取、LRU 演算法 (如何自己設計一個大圖加載框架) (LRUCache 原理)
2.EventBus
3.LeakCanary
4.ARouter
5.插件化(不同插件化機制原理與流派,優缺點,局限性)
6.熱修復
7.RXJava (RxJava 的執行緒切換原理)
8.Retrofit (Retrofit 在 OkHttp 上做了哪些封裝?動態代理和靜態代理的區別,是怎么實作的)
9.OkHttp
由于篇幅原因,這份面試寶典已經被整理成了PDF檔案,有需要Android面試寶典全套完整檔案的麻煩點贊+評論【1】即可獲取資料免費領取方式!
本文在開源專案:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄,里面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/64638.html
標籤:其他
上一篇:靠譜的app加固分享(未完成)
下一篇:uni-app生命周期

