程序员人生 网站导航

Android面试经验总结

栏目:综合技术时间:2016-07-02 13:00:07

摘要

“基础 Android 知识掌握的不错,学习能力也不错。但是基础知识部份比较薄弱,有些概念和逻辑掌握不清。” 感谢春林的这句话。

  • MVC,MVP 和 MVVM
  • 架构的定义
  • Volley相干
    • Volley的磁盘缓存
    • Volley缓存命中率的优化
    • Volley缓存文件名的计算
  • 推送心跳包是TCP包还是UDP包或HTTP包
  • ARGB_8888占用内存大小
  • Activity中类似onCreate、onStart应用了哪一种设计模式,优点是甚么
  • HashMap的底层实现
  • Atomic、volatile、synchronized区分
  • 其他

MVC,MVP 和 MVVM

  • MVC 通讯方式,环形方式:
    1、View 传送指令到 Controller
    2、Controller 起到不同层面间的组织作用,用于控制利用程序的流程。它处理事件并作出响应。“事件”包括用户的行动和数据 Model 上的改变。
    3、Model 将新的数据发送到 View,用户得到反馈
    所有通讯都是单向的。
    开源实验室:图1
  • MVP 通讯方式:
    1、各部份之间的通讯,都是双向的。
    2、View 与 Model 不产生联系,都通过 Presenter 传递。
    3、View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
    开源实验室:图2
  • MVVM 模式是 MVP 的升级:
    基本上与 MVP 模式完全1致。唯1的区分是,它采取双向绑定:View的变动,自动反应在 ViewModel,反之亦然。
    开源实验室:图3
    (以上内容取自:http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html)

我们针对业务模型,建立的数据结构和相干的类,就能够理解为AndroidApp 的 Model,Model 是与 View 无关,而与业务相干的,例如数据库读取数据,应当是属于model层的事情。(感谢@Xander的讲授)
我的料想:

至于为何我们通常直接去在 Activity 中去写数据库数据读取,我的料想是由于简单。试想,如果是为了规范,首先定义1个getDataFromDB()的接口,再写个类实现getDataFromDB()方法,以后如果改了要求数据所用的方法,直接改写实现类,听起来确切不错,可是仅仅是为了从数据库读点数据,额外添加了最少两个类文件真的成心义吗。
固然网络要求,是属于业务逻辑层C层。

MVP中 Presenter 真正需要处理的并不是业务逻辑,而应当是视图逻辑。业务逻辑应当是视图无关的,可以是单独的1个类中,也能够是在P中。
P与V是1对多关系
EventBus应当作用于P层,在P层发送,在P层接收。

MVVM中,M层改变其实不是直接改变V层,而是通过VM层去改变V层。M与V照旧是不直接操作的。

相干介绍:http://www.tianmaying.com/tutorial/AndroidMVC

架构的定义

有关软件整体结构与组件的抽象描写,用于指点大型软件系统各个方面的设计。
总结1下,就是1全部软件工程项目中的骨架,是1种宏观的计划。

Volley相干

Volley的磁盘缓存

面试的时候,聊到 Volley 要求到网络的数据缓存。当时说到是 Volley 会将每次通过网络要求到的数据,采取FileOutputStream,写入到本地的文件中。

那末问题来了:这个缓存文件,是声明在1个SD卡文件夹中的(也能够是getCacheFile())。如果不停的要求网络数据,这个缓存文件夹将无穷制的增大,终究到达SD卡容量时,会产生没法写入的异常(由于存储空间满了)。

这个问题的确之前没有想到,当时也没说出怎样回事。回家了赶快又看了看代码才知道,原来 Volley 斟酌过这个问题(汗!想一想也是)
翻看代码DiskBasedCache#pruneIfNeeded()

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐