妥妥的去面试之Android基础(六)
笔者由于在近期需要找工作,所以近期最主要的任务就是准备面试,不打无准备之仗。只有你准备充分了,那么你想得到的机会才可能有机会入你怀中。
笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给一道找工作的小伙伴们一些帮助。笔者准备的内容大纲如下
妥妥的去面试之Android基础(一)
妥妥的去面试之Android基础(二)
妥妥的去面试之Android基础(三)
妥妥的去面试之Android基础(四)
妥妥的去面试之Android基础(五)
关于Android基础篇部分,不出意外的话这篇应该是终结篇了~~
那么上最后的正菜吧
谈谈你对MVC、MVP和MVVM的理解
MVC分三个层:
- 视图层(View):对应于xml布局文件和java代码动态view部分。
- 控制层(Controller):MVC中Android的控制层是由Activity来承担的,Activity作为初始化页面,展示数据的操作。但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多。
- 模型层(Model):针对业务模型,建立数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。
总结:
具有一定的分层,model彻底解耦,controller和view并没有解耦。Controller既要承担页面的初始化又要处理控制逻辑,承担的功能过多,其代码量也会过多。Model和View要直接交互,它们耦合度依然更高。
MVP
MVP在MVC的基础上,引入了中间层Present把Model和View层彻底解耦,由Present来控制逻辑,解决了MVC中Controller和View分不清的问题。但是随着业务逻辑的增加,一个页面可能会非常复杂,UI的改变是非常多,会有非常多的case,这样就会造成View的接口会很庞大。
MVVM
MVP中我们说过随着业务逻辑的增加,UI的改变多的情况下,会有非常多的跟UI相关的case,这样就会造成View的接口会很庞大。而MVVM就解决了这个问题,通过双向绑定的机制,实现数据和UI内容,只要想改其中一方,另一方都能够及时更新的一种设计理念,这样就省去了很多在View层中写很多case的情况,只需要改变数据就行。
MVVM与DataBinding的关系?
MVVM是一种思想,DataBinding是谷歌推出的方便实现MVVM的工具。
看起来MVVM很好的解决了MVC和MVP的不足,但是由于数据和视图的双向绑定,导致出现问题时不太好定位来源,有可能数据问题导致,也有可能业务逻辑中对视图属性的修改导致。如果项目中打算用MVVM的话可以考虑使用官方的架构组件ViewModel、LiveData、DataBinding去实现MVVM。
三者如何选择?
- 如果项目简单,没什么复杂性,未来改动也不大的话,那就不要用设计模式或者架构方法,只需要将每个模块封装好,方便调用即可,不要为了使用设计模式或架构方法而使用。
- 对于偏向展示型的app,绝大多数业务逻辑都在后端,app主要功能就是展示数据,交互等,建议使用mvvm。
- 对于工具类或者需要写很多业务逻辑app,使用mvp或者mvvm都可。
HttpClient和HttpUrlConnection的区别?
- HttpClient适用于web浏览器,拥有大量灵活的API,实现起来比较稳定,且其功能比较丰富,提供了很多工具,封装了http的请求头。但在不破坏兼容性的前提下,其庞大的API也使人难以改进。于是在Android 6.0中抛弃了HttpClient,替换成OkHttp。
- HttpUrlConnection它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该使用HttpURLConnection。
invalidate和requestLayout的区别及使用?
invalidate():是自定义View 的时候,重新执行onDraw()方法,当view只在内容和可见度方面发生变化时调用。
requeLayout() : 他跟invalidate()相反,他只调用measure()和layout()过程,不会调用draw()。
如果需要局部刷新怎么办?
使用 requestFocus()方法,他只刷新你要刷新的地方。
Android对HashMap做了优化后推出的新的容器类是什么?
比如使用了SparseArray、ArrayMap用来代替HashMap。它们在有些情况下能带来更好的性能提升。
SparseArray
SparseArray比HashMap更省内存,在某些条件下性能更好,主要是因为它避免了对key的自动装箱(int转为Integer类型),它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据,从而节约内存空间。
SparseArray在存储和读取数据时候,使用的是二分查找法。
满足下面两个条件我们可以使用SparseArray代替HashMap:
- 数据量不大,最好在千级以内
- key必须为int类型,这中情况下的HashMap可以用SparseArray代替
建议与此篇博客共同食用 Android内存优化(使用SparseArray和ArrayMap代替HashMap)
面试系列的文章都放于 面试妥妥的 建议小伙伴们关注该专题
妥妥的去面试之Android基础(六)相关推荐
- 妥妥的去面试之Android基础(五)
笔者由于在近期需要找工作,所以近期最主要的任务就是准备面试,不打无准备之仗.只有你准备充分了,那么你想得到的机会才可能有机会入你怀中. 笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给 ...
- 妥妥的去面试之Android基础(四)
笔者由于在近期需要找工作,所以近期最主要的任务就是准备面试,不打无准备之仗.只有你准备充分了,那么你想得到的机会才可能有机会入你怀中. 笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给 ...
- 妥妥的去面试之数据结构与算法(一)
笔者由于在找工作,所以近期最主要的任务就是准备面试,不打无准备之仗.只有你准备充分了,那么你想要的机会才有机会入你怀中. 笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给一道找工作的小 ...
- 懂的android基础如何面试月薪过万
一,自我介绍: 鄙人学历不高,今年7月份本科毕业,之前其实就懂android基础而已(四大组件),去年12月份入职,今年10中旬面试求职第二份工作,期间面试了13家,有9家给了offer,月薪范围:7 ...
- 手机里android文件里哪些文件可删除,手机文件夹哪些可以删除?这4个删除它妥妥的...
原标题:手机文件夹哪些可以删除?这4个删除它妥妥的 我们手机在使用一段时间后都会产生一定的数据缓存,新手机可能没有感觉,但是就手机就会体现得非常明显.因为随着手机里的使用数据越来越多,你会发现手机慢慢 ...
- 机器学习复习6-优化器等 面试看这一篇就妥妥够了
该文对优化器进行了全面的梳理和整理,包括原理分析,面试看这一篇就妥妥够了! 预备知识 一.正定和半正定矩阵 (了解) 半正定矩阵包括了正定矩阵. 不定矩阵:特征值有正有负 二.牛顿法和拟牛顿法(二阶优 ...
- 30岁了还去面试基础岗位,是不是很失败?
30岁了还去面试基础岗位,是不是很失败? 文 | 洪生鹏 01 之前有位读者和我分享了他的一段职场经历: 张工是一名移动开发程序员,七年开发经验,三年服务端开发经验,4年移动开发经验.前段时间去面试A ...
- android 7.1 字体大小设置,一加3t官方更新氢的Android 7.1.1,妥妥的第一时间换上クレPro 字体...
标签:一加3T(181)一加(43)一加手机(156)安卓(177) 一加3t官方更新氢的Android 7.1.1,系统更新速度可以啊. 之前7.0稳定版拿掉的长截图功能又回来了. 稳稳地告诉大家7 ...
- 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android基础篇)...
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...
最新文章
- python函数绘制5个太阳花_python_bomb----函数
- 3G时代手机网站的特点和开发原则
- mybatis比hibernate处理速度快的原因
- MySQL in 查询,并通过 FIELD 函数按照查询条件顺序返回结果
- [C++][代码库]Vector3空间向量类
- Python网络编程(Socket)
- 从零实现加密隧道(二):socks5 协议详解
- 苹果双系统怎么切换_电脑双系统如何安装,使用小白一键重装系统
- HTML5制作坦克大战游戏+Canvas绘制基础图形——学习笔记一
- MySQL查询优化和参数优化
- JAVA学习-JDK8环境的安装与卸载
- 关于FANUC机器人UI【1】*IMSTP紧急停止信号的说明
- Android_AsyncTaskDemo之QQ记步数(画圆形图片知识)
- 国际刑警组织:打击网络数字犯罪需全球协作
- 特征选择,熵,条件熵,信息增益
- office 365 ppt创意操作2
- Android开发规范:API接口安全设计规范
- Visual Studio 2017 + VisualGDB 调试Linux C++程序
- CTR预估专栏 | 一文搞懂阿里Deep Interest Network
- python鸢尾花分类_基于python的鸢尾花二分类