這可能是9102年末最全面的Android面試總結,你值得擁有!

這可能是9102年末最全面的Android面試總結,你值得擁有!

2019即將過去2020年即將到來,今天就來聊一聊這大半年的面試經歷,面了幾家公司發現一個規律,越是出名,技術牛逼的公司,面試官都很謙虛,整個面試過程也都很舒服,遇到不會的問題面試官也都會引導你去回答問題或者給你思路,相反去一些所謂的有點小名氣的公司,遇上的面試官一個個都板着個臉,感覺自己厲害的不行,要是某個問題沒答上,馬上一個白眼過來,就算你問他答案,他也會說回去自己看去。

這可能是9102年末最全面的Android面試總結,你值得擁有!

我覺得面試考察的是一個人的綜合素質,就以Android來說,那麼龐大的一個系統再結合Java語言的相關知識點,作爲開發人員不可能會每個知識點都精通再加上每個面試官的表達能力也不同,有時經常會出現面試者沒有完全理解面試官的意思,所以我覺得一個優秀的面試官應該是很耐心的,如果遇到面試者答不出來問題時,應當去適當引導一下,或者給面試者告訴正確答案,而且一個好的面試官首先應當表現出很友善的樣子,這樣纔會讓面試者有一個好的發揮。

下面先總結一下常見的Android面試題:

Java部分

  1. Java內存區域
  2. Java虛擬機/垃圾回收算法
  3. synchronized原理/synchronized修飾對象方法和修飾靜態方法有什麼區別
  4. 線程池原理,線程池是如何進行線程複用的
  5. 線程間如何通信,消費者/生產者模型
  6. volatile關鍵字作用,使用場景有哪些
  7. 可變對象/不可變對象
  8. 集合(ArrayList,HashMap,LinkedHashMap等等)原理
  9. 內部類的作用,特點
  10. 設計模式(代理模式,裝飾器模式,工廠方法模式等等)
  11. 泛型
  12. equals和==區別?如果沒有覆寫equals,兩者有什麼區別
  13. 弱引用和軟引用

Android部分

1. Activity生命週期

這個是必問的,建議最好可以看看源碼,如果不看源碼,也可以打log看一下各種場景下的生命週期。

2. Activity啓動模式

同樣必問,先弄清楚每種模式的作用,再挨個模擬一遍,結合生命週期來看

3. Activity啓動/創建流程

這個最好大致看一下,能說出來一些具體流程會給面試官一個好的印象

4. ActivityThread作用

能知道ActivityThread作用,那證明你是看過源碼的,一定要自己去看源碼,不要只看什麼博客,因爲如果你能說出ActivityThread作用,面試官會認爲你是看過源碼的,繼而會深入一些細節,如果你沒看過源碼,你肯定無法瞭解細節。

5. Fragment生命週期,Fragment的生命週期是如何對應到Activity的生命週期,addFragment,replaceFragment有什麼區別

對於這個,建議還是自己看源碼,其實不是特別複雜,看完源碼會對Fragment的管理有一個很好地瞭解。

6. startService和bindService區別

7. ContentProvider的生命週期/數據庫如何進行升級

8. 跨進程通信/Binder

這個問題也是必考,Aidl, Messenger, ContentProvider, 廣播等等,由此還會引出Aidl如何使用, Aidl和Messenger區別,Aidl本質是什麼,什麼場景下會使用Messenger, 對Binder有了解嗎,如何你能很好的說出一些關於Binder的理解,那是相當的加分

9. Handler原理

這個還用強調是必考嗎?這個都說不出來的話,那估計面試就直接結束了,Handler一定要去看源碼,源碼並不多,寫得也很清楚,面試官一般都會問下面這幾個問題: 一個線程可以有幾個Looper? 當然是一個,那是如何保證線程只能有一個Looper呢?Message是如何和Handler聯繫起來的?Handler又是如何同Looper綁定的?

10. 廣播,全局廣播和本地廣播有什麼區別

11. View繪製原理

這個同樣需要看源碼,因爲現在分析View繪製原理的文章太多了,你只回答個onMeasure, onLayout, onDraw根本不行,面試官會問很多細節問題,另外對於MeasureSpec一定要弄清楚是怎麼回事,自己也一定要動手寫過自定義View

12. View事件攔截

必考題!依然是需要看源碼,會問很多細節的,然後還有一定要多練習,模擬一下各種事件分發的場景,比如典型的是ACTION_CANCEL事件是如何產生的?

13. Window作用,Window,Activity, View區別/DecorView是什麼

14. 進程的優先級

15. 進程保活

16. 內存優化/內存泄露

這個也算是必問的吧,這個問題會很能反映出你是否對性能有要求

17. RecyclerView有什麼優勢/內部原理

18. IntentService的原理

19. View的優化/LinearLayout性能爲什麼會比RelativeLayout好

20. 常用開源庫原理/對比

典型的就是看OkHttp,然後會比對一下Volley和OkHttp各自的優點和缺點,除此之外,Retrofit,ButterKnife,Glide也可能會問到

21. 動畫的分類和區別

22. ANR的處理

數據結構/算法:

1. 排序算法

必須掌握的是快速排序,歸併排序,堆排序,其他的如插入排序,冒泡排序,選擇排序都不用說了,屬於最簡單的排序算法,如果連這幾個都不會,那面試基本掛定了

2. 二分查找

3. 實現棧/隊列

4. 樹的遍歷

前序遍歷,中序遍歷,後序遍歷,層序遍歷,不光要知道每種方法遍歷的方式,還要能寫出代碼,一般來說前序,中序,後序的代碼比較簡單,用遞歸就可以實現,層序遍歷需要用迭代的方式配合隊列來實現

5. 算法題

這個沒啥好說的,刷題吧,劍指Offer這類的書多看看吧,主要學習一下里面的思路

網絡知識:

  1. TCP/UDP區別
  2. TCP是如何保證請求一定會到達
  3. TCP的三次握手和四次揮手,爲什麼是握手要三次,揮手卻要四次
  4. Http請求格式,常見頭部(這個基本是必問的)
  5. Https和Http區別
  6. Https握手過程

如果上面這些題,你能掌握個85%左右,那拿到offer基本沒有問題了,不過面試過程中還有一個很重要的考量因素,那就是你的溝通能力以及情商問題...其實情商這個東西,非常重要,尤其作爲程序員,因爲程序員是做需求的,而提需求的產品肯定會有各種各樣的需求或者不斷地催進度,如果情商低,那雙方難免會發生矛盾甚至是吵架,所以在面試過程中一定要展現出自己善於溝通的一面,當然情商這個東西也不是說好就能好的

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