天机学堂项目总结(day1~day2)

目录

[Day1-01. 课程介绍](#Day1-01. 课程介绍)

问题:什么是B2C类型?

[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. 搭建项目环境 - 本地开发部署方式)

问题:git知识点补充?

问题:有几种实体类?

问题:依赖注入有几种方式?

问题:解释@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实体)

问题:为什么返回分页结构是DTO?

问题:解释图片中的注解?

[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

  1. master:线上稳定代码,永远可发布
  2. develop/dev:开发主分支
  3. feature-xxx:开发新功能
  4. release:预发布、测试
  5. 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?

因为它不仅是视图对象,还在微服务之间做页面传输对象

问题:解释图片中的注解?

  1. @JsonValue (核心重点)
  • 来源 :Jackson (com.fasterxml.jackson.annotation)

  • 作用指定序列化时返回的值

  • 解释

    • 默认情况下,JSON 序列化枚举会返回 {"NOT_BEGIN", "未学习"} 这类枚举名和描述。

    • 加上 @JsonValue 后,序列化结果只会变成 01

    • 实战意义:前端接口返回数据时,不需要返回复杂的枚举对象,只要返回对应的状态码(数字),网络传输更轻量,前端解析更方便。

  1. @EnumValue (核心重点)
  • 来源:MyBatis-Plus

  • 作用指定数据库存储的值

  • 解释

    • 告诉 MyBatis-Plus:这个枚举对应的数据库字段值value 这个属性(即 0, 1, 2, 3)。

    • 双向绑定

      • :数据库存入 1

      • :查询出来 1,自动映射成 LessonStatus.LEARNING

    • 如果没有这个注解,MyBatis-Plus 可能默认存枚举的名字(字符串),这会导致数据类型不匹配。

  1. @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的使用方法。文章重点分析了微服务架构下的关键技术实现,包括依赖注入方式、全局异常处理注解、枚举序列化方案等核心开发问题。同时涵盖了接口设计规范、数据库实体映射、前后端数据交互等实战内容,并特别讲解了网关过滤器实现用户认证的技术方案。最后介绍了课程表相关功能的开发过程,包括分页查询、状态管理等业务场景的具体实现方案。

相关推荐
weixin_408717772 小时前
PHP8.1新特性对AI开发帮助_JIT编译优势【解答】
jvm·数据库·python
2401_871696522 小时前
golang如何实现Trie前缀树_golang Trie前缀树实现解析
jvm·数据库·python
2401_887724502 小时前
Go语言怎么做HTTP连接池_Go语言HTTP连接池教程【基础】
jvm·数据库·python
qq_334563552 小时前
Redis怎样实现Session的分布式共享
jvm·数据库·python
m0_493934532 小时前
CSS如何实现背景图片重复平铺_设置background-repeat为repeat
jvm·数据库·python
2401_897190552 小时前
SQL触发器执行报错如何回滚事务_利用RAISERROR抛出异常
jvm·数据库·python
简简单单就是我_hehe2 小时前
高吞吐、低成本日志系统方案ClickHouse + Filebeat/Fluentd
大数据
m0_493934532 小时前
Redis如何批量移动标签_利用SMOVE指令在Set之间转移数据
jvm·数据库·python
Shorasul2 小时前
如何用 some 检测数组中是否存在至少一个满足条件的项
jvm·数据库·python