2019即將過去2020年即將到來,今天就來聊一聊這大半年的面試經歷,面了幾家公司發現一個規律,越是出名,技術牛逼的公司,面試官都很謙虛,整個面試過程也都很舒服,遇到不會的問題面試官也都會引導你去回答問題或者給你思路,相反去一些所謂的有點小名氣的公司,趕上的面試官一個個都板着個臉,感受本身厲害的不行,要是某個問題沒答上,立刻一個白眼過來,就算你問他答案,他也會說回去本身看去。程序員
我以爲面試考察的是一我的的綜合素質,就以Android來講,那麼龐大的一個系統再結合Java語言的相關知識點,做爲開發人員不可能會每一個知識點都精通再加上每一個面試官的表達能力也不一樣,有時常常會出現面試者沒有徹底理解面試官的意思,因此我以爲一個優秀的面試官應該是很耐心的,若是遇到面試者答不出來問題時,應當去適當引導一下,或者給面試者告訴正確答案,並且一個好的面試官首先應當表現出很友善的樣子,這樣纔會讓面試者有一個好的發揮。面試
下面先總結一下常見的Android面試題:算法
1. Activity生命週期數據庫
這個是必問的,建議最好能夠看看源碼,若是不看源碼,也能夠打log看一下各類場景下的生命週期。設計模式
2. Activity啓動模式網絡
一樣必問,先弄清楚每種模式的做用,再挨個模擬一遍,結合生命週期來看數據結構
3. Activity啓動/建立流程ide
這個最好大體看一下,能說出來一些具體流程會給面試官一個好的印象oop
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這類的書多看看吧,主要學習一下里面的思路
若是上面這些題,你能掌握個85%左右,那拿到offer基本沒有問題了,不過面試過程當中還有一個很重要的考量因素,那就是你的溝通能力以及情商問題...其實情商這個東西,很是重要,尤爲做爲程序員,由於程序員是作需求的,而提需求的產品確定會有各類各樣的需求或者不斷地催進度,若是情商低,那雙方不免會發生矛盾甚至是吵架,因此在面試過程當中必定要展示出本身善於溝通的一面,固然情商這個東西也不是說好就能好的