android 面試題(2020補充更新中)

Java 基礎

1、HashMap、HashTable和ConcurrentHashMap的區別。

    擴展:瞭解其原理,並瞭解HashSet、TreeSet、TreeMap(瞭解Collection集合)

   稍微問的深一點的可能會在下面這些點上出問題。哈希碰撞,哈希計算,哈希映射,爲什麼是頭插法,擴容爲什麼是 2 的冪次等這樣的問題。

  Android中獨有的集合類是?(SparseArray)

  ConcurrentHashMap在 1.7和1.8中的不同

 

 

2、Synchronized 和 ReentrantLock 的區別及各自的實現原理

擴展:volatile 、CAS 

a、synchronized 修飾實例方法和修飾靜態方法有啥不一樣。

https://cloud.tencent.com/developer/article/1462258

 

3、JVM 類記載機制,垃圾回收算法對比,Java虛擬機結構

《深入理解Java虛擬機》

當你講到分代回收算法的時候,不免會被追問到新生對象是怎麼從年輕代到老年代的,以及可以作爲 root 結點的對象有哪些兩個問題。

 

4、Java 四大引用

    稍微問的深一些的面試官會和內存泄漏檢測原理以及垃圾回收糅雜在一起。

    https://cloud.tencent.com/developer/article/1420622

 

5、Java泛型,<? supre T> 和<? extends T>

泛型擦除

 

6、線程調度(線程狀態)

 

7、final、finally、finalize 

   finalize:

finalize()是Object類的protected方法,子類可以覆蓋該方法以實現資源清理工作。
GC在回收對象之前都會調用該方法
finalize()方法是存在很多問題的:

  • java語言規範並不保證finalize方法會被及時地執行,更根本不會保證它們一定會被執行
  • finalize()方法可能帶來性能問題,因爲JVM通常在單獨的低優先級線程中完成finalize的執行
  • finalize()方法中,可將待回收對象賦值給GC Roots可達的對象引用,從而達到對象再生的目的
  • finalize方法最多由GC執行一次(但可以手動調用對象的finalize方法)

 

8、sleep 、waityield 的區別,wait 的線程如何喚醒它?

 拓展:wait,notify(),notifyAll();

https://www.jianshu.com/p/446b2fcec642

 

9、接口和抽象類的區別

   注意java 1.8新特性;允許給接口添加一個非抽象的方法,只需要default關鍵字就可以。

 

10、最大堆和最小隊

  擴展:ArrayDeque

 

11、數組和線性數組區別?

 

12、Java 1.8有什麼變化?

 

13、==和equals的區別?

  擴展:一個類做比較需要重寫哪些方法?equals 和hashcode爲什麼都需要重寫?

http://leeon.cc/posts/java-equals-hashcode/

 

四大組件方面

一、Activity相關

1、Activity 的啓動方式

https://baijiahao.baidu.com/s?id=1616439180421446209&wfr=spider&for=pc

2、singleTop和singleTask有什麼不同

3、Activity生命週期。onStart和onResume()有什麼不同?

https://blog.csdn.net/chenjian723122704/article/details/79360133

4、android Activity的生命週期?及一些情況下生命週期調用的順序?

5、橫豎屏切換時Activity的生命週期?

         a、不設置Activity的android:configChanges時,切屏會重新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次
         b、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命週期,切橫、豎屏時只會執行一次
        c、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged方法

  

二、Service相關

1、Service 的啓動方式、生命週期的執行及有什麼區別?

https://www.jianshu.com/p/4c798c91a613

2、在一個activity中兩次startService,然後bindservice,該Service怎麼關閉?

3、IntentService與Service有什麼不同?

https://blog.csdn.net/imxiangzi/article/details/76039978

 4、IntentService有何優點?

 

5、IntentService源碼分析

 

 

三、Broadcast receiver

1、android中系統廣播有那幾中。那些是有序廣播?

Android:Broadcast廣播類型主要分爲5類:

    普通廣播(Normal Broadcast)
    系統廣播(System Broadcast)
    有序廣播(Ordered Broadcast)
    粘性廣播(Sticky Broadcast)
    App應用內廣播(Local Broadcast)
https://www.cnblogs.com/lwbqqyumidi/p/4168017.html   ()

 該問題涉及:廣播在安卓不同版本中的變更;

https://developer.android.google.cn/guide/components/broadcasts?hl=en  

會影響到不同註冊方式的使用?

 

2、廣播註冊的方式有哪幾種?

https://www.jianshu.com/p/e12af781f983

https://blog.csdn.net/carson_ho/article/details/53160580

 

四、Content  provider

1、ContentProvider是如何實現數據共享的?

 

 

 

五、

1、組件化架構設計,模塊化

    https://cloud.tencent.com/developer/article/1415760

    一塊內容真的很多,你需要考慮的問題很多,哪一步做什麼,順序很重要。

 

2、MVC、MVP、MVVM的區別及各自的使用場景

  、

3、Router 原理,如何實現組件間通信,組件化平級調用數據方式。

4、系統打包流程;

5、APP啓動流程

6、如何做啓動優化?

7、件分發機制。

 

8、設計模式

   a、單例模式

   b、生產者模式和消費者模式的區別

  c、

 

9、Handler 機制原理,IdleHandler 什麼時候調用。

 

10、LeakCanary 原理,爲什麼檢測內存泄漏需要兩次?

 

11、BlockCanary 原理。

 

12、ViewGroup繪製順序

 

13、如何檢測ANR,ANR的原理?

  拿到/data/anr/trace.txt對應的文件,然後搜索關鍵字ANR。

  原因有以下幾點

  a、過度複雜的UI佈局。比如佈局嵌套太深,自定義空間onDarw()含有複雜的算法增加渲染UI的工作量。

        b、過渡繪製。比如一個頁面設置背景後,該頁面的child節點在此設置相同的背景,

        c、UI線程複雜的算法。解決辦法:減少UI線程中耗時操作。

       d、頻繁的創建。原因大量的對象被創建又立馬釋放。

 

14、自定義 ViewGroup 如何實現 FlowLayout?如何實現 FlowLayout 調換順序?

15、自定義 View 如何實現拉弓效果,貝瑟爾曲線原理實現?

16、APK 瘦身是怎麼做的,只用 armabi-v7a 沒有什麼問題麼?

 APK 瘦身這個基本是 100% 被面試問到,可能是我簡歷上提到的原因

 

17、ListView 和 RecyclerView 區別?RecyclerView 有幾層緩存,如何讓兩個 RecyclerView 共用一個緩存?

 

18、如何判斷一個 APP 在前臺還是後臺?

 

19、如何做應用保活?全家桶原理?

 

20、講講你所做過的性能優化。

 

21、rofit 在 OkHttp 上做了哪些封裝?動態代理和靜態代理的區別,是怎麼實現的。

 

22、跨進程通信的方式?

擴展:AIDL、Binder機制

 

23、RxJava 

擴展:使用那些操作符,都是什麼作用?  怎麼切換線程?

實現原理

 

24、Glide 緩存原理,如何設計一個大圖加載框架。

 

25、LRUCache 原理;

 

26、如何對Android應用進行性能分析。

 

27、簡述Android系統架構。

 

28、簡述Android程序運行時權限與文件系統權限的區別?

 

29、Framework工作方式及原理,Activity如何生成一個view,機制是什麼?

https://www.jianshu.com/p/2f95ab717078

30、線程池原理

 Android中有那幾種創建線程的方式;創建線程池的參數有哪些?

核心線程池爲什麼不會被殺死?

https://blog.51cto.com/14230003/2418026?source=dra

 

31、AsyncTask源碼

 

32、ARoute

第一級路由是否可以一樣?跨model通信怎麼實現接受返回值?

 

33、直播的流程

 

34、Android 網絡優化

 

擴展:https://developer.android.google.cn/training/articles/security-config.html

 

35、Serializable和Parcelable比較,爲什

   Parcelable比Serializable的好處,好在哪裏?

 

六、網絡部分

1、TCP有哪些狀態

 

2、三次握手,四次揮手

 

3、Https和http的區別?

擴展:https的原理

 

4、喜歡深問一點的還會問到網絡架構,每層有些什麼協議,FTP 這些相關原理,印象比較深刻的還有一個問題是:TCP 建立連接後,發包頻率是怎樣的?

 

 

 

 

七、算法

1、String專int

 

2、如何判斷一個單鏈表有環?

 

3、鏈表翻轉;

 

4、算二叉樹的最大深度,要求非遞歸算法。

 

5、像二叉樹;

 

6、兩個非常長的數字字符串,實現兩個字符串的相加。字符串的長度可能超過基本類型數據的最大值

 

 

 

https://www.lizenghai.com/archives/35621.html

 

https://zhuanlan.zhihu.com/p/44328402

 

https://www.jianshu.com/p/c93965357556

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