前言
回顾一下自己这段时间的经历,三月份的时候,疫情原因公司通知了裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到offer,我感觉今年的寒冬有点冷。到五月份,公司开始第二波裁员,我决定主动拿赔偿走人。后续的面试过程我做了一些准备,基本都能走到hr面,后面我也顺利地拿到了offer,我给大家分享下我的求职体会,希望能给大家一些参考。
一般Android面试分为两部分:Java部分和Android部分,下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。
1. Android架构设计模式
- MVC架构设计模式:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
- MVP架构设计模式:MVC全名是Model View Persenter,MVP由MVC演变而来,是现在主流的开发模式。
- MVVM架构设计模式:MVVM全名是Model-View-viewmodel,它本质上就是MVC的改进版。
各种模型的**
主要目的
**都是是分离视图(View)和模型(Model),即将UI界面显示和业务逻辑进行分离。
1.1 架构设计模式-MVC
(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也有局限性:
View层对应xml布局文件能做的事情非常有限,所以需要把大部分View相关的操作移到Controller层的activity中。导致activity相当于充当了2个角色(View层和Controller层),不仅要处理业务逻辑,还要操作UI。一旦一个页面的业务繁多复杂的话,activity的代码就会越来越臃肿和复杂。
1.2 架构设计模式-MVP
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的区别
MVP中的View并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不通过Controller
- MVC和MVP的最大区别:MVC的Model层和View层
能够直接交互
;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的优点如下:
模型与视图完全分离,我们可以修改视图而不影响模型;项目代码结构清晰,一看就知道什么类干什么事情;我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑,这个特性非常的有用,因为视图的变化总是比模型的变化更频繁 ;协同工作(例如在设计师没出图之前可以先写一些业务逻辑代码)
- MVP也有不足之处:
接口过多,一定程度影响了编码效率。一定程度上导致Presenter的代码量过大。
为了降低Presenter中业务繁多的问题,Google又推出了MVVM,试图通过数据驱动来减少Presenter的代码量。
1.3 架构设计模式-MVVM
(1) 定义
- M(Model)层:仍然是
实体模型
(但是不同于之前定义的Model层),主要负责数据获取、存储和变化,提供数据接口供 viewmodel 层调用。 - V(View)层:对应
Activity/Feagment
和xml布局
文件 ,负责View的绘制以及与用户交互
说明:View层仅能操作UI(数据绑定来实现 UI 更新);不能做任何和业务逻辑有关的数据操作 - VM(viewmodel)层:负责完成Model层和View层间的数据
交互
和业务逻辑
说明:viewmodel层仅能做和业务逻辑有关的数据操作;不能做UI相关的操作
2. android插件化
插件化来由:随着业务的增多,业务逻辑代码越来越多,apk包也逐渐增大,不利于维护和升级。通过插件化开发可将功能模块解耦,不同的维护团队仅维护某模块的业务,同时当app升级时可仅对某功能模块进行升级而不需整体升级。
2.1 插件化要解决的问题—如何动态加载apk
(1) android类加载器及区别
类加载器作用:java字节码通过类加载器加载到java虚拟器。
(2)反射: java中的反射使我们在运行时获得这个类的属性、方法和class内部的信息机制,最重要的是我们可以在运行时实例化这个对象调用方法,这也是java反射的最大优点。
(3) 实现动态加载apk
什么是动态加载apk:android中有一个速度程序会主动到指定的sd卡中去加载apk,并通过代理activity去执行。
实现:需要一个代理activity去执行apk中的activity,主要通过反射去获得它的属性和方法,从而进行apk的调用。
实现原理:类加载器
(加载类)+反射
(获取属性和方法)+动态代理
(执行)
小福利:
在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了
很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘
如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。
2021大厂最新Android面试真题解析
各个模块学习视频:如数据结构与算法
只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!
或直接点击这里前往我的GitHub中下载,就可以白嫖啦,记得给文章点个赞哦。
D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)中下载**,就可以白嫖啦,记得给文章点个赞哦。