快捷搜索:  as

2019中级Android开发面试解答之设计模式篇

注:由于实际开拓与参考谜底会有所不合,再者怕误导大年夜家,以是这些口试题谜底照样自己去理解!口试官会针对简历中提到的常识点由浅入深提问,以是不要背谜底,多理解。

1.你所知道的设计模式有哪些?

参考回答

创建型模式,共五种:工厂措施模式、抽象工厂模式、单例模式、建造者模式、原型模式。

布局型模式,共七种:适配器模式、装饰器模式、代理模式、外不雅模式、桥接模式、组合模式、享元模式。

行径型模式,共十一种:策略模式、模板措施模式、察看者模式、迭代子模式、责任链模式、敕令模式、备忘录

模式、状态模式、造访者模式、中介者模式、说冥器模式。

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中应用应该若何解耦?

参考回答:

接口回调

广播

必要更多进修资料的可以加我的相助群925019412

今日更新视频:

动态代理实现AOP打造淘宝式权限验证以及行径统计

您可能还会对下面的文章感兴趣: