Android 進階/面試的重點和難點
寫在前面
記得我大二時“不務正業”地自學Android并跟了老師做項目,到大三開始在目前的公司實習,至今畢業半年有多,學習Android已經3年多了!但總感覺知識點很零散,并且不夠深入,遇到瓶頸,所以有了這文章。
本文是我對自身的Android編程技能的總結、思考和反省,意在系統地、深入地學習Android的重難點,使自己的能力上一個臺階。下面我將會羅列Android知識體系中比較高頻、重要或難懂的知識點,并未來會基于此文章列出的知識點一個一個學習研究,并寫成一系列的文章,當做自己的學習總結筆記,也希望童鞋們和我一起學習和交流~
說明:本文不是面試經驗談,而是自我總結。我也不打算像網上很多文章那樣只列出點,說出結果,而沒說原因,然后死記硬背,知其所以然而不知其然。而我是打算對下面的知識點深入學習,并對每個知識點從源碼或舉例來寫成文章,從而即知其然又知其所以然。我也不知能否做到,但我會堅持努力,當作立個flag吧~
正文 Android進階重難點
Java
- 集合:使用場景、源碼閱讀
- 高手不得不知的Java集合List的細節
- GC機制
- 虛擬機
- 對象內存分配
要學好Android,必須要有扎實的Java基礎(當然,現在還有Kotlin)。這里只列出了四點,但Java的體系非常龐大,重難點當然不只這些,列出來的是在實際項目和面試中常用或常見的。
Android常用/重要類
- Activity
- Handler
- HandlerThread
- AsyncTask
- Binder
Android這幾個類在編程時是比較高頻使用的,所以我打算細讀下這幾個類的源碼。而這幾個類也是面試經常被問到的,如Activity啟動流程、Binder通信原理等等,所以非常有閱讀價值!
Android基礎技術和高頻面試知識點
- View事件傳遞
- View繪制流程
- SurfaceView的使用
- IntentService替換Service的場景
- Service?;?/li>
- Android序列化方式和區別
這些知識點算是比較基礎的,但也很重要!可惜在實際項目中很少用到,所以經常會忘了這些知識。所以打算把其寫成文章,加深自己印象。
NDK和JNI
說起這個我就頭疼,相信很多人跟我一樣,如果只是調用C層接口還好,如果要寫C的代碼,就很尷尬了。但我們不能總是逃避困難,而是迎難而上!所以我下定決心來跨過心里的這道坎了!
算法與數據結構
- 隊列、棧、鏈表、有向圖
- 排序
- 查找
- 紅黑樹
在家的幾本算法書都滿是灰了… 羅列的點不難,算是需要基本掌握的吧,但我總是看了忘了,忘了又看,還是記不得… 所以也打算寫文章增強記憶。另外,如果做應用級別的開發,掌握這幾個知識點基本是夠用的了,畢竟Java的集合也提供了排序接口。但還是需要掌握下,畢竟不同算法使用到不同場景。
插件化/熱修復
作為Android進階必掌握的技能,這個不會都不好意思說自己的Android開發的。之前看了一個月RePlugin的源碼,感覺道行還不夠。很多代碼的處理或適配看得似懂非懂,如Binder的機制等。所以這個需要大量的知識作為支撐才能完成看懂,未來再戰!
第三方優秀開源庫
- RxJava
- Glide
- OKHttp
“RTFSC (Read The F**king Source Code )”。每個人都有自己的編程風格,如果不借鑒、不參考下別人的代碼,眼界永遠這么小,難以進一步提升編程境界。所以閱讀他人優秀的代碼是非常有必要的!
Android常見的架構模式
- MVC
- MVP
- MVVM
解耦!解耦!Android的架構模式的使用重中之重無非就是解耦了。開發代碼不難,維護代碼才是最難的。如果代碼都很多的解耦,把維護成本降低,工作效率自然提高。
Gradle和Groovy
相信現在大多數人都用Android Studio開發了,Gradle作為構建工具真是非常強大,個人覺得它完成可以取代Java的編譯期注解,有過之而無不及。因為連文件也能在編譯期作修改,非常強大,所以也非常值得學習。
通用技能
- TCP/HTTP
- SQL
- 自動化測試
- 抓包
除了Android的知識點意外,還需要掌握一些通用的技能。畢竟懂多點才有底氣跟后端懟嘛哈哈。
寫在***
由于本文羅列的知識點是根據我自身總結出來的,并且由于本人水平有限,無法全部提及,歡迎大神們能補充~
將來我會對上面的知識點一個一個深入學習,也希望有童鞋跟我一起學習,一起進階。