以下為樓主在最近的 Android 開發(社招)面試中總結的 Android 基礎知識點,已經拿到心儀的offer,回饋同學們,感謝其他大佬的分享,
Android中大廠面試都很重視基礎知識的考察,面試前不僅要熟悉這些知識點,也要適當去背誦,保證面對面試官時能從容清晰地表述出來,強烈推薦《Android開發藝術探索》,校招社招都對我很有幫助;《Java并發編程實戰》幫助理解多執行緒安全;《深入理解Java虛擬機》幫助理解JVM,理解了以下問題后,最好要用筆手寫下來,幫助你組織語言,加深印象,幫助復習,
本文主要是整理了中高級Android需要會的(或者說面試被頻繁問到的內容),主要作為參考大綱,之后會陸續更新每個詳細部分,供大家參考,互相學習,
常規面試題
Android面試題
- ListView 如何快取的?
- RecyclerView聯系人串列如何實作A-Z快速定位
- 廣播和EventBus的區別
- 主執行緒Looper回圈為什么沒有卡主執行緒?nativePollOnce
- SharedPreference的執行緒安全、行程安全,如何跨行程
- Android 中實作多執行緒: threads, Handler, AsyncTask, IntentService
- Android 中如何實作多行程
- 自定義View的程序:measure,layout,draw
- LayoutInflater#inflate 的 attrachToParent true 是什么意思
- theme 和 style 有什么區別,優先級
- 有哪些行程間通信方式
- View 的渲染程序
- Binder 的原理和優勢
- AIDL 中的 oneway 有什么用,方向標簽 in、out、inout 是什么意思
- Android 中有哪些影片,都說下
- Serializable 和 Parcelable 的區別
- 你知道哪些Layout,ConstraintLayout 的特點是什么
- 手機開發者選項有哪些,不保留活動是什么
- 基本的資料型別有哪些?
- String、StringBuilder、StringBuffer的區別?
- Fragment是什么,使用場景和生命周期
- 說一下Context和記憶體泄露
- 執行緒創建的方法?
- Activity的啟動模式和適用場景?
- ViewPager用過嗎?然后扯到了它和Fragment聯合;
記憶體泄露和記憶體溢位說一下
(1)記憶體泄漏memory leak :是指程式在申請記憶體后,無法釋放已申請的記憶體空間,一次記憶體泄漏似乎不會有大的影響,但記憶體泄漏堆積后的后果就是記憶體溢位,
(2)記憶體溢位 out of memory :指程式申請記憶體時,沒有足夠的記憶體供申請者使用,或者說,給了你一塊存盤int型別資料的存盤空間,但是你卻存盤long型別的資料,那么結果就是記憶體不夠用,此時就會報錯OOM,即所謂的記憶體溢位,
記憶體溢位的原因及解決方法
(1)記憶體溢位原因:
①記憶體中加載的資料量過于龐大,如一次從資料庫取出過多資料;
②集合類中有對物件的參考,使用完后未清空,使得JVM不能回收;
③代碼中存在死回圈或回圈產生過多重復的物件物體;
④使用的第三方軟體中的BUG;
⑤啟動引數記憶體值設定的過小
(2)記憶體溢位的解決方案:
①第一步,修改JVM啟動引數,直接增加記憶體,(-Xms,-Xmx引數一定不要忘記加,)
②第二步,檢查錯誤日志,查看“OutOfMemory”錯誤前是否有其 它例外或錯誤,
③第三步,對代碼進行走查和分析,找出可能發生記憶體溢位的位置,
垃圾回識訓制說一下?
四大組件
- 當記憶體不足時Service被殺死了,如何重啟這個Service
- Android系統殺行程時,是怎么考慮行程優先級的?
- Fragment 的 ViewModel 如何訪問到 Activity 的 ViewModel 的資料
- Activity 4種啟動模式說下,各種啟動模式適合的應用場景
- Activity 任務堆疊從底到頂為 A-B-C,低記憶體殺死行程后,重新點擊,顯示哪個?這時如果C里面有Fragment是怎樣恢復的?
- Activity如何傳參給Fragment?為什么用setArgument傳參,而不是使用帶有引數的構造器?
- window、view 和 Activity 的關系
- Activity、Fragment 的各個生命周期依次說一下,各個生命周期里面適合做什么
- Activity 呼叫 finish 方法后怎么走到 onDestroy 的
圖片
- Glide快取特點
- Glide為我們做了哪些記憶體優化
- Glide如何加載 GIF
- ListView 圖片錯位的原因,解決方案
- bitmap如何處理大圖,30M的大圖如何防止OOM?
網路
- OKHttp 如何實作快取
- OKHttp 的超時時間,有考慮DNS超時碼
- OKHttp 執行緒池、連接池講下
- OKHttp 的所有攔截器有哪些,請求失敗了重試1、2次怎么做
- Retrofit實作機制
- Room注解如何在編譯時生成類檔案
- http 和 https 的區別,shakehand的程序說下
- 狀態碼400、401,3xx有哪些
- 網路劫持是什么,應該怎么做
- TCP三次握手,握手中的網路包各個標記位是多少,四次揮手說一下
- TCP 發送視窗是什么?
- 混合開發h5了解多少
- 瀏覽器視窗訪問一個網址的程序
- POST 和 GET 有什么區別
優化
- 記憶體泄漏分析,LeakCanary的原理,泄漏物件是如何找到參考鏈的
- APK瘦身
- 啟動優化
- 卡頓分析!!
- ANR分析!!
- 為什么布局檔案中層級越多,性能可能差很多
- 你有哪些應用性能優化的經驗必問
- ProGuard怎么寫
Java
1、Java中==和equals和hashCode的區別
2、int與integer的區別
3、談談對java多型的理解
4、String、StringBuffer、StringBuilder區別
5、抽象類和介面區別
6、Serializable 和Parcelable 的區別
7、string 轉換成 integer的方式及原理
8、哪些情況下的物件會被垃圾回識訓制處理掉?
9、什么是強參考、軟參考、弱參考以及虛參考?
10、什么是依賴注入?能說幾個依賴注入的庫么?
11、靜態代理和動態代理的區別,什么場景使用?
12、Java的例外體系
13、JVM的回收演算法是怎樣的
14、說一下泛型原理,并舉例說明
15、能說說HashMap常用操作的底層實作原理嗎?
16、垃圾回識訓制和呼叫 System.gc()的區別?
17、說一下你所了解的設計模式有哪些
18、說下java中的執行緒創建方式,執行緒池的作業原理,
Kotlin
- Kotlin協程為什么能以同步代碼寫出異步邏輯?
- suspend 函式的作業原理
- 在協程上定義了一個區域變數,為什么在其中的其他執行緒里的協程也能訪問到?
- by 的兩種場景,by Lazy 的實作
- object 單例的實作
演算法
- 各種排序演算法(冒泡、選擇、快排、歸并,,,)的時間復雜度,各種查找演算法(順序查找,二分查找,,,)的時間復雜度
- LRU 實作(146)參考LinkedHashMap實作的3個方法
- LFU 快取(460) 同一頻率使用LRU的NodeList,外面套一層{freq to NodeList},NodeList用雙鏈表實作
- 兩數相加(445)
- 找缺失的數字(268)注意相似題目里有中等
- 兩個佇列實作堆疊(225)
- 洗掉子檔案夾(1233)
- 螺旋矩陣列印(54)
- 用生成亂數1-5(1,2,3,4,5)的方法,得到一個可以生成亂數(1-7)的方法
- 54張撲克牌,分成3堆,大小王出現在同一堆的概率(排列組合算數題)
Android第三方庫原始碼
1、網路底層框架:OkHttp實作原理
2、OKhttp針對網路層有哪些優化?
3、網路請求快取處理,okhttp如何處理網路快取的?
4、從網路加載一個10M的圖片,說下注意事項?
5、網路封裝框架:Retrofit實作原理
6、回應式編程框架:RxJava實作原理
7、圖片加載框架:Glide實作原理
8、Glide如何確定圖片加載完畢?
9、Glide記憶體快取如何控制大小?
10、加載bitmap程序(怎樣保證不產生記憶體溢位)
11、Android中軟參考與弱參考的應用場景,
12、LruCache原理
13、Fresco與Glide的對比:
14、Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM?
15、事件總線框架EventBus實作原理
16、記憶體泄漏檢測框架:LeakCanary實作原理
17、leakCannary中如何判斷一個物件是否被回收?
18、依賴注入框架:ButterKnife實作原理
19、依賴全域管理框架:Dagger2實作原理
20、資料庫框架:GreenDao實作原理
性能優化
這個主要結合你所做過的專案問,一般面試官會問你專案做過哪些方面的優化,常見的問法就是:
優化的思路是什么
用到了哪些技術
遇到了哪些困難(問題)
如何解決
有什么心得
主要結合自己專案回答,切記不要自己給自己挖坑,比如沒有做過這方面優化,你為了表現自己,說做過,結果面試官往下問回答不出來,這關乎誠信問題,你們懂的~
抽象問題
- 講講做過的專案,有哪些亮點
- 你自己的亮點在哪里,你的加入可以給團隊帶來什么
- 技術規劃,怎么發展
設計題
- 如果讓你設計一個音樂播放器,要實作哪些介面
- 設計一個圖片下載庫:深挖 Glide,如果圖片沒有設定有效期,如何保證快取被更新?
有關的一些面試題還有復習資料我都放在我的Codechina
https://codechina.csdn.net/weixin_55362248/android/-/blob/master/Android.md有需要的可以自行查看,
下面統計一些公司的真實面試題
(一)泰科電子面經 高級安卓工程師社招面試題目
1.ContentProvider的權限管理(解答:讀寫分離,權限控制-精確到表級,URL控制)
2.如何通過廣播攔截和abort一條短信?
3.廣播是否可以請求網路?
4.廣播引起anr的時間限制是多少?
5.計算一個view的嵌套層級
6.Activity堆疊
7.Android執行緒有沒有上限?
8.執行緒池有沒有上限?
9.ListView重用的是什么?
10.Android為什么引入Parcelable?
11.有沒有嘗試簡化Parcelable的使用?
12.四大組件以及使用方式
13.網路請求
14.get/post請求的區別
15.xml/json的區別以及決議方式
16.談談對Handler的理解
17.service的啟動方式
18.螢屏適配
19.ArrayList與LinkedList區別
20.Application和Activity的Context物件的區別
21.Android屬性影片特性
22.如何匯入外部資料庫?
23.LinearLayout、RelativeLayout、FrameLayout的特性及對比,并介紹使用場景,
24.談談對介面與回呼的理解
25.回呼的原理
26.寫一個回呼demo
27.介紹下SurfView
28.RecycleView的使用
29.動態權限適配方案,權限組的概念
30.Android系統為什么會設計ContentProvider?
31.下拉狀態欄是不是影響activity的生命周期
32.說說ContentProvider、ContentResolver、ContentObserver之間的關系
33.請描述一下廣播BroadcastReceiver的理解
34.廣播的分類
35.序列化的作用,以及Android兩種序列化的區別
36.Android中PID和UID的區別
37.Binder的理解,以及為什么要用Binder,行程間通信的方式
38.框架搭建選型的注意點
39.第三方SDK應用
40.MVC、MVP設計模式
41.TCP與UDP的區別
42.Dalvik虛擬機方面
43.EventBus實作原理
44.對自定義view的理解
45.詳細介紹下自己做過的專案對你的成長最大?哪個的識訓最大?
46.你認為一名安卓工程師最重要的特質是什么?你在作業中最終重視的因素是什么?你在作業中是怎么保持持續學習的?
(二)咻電科技 安卓工程師 社招 面試技術題目
1.mvc和mvp的使用場景和優缺點
2.Hashmap實作原理
3.性能優化(一定要具體說出很多方案,比如記憶體、電量、流量等具體解決方案)
4.單例模式的寫法和各種寫法的優缺點
5.okHttp、volley、retrofit等網路框架的使用和原理
6.四大圖片加載框架的使用和原理
7.如何考慮架構設計
8.自定義View,繪制流程、步驟,
9.事件攔截和分發機制
10.行程間的通信方式
11.應用的創建啟動流程
12.Handler是怎么導致記憶體泄露的
13.設計模式理解問得也多,
14.Binder驅動
15.如果在onStop的時候做了網路請求,onResume的時候怎么恢復?
16.Bitmap使用時候注意什么?
17.Bitmap的recycler()
18. Android中開啟攝像頭的主要步驟
19. ViewPager使用細節,如何設定成每次只初始化當前的Fragment,其他的不初始化?
20. 點擊事件被攔截,但是想傳到下面的View,如何操作?
21. 微信主頁面的實作方式
22.微信上訊息小紅點的原理
23.如何優化自定義View
24.低版本SDK如何實作高版本api?
25.描述一次網路請求的流程
26.HttpUrlConnection和okhttp關系
27.Bitmap物件的理解
28.looper架構
29.Activity上有Dialog的時候按Home鍵時的生命周期
30. 兩個Activity之間跳轉時必然會執行的是哪幾個方法?
31.前臺切換到后臺,然后再回到前臺,Activity生命周期回呼方法,彈出Dialog,生命值周期回呼方法,
32. ActivityThread,AMS,WMS的作業原理
33.自定義View如何考慮機型適配
34.自定義View的事件
35.AstncTask+HttpClient與AsyncHttpClient有什么區別?
36事件分發中的onTouch和onTouchEvent有什么區別,又該如何使用?
(三)騰訊社招安卓崗面試經歷(涼)
1、synchronize用法,volatile用法,兩者的區別和場景
2、動態權限適配方案,權限組的概念
3、網路請求快取處理,okhttp如何處理網路快取的;圖片加載庫相關,bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
4、行程保活
5、listview圖片加載錯亂的原理和解決方案,listview是如何做快取的?
6、https相關,如何驗證證書的合法性,https中哪里用了對稱加密,哪里用了非對稱加密,兩者的區別?
7、Android系統為什么會設計ContentProvider,行程共享和執行緒安全問題
(1)提供一種跨行程資料共享的方式:
由系統來管理ContentProvider的創建、生命周期及訪問的執行緒分配,簡化我們在應用間共享資料(行程間通信)的方式,我們只管通過ContentResolver訪問ContentProvider所提示的資料介面,而不需要擔心它所在行程是啟動還是未啟動 ,
(2)更好的資料訪問權限管理:
ContentProvider可以對開發的資料進行權限設定,不同的URI可以對應不同的權限,只有符合權限要求的組件才能訪問到ContentProvider的具體操作,
微信的聊天資料在本地都是加密處理的(防止root了被破解),設計一個類似的本地資料存盤系統
8、jvm相關和GC回收演算法的區別
9、Android相關優化(如記憶體優化、網路優化、布局優化、電量優化、業務優化)
10、EventBus實作原理和觀察者模式在開發中的運用?
11、動態代理模式如何運用?
12、App是如何沙箱化,為什么要這么做?
(四)滴滴社招面試
一面
1、詢問專案相關的問題;
2、概述一下****HashMap
答:HashMap是基于哈希表的Map介面的非同步實作,此實作提供所有可選的映射操作,并允許使用null值和null鍵,此類不保證映射的順序,特別是它不保證該順序恒久不變,
3、hashmap原理說一下;
4、HashMap什么時候進行擴容呢?
答:當HashMap中的元素個數超過陣列大小時,就會進行陣列擴容,
5、https相關程序說一下;
6、執行緒安全,synchronized,lock各種原理
7、如何保證通信安全性?
8、如何實作鏈表陣列?
二面
1、專案經歷介紹;
2、content-type有哪些值?
3、常見的回應碼有哪些?
(1)200:請求成功,瀏覽器會把回應體內容(通常是html)顯示在瀏覽器中;
(2)404:請求的資源沒有找到,說明客戶端錯誤的請求了不存在的資源;
(3)500:請求資源找到了,但服務器內部出現了錯誤;
(4)302:重定向,當回應碼為302時,表示服務器要求瀏覽器重新再發一個請求,服務器會發送一個回應頭Location,它指定了新請求的URL地址;
4、UNICODE和utf-8是干什么的,一個中文分別在其中占據多少大小?
5、如何批量發布?
6、應用崩潰了怎么辦,如何收集崩潰資訊?
7、應用網路不好如何判斷?
8、通信如何保證安全?
9、android快取如何快取,圖片如何快取,資料如何快取,快取機制?**
10、js和android耦合;
11、react native
12、kotlin以及看法;
13、flutter
14、演算法題:洗牌不回到原來位置;
三面
1、執行緒鎖的區別;
2、同一個鎖為什么效率有差別?
3、多型和多載區別;
(1)多型是建立在重bai寫的基礎之上的,是類與類du之間的zhi關系,是發生在不同的類之dao間的,子類重寫zhuan父類的方法,實作不同的子類,不同的實作形態,多型有3個條件:繼承、重寫和父類參考指向子類物件
(2)多載則是類的內部的方法構型上的不同,是發生在同一個類里面的,同一個函式名稱,引數不同的多個方法,實作同一型別的功能,
4、Hashmap
5、Jni
6、設計模式:觀察者模式怎么用?
7、說一下自身的優缺點;
8、你對領導期望是?
9、你對滴滴了解有多少?印象如何?說一下你的看法,
以上面試原題我都是從我的Codechina里面提取出來的,有需要的小伙伴可以直接去的Codechina查看,
專案地址:Codechina
https://codechina.csdn.net/weixin_55362248/android/-/blob/master/Android.md
?


由于篇幅原因,在這里就不一一展示了,有需要的小伙伴可以點擊上方鏈接直接獲取,
小伙伴們記得一鍵三連哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/300020.html
標籤:其他
