CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Spring Boot 实战入门/课时/综合练习与进阶路线
RawBlame
课时目录16 节

Spring Boot 实战入门

  1. 01Spring Boot 是什么
  2. 02Starter 与自动配置
  3. 03配置与 Profile
  4. 04IoC 与依赖注入
  5. 05Bean 作用域与生命周期
  6. 06Spring AOP 入门
  7. 07Spring MVC 与 REST
  8. 08参数校验与异常处理
  9. 09JDBC 与 MyBatis
  10. 10Spring Data JPA 入门
  11. 11事务管理
  12. 12Spring Security 基础
  13. 13JWT 与 API 鉴权
  14. 14单元测试与 MockMvc
  15. 15Actuator 与健康检查
  16. 16综合练习与进阶路线

综合练习与进阶路线

小 CRUD 项目清单;Spring Cloud 下一步。

45 分钟

综合练习与进阶路线

这一课你将能做到

  1. 按照阶段清单,把前 15 课的知识组装成一个完整的「TaskFlow 任务管理 API」项目
  2. 用一份检查点清单自查项目,确认每个工程关键点都已落地
  3. 画出从「Boot 单体入门」到「生产工程师」的进阶路线图,明确下一步学什么、为什么

为什么要学

前面的 15 课是零件:容器、配置、MVC、校验、数据库、事务、安全、测试、监控。零件不等于机器——把零件按真实项目的顺序组装一遍,你才真正拥有「独立写一个后端服务」的能力,这也是面试自我介绍环节的弹药库。

本课不引入新知识,而是给出项目需求 + 分阶段实施清单 + 验收标准。请务必亲手做:跟着做一遍的时间,价值超过再听十节课。

先建立图像

最终交付的 TaskFlow 项目全景:

                    ┌────────── TaskFlow 任务管理 API ──────────┐
前端 / curl ──HTTP──→ 安全层:JWT 登录 + 角色授权(12/13 课)      │
                    │ 校验层:@Valid + 全局异常 + 统一响应(7/8 课)│
                    │ 业务层:Task/User/审计 Service(4/6 课)     │
                    │ 持久层:JPA 或 MyBatis + 事务(9/10/11 课)  │
                    │ 可观测:AOP 日志 + Actuator(6/15 课)        │
                    │ 质量关:单元/切片/集成测试(14 课)            │
                    └──────────────────────────────────────────┘

跟着做

步骤 1:冻结需求清单(先写下来再动手)

功能需求:

  1. 用户:注册(用户名+密码,BCrypt 存储)、登录(返回 JWT)、获取当前用户信息
  2. 任务 CRUD:创建(标题 1-50 字、优先级 1-5、截止日期)、列表(按状态/优先级筛选、分页)、详情、更新状态(TODO→DOING→DONE,非法流转报错)、删除
  3. 归属隔离:普通用户只能看/改自己的任务;ADMIN 可看全部(授权差异)
  4. 审计日志:删除任务时写一条审计记录(用 REQUIRES_NEW 保证回滚后仍保留)
  5. 运维:/actuator/health 聚合自定义健康检查;性能日志切面覆盖全部 Service

非功能需求:统一响应结构、业务错误码、全局异常处理、核心链路测试覆盖、README。

步骤 2:阶段一——骨架与数据层(第 1-3、9/10 课)

  • Initializr 创建项目,引入 web/validation/jdbc 或 data-jpa/actuator/test
  • application.yml + application-dev.yml + application-prod.yml(密码走环境变量占位符)
  • 设计并创建 task、user、audit_log 三张表(schema.sql 或 ddl-auto)
  • 实体/DTO 定义,Repository 或 Mapper 完成基础 CRUD
  • 验收:应用启动无报错,SQL 日志可见,数据能存能取

步骤 3:阶段二——接口与规范(第 7、8 课)

  • ApiResponse 统一响应 + GlobalExceptionHandler(校验/业务/兜底三分支)
  • ErrorCode 枚举覆盖:参数错、任务不存在、状态流转非法、登录失败、系统错
  • Task CRUD 五个接口 + DTO 校验注解(含方法级 @Validated 示例)
  • curl 脚本走通全部接口的成功与失败分支
  • 验收:所有错误返回统一 JSON;空标题、超范围优先级被 40000 拦截
  • 步骤 4:阶段三——安全与事务(第 11-13 课)

    • SecurityConfig:STATELESS、csrf off、/api/auth/** 放行、/api/admin/** 仅 ADMIN
    • 注册/登录接口(BCrypt matches + JWT 签发)、JwtAuthFilter 恢复身份
    • 归属隔离:查询与更新按 userId 过滤(业务层校验,不靠前端)
    • 删除任务 + 审计日志(REQUIRES_NEW),手动制造异常验证「任务回滚、日志保留」
    • 验收:不带 token 401;alice 看不到 bob 的任务;事务回滚实验通过

    步骤 5:阶段四——质量与可观测(第 6、14、15 课)

    • PerfLogAspect 计时切面覆盖 service 包;自定义注解 @AuditLog 用于删除操作
    • 测试三层:Service 单测(含异常分支)、@WebMvcTest 契约测试、登录+CRUD 集成测试
    • 自定义 HealthIndicator(审计依赖或第三方依赖)+ 业务计数指标 Counter
    • 验收:mvnw test 全绿;/actuator/health 显示自定义组件

    步骤 6:阶段五——收尾(第 2、16 课)

    • 排查自动配置:--debug 报告确认无意外缺失;无多余的 exclude
    • README:启动方式、环境变量清单、接口文档、测试说明
    • 打包 java -jar 启动验证 prod profile
    • 验收:换一台机器仅装 JDK 17 + 设置环境变量即可跑通全流程

    做完全部阶段,把这个项目放进 GitHub——它就是你的第一份「能讲清楚的后端作品」。

    步骤 7:项目自查十问(面试预演)

    1. @SpringBootApplication 做了什么?你的启动类为什么放在根包?
    2. 你的配置分了几个 profile?数据库密码怎么注入的?
    3. Controller、Service、Repository 各自的职责边界?为什么依赖注入不用字段注入?
    4. 一个非法请求从进来到被拦截,经过了哪几层?
    5. 删除任务的审计日志为什么用 REQUIRES_NEW?REQUIRED 会发生什么?
    6. JWT 签发了什么、校验了什么?为什么 token 不能放敏感信息?
    7. 你的测试金字塔长什么样?Service 测试为什么不用 @SpringBootTest?
    8. 应用在服务器上怎么判断「还活着」?健康检查聚合了什么?
    9. 如果接口突然变慢,你的排查顺序是什么?(日志 → metrics → SQL → 线程)
    10. 这个项目最让你自豪的一个设计决策是什么?(必须有答案)

    步骤 8:进阶路线图(按优先级)

    第一优先:缓存与性能(日常工作 80% 的优化题)

    • Spring Cache + Redis:@Cacheable 缓存任务列表,理解缓存穿透/击穿/雪崩三件套
    • SQL 优化:慢日志、索引、EXPLAIN——接上第 9 课的 SQL 能力
    • 连接池与线程池调优:Hikari 指标(第 15 课)驱动参数

    第二优先:异步与解耦

    • @Async + 线程池:发通知、导报表移出主链路
    • 定时任务:@Scheduled 清理过期任务;规模大了换 XXL-Job
    • 消息队列(RabbitMQ/Kafka):削峰、事件驱动——本地消息表模式(第 11 课)自然衔接

    第三优先:工程化

    • Docker:把 TaskFlow 写成 Dockerfile + docker-compose(app+MySQL+Redis 一键起)
    • CI/CD:GitHub Actions 跑测试 → 构建镜像 → 部署
    • Flyway:把 schema.sql 升级成版本化迁移脚本(第 10 课埋的伏笔)

    第四优先:微服务与云原生(简历加分项)

    • Spring Cloud Alibaba:Nacos(配置/注册中心)、Gateway(网关)、OpenFeign(服务调用)
    • 分布式问题:分布式锁(Redis)、分布式事务(Seata/消息最终一致)、幂等设计
    • 可观测进阶:Prometheus + Grafana + 链路追踪(SkyWalking)

    路线图不是进度表:每一步都用项目驱动(例如给 TaskFlow 加 Redis 缓存而不是单独背 Redis API),学完立刻有产出。

    步骤 9:面试自我介绍的项目讲法(STAR 骨架)

    • S/T(背景与任务):「我独立开发了一个任务管理 API,Spring Boot 3 + MySQL + Redis,支撑注册登录、任务流转、审计等核心功能。」
    • A(行动,讲 2-3 个技术决策):「鉴权用 JWT + 过滤器链实现无状态认证;删除任务的事务里用 REQUIRES_NEW 保证审计日志独立提交;核心链路有单元与集成测试守着。」
    • R(结果,量化最好):「接口平均响应 X ms,测试 N 条全绿,README 与接口文档齐全。」
    • 高频追问全部在第 7 步的十问里预演过——每个决策都要能回答「为什么不用另一种方案」。

    讲清楚要点

    1. 组装顺序有讲究:骨架 → 接口规范 → 安全 → 质量观测。先立规范(统一响应/异常)再堆功能,返工最少;安全与测试后置但不可省——「能跑」和「能交付」的差距全在这两步。
    2. 项目是最快的记忆黏合剂:单独背「REQUIRES_NEW」两周就忘,但「审计日志那次回滚实验」你会记很久。每个知识点都对应项目里的一次动手。
    3. 面试考察的是决策不是 API:「你为什么用 JWT 而不是 Session」「为什么测试分层」——答案质量取决于你真的比较过备选方案。自查十问就是逼自己做这个练习。
    4. 进阶方向按「解决问题」排序,不按技术流行度排序:先补缓存与异步(业务刚需),再上容器化(交付刚需),最后微服务(规模刚需)。跳级学微服务而没有单体功底,只会学成配置搬运工。
    5. 保持「最小可运行」的纪律:每个阶段结束项目都必须能一键启动、测试全绿。烂尾的大型项目不如完整的小项目——这也是工程界的通用真理。

    你可能会懵的地方

    • 项目用 JPA 还是 MyBatis? 都行,关键是把选择的理由写进 README(这正是面试考点)。求职国内后端建议主 MyBatis(生态匹配 JD),JPA 作为第二项目的技术选型,两边都有作品最稳。

    • 做完了感觉还是不会写「真实项目」怎么办? 缺的不是知识是「规模感」:真实项目多了多表关联、历史包袱、多人协作。下一步找开源项目读——推荐看 Spring Boot 官方 samples、或 GitHub 上千星级的 spring-boot-demo 类仓库,对照自己的实现找差距。

    • 要不要直接上 Spring Cloud 微服务? 不建议。没有单体+中间件功底直接上微服务,学到的是「配置串联」而不是架构能力。先把缓存、消息、容器化这三样在单体里玩透,微服务只是把同样的概念跨进程重演。

    • 简历上这个项目会不会太「教学项目」? 教学项目与真实项目的差距在「深度细节」:给它加真实约束(压测数据、慢 SQL 优化记录、一次故障复盘),再补一个差异化功能(如导入导出、协作分配、通知中心),深度立刻不同。面试官看重的是你对每个决策的解释力。

    • 下一步直接刷面试题吗? 八股文(IoC 原理、事务失效、HashMap……)要刷,但本课程已经把大半 Spring 高频题的「实验版」做过了——刷题时把每道题对应回项目里的实验,记忆效率翻倍。题库推荐从「Spring 循环依赖、事务失效、JWT 安全、MySQL 索引」四类开始。

    错法对照

    错法问题正解
    只看不写,「我懂了」式学习面试一问细节就露馅按阶段清单亲手做完并验收
    一步到位想写完美架构永远停在第一步先最小可运行,再逐阶段迭代
    功能堆完不写测试和文档「能跑」≠「能交付」每阶段带验收标准,README 同步写
    跳过安全直接做功能接口裸奔,返工成本最高安全与校验属于「阶段三必做」
    微服务起步,跳过单体基本功只会配不会调,面试即穿帮单体里练透缓存/异步/事务再上云

    卡点急救

    1. 阶段三被 Security 拦得怀疑人生:回看第 12/13 课的「卡点急救」;先只放行 auth + hello 两个接口跑通,再逐条收紧——不要一次性写完整套配置再调试。
    2. 事务实验「回滚了但日志也没了」:审计方法没真正开独立事务——确认 AuditService 是独立 Bean 且方法 public、REQUIRES_NEW 生效;外层异常必须在 record 调用之后抛出。
    3. 测试全绿但集成测试随机挂:多半是用例间数据残留或端口冲突;集成用例用唯一数据(UUID),RANDOM_PORT + TestRestTemplate 自动取端口。
    4. docker-compose 起来连不上 MySQL:容器网络内主机名是服务名(jdbc:mysql://mysql:3306/...)不是 localhost;等数据库 healthcheck 通过再启动 app(depends_on + condition)。

    面试常问

    • 介绍一下你做过的项目?(必考,准备 60 秒版与 3 分钟版) 60 秒版:业务一句话 + 技术栈 + 你负责的核心模块 + 一个亮点(数据或决策)。3 分钟版按 STAR 展开,重点讲「为什么这么设计」。把本项目按此模板打磨成型。

    • 这个项目的技术难点是什么? 选「有备选方案对比」的点讲:如无状态认证的吊销难题(短有效期+刷新+黑名单)、事务与审计的隔离(REQUIRES_NEW)、归属隔离的权限模型。难点=权衡,不是堆技术名词。

    • 如果用户量涨十倍,你的系统瓶颈在哪? 标准思考链:先压测定位(DB 还是应用)→ 常见瓶颈是数据库(读多加缓存/读写分离,写多分库分表)→ 应用层加缓存与异步 → 再谈水平扩展(无状态已具备,会话已外置)。展示「有测量意识的架构观」而不是背名词。

    • 你如何保证代码质量? 分层测试策略 + 代码规范(校验/异常/日志统一)+ 关键路径 review + 上线前健康检查与灰度。把第 14、15 课的实践转述成个人工作流。

    自测三问

    1. 五个阶段的顺序是什么?为什么规范(统一响应/异常)要先于功能开发?
    2. 「删除任务 + 审计日志」的实验验证了什么传播行为?换成 REQUIRED 会怎样?
    3. 你的进阶第一步是学什么?为什么排在那一步?

    小结一句话

    把 15 课的零件按「骨架→规范→安全→质量→收尾」组装成完整项目,用自查十问预演面试,再沿「缓存→异步→工程化→微服务」的路线持续进阶——Spring Boot 入门到此毕业。

    延伸

    • spring.io 全部官方 Guides
    • Spring Boot 官方 Samples(GitHub)
    • 下一轨:进阶路线首站——Redis 缓存与 Spring Cache,给 TaskFlow 装上加速器。
    加载本节练习…
    ← 上一课Actuator 与健康检查