阶段五 · 课程学习指南

本阶段按「Spring 使用 → Spring 原理 → 手写框架 → 微服务 → 云原生 → 其他语言 → 检索」组织。★ 为必学主干。


一、Spring 使用与原理

1. 玩转 Spring 全家桶 ★(第一门,先学会用)

为什么学:Spring 是 Java 后端的绝对主角,Spring Boot + Spring Cloud 全家桶覆盖了「Web、数据、安全、微服务」全部能力。这门课从零带你用 Spring Boot 搭建完整项目,是「会后端」的第一步。

知识地图:

  • Spring Boot 自动配置与起步依赖
  • Web 开发:Controller、参数校验、RESTful API
  • 数据访问:JdbcTemplate、MyBatis、Spring Data JPA
  • 事务管理:@Transactional 及失效场景
  • AOP 与拦截器、过滤器
  • 安全:Spring Security / JWT 登录鉴权
  • 测试:单元测试、集成测试、MockMvc
  • 部署:打包、Docker、配置管理

经典案例:小白写了 @Transactional 的接口,却发现数据没回滚。老师一眼看穿:「你在这个方法内部调了另一个 @Transactional 方法——自调用不走代理,注解失效。还有异常被 try-catch 吞了,事务管理器根本不知道出错了。」 小白:「注解还会失效?」 老师:「Spring 的每个『魔法』都有使用边界,学它的第一课,就是学会踩它所有的坑。」

引发思考:

  1. Spring Boot 的「自动配置」是怎么实现的?(@EnableAutoConfiguration + 条件装配)
  2. 依赖注入(DI)有哪些方式?构造器注入为什么更推荐?
  3. @Transactional 失效的 5 种常见场景你能列出来吗?
  4. RESTful API 设计,「资源」和「动作」怎么区分?GET/POST/PUT/DELETE 怎么用才对?

2. 小马哥 Spring 核心编程思想 / Spring AOP 编程思想(选学,原理深挖)

为什么学:Spring 用起来简单,是因为「思想」藏得深。这两门课讲透 IOC 容器、Bean 生命周期、AOP 动态代理——让你从「会用 Spring」升级为「懂 Spring」,面试问「Spring 原理」不再虚。

知识地图:

  • IoC 容器与 BeanFactory/ApplicationContext
  • Bean 的完整生命周期(实例化→属性填充→初始化→使用→销毁)
  • 循环依赖与三级缓存
  • AOP:代理模式、JDK 动态代理 vs CGLIB
  • Spring 中的设计模式(工厂、单例、模板、观察者……)
  • Spring 扩展点(BeanPostProcessor、ImportBeanDefinitionRegistrar)

经典案例:小白问「为什么 MyBatis 的 Mapper 接口不用写实现类就能用?」老师:「Spring 用动态代理在运行时生成了一个实现类——接口上的方法通过代理转发给 SQL 执行。你看,『接口 + 代理 + 约定』,这就是 Spring 生态一半的魔法来源。」 小白:「原来框架不是写代码,是『生成代码』。」

引发思考:

  1. 什么是循环依赖?Spring 怎么用三级缓存解决?(为什么三级而不是两级?)
  2. JDK 动态代理和 CGLIB 有什么区别?什么时候会用到 CGLIB?
  3. BeanPostProcessor 能干什么?举一个你见过的实际用途。
  4. 看完手写 MiniSpring(下一条),再回头看 Spring,你的认识有什么变化?

3. 手把手写一个 MiniSpring(选学,强烈推荐)

为什么学:这是「降维打击」的一课。用几百行代码从零实现一个迷你 Spring——IOC 容器、依赖注入、AOP、事务。写完你会发现:Spring 不再神秘,你甚至能读懂它的源码。

知识地图:

  • 手写 IOC:扫描、注册、实例化 Bean
  • 手写依赖注入(@Autowired / @Resource)
  • 手写 AOP(代理 + 切面)
  • 手写事务管理
  • 手写 MVC(RequestMapping 路由分发)

经典案例:小白实现到「AOP」时崩溃了:切面怎么织入?老师引导:「先忘掉 Spring。你只需要问:如何在方法执行前后插入逻辑?答案:代理。JDK 代理生成一个『长得一样』的类,把原方法包一层,前面打日志、后面收尾——这就是 AOP 的全部秘密。你写了 30 行代理代码,就掌握了 Spring 最核心的机制。」

引发思考:

  1. 手写 IOC 时,Bean 的创建顺序你怎么控制?(依赖关系拓扑排序)
  2. 为什么手写之后,你再看 Spring 源码会觉得「哦,就这么回事」?
  3. 你能不能用「手写 MiniSpring」的思路,去理解另一个框架(如 MyBatis)?

4. 手把手写一个 MiniTomcat(选学,Web 服务器本质)

为什么学:Tomcat 是 Java Web 的「容器」——你的 Servlet 跑在它里面。手写一个 MiniTomcat,你就理解 HTTP 请求是怎么进到你的 Controller 的,理解「Web 服务器 = 网络 + 协议 + 容器」。

知识��图:

  • HTTP 服务器原理:Socket 监听、解析请求
  • Servlet 规范与容器模型
  • 连接器(Connector)与容器(Container)
  • 类加载器与热部署
  • 线程池与请求处理模型

经典案例:小白问「我在浏览器输入地址,请求是怎么找到我的 Controller 的?」老师用 MiniTomcat 演示:「Tomcat 先监听 8080 端口,收到 HTTP 请求后解析出 URL,按映射规则找到对应的 Servlet,调它的 service 方法。Spring MVC 只是在 Servlet 之上又做了一层路由。你写一个 500 行的 MiniTomcat,这整条链路就全通了。」

引发思考:

  1. Web 服务器和 Web 框架的分界线在哪?
  2. Tomcat 为什么能同时处理成千上万个连接?(线程池 + NIO)
  3. 学完手写 Tomcat,你能解释「怎么给一个 Servlet 容器做性能优化」吗?

二、微服务

5. 微服务架构实战 160 讲 ★(必学,微服务全景)

为什么学:这是极客时间最全面的微服务实战课:从「单体为什么拆」到「服务拆分、注册发现、网关、熔断、配置中心、链路追踪、容器化」,160 讲带你完整落地一个微服务系统。

知识地图:

  • 微服务概念与拆分方法论
  • 服务注册与发现(Nacos/Eureka)
  • API 网关(Gateway/Zuul)
  • 负载均衡与调用(OpenFeign/Ribbon)
  • 熔断降级(Sentinel/Hystrix)
  • 配置中心(Nacos Config/Spring Cloud Config)
  • 分布式事务(Seata)
  • 链路追踪(SkyWalking/Zipkin)
  • 容器化与 CI/CD

经典案例:小白问「微服务都拆开了,一个请求要调 5 个服务,一个挂了怎么办?」老师:「熔断降级。订单服务挂了,不能让用户等 5 秒超时——直接返回兜底结果『系统繁忙』,并把后续请求快速失败,防止雪崩。你看,微服务不是拆完就完事,而是拆完要解决『分布式带来的新问题』:怎么找服务、怎么容错、怎么追踪、怎么保证事务。」

引发思考:

  1. 什么规模才该拆微服务?10 个接口也拆,值吗?(先问:单体哪里痛了?)
  2. 注册中心挂了,服务还能互相调吗?为什么?(本地缓存 + 直连)
  3. 分布式事务为什么难?Seata 的 AT/TCC 模式各适合什么场景?
  4. 一个请求在微服务里转了一圈,你怎么知道它慢在哪?(链路追踪)

6. 微服务架构核心 20 讲(选学,微服务原理浓缩)

为什么学:160 讲偏实战,这 20 讲偏「核心原理」——把微服务的本质问题(服务治理、一致性、容错)讲透,适合快速建立微服务世界观或复习。

知识地图:

  • 微服务的本质:分布式、自动化、去中心化
  • 服务拆分、领域建模
  • 服务发现与治理
  • 一致性、幂等、分布式事务
  • 容错设计、弹性伸缩
  • 可观测性(日志/指标/追踪)

经典案例:小白问「为什么说微服务是『把复杂度从代码挪到了架构』?」老师:「单体时,一个方法调另一个方法,出问题看代码就行;微服务后,一个服务调另一个服务,出问题要跨网络、跨机器排查——你多了网络故障、数据不一致、版本兼容一整套新问题。微服务的本质,是用『运维复杂度』换『研发灵活度』。想清楚这笔账,你才配谈微服务。」

引发思考:

  1. 服务拆分的「领域边界」怎么划?按功能还是按业务域?(DDD 铺垫)
  2. 幂等设计是什么?为什么支付、下单场景必须有?
  3. 为什么说「可观测性是微服务的眼睛」?三支柱是哪三个?

7. Spring Cloud 微服务项目实战 / Dubbo 源码剖析与实战(选学,实战与源码)

为什么学:Spring Cloud 课带你完整搭一个企业级微服务项目(含认证、网关、消息、分布式事务);Dubbo 源码课带你剖析阿里系 RPC 框架的核心机制(服务暴露、注册、调用、负载均衡)。

知识地图(Spring Cloud 项目实战):

  • 完整微服务项目:用户、订单、商品、支付服务
  • 网关 + 鉴权 + 熔断 + 配置中心整合
  • 分布式事务与消息最终一致性
  • 部署上线

知识地图(Dubbo):

  • RPC 原理:序列化、网络、动态代理
  • 服务暴露与引用
  • 注册中心与负载均衡
  • 集群容错与降级
  • 源码级剖析

经典案例:小白问「Spring Cloud 全家桶和 Dubbo 到底什么关系?」老师:「Dubbo 是 RPC 调用层(服务之间怎么调),Spring Cloud 是微服务全家桶(网关、配置、熔断全都有)。现在 Spring Cloud 也整合了 Dubbo/Feign 做调用。记住:RPC 解决『怎么调』,微服务框架解决『怎么治理』。别被技术名词绕晕。」

引发思考:

  1. RPC 和 HTTP 调用有什么区别?什么时候用 RPC、什么时候用 HTTP?
  2. Dubbo 为什么快?(长连接、序列化、直连)
  3. 看一遍 Dubbo 的服务暴露源码,你能画出它的完整流程吗?

三、云原生后端

8. Spring Boot 与 Kubernetes 云原生微服务实战(选学,进阶方向)

为什么学:微服务时代,「容器化 + K8s」是部署的事实标准。这门课教你:把 Spring Boot 应用容器化、部署到 K8s、配置优雅上下线、弹性伸缩、滚动发布。

知识地图:

  • Docker 镜像与 Spring Boot 打包
  • K8s 核心概念(Pod、Deployment、Service、ConfigMap)
  • 应用部署与滚动发布
  • 健康检查、优雅停机、弹性伸缩(HPA)
  • 配置管理与密钥
  • 日志与监控接入

经典案例:小白问「为什么我本地好好的,上 K8s 就 502?」老师:「K8s 有个『优雅下线』问题——Pod 被删时,K8s 先停流量再杀进程,但你的应用如果没处理『服务停止前把存量请求处理完』,正在处理的请求就断了。Spring Boot 2.3+ 的优雅停机配置 + K8s 的探针配合,才能做到『发布不中断』。云原生不是把应用扔进容器,是一整套『面向生命周期』的设计。」

引发思考:

  1. Docker 和虚拟机有什么区别?为什么容器更轻?
  2. K8s 的「声明式」管理是什么意思?和传统运维有什么区别?
  3. 为什么说「云原生应用要先设计好可观测性和优雅停机」?

四、其他语言后端

9. Django 快速开发实战 / Python 实战·从0到1搭建直播视频平台(选学,Python 后端)

为什么学:如果你主攻 Python,Django 是全栈后端框架之王(自带 ORM、Admin、认证)。直播平台实战课则是一个完整的 Python 项目案例——从零搭一个带视频推拉流、直播互动的平台。

知识地图(Django):

  • MTV 架构与 URL 路由
  • ORM 与数据库操作
  • Admin 后台、认证授权
  • 模板与 REST(DRF)
  • 部署

知识地图(直播平台):

  • 视频推流/拉流原理(RTMP/HLS)
  • 直播房间、弹幕、礼物
  • 高并发下的 Python 后端优化
  • 完整项目部署

经典案例:小白用 Django 做了个博客,老师让他加「全文搜索」。小白想在数据库 LIKE,老师说:「等你文章到 10 万篇,LIKE ‘%关键词%’ 就是灾难。你去搜一下 Elasticsearch 或者 Django 的 Postgres 全文检索——好的工程师,是在数据量小的时候就想好长大的样子。」

引发思考:

  1. Django 的「全栈」和 Spring Boot 的「全家桶」,设计哲学有什么异同?
  2. 直播的「低延迟」靠什么?和普通视频点播有什么区别?
  3. 如果你是 Python 后端,什么时候该转 Go?转的理由是什么?

10. .NET Core 开发实战(选学,微软系后端)

为什么学:如果你身处微软系技术栈(或公司用 C#),.NET Core 是跨平台后端的完整方案。这门课从 Web API 到 EF Core、从依赖注入到部署,一条龙讲完。

知识地图:

  • .NET Core 与 C# 基础
  • ASP.NET Core Web API
  • EF Core 与数据库
  • 依赖注入、中间件、认证
  • 部署(Docker / IIS / Linux)

经典案例:小白问「.NET 在国内是不是没前途?」老师:「看你公司用什么。制造业、金融、传统企业很多用 .NET,而且 .NET 6+ 跨平台后性能很强(TechEmpower 榜单常年靠前)。技术栈没有绝对好坏,只有『适不适合你所在的市场』。」

引发思考:

  1. .NET 的「泛型 + LINQ」为什么写起来很爽?和 Java 对比如何?
  2. 中间件(Middleware)管道模型和 Spring 的拦截器/过滤器有什么异同?

五、检索工程

11. 检索技术核心 20 讲(选学,搜索引擎底层)

为什么学:搜索引擎、站内搜索、推荐系统背后都是「检索技术」。这门课从倒排索引讲到排序模型,让你理解「搜索到底是怎么实现的」。

知识地图:

  • 倒排索引构建与更新
  • 布尔检索、短语查询
  • 排序:TF-IDF、BM25、向量检索
  • 索引压缩与缓存
  • 分布式检索(分片、合并)
  • 语义检索与向量数据库

经典案例:小白问「Google 怎么做到 0.1 秒搜完整个互联网?」老师:「不是搜完,是『查索引』。Google 早就把全网网页建成了倒排索引,搜索时只查索引,不碰网页本身。而且用分片 + 缓存 + 倒排压缩,把一次查询压到毫秒级。你学 ES 时用的倒排索引,就是这个思想的工业实现。」

引发思考:

  1. 倒排索引怎么处理「新增文档」?增量更新为什么难?
  2. BM25 和 TF-IDF 的区别是什么?为什么 BM25 更常用?
  3. 「向量检索」(语义搜索)和「关键词检索」各自适合什么场景?能结合吗?

本阶段小结

学完阶段五,你已经是一个「能干活的后端工程师」:

  • 会用 Spring Boot(或 Django/.NET)搭完整后端;
  • 懂 IOC、AOP、Bean 生命周期,能看懂框架源码;
  • 知道微服务怎么拆、怎么治理、怎么部署到 K8s;
  • 能做一个完整的、带缓存、带 MQ、可部署上线的项目。

从下一阶段开始,你将走上「架构师」之路——不是写更多代码,而是做更聪明的设计。

下一站:06_阶段六_前端开发工程/ 或 07_阶段七_架构与分布式/。