笔者因为在近期须要找工做,因此近期最主要的任务就是准备面试,不打无准备之仗。只有你准备充分了,那么你想获得的机会才可能有机会入你怀中。java
笔者会将准备面试的学习过程记录下来,方便本身复盘的同时也但愿能给一道找工做的小伙伴们一些帮助。笔者准备的内容大纲以下web
关于Android基础篇部分,不出意外的话这篇应该是终结篇了~~浏览器
那么上最后的正菜吧缓存
MVC分三个层:网络
总结:
具备必定的分层,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。
三者如何选择?
invalidate():是自定义View 的时候,从新执行onDraw()方法,当view只在内容和可见度方面发生变化时调用。
requeLayout() : 他跟invalidate()相反,他只调用measure()和layout()过程,不会调用draw()。
若是须要局部刷新怎么办?
使用 requestFocus()方法,他只刷新你要刷新的地方。
好比使用了SparseArray、ArrayMap用来代替HashMap。它们在有些状况下能带来更好的性能提高。
SparseArray
SparseArray比HashMap更省内存,在某些条件下性能更好,主要是由于它避免了对key的自动装箱(int转为Integer类型),它内部则是经过两个数组来进行数据存储的,一个存储key,另一个存储value,为了优化性能,它内部对数据还采起了压缩的方式来表示稀疏数组的数据,从而节约内存空间。
SparseArray在存储和读取数据时候,使用的是二分查找法。
知足下面两个条件咱们可使用SparseArray代替HashMap:
建议与此篇博客共同食用 Android内存优化(使用SparseArray和ArrayMap代替HashMap)
面试系列的文章都放于 面试妥妥的 建议小伙伴们关注该专题