这是“拔剑金九银十”的第二篇文章,本文主要针对3年以上的AndroID开发者进阶面试中高级开发工程师而整理。
希望可以对你们有所帮助。不多废话,进入正题。
目录:
1. AndroID架构设计模式MVC架构设计模式:MVC全名是Model VIEw Controller,是模型(model)-视图(vIEw)-控制器(controller)的缩写。MVP架构设计模式:MVC全名是Model VIEw Persenter,MVP由MVC演变而来,是现在主流的开发模式。MVVM架构设计模式:MVVM全名是Model-VIEw-viewmodel,它本质上就是MVC的改进版。Java中高级
计算机网络
AndroID高级面试—性能优化
AndroID优秀第三方库
AndroID framework相关
其他AndroID高频面试题
1.1 架构设计模式-MVC各种模型的**
主要目的
**都是是分离视图(VIEw)和模型(Model),即将UI界面显示和业务逻辑进行分离。
(1) 定义:
在androID开发过程中,比较流行的开发框架曾经采用的是MVC框架模式。
M(Model)层:实体模型,处理业务逻辑
。如:数据库 *** 作,网络 *** 作,I/O *** 作,复杂 *** 作和耗时任务等。V(VIEw)层:处理数据显示
。在AndroID开发中,它一般对应着xml布局文件。C(Controller)层:处理用户交互
。在AndroID开发中,它一般对应着Activity/Feagment。androID中主要通过activity处理用户交互和业务逻辑,接受用户的输入并调用Model和VIEw去完成用户的需求。(2) 特点
低耦合可重用易拓展模块职责划分明确(3) 实例
androID本身的设计结构符合 MVC 模式。
(4) MVC优缺点
MVC的优点:MVC模式通过Controller来掌控全局,同时将VIEw展示和Model的变化分离开MVC也有局限性:1.2 架构设计模式-MVPVIEw层对应xml布局文件能做的事情非常有限,所以需要把大部分VIEw相关的 *** 作移到Controller层的activity中。导致activity相当于充当了2个角色(VIEw层和Controller层),不仅要处理业务逻辑,还要 *** 作UI。一旦一个页面的业务繁多复杂的话,activity的代码就会越来越臃肿和复杂。
MVP是从经典的MVC模式演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,VIEw负责显示。在AndroID开发中,MVP的具体实现流程是当Presenter接收到VIEw的请求,便从Model层获取数据,将数据进行处理。处理好的数据再通过VIEw层的接口回调给Activity或Fragment。这样MVP能够让Activity或Fragment成为真正的VIEw,只做与UI相关的事而不处理其他业务流程。
(1) 定义
M(Model)层:实体模型,处理业务逻辑
。如:数据库 *** 作,网络 *** 作,I/O *** 作,复杂 *** 作和耗时任务等。V(VIEw)层:负责VIEw的绘制以及与用户交互
。在AndroID开发中,它一般对应着xml布局文件和Activity/Fragment。P(Presenter)层:负责完成Model层和VIEw层间的数据交互
和业务逻辑
。(2) 实例
(3) MVC和MVP的区别
MVC和MVP的最大区别:MVC的Model层和VIEw层MVP中的VIEw并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部,而在MVC中VIEw会直接从Model中读取数据而不通过Controller
能够直接交互
;MVP的Model层和VIEw层不能直接交互
,需通过Presenter层来进行交互。Activity职责不同:Activity在MVC中属于Controller层,在MVP中属于VIEw层,这是MVC和MVP很主要的一个区别。可以说AndroID从MVC转向MVP开发也主要是优化Activity的代码,避免Activity的代码臃肿庞大
。VIEw层不同:MVC的VIEw层指的是XML布局文件(或用Java自定义的VIEw);MVP的VIEw层是Activity(或Fragment)控制层不同:MVC的控制层是Activity(或Fragment);MVP的控制层是Presenter,里面没有很多的实际东西,主要负责Model层和VIEw层的交互。(4) MVP优缺点
MVP的优点如下:MVP也有不足之处:模型与视图完全分离,我们可以修改视图而不影响模型;项目代码结构清晰,一看就知道什么类干什么事情;我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑,这个特性非常的有用,因为视图的变化总是比模型的变化更频繁 ;协同工作(例如在设计师没出图之前可以先写一些业务逻辑代码)
1.3 架构设计模式-MVVM接口过多,一定程度影响了编码效率。一定程度上导致Presenter的代码量过大。
为了降低Presenter中业务繁多的问题,Google又推出了MVVM,试图通过数据驱动来减少Presenter的代码量。
(1) 定义
M(Model)层:仍然是实体模型
(但是不同于之前定义的Model层),主要负责数据获取、存储和变化,提供数据接口供 viewmodel 层调用。V(VIEw)层:对应Activity/Feagment
和xml布局
文件 ,负责VIEw的绘制以及与用户交互说明:VIEw层仅能 *** 作UI(数据绑定来实现 UI 更新);不能做任何和业务逻辑有关的数据 *** 作VM(viewmodel)层:负责完成Model层和VIEw层间的数据
交互
和业务逻辑
说明:viewmodel层仅能做和业务逻辑有关的数据 *** 作;不能做UI相关的 *** 作2. androID插件化
2.1 插件化要解决的问题—如何动态加载apk插件化来由:随着业务的增多,业务逻辑代码越来越多,apk包也逐渐增大,不利于维护和升级。通过插件化开发可将功能模块解耦,不同的维护团队仅维护某模块的业务,同时当app升级时可仅对某功能模块进行升级而不需整体升级。
(1) androID类加载器及区别
PathClassLoader:仅能加载文件目录下的apk。DexClassLoader:可以加载apk文件中的字节码(从dex实体jar文件中加载java字节码)。主要用于动态加载和代码热更新等。类加载器作用:java字节码通过类加载器加载到java虚拟器。
(2)反射: java中的反射使我们在运行时获得这个类的属性、方法和class内部的信息机制,最重要的是我们可以在运行时实例化这个对象调用方法,这也是java反射的最大优点。
(3) 实现动态加载apk
什么是动态加载apk:androID中有一个速度程序会主动到指定的sd卡中去加载apk,并通过代理activity去执行。
实现:需要一个代理activity去执行apk中的activity,主要通过反射去获得它的属性和方法,从而进行apk的调用。
实现原理:类加载器
(加载类)+反射
(获取属性和方法)+动态代理
(执行)
最后,针对上面谈的内容,给大家推荐一个AndroID资料,应该对大家有用。
首先是一个知识清单:(对于现在的AndroID及移动互联网来说,我们需要掌握的技术)
泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
注解原理丶注解原理丶序列化
Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶VIEw源码丶Fragment内核相关丶service原理等)
代码框架结构优化(数据结构丶排序算法丶设计模式)
APP性能优化(用户体验优化丶适配丶代码调优)
热修复丶热升级丶Hook技术丶IOC架构设计
NDK(c编程丶C++丶JNI丶liNUX)
如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
HybrID
Flutter
接下来是资料清单:(敲黑板!!!)
领取通道在这里给你们摆上了~
点击我的腾讯文档免费获取1.数据结构和算法
2.设计模式
3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记
4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)
不论遇到什么困难,都不应该成为我们放弃的理由!共勉~
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
链图片转存中…(img-pf2t5kfQ-1618480245184)]
不论遇到什么困难,都不应该成为我们放弃的理由!共勉~
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
[外链图片转存中…(img-bU3yJF6V-1618480245185)]
总结以上是内存溢出为你收集整理的hashmap扩容过程,Glide的缓存机制,年薪50W全部内容,希望文章能够帮你解决hashmap扩容过程,Glide的缓存机制,年薪50W所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)