目录
[Day1-01. 课程介绍](#Day1-01. 课程介绍)
[Day01-02. 项目介绍 - 功能演示](#Day01-02. 项目介绍 - 功能演示)
[Day01-03. 项目介绍 - 功能亮点](#Day01-03. 项目介绍 - 功能亮点)
[Day01-04. 搭建项目环境 - 企业开发模式](#Day01-04. 搭建项目环境 - 企业开发模式)
[Day01-05. 搭建项目环境 - 模拟企业环境](#Day01-05. 搭建项目环境 - 模拟企业环境)
[问题:Jenkins持续集成 ,xxl-job控制台,ES的Kibana控制台是什么?](#问题:Jenkins持续集成 ,xxl-job控制台,ES的Kibana控制台是什么?)
[Day01-06. 搭建项目环境 - 持续集成环境](#Day01-06. 搭建项目环境 - 持续集成环境)
[Day01-07. 搭建项目环境 - 测试部署的微服务](#Day01-07. 搭建项目环境 - 测试部署的微服务)
[Day01-08. 搭建项目环境 - 本地开发部署方式](#Day01-08. 搭建项目环境 - 本地开发部署方式)
问题:解释@RestControllerAdvice和@ExceptionHandler(DbException.class)注解?
[Day01-09. 修复 BUG-BUG 重现](#Day01-09. 修复 BUG-BUG 重现)
[Day01-10. 修复 BUG - 熟悉项目](#Day01-10. 修复 BUG - 熟悉项目)
[Day01-11. 修复 BUG - 阅读源码](#Day01-11. 修复 BUG - 阅读源码)
[Day01-12. 修复 BUG - 分析和解决](#Day01-12. 修复 BUG - 分析和解决)
[Day01-13. 修复 BUG - 测试部署](#Day01-13. 修复 BUG - 测试部署)
[Day02-01. 今日课程介绍](#Day02-01. 今日课程介绍)
[Day02-02. 分析产品原型 - 业务流程分析](#Day02-02. 分析产品原型 - 业务流程分析)
[Day02-03. 分析产品原型 - 设计分页查询我的课表接口](#Day02-03. 分析产品原型 - 设计分页查询我的课表接口)
[Day02-04. 分析产品原型 - 统计我的课程相关接口](#Day02-04. 分析产品原型 - 统计我的课程相关接口)
[Day02-05. 分析产品原型 - 设计添加课程到课程表接口](#Day02-05. 分析产品原型 - 设计添加课程到课程表接口)
[Day02-06. 分析产品原型 - 设计查询最近学习的课程接口](#Day02-06. 分析产品原型 - 设计查询最近学习的课程接口)
[Day02-07. 分析产品原型 - 设计查询指定课程学习状态接口](#Day02-07. 分析产品原型 - 设计查询指定课程学习状态接口)
[Day02-08. 分析产品原型 - 抽取 QUERY、DTO、VO实体](#Day02-08. 分析产品原型 - 抽取 QUERY、DTO、VO实体)
[Day02-09. 分析产品原型 - 数据库结构及 PO](#Day02-09. 分析产品原型 - 数据库结构及 PO)
[Day02-10. 开发接口功能 - 添加课程到课表 - 思路分析](#Day02-10. 开发接口功能 - 添加课程到课表 - 思路分析)
[Day02-11. 开发接口功能 - 添加课程到课表 - 代码实现](#Day02-11. 开发接口功能 - 添加课程到课表 - 代码实现)
[Day02-12. 开发接口功能 - 分析登录用户传递流程](#Day02-12. 开发接口功能 - 分析登录用户传递流程)
[Day02-13. 开发接口功能 - 分页查询我的课表](#Day02-13. 开发接口功能 - 分页查询我的课表)
[Day02-14. 代码提交和分支合并](#Day02-14. 代码提交和分支合并)
Day1-01. 课程介绍

问题:什么是B2C类型?
- B2C:商家 → 个人(京东、外卖)
- C2C:个人 → 个人(闲鱼、淘宝小店)
- B2B:商家 → 商家(阿里巴巴批发)
Day01-02. 项目介绍 - 功能演示
Day01-03. 项目介绍 - 功能亮点



Day01-04. 搭建项目环境 - 企业开发模式




Day01-05. 搭建项目环境 - 模拟企业环境
问题:怎么搭建公共服务环境?
为了模拟企业中的开发环境,我们利用虚拟机搭建了一套开发环境,其中部署了开发常用的组件:
Git私服(gogs):代码全部提交带了自己的Git私服,模拟企业开发的代码管理,大家也需要自行到私服拉取代码
jenkins:持续集成,目前已经添加了所有部署脚本和Git钩子,代码推送会自动编译,可以根据需求手动部署
nacos:服务注册中心、统一配置管理,大多数共享的配置都已经交给nacos处理
seata:分布式事务管理
xxl-job:分布式任务系统
es:索引库
redis:缓存库
mysql:数据库
kibana:es控制台
之前的配置,同时也没选DCHP
问题:Jenkins持续集成 ,xxl-job控制台,ES的Kibana控制台是什么?
- Jenkins:自动化打包、部署项目
- XXL-Job 控制台:管理分布式定时任务
- Kibana 控制台:ES 的可视化界面,查日志、做监控(Elasticsearch)
Day01-06. 搭建项目环境 - 持续集成环境

问题:软件的账户密码?

问题:怎么持续集成环境?
打开GOGOS,然后先构建,编译(build),再去执行想要的模块去部署即可
可以去docker ps看是否成功
Day01-07. 搭建项目环境 - 测试部署的微服务
问题:怎么测试?
1是使用swagger,在代码中集成;
2是使用前端
Day01-08. 搭建项目环境 - 本地开发部署方式


问题:git知识点补充?
可以去看git讲义(黑马小程序里面)
三、企业真实分支规范(面试常问)
最标准:Git Flow
- master:线上稳定代码,永远可发布
- develop/dev:开发主分支
- feature-xxx:开发新功能
- release:预发布、测试
- hotfix/bugfix:紧急线上 bug 修复
问题:有几种实体类?
DTO:数据传输对象,在客户端与服务端间传递数据,例如微服务之间的请求参数和返回值、前端提交的表单
PO:持久层对象,与数据库表一一对应,作为查询数据库时的返回值
VO:视图对象,返回给前端用于封装页面展示的数据
QUERY:查询对象,一般是用于封装复杂查询条件
问题:依赖注入有几种方式?
字段注入(
@Autowired或@Resource)构造函数注入
set方法注入
在以往代码中,我们经常利用Spring提供的
@Autowired注解来实现依赖注入:不过,这种模式是不被Spring推荐的,Spring推荐的是基于构造函数注入,像这样:
但是,如果需要注入的属性较多,构造函数就会非常臃肿,代码写起来也比较麻烦。
好在Lombok提供了一个注解
@RequiredArgsConstructor,可以帮我们生成构造函数,简化代码:
问题:解释@RestControllerAdvice和@ExceptionHandler(DbException.class)注解?
1. @RestControllerAdvice 是什么?
- 它是 SpringBoot 提供的全局统一增强注解,专门给 REST 接口用。
- 作用:对所有 @RestController 做全局统一处理 ,最常用的就是全局异常捕获。
- 相当于: 给整个项目的所有接口加了一层 "异常保护伞"。
2. @ExceptionHandler (DbException.class) 是什么?
- 它写在方法上,表示这个方法专门处理某种异常。
DbException.class是数据库异常(比如 SQL 错误、主键冲突、字段太长、连接失败等)。
问题:都有哪些配置文件?
|---------------------|-----------------------------|
| bootstrap.yml | 通用配置属性,包含服务名、端口、日志等等各环境通用信息 |
| bootstrap-dev.yml | 线上开发环境配置属性,虚拟机中部署使用 |
| bootstrap-local.yml | 本地开发环境配置属性,本地开发、测试、部署使用 |项目中的很多共性的配置都放到了Nacos配置中心管理:
Day01-09. 修复 BUG-BUG 重现


Day01-10. 修复 BUG - 熟悉项目

Day01-11. 修复 BUG - 阅读源码

Day01-12. 修复 BUG - 分析和解决




Day01-13. 修复 BUG - 测试部署

问题:怎么组件测试?
1
问题:多线程下用户判断是否登录的功能怎么实现的?
可以使用网关进行登录校验
不过,这里存在几个问题:
网关路由是配置的,请求转发是Gateway内部代码,我们如何在转发之前做登录校验?
网关校验JWT之后,如何将用户信息传递给微服务?
微服务之间也会相互调用,这种调用不经过网关,又该如何传递用户信息?
如图中所示,最终请求转发是有一个名为
NettyRoutingFilter的过滤器来执行的,而且这个过滤器是整个过滤器链中顺序最靠后的一个。如果我们能够定义一个过滤器,在其中实现登录校验逻辑,并且将过滤器执行顺序定义到NettyRoutingFilter之前,这就符合我们的需求了!那么,该如何实现一个网关过滤器呢?
网关过滤器链中的过滤器有两种:
GatewayFilter:路由过滤器,作用范围比较灵活,可以是任意指定的路由Route.
GlobalFilter:全局过滤器,作用范围是所有路由,不可配置。详情看day04-微服务02 - 飞书云文档


Day02-01. 今日课程介绍


Day02-02. 分析产品原型 - 业务流程分析

Day02-03. 分析产品原型 - 设计分页查询我的课表接口

Day02-04. 分析产品原型 - 统计我的课程相关接口

Day02-05. 分析产品原型 - 设计添加课程到课程表接口

Day02-06. 分析产品原型 - 设计查询最近学习的课程接口

Day02-07. 分析产品原型 - 设计查询指定课程学习状态接口

问题:怎么接口设计?
请求方式和请求路径遵循Restful风格
请求参数跟页面原型有关
Day02-08. 分析产品原型 - 抽取 QUERY、DTO、VO实体


问题:为什么返回分页结构是DTO?
因为它不仅是视图对象,还在微服务之间做页面传输对象
问题:解释图片中的注解?
@JsonValue(核心重点)
来源 :Jackson (
com.fasterxml.jackson.annotation)作用 :指定序列化时返回的值。
解释:
默认情况下,JSON 序列化枚举会返回
{"NOT_BEGIN", "未学习"}这类枚举名和描述。加上
@JsonValue后,序列化结果只会变成0或1。实战意义:前端接口返回数据时,不需要返回复杂的枚举对象,只要返回对应的状态码(数字),网络传输更轻量,前端解析更方便。
@EnumValue(核心重点)
来源:MyBatis-Plus
作用 :指定数据库存储的值。
解释:
告诉 MyBatis-Plus:这个枚举对应的数据库字段值 是
value这个属性(即0, 1, 2, 3)。双向绑定:
存 :数据库存入
1。取 :查询出来
1,自动映射成LessonStatus.LEARNING。如果没有这个注解,MyBatis-Plus 可能默认存枚举的名字(字符串),这会导致数据类型不匹配。
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
来源:Jackson
作用 :指定反序列化时的创建方式。
解释:
场景 :当前端传来 JSON 数字(比如
1)要封装成 Java 对象时。DELEGATING :Jackson 会调用这个带有
@JsonCreator注解的静态方法of(Integer value),传入前端传来的数值,从而返回对应的枚举对象。流程 :前端传
3-> 调用of(3)-> 返回EXPIRED枚举。
Day02-09. 分析产品原型 - 数据库结构及 PO
Day02-10. 开发接口功能 - 添加课程到课表 - 思路分析


Day02-11. 开发接口功能 - 添加课程到课表 - 代码实现
Day02-12. 开发接口功能 - 分析登录用户传递流程

Day02-13. 开发接口功能 - 分页查询我的课表
Day02-14. 代码提交和分支合并
末尾页
这篇文章摘要主要介绍了企业级B2C电商项目的开发流程和技术要点。课程从项目环境搭建开始,详细讲解了持续集成工具Jenkins、分布式任务系统XXL-Job、ES可视化工具Kibana的使用方法。文章重点分析了微服务架构下的关键技术实现,包括依赖注入方式、全局异常处理注解、枚举序列化方案等核心开发问题。同时涵盖了接口设计规范、数据库实体映射、前后端数据交互等实战内容,并特别讲解了网关过滤器实现用户认证的技术方案。最后介绍了课程表相关功能的开发过程,包括分页查询、状态管理等业务场景的具体实现方案。








