
【项目训练营】 时间轴和知识点分布(全)
为了方便大家看回放学习,整理出时间轴和知识点分布范围,结合鱼皮直播笔记食用:
第一天:如何做好项目的负责人
时间轴和知识点
00:00:00~00:30:20 国庆训练营介绍(看回放的同学可以直接跳过)
00:30:21~00:32:00 搞项目前要考虑哪些事情?
- 要做什么项目
- 怎么去招人
- 怎么去权衡成本
00:30:21~00:45:30 立项:项目信息文档+立项时要思考的一些问题:
- 为什么想做?
- 项目能解决什么问题?有什么实际意义?
- 项目的核心亮点在哪里?
- 项目名称(中英文名、域名)
00:45:31~00:56:59 调研的重要性
- 市场上目前有没有同类的项目?有的话其他网站和你的网站有多相似?
- 你的网站相对于已有的网站有哪些优缺点?网站有哪些缺点,可以改进的地方?
- 竞品分析很重要(至少3个竞品)
- 完善好项目信息文档
00:57:00~01:07:58 需求分析
- 需求信息表
- 思考功能点(越细越好)
- 需求优先级 (p0->p3) p0核心,到p3优先级递减(p1最好有、p2可以有、p3可有可无,有更好)
- 需求进度
- 需求管理工具,比如tapd(企业用),表格(简洁清晰,小团队用)
01:07:59~01:33:01 组队
- 不要养成总想抱大腿的习惯,要有一些基础的技术
- 加入团队,描述自己的优势(想自己能给别人带来什么)
- (队长)招人:
- 找能力和技术匹配的
- 要知道自己缺什么,不要根据简历招人,要控制人数
- 清晰列举需求,文档很重要
- 队长要带领队员确认:
- 沟通协作方式(交流群、腾讯会议等)
- 团队文档沉淀方式(语雀等)
- 代码协作方式(Git、GitHub等)
- 确认分工和对接方式
- 建立好知识库,并给成员开设对应权限
01:33:01~01:49:55(结束) 提交国庆项目表单以及接下来的组队、计划等(看回放的同学不用看)
第二天:如何做好架构师
时间轴和知识点
00:00:00~00:06:53组队安排(看回放的同学直接跳过)
00:06:54~00:25:20 项目点评(看回放的同学直接跳过)
00:25:21~00:26:50 提出问题:如何做好架构师?
- 架构师的定义
- 技术负责人要做好哪些事情
- 技术选型
- 资源准备
- 系统设计
- 开发规范
- 需求排期
00:26:51~00:30:10 00:34:11~00:56:45 如何做好技术选型?
技术选型两步走
- 1、选
- 系统开发
- 前端、后端、上线的方式
- 工具链
- 开发、测试、上线工具
- 技术选型原则:
- 看人:团队对哪个技术最熟?有没有一个技术大佬
- 看需求:
- 项目的量级?大项目考虑扩展性(百万并发、消息队列、分库分表),小项目尽量简单
- 项目的功能?
- 尽量用热门技术
- 技术选型渠道
- 搜解决方案:掘金、GitHub、openbase(前端)
- 百度开发者搜索
- 星球内鱼皮对系统设计的回答
- 第三方平台(直播、短信、视频点播、第三方存储、OCR文字识别等)
- 数据库选型
- 思考数据量级
- 思考数据的应用场景(数据间联系等)
- 2、用
- 能在技术选型阶段确认的技术尽量提前确认,怎么确定技术可以用呢?
- 看文档确认版本号
- 先跑起来一个demo,跑起来没问题再确认技术选型
00:56:46~01:15:10 资源准备
资源包括:服务器、数据库、第三方服务(短信发送)、开发软件等
开发最省钱的方案:
- 服务器指标
- 带宽、内存、服务器CPU、硬盘
- 带宽计算:计算每秒访问的总资源大小(人数单位资源大小(比如打开一次网页的带宽消耗)) x 2
- 内存估算:本地开发时查看进程占用,或者在linux部署运行查看(top命令)
- 服务器CPU:核心数
- 硬盘大小、云数据库
- 团队资源文档/表
01:15:11~01:48:30 系统设计
只用语言、图描述系统,不写代码
系统设计:
- 功能模块图
- 分为哪些功能模块,功能模块图(类似流程图或者思维导图)
- 从整体到局部,从大到小,比如(用户前台,管理后台)-》(XX,XX。。)、(XX,XX。。)
- 功能间管理不大的可用思维导图
- 技术架构图
- 更加清晰地展示项目用到了哪些技术,便于后期扩展和改造,起到对项目宏观地指导意义
- 库表设计(关键)
- 对着需求表来
- 划分哪些库-每个项目一个库
- 划分哪些表-每个大的功能一个表
- 确定每个表有哪些字段
- 养成存储建表语句的习惯
- 表之间的关联关系(通过字段约定式关联)
- 反三范式
- 设计很重要,前期要确定字段,后期避免上线库加字段(可能会锁表,查询卡死)
- 必有的四件套字段
- id(int)、create_time(current_timestamp)、update_time(current_timestamp 并且加 on update current_timestamp)、isDelete(软删除,逻辑删除)
- 将设计清晰地记录下来
- 每个功能的实现逻辑
- 每个需求详细设计
- 结构怎么设计
- 流程越详细越好
01:48:31~02:08:23 开发规范(非常非常重要)
- 编码规范很重要,架构师维持编码规范的几种方式
- 人为约定(Alibaba Java开发手册等等)
- 工具:插件 后端idea的alibaba java coding guide 、checkstyle、前端的Eslint等
- 提交规范(隐私保护)
- 同一的提交记录,比如关联需求文档
- 忽略某些文件的提交,保护隐私,可用使用.gitignore
02:08:24~02:12:15 需求排期
- 先做需求评估和设计
- 排期稳一点,比预期时间多一些
- 预留时间改 bug
- 排期前预估和提出风险
02:12:15~02:16:59 组队安排+回答问题(看回放的同学跳过)
第三天:前后端协作,如何做好开发第一步
时间轴和知识点
00:00:00~00:02:09 介绍今天的主题(看回放的同学直接跳过)
00:02:09~00:04:21 总结和回答前两天的问题(看回放的同学直接跳过)
00:04:22~00:09:45 怎么做好前后端协作?
- 接口文档
- 大家一起参加需求评审,都知道要做什么事情
- 前端和后端分别考虑怎么实现这个需求
- 前端找后端要哪些接口?
- 后端数据库表怎么设计?提供给前端哪些接口?
- 本质上前后端对接依赖于接口文档
- 前后端对齐,确认了字段信息,接口信息,前后端并行开发
- 后端独立写接口
- 前端mock数据或者写死数据
00:09:45~00:15:14 点评大家的项目(看回放的同学直接跳过)
00:15:15~00:46:56 如何做好开发第一步
拿到新项目,搭建好demo之后,第一步要做哪些:
- 开发第一步:先把增删改查做好
- 字段规范以团队内部约定为准
以寻爱项目为例,讲解项目结构
- 简单逻辑可以按需放到controller层中,稍复杂的业务逻辑一定写到service层中(controller写接口,service写业务逻辑)
00:46:56~00:59:55 根据数据库设计如何快速开发增删改查
- mybatis-x插件生成代码,逻辑删除
- 创建 controller,生成增删改查接口
- 创建请求类DTO,方便前端
- 最好是编写单元测试
00:59:56~01:04:44 接口设计规范
- 自己定义开发规范
- 遵循业内的开发标准
- RESTful接口设计规范
- OpenAPI
01:04:45~01:27:37 前端部分讲解
- 前端目录结构
- 前端增删改查步骤讲解
- 前端开发经验分享
01:27:38~01:28:50(结束) 任务分配(看回放的同学直接跳过)
第四天:如何聪明地写代码
时间轴和知识点
00:00:00~00:03:10 介绍本次直播内容
- 原则:先做设计,再写代码
- 寻爱网项目功能具体设计+讲解
- 从设计到开发一个新的功能
00:03:11~00:52:15 寻爱网项目功能(点赞功能)具体设计+讲解
后端部分到00:48:29,之后是前端部分到00:52:15
- 需求分析:功能的一些需求上的限制,比如每个用户只能点赞一次等
- 方案设计:为什么要写:
- 便于开发
- 自己总结
- 明确依赖
- 更好地沉淀,给他人给团队做参考
- 流程设计要清晰、详细,后期实现和调试方便,提升开发效率
- 方案设计:业务流程,描述越详细越好,以点赞功能为例
- 基本流程
- 输入:接收请求参数:用户id、帖子id等,分析参数:尽量让用户传递最少的、最安全的参数
- 校验原则:”高性能校验原则“
- 优先校验不需要查数据库的、操作第三方资源的
- 参数校验
- 业务无关的校验:判断请求参数是否为null、id是否>0
- 业务相关的校验:帖子是否存在,帖子的状态是要能点赞的(比如必须审核通过)
- 权限校验
- 判断用户是否登录:获取当前用户信息
- 执行点赞操作
- 单独点赞表
- 1、用户是否已点赞:根据userId和postId查询点赞表,如果存在表示已点赞,否则未点赞
- 2、如果已点赞,执行【取消点赞】操作
- 从点赞表删除数据
- 帖子表点赞数量-1
- 两个操作要用事务(可以用事务注解),下同
- 3、如果未点赞,执行【点赞】操作
- 点赞表增加数据
- 帖子表点赞数量+1
- 返回一个能区分是点赞成功还是取消点赞成功的值,比如返回1、-1表示点赞成功、失败
- 除了基本流程,还要考虑
- 安全性
- 权限
- 幂等性
- 用户不能重复点赞/取消点赞,加锁保证幂等性(注意锁力度,给用户id加锁,注意加锁要是同一个对象,比如String.valueOf(xxx).intern())
- 性能
- Redis实现点赞-》提升接口性能,减少响应时长
- 存储
- 硬删除等
- 前端要做什么
- 请求后端接口
- 根据后端返回数据改变图标和帖子点赞数
00:52:15~00:54:30 测试根据什么测试?
- 测试左移:在需求分析阶段考虑要做哪些测试。
- 自动化测试
00:54:31~00:57:10 回答问题
- 加锁会影响性能,尽量减小锁的粒度
- 为什么要做详细地设计,特别是详细和流程?在设计方案找出问题成本是最低的,理清逻辑很重要
00:57:14~01:34:38(结束) 从设计到开发一个新的功能
切换 banner
- 需求分析
- 管理员在管理后台可以切换首页的 banner 图
- 切换方式
- 本地上传文件
- 上传图片地址
- 在线裁切
- 程序员关注:怎么实现方便
- 产品关注:用户怎么用方便
- 选用那种方式根据情况具体分析
- 没有最好的实现,只有最合适的。要灵活。
- 系统设计(以上传图片地址的实现方式为例)
- 图片的地址如何存储
- 存配置中心里
- 存数据库表里
- 本地文件/内存(不推荐)
- 库表设计
- 四件套
- 根据具体情况设计
- 避免上线对数据库的改动
- 表可以思考通用
- 尽量保证扩展性
- 跟着需求走,灵活一些
- 实现
- 后端提供给管理员的接口
- 前端提供页面
理性分析,不要到代码实现阶段再改来改去的
第五天:如何给项目画龙点睛
时间轴和知识点
00:00:00~00:05:00 回顾前四天的直播内容
00:05:01~00:08:22 今天直播内容介绍
00:08:23开始 如何给项目画龙点睛
1、两个收获:(00:08:23~00:10:55)
- 打开思路,自己做项目时可以想到这些优化点
- 写简历时多一些亮点
2、如何优化项目(00:11:23):
- 新增功能(00:12:27~00:15:28)
- 把现有功能做的更好,比如增强用户体验
- 尽量避免无用的功能堆砌,尤其是重复的增删改查
- 从一些维度(00:15:29~)
- 这块可以对照星球鱼皮《如何优化项目文档》学习
- 性能优化(00:17:18)
- 前端(00:17:30~00:33:28)
- 缓存(浏览器缓存)
- 减少文件体积(压缩、减少代码、减少依赖等)
- 按需引入、按需加载
- 懒加载
- CDN加速(减少文件的传输时间) 如果服务器是小水管效果显著
- 升级传输协议 http1.1->http2
- 代码层面:减少无用的请求,减少无用的状态变更、渲染
- 前端请求合并
- 后端(00:33:29~00:55:34)
- 缓存(多级缓存)要注意数据一致性问题
- 查询合并(多条数据库查询合并为一条,减少重复操作)
- 并发编程(重要)
- 异步,不影响主流程的操作可以开线程、消息队列处理
- 并发,多线程处理
- 池化,线程池、连接池
- 限流 保障服务的稳定性
- 降级(有损服务)
- 数据压缩
- 返回给前端
- 存储前做压缩
- 成本(00:55:35~01:09:55)
- 成本在企业中非常重要
- 成本优化方式
- 分析自己用了哪些资源
- 降低CPU利用 e.q.降低定时任务频率
- 节约内存:GC、调优,及时释放、分批处理、用占用空间少的数据结构、内存分析工具等
- 节约磁盘:低频存储、人工分析、定时删除、淘汰策略、数据压缩等
- 节约带宽:连接复用、本地查询、数据压缩等
- 可用性(01:09:56~01:14:58)
- 集群、主从、自动故障恢复(Redis哨兵)、监控告警、容灾(异地机房)
- 可靠性(01:14:59~01:16:05)
- 尽可能让系统提供可靠服务
- 集群、主备、异常处理、降级、容灾等
- 稳定性(01:16:04~01:23:39)
- 接口稳定性:响应时长、操作处理时长稳定,成功率高,响应结果正常
- 保证服务节点状态正常、性能相等等(看鱼皮文章详解 )
- 怎么排除稳定性?
- 链路追踪(微服务)
- 打日志
- 容错性(01:23:40~01:24:37)
- 分区容错性
- 集群、反向代理、故障转移
- 健壮性(01:24:38~01:27:20)
- 异常处理(在代码层面上多考虑)
- 进程监控
- 全局异常处理器
- 系统复杂度(01:27:21~01:30:22)
- 软件开发原则、设计模式、架构设计、开发规范、工作流
- 可维护性(01:30:23~01:33:03)
- 软件开发原则、设计模式、架构设计、开发规范、工作流、抽象复用:模块化组件化,方便维护
- 可扩展性(01:33:04~01:38:09)
- 系统能更好地应对之后的业务增长
- 开闭原则*
- 设计模式、架构、集群、分库分表、技术选型
- 可观测性(01:38:10~01:44:49)
- 能够清晰了解系统/服务的运行状态
- 埋点上报(埋点+定时任务上报)、ELK日志、监控告警、可视化分析等 实现方式
- 前后端都有可观测性的要求
- 可观测性可以作为亮点写到简历上
- 可伸缩性(01:44:50~01:45:49)
- 动态扩缩容,应对流量高峰,节约成本
- K8S、Docker、云原生
- 用户体验(01:45:50~01:48:37)
- 前端用户体验
- 响应速度、骨架屏、设备适配、浏览器兼容性等
- 满意度调研
- 安全性(01:48:38~01:53:00)
- 保证数据库、服务、机器安全等
- 防爬虫、限流、防火墙等
01:53:01~01:55:31(结束) 今日任务(看回放的同学不用看)
思路很重要
第六天:如何绽放项目的价值
时间轴和知识点
00:00:00~00:03:06 回顾前几天所讲内容
00:03:07~00:04:21 介绍今日所讲内容
00:04:22~ 项目上线
- 准备资源:域名、服务器
- 区分环境
- 新的服务器可以装宝塔面板,可以方便管理服务器,快速上线项目
- 前端(00:04:22~00:28:10)
- 打包构建-》把网页文件放到服务器上=》用Nginx等web服务器提供访问能力
- 用了框架-》参考官方文档学习部署
- 区分多环境,即前端请求后端的环境(编译/打包阶段)
- 开发环境(localhost:xxx)、测试接口
- 上线环境:前端请求的是正式地址
- 后端(00:28:11~00:42:50)
- 对于Java项目:编译构建-》把jar包放到服务器上
- 区分多环境(启动阶段)
- 开发环境、测试环境、上线环境
- 注意跨域问题
00:43:28~01:06:17 如何做好开源(提升项目影响力)
- README文档
- 证明项目是认证在做,正经开源
- 向别人介绍项目,吸引关注和star
- 介绍怎么参与项目,吸引别人参与
- 便于自己梳理业务逻辑
- 写简历时,可以给面试官看的
- 关键点
- 项目介绍
- 简洁清晰的话语描述项目
- 最好能提供线上可访问的地址或者介绍视频
- 项目功能
- 解决了什么问题
- 有什么优势(写到最前面)
- 技术栈
- 快速启动
- 启动项目的流程和命令
- 使用说明
- 方便用户使用
- 架构设计
- 代码讲解
- 目录结构
- 做的好的点,一些小细节等
- 具体业务流程
- 功能模块图
- 技巧:
- 多列举些截图
- 把最重要的、最想让别人看的的前置
- 贡献指南
- 如何让别人参与这个项目
- 多参考知名项目的README
- 代码脱敏
- 数据库、服务器地址等敏感信息
- .gitignore
- 开源协议
- 注意不同开源协议的区别
- 开源推广
- 知识点同下面的推广
01:06:18~01:16:36 如何做好推广
- 清晰介绍、网址、相应的标签-》方便别人搜到
- 取好记的项目名词
- README文档写的好一些
- 前提:作品用心、质量高
- 友链
- SEO(重要)搜索引擎优化
- 内容标签清晰,多出现一些关键字
- 写文章、做视频推广=》利用其他平台的SEO。利用其他渠道,比如发布视频,在合适的时候推广项目等
- github漫游指南
- 怎么做好github开源项目
01:16:36~01:21:17(结束) 总结(看回放的同学可以不看~)
