2019安卓面試題整理

圖片相關:

項目裏用到的圖片格式
jpeg,png,webp的各自有什麼特點
webp的優缺點
什麼是矢量圖,特點是什麼
矢量圖對應的另一種圖片類型是什麼,位圖的特點是什麼
位圖和矢量圖的比較
假設xxhdpi目錄下有一個2M的圖片,那麼加載到內存的時候它佔用的空間是多大
如果把一個2M的圖片放到hdpi目錄下,它加載到內存的時候佔用的空間是多大?爲什麼
drawable和mipmap有什麼區別,什麼樣的圖片會放在mipmap下
同樣一個圖片放在mipmap下和drawable下加載到內存的大小有什麼區別嗎
怎麼樣實現圖片壓縮
webp格式的圖片有什麼優缺點,通常用在哪裏?爲什麼不適合用作啓動圖

計算機網絡相關

http/https協議的區別
https如何保證安全性的,s是什麼,ssl的實現原理
http的默認端口,https的默認端口
除了這兩個還有什麼其它的傳輸協議嗎
什麼是TCP/IP協議,網絡架構
tcp和udp的區別
聊天用udp還是tcp爲什麼
什麼是DNS,爲什麼要用DNS
在瀏覽器輸入一個url,點擊回車訪問,這背後的流程是什麼

什麼是MD5,爲什麼使用MD5,MD5可以解密嗎
什麼是base64,通常用在什麼地方?有什麼優缺點
什麼是對稱加密,非對稱加密
什麼是公鑰和私鑰

DNS的工作原理,爲什麼需要DNS

算法相關

使用java遞歸實現n的階乘
使用java實現一個字符串的反轉
使用java實現1-100的階乘的和
快速排序

java基礎

java的集合類有哪些,各有什麼特點,用在什麼場景
SparseArray是什麼,有什麼特點
linklist和arraylist各自的特點

hashmap和hashset的特點
hashmap的實現原理
如何自己實現一個觀察者模式
什麼是類鎖什麼是對象鎖,如何使用
hashmap是線程安全的嗎?如何保證它是線程安全的

jvm gc原理

android項目架構相關

項目的組件化架構是怎麼設計的,在紙上畫一下
組件間的通信是怎麼實現的,如果調用另一個組件的方法

第三方框架相關

eventbus的使用場景和通信原理
okhttp是如何發起一個請求的
okhttp是如何添加攔截器的
retrofit的動態代理了解嗎
對註解瞭解嗎,註解框架butterknife的原理
講一下okhttp的攔截器是如何實現順序攔截的

android基礎

view的繪製流程,繪製模式是什麼,有什麼含義
view繪製的onMeasure參數是什麼,是什麼意思
事件分發的流程
handler是如何實現線程切換的
messagequen的實現原理

什麼是雙重校驗模式,爲什麼這麼寫,有什麼風險嗎
還有更好的單例模式嗎
classLoader是什麼
雙親委託模式是什麼
子classLoader和父classLoader的關係是什麼?是繼承還是包含關係?
雙親委託模式的時候,子類是如何調用父類的classLoader的?具體的方法是哪個?
爲什麼使用雙親委託模式?
爲什麼無法覆蓋系統的類?系統是怎麼做到無法被覆蓋的?final

activity上面有一個dialog,退出到桌面的生命週期
activity A 啓動 activity B 的流程,兩個activity各自的生命週期,爲什麼要這麼實現
從點擊桌面launcher圖標到啓動app的流程是什麼
如何檢測jni和so的崩潰
如何收集APP內部的崩潰日誌,友盟,自己實現

設計模式相關

你常用的單例模式有哪些
手寫單例模式,項目中常用的單例模式
雙重校驗加鎖的單例模式會衍生到你對synchronized關鍵字的理解,進而衍生到類鎖和對象鎖
手寫觀察者模式
自己對靜態代理和動態代理的理解

其它

自我介紹
項目介紹,哪個是你認爲自己做的最好的項目
自己做項目遇到哪些困難的地方

以下是高頻面試題,幾乎每個公司都會問的!

1、view的繪製流程:

1》首先你必須要回答好viewgroup和view的繪製流程
2》必須要搞清楚view的測量模式,現在網絡上流傳的很廣的說法:佈局裏是wrap_content的測量模式就是at_most,佈局裏是match_parent或者dp值的測量模式就是exactly,這是完全錯誤的!
因爲子view的測量模式不但和自己的佈局屬性有關係,還和父view本身的測量模式有關係,這一點大家看源碼即可或者給大家推薦一下這個課程:
Android多種方式實現流式佈局-慕課網
https://www.imooc.com/learn/1141
3》view繪製的時候有哪些注意事項?:ondraw方法不要new對象,複雜的非實時計算不要放到ondraw方法內,要預先計算。不可變的背景和可變的背景繪製要分開等等。
4》viewgroup通過調用它的dispatchdraw方法分發給子組件進行繪製

2、事件分發流程

1》事件分發流程
2》很多面試官會給你一個場景,讓你分析,比如
list列表裏有一個Button,手指按下–滑動–擡起,這個過程的事件分發講一下
2.1 :當list滑動的時候,button會收到down–幾個move–cancel事件
2.2 :當list不滑動的時候,並且手指在button內部擡起,button會收到down–up事件(手指橫向滑動,list是豎直排列的時候,list不會滾動)
2.3 :如果list不滑動,手指在button外部擡起,會收到up事件但是不會觸發onclick方法
viewpager嵌套viewpager或者list,當內部的viewpager滑動到頂端以後,繼續滑動的時候事件分發—內部會受到CANCEL事件,然後外部viewpaer會繼續滑動

如何讓內部的viewpager不滑動,只滑動外部viewpager:這個主要是想問你requestDisallowInterceptTouchEvent的方法使用,子view可以申請父view攔截或者不攔截事件。

如何讓recyclerview在滑動結束後讓某個item居中顯示:計算滑動結束後哪個item更靠近屏幕中央,則讓這個item滾動到中央,這裏又可能會問你scrollto和scrollby,如何流程的滑動,還有可能問到layoutmanager的scrollToPositionWithOffset和scrollToPosition 方法等

也就是說你不但要清楚事件分發的流程,也要在具體的場景下能分析出正確的結果

網絡相關的知識

https的加密過程和通信過程

1.什麼是非對稱加密和對稱加密
2.爲什麼不用非對稱加密直接通信?—因爲對稱加密的通信效率更高
3.tcp協議和http協議
4.http2.0的特點
5.三次握手和四次分手的過程

關於網絡訪問,這裏有幾點要提醒大家。一定要搞清楚計算機網絡的四層架構。面試官經常問http和tcp的關係或者區別,你必須要清楚,http是用在應用層的協議,它的特點是把用戶端的請求構建成request對象,然後交給下層去處理。然後接受下層傳來的response返回對象並解析。
tcp是傳輸層的協議,它負責建立可靠的傳輸鏈接,三次握手和四次分手就是它來負責的

計算機網絡相關的知識是特別特別高頻的問題。

GC算法

這個必須要瞭解,面試高頻問題

HashMap的實現原理,get/put流程,什麼是hash重裝,什麼時候會擴容,擴容以後會怎麼樣(rehash,重新排列數據)

hashmap和arraylist如何同步

內存優化和性能優化

等等等等

目前還記得的就這麼多,因爲問題實在太多,我也偷個懶,沒有寫答案,大家不清楚的查一下就好。希望能幫到大家(^ ▽ ^)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章