筆者因爲在近期須要找工做,因此近期最主要的任務就是準備面試,不打無準備之仗。只有你準備充分了,那麼你想獲得的機會纔可能有機會入你懷中。java
筆者會將準備面試的學習過程記錄下來,方便本身覆盤的同時也但願能給一道找工做的小夥伴們一些幫助。筆者準備的內容大綱以下web
關於Android基礎篇部分,不出意外的話這篇應該是終結篇了~~瀏覽器
那麼上最後的正菜吧緩存
MVC分三個層:網絡
總結:
具備必定的分層,model完全解耦,controller和view並無解耦。Controller既要承擔頁面的初始化又要處理控制邏輯,承擔的功能過多,其代碼量也會過多。Model和View要直接交互,它們耦合度依然更高。
MVP
MVP在MVC的基礎上,引入了中間層Present把Model和View層完全解耦,由Present來控制邏輯,解決了MVC中Controller和View分不清的問題。可是隨着業務邏輯的增長,一個頁面可能會很是複雜,UI的改變是很是多,會有很是多的case,這樣就會形成View的接口會很龐大。
MVVM
MVP中咱們說過隨着業務邏輯的增長,UI的改變多的狀況下,會有很是多的跟UI相關的case,這樣就會形成View的接口會很龐大。而MVVM就解決了這個問題,經過雙向綁定的機制,實現數據和UI內容,只要想改其中一方,另外一方都可以及時更新的一種設計理念,這樣就省去了不少在View層中寫不少case的狀況,只須要改變數據就行。
MVVM與DataBinding的關係?
MVVM是一種思想,DataBinding是谷歌推出的方便實現MVVM的工具。 看起來MVVM很好的解決了MVC和MVP的不足,可是因爲數據和視圖的雙向綁定,致使出現問題時不太好定位來源,有可能數據問題致使,也有可能業務邏輯中對視圖屬性的修改致使。若是項目中打算用MVVM的話能夠考慮使用官方的架構組件ViewModel、LiveData、DataBinding去實現MVVM。
三者如何選擇?
invalidate():是自定義View 的時候,從新執行onDraw()方法,當view只在內容和可見度方面發生變化時調用。
requeLayout() : 他跟invalidate()相反,他只調用measure()和layout()過程,不會調用draw()。
若是須要局部刷新怎麼辦?
使用 requestFocus()方法,他只刷新你要刷新的地方。
好比使用了SparseArray、ArrayMap用來代替HashMap。它們在有些狀況下能帶來更好的性能提高。
SparseArray
SparseArray比HashMap更省內存,在某些條件下性能更好,主要是由於它避免了對key的自動裝箱(int轉爲Integer類型),它內部則是經過兩個數組來進行數據存儲的,一個存儲key,另一個存儲value,爲了優化性能,它內部對數據還採起了壓縮的方式來表示稀疏數組的數據,從而節約內存空間。
SparseArray在存儲和讀取數據時候,使用的是二分查找法。
知足下面兩個條件咱們可使用SparseArray代替HashMap:
建議與此篇博客共同食用 Android內存優化(使用SparseArray和ArrayMap代替HashMap)
面試系列的文章都放於 面試妥妥的 建議小夥伴們關注該專題