阶段五 · 课程学习指南
本阶段按「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 的每个『魔法』都有使用边界,学它的第一课,就是学会踩它所有的坑。」
引发思考:
- Spring Boot 的「自动配置」是怎么实现的?(@EnableAutoConfiguration + 条件装配)
- 依赖注入(DI)有哪些方式?构造器注入为什么更推荐?
@Transactional失效的 5 种常见场景你能列出来吗?- 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 生态一半的魔法来源。」 小白:「原来框架不是写代码,是『生成代码』。」
引发思考:
- 什么是循环依赖?Spring 怎么用三级缓存解决?(为什么三级而不是两级?)
- JDK 动态代理和 CGLIB 有什么区别?什么时候会用到 CGLIB?
- BeanPostProcessor 能干什么?举一个你见过的实际用途。
- 看完手写 MiniSpring(下一条),再回头看 Spring,你的认识有什么变化?
3. 手把手写一个 MiniSpring(选学,强烈推荐)
为什么学:这是「降维打击」的一课。用几百行代码从零实现一个迷你 Spring——IOC 容器、依赖注入、AOP、事务。写完你会发现:Spring 不再神秘,你甚至能读懂它的源码。
知识地图:
- 手写 IOC:扫描、注册、实例化 Bean
- 手写依赖注入(@Autowired / @Resource)
- 手写 AOP(代理 + 切面)
- 手写事务管理
- 手写 MVC(RequestMapping 路由分发)
经典案例:小白实现到「AOP」时崩溃了:切面怎么织入?老师引导:「先忘掉 Spring。你只需要问:如何在方法执行前后插入逻辑?答案:代理。JDK 代理生成一个『长得一样』的类,把原方法包一层,前面打日志、后面收尾——这就是 AOP 的全部秘密。你写了 30 行代理代码,就掌握了 Spring 最核心的机制。」
引发思考:
- 手写 IOC 时,Bean 的创建顺序你怎么控制?(依赖关系拓扑排序)
- 为什么手写之后,你再看 Spring 源码会觉得「哦,就这么回事」?
- 你能不能用「手写 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,这整条链路就全通了。」
引发思考:
- Web 服务器和 Web 框架的分界线在哪?
- Tomcat 为什么能同时处理成千上万个连接?(线程池 + NIO)
- 学完手写 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 秒超时——直接返回兜底结果『系统繁忙』,并把后续请求快速失败,防止雪崩。你看,微服务不是拆完就完事,而是拆完要解决『分布式带来的新问题』:怎么找服务、怎么容错、怎么追踪、怎么保证事务。」
引发思考:
- 什么规模才该拆微服务?10 个接口也拆,值吗?(先问:单体哪里痛了?)
- 注册中心挂了,服务还能互相调吗?为什么?(本地缓存 + 直连)
- 分布式事务为什么难?Seata 的 AT/TCC 模式各适合什么场景?
- 一个请求在微服务里转了一圈,你怎么知道它慢在哪?(链路追踪)
6. 微服务架构核心 20 讲(选学,微服务原理浓缩)
为什么学:160 讲偏实战,这 20 讲偏「核心原理」——把微服务的本质问题(服务治理、一致性、容错)讲透,适合快速建立微服务世界观或复习。
知识地图:
- 微服务的本质:分布式、自动化、去中心化
- 服务拆分、领域建模
- 服务发现与治理
- 一致性、幂等、分布式事务
- 容错设计、弹性伸缩
- 可观测性(日志/指标/追踪)
经典案例:小白问「为什么说微服务是『把复杂度从代码挪到了架构』?」老师:「单体时,一个方法调另一个方法,出问题看代码就行;微服务后,一个服务调另一个服务,出问题要跨网络、跨机器排查——你多了网络故障、数据不一致、版本兼容一整套新问题。微服务的本质,是用『运维复杂度』换『研发灵活度』。想清楚这笔账,你才配谈微服务。」
引发思考:
- 服务拆分的「领域边界」怎么划?按功能还是按业务域?(DDD 铺垫)
- 幂等设计是什么?为什么支付、下单场景必须有?
- 为什么说「可观测性是微服务的眼睛」?三支柱是哪三个?
7. Spring Cloud 微服务项目实战 / Dubbo 源码剖析与实战(选学,实战与源码)
为什么学:Spring Cloud 课带你完整搭一个企业级微服务项目(含认证、网关、消息、分布式事务);Dubbo 源码课带你剖析阿里系 RPC 框架的核心机制(服务暴露、注册、调用、负载均衡)。
知识地图(Spring Cloud 项目实战):
- 完整微服务项目:用户、订单、商品、支付服务
- 网关 + 鉴权 + 熔断 + 配置中心整合
- 分布式事务与消息最终一致性
- 部署上线
知识地图(Dubbo):
- RPC 原理:序列化、网络、动态代理
- 服务暴露与引用
- 注册中心与负载均衡
- 集群容错与降级
- 源码级剖析
经典案例:小白问「Spring Cloud 全家桶和 Dubbo 到底什么关系?」老师:「Dubbo 是 RPC 调用层(服务之间怎么调),Spring Cloud 是微服务全家桶(网关、配置、熔断全都有)。现在 Spring Cloud 也整合了 Dubbo/Feign 做调用。记住:RPC 解决『怎么调』,微服务框架解决『怎么治理』。别被技术名词绕晕。」
引发思考:
- RPC 和 HTTP 调用有什么区别?什么时候用 RPC、什么时候用 HTTP?
- Dubbo 为什么快?(长连接、序列化、直连)
- 看一遍 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 的探针配合,才能做到『发布不中断』。云原生不是把应用扔进容器,是一整套『面向生命周期』的设计。」
引发思考:
- Docker 和虚拟机有什么区别?为什么容器更轻?
- K8s 的「声明式」管理是什么意思?和传统运维有什么区别?
- 为什么说「云原生应用要先设计好可观测性和优雅停机」?
四、其他语言后端
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 全文检索——好的工程师,是在数据量小的时候就想好长大的样子。」
引发思考:
- Django 的「全栈」和 Spring Boot 的「全家桶」,设计哲学有什么异同?
- 直播的「低延迟」靠什么?和普通视频点播有什么区别?
- 如果你是 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 榜单常年靠前)。技术栈没有绝对好坏,只有『适不适合你所在的市场』。」
引发思考:
- .NET 的「泛型 + LINQ」为什么写起来很爽?和 Java 对比如何?
- 中间件(Middleware)管道模型和 Spring 的拦截器/过滤器有什么异同?
五、检索工程
11. 检索技术核心 20 讲(选学,搜索引擎底层)
为什么学:搜索引擎、站内搜索、推荐系统背后都是「检索技术」。这门课从倒排索引讲到排序模型,让你理解「搜索到底是怎么实现的」。
知识地图:
- 倒排索引构建与更新
- 布尔检索、短语查询
- 排序:TF-IDF、BM25、向量检索
- 索引压缩与缓存
- 分布式检索(分片、合并)
- 语义检索与向量数据库
经典案例:小白问「Google 怎么做到 0.1 秒搜完整个互联网?」老师:「不是搜完,是『查索引』。Google 早就把全网网页建成了倒排索引,搜索时只查索引,不碰网页本身。而且用分片 + 缓存 + 倒排压缩,把一次查询压到毫秒级。你学 ES 时用的倒排索引,就是这个思想的工业实现。」
引发思考:
- 倒排索引怎么处理「新增文档」?增量更新为什么难?
- BM25 和 TF-IDF 的区别是什么?为什么 BM25 更常用?
- 「向量检索」(语义搜索)和「关键词检索」各自适合什么场景?能结合吗?
本阶段小结
学完阶段五,你已经是一个「能干活的后端工程师」:
- 会用 Spring Boot(或 Django/.NET)搭完整后端;
- 懂 IOC、AOP、Bean 生命周期,能看懂框架源码;
- 知道微服务怎么拆、怎么治理、怎么部署到 K8s;
- 能做一个完整的、带缓存、带 MQ、可部署上线的项目。
从下一阶段开始,你将走上「架构师」之路——不是写更多代码,而是做更聪明的设计。
下一站:
06_阶段六_前端开发工程/或07_阶段七_架构与分布式/。