Skip to content

Commit

Permalink
完善笔记
Browse files Browse the repository at this point in the history
  • Loading branch information
yangchong211 committed Mar 31, 2022
1 parent d132394 commit 71bf419
Show file tree
Hide file tree
Showing 8 changed files with 143 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# resources目录会被自动识别为资源文件夹
# resources目录下新建文件夹META-INF,META-INF文件夹下新建gradle-plugins文件夹
# plugin的全路径地址,注意该文件的命名就是你之后使用插件的名字
implementation-class=com.yc.spi.loader.gradle.BuildTimeCostPlugin
implementation-class=com.yc.spi.loader.gradle.ServiceLoaderPlugin
134 changes: 134 additions & 0 deletions Read/ReadMeWiki/01.大型方案/05.Task统计耗时实践.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
#### 目录介绍
- 概述
- 项目背景
- 设计目标
- 方案设计
- 整体架构
- 架构设计图
- UML设计图
- 功能设计
- 关键流程图
- 接口设计图
- 模块间依赖关系
- 其他设计(Optional)
- 性能设计
- 稳定性设计
- 灰度设计
- 降级设计
- 异常设计
- 排期与计划
- 排期节点
- 落实反馈


### 01.概述
#### 1.1 项目背景
- 通过简要的语言描述项目背景以及要达成的业务目标。

#### 1.2 设计目标
- 需求的背后往往会带来技术的重构/优化,或者单纯的完成需求,如果有必要,需要从技术角度给出方案设计的目标
- 比如对于图片下载需求,需要完成相关的功能,那么设计目标主要有完成异步下载、存储、缓存设计、图片解码、渲染等功能。
- 比如对于优化需求,目标可以是达到一个什么效果?可以是帧率的、Crash率的、卡顿的等。
- 比如对于重构需求,目标可以是加强扩展、解决问题、提升效率等。



### 02.方案设计
- 方案设计是技术文档的最核心部分,主要包括了整体架构和功能设计,这里需要体现:
- 设计的初衷:概要描述方案设计的思考,可以是为了扩展性的考虑,可以是提升性能
关键技术点的思考:描述关键技术选型的思考,比如要解耦,业内解耦方案能有router、Target-Action等,讲清楚选择的思考
- 技术上的折中/取舍:在做技术设计的时候,往往要的很多,但时间有限,那么这个需要讲一下折中与取舍,以及接下来的规划、计划



#### 2.1 整体架构
- 整体架构的组成需要有一张完成的架构设计图,描述清楚具体的分层以及层与层之间的关系
- 比如传统的开发会分为三层,展示层、逻辑层、数据层
- 展示层的设计:视图的构成、视图间的耦合关系、具体的交互逻辑
- 逻辑层的设计:支撑展示层所需要的数据、从数据层获取数据的加工、业务相关逻辑(比如轮询服务)
- 数据层的设计:数据的获取方式以及存储方式,文件、数据库、本地、网络



#### 2.2 功能设计
- 功能设计包含但不限于以下几个部分:逻辑流程图、接口设计图、与外部的模块间依赖关系

#### 2.2.1 关键流程图
- 设计中的最复杂、最关键的逻辑需要画出流程图,实在画不出的流程图需要用语言描述清楚。
- 关键流程需要有逻辑流程图,帮助其他同学理解功能的关键节点逻辑


##### 2.2.2 接口设计图
- 通过UML类图来展示类间关系,描述清楚接口设计的一些思考原则
- 提供的接口,往往接口设计为了完成相关逻辑



##### 2.2.3 模块间依赖关系
- 描述清楚和哪些模块存在依赖关系以及原因,比如首页依赖于购物车模块,需要解释清楚要强耦合,有没有办法解耦
- App内部模块间依赖
- App外部依赖


#### 2.3 UI/动效设计
- 客户端开发有很大一部分精力在UI/动效上,对于复杂的静态UI和复杂动效,需要给出实现方案和选型逻辑
- 静态UI
- 只有复杂的UI才需要给出设计方案,例如核心页面大重构、复杂的协调布局等
- 复杂动效
- 复杂的动效是端上容易踩坑的关键点,需要给出实现方案的对比、选型等,为验证动效可行性,可以给出动效Demo



### 03.其他设计(Optional)
- 以下部分是可选项,主要是从异常、兼容性、性能、稳定性、灰度、降级等维护来设计。


#### 3.1 性能设计
- 有些业务项目可能会考虑性能,比如列表页,卡顿、流畅度怎么样?如何评估?
- 有些技术项目可能也会考虑性能,比如数据库设计,检索性能如何?是否有瓶颈,如何评估?


#### 3.2 稳定性设计
- 大的项目需要考虑性能如何保障?
- 比如方案 Review
- 比如自测Case Review,加强自测
- 比如单测


#### 3.3 灰度设计
- 核心关键功能需要有A/B设计
- 比如UIWebview替换为WKWebview,其中存在很多不确定因素,需要做好灰度设计


#### 3.4 降级设计
- 在做一些新技术尝试时,需要考虑降级设计
- 比如RN、swift、weex引入对原有业务造成影响的,需要有兜底,可降级
- 参考资料
- 需要列出方案设计过程的文档,包括但不局限于PM需求文档,技术参考文档等。


#### 3.5 异常设计
- 大部分业务需求都会涉及到异常处理,在关心主流程的同时需要关注异常场景怎么保证正确性?
- 比如用户操作中途退出、网络异常、数据被清理等


#### 3.6 兼容性设计
- 业务逻辑一般不会涉及到兼容性,但UI/动效需求容易遇到兼容性问题,也是提测时需要让QA关注的
- 比如独立端/嵌入端、高低版本API适配等


### 04.排期与计划
- 排期计划主要针对周期较长项目的时间补充,对于小型项目不需要,例如:
- 正常的版本业务需求,5pd以下,不需要给出排期计划;5pd或者以上,可以简单描述一下排期和提测时间
- 跨版本的大型业务需求、重构专项等,需要给出详细的排期计划
- 研发自驱的技术优化项目,需要给出详细的排期计划


### 05.参考资料
- 需要列出方案设计过程的文档,包括但不局限于PM需求文档,技术参考文档等。


- Gradle学习(八) 统计Task执行时长
- https://blog.csdn.net/chennai1101/article/details/103280523/


Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
- 落实反馈



### 01.概述
#### 1.1 项目背景
- 通过简要的语言描述项目背景以及要达成的业务目标。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@




### 03.转发和重定向
- 转发和重定向的区别是什么?
- 转发是服务器行为,重定向是客户端行为
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
- TCP提供全双工通信。
- 面向字节流。


### 02.TCP基本概念
- `发送缓存和接受缓存`
- 用来临时保存双向通信的数据。在发送时,应用程序将数据传送给TCP发送缓存后,就可以做自己的事情,TCP在合适的时候发送数据;在接受数据时,TCP把发送的数据放入缓存,上层应用在合适的时候读取缓存即可。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@




### 01.为何会有Https
#### 1.1 Http的缺点
- 通信使用明文;
Expand Down
6 changes: 3 additions & 3 deletions Read/ReadMeWiki/09.网络技术/13.HTTPDNS介绍.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@




### 01.前沿简单介绍
#### 1.1 什么是DNS
- 知道了 DNS 的两项功能,第一是根据名称查到具体的地址,另外一个是可以针对多个地址做负载均衡,而且可以在多个地址中选择一个距离你近的地方访问。
- 然而有时候这个地址簿也经常给你指错路,明明距离你 500 米就有个吃饭的地方,非要把你推荐到 5 公里外。为什么会出现这样的情况呢?
- 还记得吗?当我们发出请求解析 DNS 的时候,首先,会先连接到运营商本地的 DNS 服务器,由这个服务器帮我们去整棵 DNS 树上进行解析,然后将解析的结果返回给客户端。但是本地的 DNS 服务器,作为一个本地导游,往往有自己的“小心思”。



### 02.传统DNS存在哪些问题
#### 1.2 传统DNS存在哪些问题
- 域名缓存问题
- 域名转发问题
- 出口NAT问题
Expand Down
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ buildscript {
//jitpack
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
//自定义插件
classpath 'com.github.yangchong211.YCAppTool:ServiceLoaderPlugin:1.4.2.7'
classpath 'com.github.yangchong211.YCAppTool:ServiceLoaderPlugin:1.4.2.9'
classpath 'com.github.yangchong211.YCAppTool:BuildTimeCostPlugin:1.4.2.9'
}
}

Expand Down

0 comments on commit 71bf419

Please sign in to comment.