Android面试整理(7)-架构设计和设计模式

架构设计和设计模式

      • 1.谈谈你对 Android 设计模式的理解
      • 2.MVC MVP MVVM 原理和区别
      • 3.你所知道的设计模式有哪些?
      • 4.项目中常用的设计模式
      • 5.手写生产者/消费者模式
      • 6.写出观察者模式的代码
      • 7.适配器模式,装饰者模式,外观模式的异同?
      • 8.用到的一些开源框架,介绍一个看过源码的,内部实现过程。
      • 9.谈谈对 RxJava 的理解
      • 10.Rxjava 发送事件步骤
      • 11.RxJava 的作用,与平时使用的异步操作来比的优缺点
      • 12.说说 EventBus 作用,实现方式,代替 EventBus的方式
      • 13.从 0 设计一款 App 整体架构,如何去做?
      • 14.说一款你认为当前比较火的应用并设计(比如:直播 APP,P2P 金融,小视频等)
      • 15.谈谈对 java 状态机理解
      • 16.Fragment 如果在 Adapter 中使用应该如何解耦?
      • 17.Binder 机制及底层实现
      • 18.对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?
      • 19.实现一个 Json 解析器(可以通过正则提高速度)
      • 20.统计启动时长,标准

1.谈谈你对 Android 设计模式的理解

从Android代码中来记忆23种设计模式
https://www.jianshu.com/p/1a9f571ad7c0

2.MVC MVP MVVM 原理和区别

MVC,MVP,MVVM区别
https://www.jianshu.com/p/5e94569a430a

3.你所知道的设计模式有哪些?

与第一问差不多

学习并理解 23 种设计模式
https://juejin.im/post/6844903795017646094

4.项目中常用的设计模式

java 常用十种设计模式示例归纳 | 已打包请带走
https://www.jianshu.com/p/61b67ca754a3

  • 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
  • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模
    式。
  • 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模
    式、解释器模式、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。

5.手写生产者/消费者模式

Java实现生产者和消费者的5种方式
https://juejin.im/entry/6844903486895865864

6.写出观察者模式的代码

设计模式——观察者模式 Java源代码
https://blog.csdn.net/u013390476/article/details/50428014

7.适配器模式,装饰者模式,外观模式的异同?

装饰器模式、代理模式、适配器模式和外观模式的联系与区别
https://blog.csdn.net/hp910315/article/details/51111744

共同点:介于调用者和被调者之间,中间层,起到隔离
不同点:装饰模式是“新增行为”,代理模式是“控制访问行为”,适配器模式是"转换行为",外观模式是一种"简化行为"
适配器模式:包装另一个对象,并提供不同的接口。
外观模式:包装许多对象,以简化他们的接口。
装饰者模式:包装另一个对象,并提供额外的行为。
代理模式:包装另一个对象,并控制对它的访问。

8.用到的一些开源框架,介绍一个看过源码的,内部实现过程。

9.谈谈对 RxJava 的理解

谈谈RxJava
https://www.jianshu.com/p/5ba83d9639fb

10.Rxjava 发送事件步骤

给初学者的RxJava2.0教程
https://www.jianshu.com/p/464fa025229e
https://www.jianshu.com/c/299d0a51fdd4

11.RxJava 的作用,与平时使用的异步操作来比的优缺点

又叫响应式编程、响应式扩展 ReactiveX 是基于观察者模式设计的,核心对象只有
Observable 和 Observer。
Rx 使代码简化
函数式风格:对可观察数据流使用无副作用的输入输出函数,避免了程序里错综复杂的状态
简化代码:Rx 的操作符通通常可以将复杂的难题简化为很少的几行代码
异步错误处理:传统的 try/catch 没办法处理异步计算,Rx 提供了合适的错误处理机制
轻松使用并发:Rx 的 Observables 和 Schedulers 让开发者可以摆脱底层的线程同步和各
种并发问题复制代码
RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越
复杂,它依然能够保持简洁

12.说说 EventBus 作用,实现方式,代替 EventBus的方式

EventBus是为Android优化的发布/订阅事件总线

简化组件之间的通信
分离事件发送者和接收者
对活动,片段和后台线程表现良好
避免复杂和容易出错的依赖关系和生命周期问题
使您的代码更简单
运行速度是快的
很小(约50k的jar)
在实践中证明了具有100,000,000+个安装的应用程序
具有传送线程,用户优先级等高级功能
RxJava实现RxBus

RXBus(RxBus的核心功能是基于Rxjava的)

RxJava写一个RxBus,来实现EventBus的发布 / 订阅的事件总线功能。

或者按照evenbus原理来写:储存反射

13.从 0 设计一款 App 整体架构,如何去做?

想要设计 App 的整体框架,首先要清楚我们做的是什么
一般我们与网络交互数据的方式有两种:主动请求(http),长连接推送结合网络交互数据的方式来说一下我们开发的 App 的类型和特点:

  • 数据展示类型的 App:特点是页面多,需要频繁调用后端接口进行数据交互,以 http 请求为主;推送模块,IM 类型 App 的 IM 核心功能以长连接为主,比较看重电量、流量消耗。
  • 手机助手类 App:主要着眼于系统 API 的调用,达到辅助管理系统的目的,网络调用的方式以 http 为主。
  • 游戏:一般分为游戏引擎和业务逻辑,业务脚本化编写,网络以长连接为主,http 为辅。

一般我们做的 App 都是类型 1,简要来说这类 app 的主要工作就是把服务端的数据拉下来给用户展示 把用户在客户端修改的数据上传给服务端处理 所以这类 App 的网络调用相当频繁,而且需要考虑到网络差,没网络等情况下,App 的运行,成熟的商业应用的网络调用一般是如下流程:

UI 发起请求 -
检查缓存 -
调用网络模块 -
解析返回 JSON / 统一处理异常 -
JSON对象映射为 Java 对象 -
缓存 -
UI 获取数据并展示添加链接描述

这之中可以看到很明显职责划分,即:数据获取;数据管理;数据展示

14.说一款你认为当前比较火的应用并设计(比如:直播 APP,P2P 金融,小视频等)

从零开始仿写一个抖音App
https://juejin.im/post/5b4ec1756fb9a04fdd7d5199

你们要的抖音效果原来是这样实现的!
https://blog.csdn.net/xJ032w2j4cCjhOW8s8/article/details/96531402

15.谈谈对 java 状态机理解

java状态机学习总结
https://blog.csdn.net/qq_33223761/article/details/82796231

16.Fragment 如果在 Adapter 中使用应该如何解耦?

接口实现Fragment、Activity间互调解耦
https://blog.csdn.net/hitgaoxing/article/details/50731830

17.Binder 机制及底层实现

[Android] 彻底了解Binder机制原理和底层实现
https://blog.csdn.net/weijinqian0/article/details/52233529

18.对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?

所谓的灰度发布,在行业内叫做A/B Test,所以可以搜索一些这方面的关键词

灰度测试是什么意思呢?如果对互联网软件研发行业不太了解的话,可能对这个词还是很陌生的,其实灰度测试就是指如果软件要在不久的将来推出一个全新的功能,或者做一次比较重大的改版的话,要先进行一个小范围的尝试工作,然后再慢慢放量,直到这个全新的功能覆盖到所有的系统用户,也就是说在新功能上线的黑白之间有一个灰,所以这种方法也通常被称为灰度测试。
从目前来看,灰度测试存在两种方式,一种是软件系统内自带灰度测试发布系统,另一种方式就是使用第三方工具来辅助进行,这两种方法都是可行的。
灰度测试这种方法可以帮助研究团队快速试验并发现问题并在大规模推向用户之前及时把问题修正过来,很大成度上减少了不少风险的产生,所以灰度测试是很有必要的。要知道只有不断创意并完善的软件才能在激烈的市场竞争中立于不败之地,当有创意的时候,小规模的灰度测试是非常有必要的。不但满足了一部分人抢先体验的愿望同时也可以发展研发团队不容易发现的各种问题,还能收集到真正的用户体验,这些对于优化全新的系统内容都是非常有帮助的,如果没有灰度测试的话,其实和闭门造车的感觉是差不多了,在增加灰度测试以后才能真正把其推向用户。

19.实现一个 Json 解析器(可以通过正则提高速度)

实现一个JSON解析器
https://blog.csdn.net/Dome_/article/details/87257256

20.统计启动时长,标准

android 统计启动时长,标准
https://blog.csdn.net/chunyuanlu/article/details/79782631

你可能感兴趣的:(Android面试整理,android,面试)