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打造淘宝式权限验证以及行为统计

相关文章
相关标签/搜索