2019中級Android開發面試解答之設計模式篇

注:由於實際開發與參考答案會有所不一樣,再者怕誤導你們,因此這些面試題答案仍是本身去理解!面試官會針對簡歷中提到的知識點由淺入深提問,因此不要背答案,多理解。

1.你所知道的設計模式有哪些?java

參考回答android

  • 建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
  • 結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
  • 行爲型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄

模式、狀態模式、訪問者模式、中介者模式、解釋器模式。面試

2.談談MVC、MVP和MVVM,好在哪裏,很差在哪裏 ?數據庫

參考回答:後端

2.1.MVC:設計模式

  • 視圖層(View) 對應於xml佈局文件和java代碼動態view部分
  • 控制層(Controller) MVC中Android的控制層是由Activity來承擔的,Activity原本主要是做爲初始化頁面,展現數據的操做,可是由於XML視圖功能太弱,因此Activity既要負責視圖的顯示又要加入控制邏輯,承擔的功能過多。
  • 模型層(Model) 針對業務模型,創建數據結構和相關的類,它主要負責網絡請求,數據庫處理,I/O的操做。

總結緩存

具備必定的分層,model完全解耦,controller和view並無解耦層與層之間的交互儘可能使用回調或者去使用消息機制去完成,儘可能避免直接持有 controller和view在android中沒法作到完全分離,但在代碼邏輯層面必定要分清業務邏輯被放置在model層,可以更好的複用和修改增長業務安全

2.2.MVP網絡

經過引入接口BaseView,讓相應的視圖組件如Activity,Fragment去實現BaseView,實現了視圖層的獨立,經過中間層Preseter實現了Model和View的徹底解耦。MVP完全解決了MVC中View和Controller傻傻分不清楚的問題,可是隨着業務邏輯的增長,一個頁面可能會很是複雜,UI的改變是很是多,會有很是多的case,這樣就會形成View的接口會很龐大數據結構

2.3.MVVM

MVP中咱們說過隨着業務邏輯的增長,UI的改變多的狀況下,會有很是多的跟UI相關的case,這樣就會形成View的接口會很龐大。而MVVM就解決了這個問題,經過雙向綁定的機制,實現數據和UI內容,只要想改其中一方,另外一方都可以及時更新的一種設計理念,這樣就省去了不少在View層中寫不少case的狀況,只須要改變數據就行。

2.4.三者如何選擇?

  • 若是項目簡單,沒什麼複雜性,將來改動也不大的話,那就不要用設計模式或者架構方法,只須要將每一個模塊封裝好,方便調用便可,不要爲了使用設計模式或架構方法而使用。
  • 對於偏向展現型的app,絕大多數業務邏輯都在後端,app主要功能就是展現數據,交互等,建議使用mvvm。
  • 對於工具類或者須要寫不少業務邏輯app,使用mvp或者mvvm均可。

3.封裝p層以後.若是p層數據過大,如何解決?

參考回答:

對於MVP模式來講,P層若是數據邏輯過於臃腫,建議引入RxJava或則Dagger,越是複雜的邏輯,越能體現RxJava的優越性

4.是否能從Android中舉幾個例子說說用到了什麼設計模式 ?

參考回答:

  • AlertDialog、Notification源碼中使用了Builder(建造者)模式完成參數的初始化
  • Okhttp內部使用了責任鏈模式來完成每一個Interceptor攔截器的調用
  • RxJava的觀察者模式;單例模式;GridView的適配器模式;Intent的原型模式
  • 平常開發的BaseActivity抽象工廠模式

5.裝飾模式和代理模式有哪些區別 ?

參考回答:

裝飾器模式與代理模式的區別就在於

  • 二者都是對類的方法進行擴展,但裝飾器模式強調的是加強自身,在被裝飾以後你可以在被加強的類上使用加強後的功能。
  • 而代理模式則強調要讓別人幫你去作一些自己與你業務沒有太多關係的職責(記錄日誌、設置緩存)代理模式是爲了實現對象的控制,由於被代理的對象每每難以直接得到或者是其內部不想暴露出來。

6.實現單例模式有幾種方法 ?懶漢式中雙層鎖的目的是什麼 ?兩次判空的目的又是什麼 ?

參考回答:

  • 單例模式實現方法有多種:餓漢,懶漢(線程安全,線程非安全),雙重檢查(DCL),內部類,以及枚舉
  • 所謂雙層檢驗鎖(在加鎖先後對實例對象進行兩次判空的檢驗):加鎖是爲了第一次對象實例化的線程同步,而鎖內還要有第二層判空是由於可能會有多個線程進入第一層if判斷內部,而在加鎖代碼塊外排隊等候,若是鎖內不進行第二次檢驗,仍然會出現實例化多個對象的狀況。

7.用到的一些開源框架,介紹一個看過源碼的,內部實現過程。

參考回答:

面試常客:Okhttp,Retrofit,Glide,RxJava,GreenDao,Dagger等

8.Fragment若是在Adapter中使用應該如何解耦?

參考回答:

  • 接口回調
  • 廣播

須要更多學習資料的能夠加個人合做QQ羣925019412
圖片描述
今日更新視頻:
動態代理實現AOP打造淘寶式權限驗證以及行爲統計

相關文章
相關標籤/搜索