设计模式
创建型模式
- 工厂方法模式
- 建造者模式
- 抽象工厂模式
- 单利模式
- 原型模式
结构型模式
- 适配器模式
- 桥梁模式
- 组合模式
- 装饰模式
- 门面模式
- 享元模式
- 代理模式
行动型模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模版方法模式
- 访问者模式
设计职责
单一职责
- 一个类只承担一个职责
开闭原则
- 对软件实体的改动,最好用扩展而非改动的方式
里氏替换原则
- 子类可以扩展父类的方法,但不应该复写父类的方法
接口隔离原则
- 对象不应被强迫依赖它不使用的方法
依赖倒置原则
- 面向接口编程,提取出事务的本质和共性。高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象
迪米特法则
- 一个对象应该对其他对象保持最少的了解,实现低耦合、高内聚
MVVM、MVC、MVP
MVVM
- View
- Model
ViewModel
特点
- 低耦合
- 可重用性
- 独立性
- 可测试
- 针对viewModel测试
MVC
- Model
- View
- Controller
MVP
- Model
- View
- Presenter
- 操作Model进行数据更新
- 更新View数据
组件化/插件化/模块化
- 组件化
- 组件化实现与业务无关系,以软件复用为核心,达到‘即插即用’快速构造应用软件的效果
- 插件化
- 将主工程项目分离分拆,动态化加载
- 模块化
- 以业务功能为单元的独立模块
- 登陆模块
- 以业务功能为单元的独立模块
- 组件化
怎么做好项目架构?
- view层的组织和调用方案
- 网络层的设计方案
- 动态部署方案
- 本地持久化方案
优秀的项目架构是什么样的?
- 代码规范整齐,分类明确清晰
- 不用文档或较少文档下就能让业务方轻松上手
- 思路和方法统一,尽量不要多元
- 没有横向依赖,非必要不出现跨层访问
- 对业务方该限制的地方做好限制,在该灵活的地方灵活处理
- 易于测试,易于扩展
- 保持一定量的超前性
- 接口尽可能少,参数少
- 高性能
如何做项目优化?
业务功能方向
- 核心功能SDK化
- 公用业务功能组件化拆分
- 登陆
- 分享
- 提供独立的业务单元给独立App使用
基础功能方向
- 通讯,数据库,基础库,hybrid
- 定位
- 城市定位成功率
- 经纬度获取成功率
- 根据连接/读/写的重用机制
网络方向
- 网络请求服务成功率
- 网络请求平均耗时
- 耗时分布
- 网络层面优化
- TCP长链接服务
- 2G/3G/4G/5G/Wi-Fi下参数调优
- 使用ip列表防止dns解析失败或劫持
- 根据网络延迟情况使用选择服务器IP(Ping)
项目性能方面
- 性能数据指标采集
- bugly
- 自定义日志上传模块
- App启动时间
- pre-main 优化
- main 优化
- App包体积大小
- 内存,流量的使用情况
- 性能数据指标采集
过往项目经验以及亮点
- 过往项目经验
- 你觉得做的最好的项目?
- 你在项目中最亮的点在哪?
- 你觉得还能继续做哪些工作?
常见的项目解决方案
1、如何设计一个图片缓存框架?
- 主要构成模块
- Manager
- 数据缓存
- 内存缓存
- 磁盘缓存
- 网络下载
- 图片处理
- 解码
- 压缩
- 主要构成模块
2、如何设计一个时长统计框架?
- 记录器
- 记录管理者