笔者由于在近期需要找工作,所以近期最主要的任务就是准备面试,不打无准备之仗。只有你准备充分了,那么你想得到的机会才可能有机会入你怀中。

笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给一道找工作的小伙伴们一些帮助。笔者准备的内容大纲如下

Android面试大纲.png

妥妥的去面试之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基础(六)相关推荐

  1. 妥妥的去面试之Android基础(五)

    笔者由于在近期需要找工作,所以近期最主要的任务就是准备面试,不打无准备之仗.只有你准备充分了,那么你想得到的机会才可能有机会入你怀中. 笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给 ...

  2. 妥妥的去面试之Android基础(四)

    笔者由于在近期需要找工作,所以近期最主要的任务就是准备面试,不打无准备之仗.只有你准备充分了,那么你想得到的机会才可能有机会入你怀中. 笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给 ...

  3. 妥妥的去面试之数据结构与算法(一)

    笔者由于在找工作,所以近期最主要的任务就是准备面试,不打无准备之仗.只有你准备充分了,那么你想要的机会才有机会入你怀中. 笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给一道找工作的小 ...

  4. 懂的android基础如何面试月薪过万

    一,自我介绍: 鄙人学历不高,今年7月份本科毕业,之前其实就懂android基础而已(四大组件),去年12月份入职,今年10中旬面试求职第二份工作,期间面试了13家,有9家给了offer,月薪范围:7 ...

  5. 手机里android文件里哪些文件可删除,手机文件夹哪些可以删除?这4个删除它妥妥的...

    原标题:手机文件夹哪些可以删除?这4个删除它妥妥的 我们手机在使用一段时间后都会产生一定的数据缓存,新手机可能没有感觉,但是就手机就会体现得非常明显.因为随着手机里的使用数据越来越多,你会发现手机慢慢 ...

  6. 机器学习复习6-优化器等 面试看这一篇就妥妥够了

    该文对优化器进行了全面的梳理和整理,包括原理分析,面试看这一篇就妥妥够了! 预备知识 一.正定和半正定矩阵 (了解) 半正定矩阵包括了正定矩阵. 不定矩阵:特征值有正有负 二.牛顿法和拟牛顿法(二阶优 ...

  7. 30岁了还去面试基础岗位,是不是很失败?

    30岁了还去面试基础岗位,是不是很失败? 文 | 洪生鹏 01 之前有位读者和我分享了他的一段职场经历: 张工是一名移动开发程序员,七年开发经验,三年服务端开发经验,4年移动开发经验.前段时间去面试A ...

  8. android 7.1 字体大小设置,一加3t官方更新氢的Android 7.1.1,妥妥的第一时间换上クレPro 字体...

    标签:一加3T(181)一加(43)一加手机(156)安卓(177) 一加3t官方更新氢的Android 7.1.1,系统更新速度可以啊. 之前7.0稳定版拿掉的长截图功能又回来了. 稳稳地告诉大家7 ...

  9. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android基础篇)...

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...

最新文章

  1. python函数绘制5个太阳花_python_bomb----函数
  2. 3G时代手机网站的特点和开发原则
  3. mybatis比hibernate处理速度快的原因
  4. MySQL in 查询,并通过 FIELD 函数按照查询条件顺序返回结果
  5. [C++][代码库]Vector3空间向量类
  6. Python网络编程(Socket)
  7. 从零实现加密隧道(二):socks5 协议详解
  8. 苹果双系统怎么切换_电脑双系统如何安装,使用小白一键重装系统
  9. HTML5制作坦克大战游戏+Canvas绘制基础图形——学习笔记一
  10. MySQL查询优化和参数优化
  11. JAVA学习-JDK8环境的安装与卸载
  12. 关于FANUC机器人UI【1】*IMSTP紧急停止信号的说明
  13. Android_AsyncTaskDemo之QQ记步数(画圆形图片知识)
  14. 国际刑警组织:打击网络数字犯罪需全球协作
  15. 特征选择,熵,条件熵,信息增益
  16. office 365 ppt创意操作2
  17. Android开发规范:API接口安全设计规范
  18. Visual Studio 2017 + VisualGDB 调试Linux C++程序
  19. CTR预估专栏 | 一文搞懂阿里Deep Interest Network
  20. python鸢尾花分类_基于python的鸢尾花二分类

热门文章

  1. 走进WPF之MVVM完整案例
  2. 四参数坐标转换c语言,四参数坐标转换原理和程序设计
  3. 服务器数字显示器,服务器数字KVM切换器
  4. android 设置壁纸,开启出现短暂黑屏问题
  5. discuz X3.2 DB:类数据库操作
  6. 钉钉发送消息(非群机器人)
  7. Unity实用小工具或脚本——XML工具
  8. 【Shiro】7、Shiro实现控制用户并发登录并踢人下线
  9. P2P文件分发读书笔记
  10. 生日快乐模板php,HTML5应用-生日快乐动画之实现星星的示例代码分享