Skip to content

后端工程师路线

目标:从会用一门语言,到能设计、开发、上线并演进一个真实业务系统。这份路线把本站已收录的后端笔记串成一条可执行主线——不是罗列知识点,而是回答「每个阶段学什么、做到什么程度算过关、拿什么项目验收」。

建议用法:每到一个阶段,先读本页对应章节 → 按链接进站内文档学习 → 完成该阶段的「练习与验收」→ 在过程记录里留一篇学习日志。路线建议自建一个贯穿全程的里程碑项目(下文用「记账服务」举例,也可换成链接收藏、书签、订阅聚合等),各阶段在它之上做增量改造,最终它就是简历上可演示、可讲解的作品。

全景与学习策略

后端工程师的日常问题可以归纳为三类:把业务正确地落到数据上把服务安全稳定地跑在生产把系统扩展到扛得住增长。路线按这三类能力排序,中间穿插工程与架构思维:

阶段主题里程碑产出建议周期(每天 2 小时)说明
阶段一一门后端语言 + 网络基础记账 API v0:接口骨架 + 校验 + 测试 + 日志2~3 个月主线选型后深入,别贪多
阶段二数据库与缓存记账 API v1:数据版(事务 / 索引 / 分页 / 缓存)2~3 个月数据正确性是后端的第一责任
阶段三可上生产:鉴权、容器、质量记账 API v2:生产版(认证 + 容器化 + CI + 可观测)2 个月「能跑」与「能上线维护」的分水岭
阶段四规模化与架构记账系统演进设计报告(容量估算 + MQ / 微服务取舍)3~4 个月,之后持续从单机服务走向分布式取舍

三条贯穿始终的策略:

  • 产出型学习:每阶段必须有可展示、可运行、可被追问的产出(接口、测试、部署 URL、设计报告),杜绝「看教程多过写代码」;
  • 文档闭环:每学一个主题,回到本站对应文档做一次整理/补注——尤其把你实测到的数据(索引提速、压测 QPS、优雅退出耗时)回填到对应页面,让笔记长出你自己的证据;
  • 留痕复盘:阶段结束在过程记录写日志,用复盘模板沉淀「学会了什么、卡在哪、下次怎么改」。

阶段一:一门后端语言 + 网络基础

本阶段目标:不依赖脚手架和教程,能独立设计并实现一个带 REST 接口、参数校验、统一错误处理、核心测试与结构日志的服务,能讲清一次 HTTP 请求从网络到业务代码再返回的完整路径。

主线语言选择

只选一条主线深挖到「能交付项目」,不要同时并行三门语言。本站对三条主流路线都有完整后端笔记,语言层也有对应收录:

维度Node.js / NestJSJava / Spring BootGo
站内后端文档Node.js / NestJS:事件循环与微任务实测、libuv 线程池、流与背压、Express vs Fastify 压测、cluster、NestJS 模块化Spring Boot:IoC / DI、MVC、JPA / MyBatis 双写实测、Spring Security 过滤链实测Go:net/http 高并发、context 取消、错误处理、pprof 剖析、Gin
语言层伴学JavaScript + TypeScript站内暂无 Java 语言页,以 Spring Boot 文档 + 官方资料为主Go(语言):语法、切片与 map、并发原语
运行模型单线程事件循环 + 异步 I/O,注意阻塞点JVM + 线程池 + 字节码goroutine 轻量并发,goroutine-per-connection
适合场景业务快速迭代、与前端同栈全栈企业级应用、重 MVC / 数据访问生态网关、中间件、云原生、高吞吐服务

决策建议:想前后端通吃、快速出活选 Node + TypeScript;目标企业级 Java 技术栈选 Spring Boot;偏爱简单部署与高并发、愿意学新语言选 Go。犹豫不决时用语言对比把 Node / Go / Java 的异同摊开看再定。语言是工具,本阶段真正要沉淀的是 HTTP、服务端基建与调试能力,这些换语言也能迁移。

知识地图

  • [ ] HTTP 与 REST:方法 / 状态码语义、请求与响应结构、REST 资源设计(名词化路径、错误体结构、版本化)
  • [ ] 网络常识:TCP 与连接、TLS / HTTPS 握手、DNS、Cookie 与同源策略(不需要精通,但要能解释「请求怎么到达你的进程」)
  • [ ] 主线语言运行原理:事件循环与异步(Node)/ 线程与内存(Java)/ goroutine 与 channel(Go)——这是与「只会框架」拉开差距的第一道分水岭
  • [ ] 服务端基建:路由、中间件 / 拦截器、参数校验、统一异常与错误结构、结构化日志、配置管理(环境变量)
  • [ ] 工程习惯:Git 工作流、包管理、依赖锁定、测试起步(至少覆盖核心业务逻辑)、代码格式化与 lint
  • [ ] 调试与排错:断点调试、curl 与接口调试工具、看日志定位问题

站内文档闭环

阶段一不要读:鉴权认证、微服务、系统设计——这些属于三、四阶段,提前读只会制造焦虑与「技术栈焦虑性囤积」。

练习与验收

  1. 三个小练习:写一个带超时的 HTTP 调用重试封装;写一个统计请求耗时的日志中间件;为一个文件上传接口实现大小与类型校验;
  2. 里程碑项目:记账 API v0——账户 / 账单 / 分类三类资源,提供增删改查接口,含参数校验、统一错误结构、请求日志、核心 service 的单元测试;能 curl 跑通完整流程;
  3. 写一个健康检查接口/health),这是所有后续阶段的地基;
  4. 给项目写好 README:启动方式、接口清单、目录结构。

验收标准:能脱稿讲清「curl 发请求后,从 TCP 连接、路由匹配、中间件、业务逻辑到响应返回」经过了哪些层、每层做了什么;能解释主线语言的并发/事件模型里哪些操作会阻塞、为什么;不依赖教程也能为项目新增一个带校验的接口。

常见误区:只抄 CRUD 教程,跑通即「会了」,不写测试、不补错误处理;跳过 HTTP 与网络基础直接钻进框架特性;三门语言各学两星期然后全忘;把「会用框架」当成「会后端」——部署、错误处理、日志与性能意识才是后端的真正门槛。

阶段二:数据库与缓存

本阶段目标:让业务数据正确、安全、高效地落地——会用事务保证一致性、会用索引消除慢查询、会在读多写少处用缓存提速,并能解释每一条 SQL 与每一个缓存键背后的取舍。

知识地图

  • [ ] 关系建模:范式与反范式、主键 / 外键 / 索引设计、状态机与枚举建模、软删 vs 硬删、schema 版本化迁移
  • [ ] SQL 与数据访问:连接 / 聚合 / 子查询 / 窗口函数、参数化防注入;ORM 与原生 SQL 的边界(什么时候 ORM 会坑你)
  • [ ] 索引原理:B+ 树为何是默认、最左前缀、覆盖索引与回表、索引失效写法、用执行计划读慢查询
  • [ ] 事务:ACID、四种隔离级别与三类读问题、事务边界纪律(别在事务里做外部 I/O)、锁与死锁的直觉
  • [ ] 缓存:识别读多写少热点、Cache Aside 与一致性、穿透 / 击穿 / 雪崩、本地缓存 vs 分布式缓存
  • [ ] NoSQL 认知:键值 / 文档 / 宽列 / 时序各自的适用场景(选型补充,不是替代关系型)

站内文档闭环

  • 数据库:B+ 树选择论证、索引提速 210x 实测、最左前缀四种情况、深分页 58x 与游标N+1 74.7x 实测、ACID / MVCC / 隔离级别、慢 SQL 排查四步、分库分表与不停机迁移五步
  • 缓存:Redis 九种数据结构场景、淘汰算法命中率实测、穿透(布隆过滤器)/ 击穿(单飞)/ 雪崩(TTL 抖动)的实测解法、分布式锁与误删时间线、集群与持久化选型
  • 主线后端页中与数据访问相关的章节(ORM / 事务 / 连接池)

页内的实测都有可复现思路与版本标注(如 SQLite 3.32.2 + 10 万行),建议仿照建一套自己的数据集复现并记录,把结果写进过程记录

练习与验收

  1. 为 v0 设计 schema(账户、账单、分类及关系),写版本化迁移脚本;对列表类查询写两条慢 SQL,用执行计划分析并优化,记录前后耗时;
  2. 用事务实现「新增账单 + 更新账户余额」的一致性操作,写测试验证任一步失败会整体回滚;
  3. 为「账单列表(最近一月)」这个读热点加缓存(Cache Aside),设计删除 / 更新时的缓存失效策略,并说明一致性取舍;参考缓存的三问题解法自查你的方案;
  4. 里程碑项目:记账 API v1——完整数据模型 + 事务 + 合理索引 + 游标/深分页 + 缓存接口 + 一份慢查询自查清单。

验收标准:能画出表关系图并为每张表的关键索引给出理由;能解释「这个查询为什么没走索引 / 走了全表扫」;能说清当前缓存方案在什么场景下可能读到旧数据、代价与对策是什么;一笔涉及余额变动的请求在并发下不会错账。

常见误区:无脑给所有字段加索引(写放大与空间成本,见数据库实测);ORM 产生 N+1 而不自知;事务里做网络调用把连接占满;把缓存当作数据库、在一致性敏感数据上拍脑袋套缓存;项目刚起步就盘算分库分表——先优化,再拆

阶段三:可上生产:鉴权、容器与质量

本阶段目标:把「本机能跑」变成「上线可维护」——认证与授权、容器化部署、CI 与回滚、可观测与安全基线。这是从「写代码的」到「交付系统的」的分水岭。

知识地图

  • [ ] 认证与授权:Session-Cookie vs JWT 取舍、密码哈希存储(别用裸哈希)、OAuth 2.0 / OIDC 基本角色、RBAC / ABAC、越权(IDOR)防线
  • [ ] 容器与部署:Dockerfile 多阶段构建与分层缓存、镜像瘦身、.dockerignore、docker-compose 本地编排(含健康依赖)、进程信号与优雅退出、五种发布策略、CI/CD 流水线
  • [ ] Kubernetes 基础认知(不必精通):核心对象模型、Deployment / HPA、三类探针、配置与密钥(12-Factor 配置外置)
  • [ ] 可观测与质量:结构化日志、健康检查、指标与告警、链路追踪;测试分层(单元 / 集成 / 端到端)与 CI 门禁
  • [ ] 安全基线:注入防护、越权与敏感信息泄漏、依赖漏洞扫描、密钥管理红线

站内文档闭环

  • 鉴权认证:四概念边界、Session vs JWT、JWT 验签实测与无状态三麻烦、OAuth 授权码 + PKCE 时序、密码哈希实测(argon2id / bcrypt / scrypt)、刷新令牌轮换、RBAC / ABAC 与 IDOR 红线
  • 容器与部署:namespace / cgroup / UnionFS、多阶段构建 8 条实践、优雅退出 Node 实测(默认 13ms 中断 vs 优雅 +714ms 排空)、terminationGracePeriod 与 preStop、发布策略与配置密钥五原则
  • 数据库缓存页内的「检查清单」上生产前逐条过
  • 后端技术领域目录查漏补缺

练习与验收

  1. 为 v1 加注册 / 登录:密码哈希存储 + 令牌签发;为「删除账单」「查看他人账单」类接口做越权修复(先读鉴权认证的 IDOR 一节再动手);
  2. 写 Dockerfile + docker-compose 编排(应用 + 数据库 + 缓存),本地一键起;做一次优雅退出验证:SIGTERM 期间发起慢请求,确认处理完才退出(部署页有完整实测方法);
  3. 搭 CI:push 自动跑测试与 lint、构建镜像;为生产暴露健康检查并被编排系统感知;
  4. 里程碑项目:记账 API v2——带认证授权、容器化、CI、结构化日志与健康检查;README 写清「如何部署、如何回滚、密钥如何注入」。

验收标准:能画出「一次带鉴权的请求从网关/负载均衡到业务再到数据库,中间每一层超时、重试、鉴权、日志发生在哪里」的链路图;知道镜像分层缓存与 .dockerignore 的意义;完成过一次发布 + 回滚演练并讲得出过程。

常见误区:数据库口令与密钥进代码库或镜像层(部署页的配置与密钥五原则就是为此而写);Dockerfile 单层塞全部依赖,改动一行全量重建;进程不响应 SIGTERM,发布拖尾直至强杀(优雅退出实测页命中);只做「登录校验」不做「授权」——IDOR 是最常见的高危漏洞;日志把密码、令牌、身份证号原样打全。

阶段四:规模化与架构

本阶段目标:系统要扛量、解耦、演进时,能给出有数字支撑的取舍方案,而不是盲堆中间件。核心能力:容量估算、消息解耦、分布式一致性取舍、微服务边界、系统设计表达。

知识地图

  • [ ] 扩展基础:无状态化设计、水平扩展、连接池、读写分离、限流与降级
  • [ ] 消息队列:该不该用 MQ 的判断、投递语义(at-most-once / at-least-once / exactly-once)、幂等、顺序性、重试与死信
  • [ ] 微服务:单体优先的判断信号、按业务能力拆分 vs 三种反模式、注册发现 / 网关 / BFF、熔断与舱壁、分布式事务取舍(Saga / 本地消息表 / 最大努力通知)
  • [ ] 分布式基础:CAP / PACELC / BASE、一致性哈希、分布式锁与幂等键、ID 生成
  • [ ] 系统设计方法:五步方法论、容量估算速查、缓存与存储选型、高可用算术

站内文档闭环

  • 消息队列:该用与不该用判断表、Kafka vs RabbitMQ 七维差异、幂等实测(30 条重投不再重复扣款)、顺序性实测、死信与毒丸、削峰实测(1000 突发全成功 vs 无队列失败 892)
  • 微服务:单体优先与三种反模式、注册发现与网关、熔断状态机实测限流四算法实测、可观测三支柱、契约与灰度
  • 系统设计:五步法与估算表、一致性哈希虚拟节点实测短链容量估算实战(可作为你的设计报告范文)、CAP / 六种分布式事务方案、雪花 ID 实测、秒杀五层拦截、高可用算术
  • 复习:数据库的分库分表与不停机迁移、容器与部署的发布策略
  • 进阶底层:语言模块 Rust已收录(后端服务视角 Rust / C++ 页为占位待规划,可从语言层起步)

练习与验收

  1. 给记账业务写一份演进设计报告:假设用户量与账单量放大一个数量级,做容量估算(存储、QPS、带宽),指出最先要替换或解耦的部分,并给出缓存 / 索引 / MQ / 分库的取舍论证——系统设计的短链实战是现成范文;
  2. 把一条慢的同步链路(如「账单批量导入 + 站内通知」)改成消息异步削峰,并为消费端落地幂等(用重复投递验证只生效一次,参照消息队列实测);
  3. 复现一次站内实测:一致性哈希虚拟节点、雪花 ID 同毫秒单调性(各页均有思路与版本标注),把数据写进过程记录
  4. 挑一个系统(短链 / Feed / 秒杀 / 网约车)做 30 分钟口头架构题,按「需求澄清 → 估算 → 核心设计 → 瓶颈与取舍」讲一遍。

验收标准:方案里的每个结论都有估算或取舍依据,而非形容词;说得清「这里为什么不能只用缓存 / 这个操作为什么必须幂等 / 为什么先单机再微服务」;线上问题知道从日志 → 指标 → 链路三层下手的顺序。

常见误区:单体还没做扎实就上微服务(微服务的单体优先就是为劝退这类冲动);MQ 解耦引入后忘记幂等,消息重投造成重复扣款;硬上 2PC 而非选 Saga / 本地消息表;只谈功能不谈容量、风险与回滚;架构评审被追问取舍时露馅——多练系统设计的口头题。

跨路线协同

后端工程师不必只守着服务端,交叉点往往是竞争力:

  • 接前端做全栈:Node + TypeScript 一条线打通前后端——前端路线阶段二之后可直接衔接本路线阶段二(数据与接口),前端工程师路线的「全栈与内容工程」方向与本路线天然互补;
  • 转 AI 应用底座:LLM 应用大量需要后端能力——推理服务部署、RAG 的数据管线与向量库、Agent 的工具接口与鉴权网关。用后端积累的网关、限流、缓存、可观测能力去接 AI 工程化RAG 与 Agent(向量库选型、服务化)是低摩擦路径;
  • 深潜语言与运行时:对性能与底层有兴趣,语言模块 Rust编译原理入门(帮你读懂运行时与 GC)可作阶段四之后的延伸。

常见误区与放弃点自检

对照检查自己是否正在踩坑(每条都与本站踩坑记录的高频主题对得上):

  • [ ] 只跟教程做 CRUD,不写测试、不部署、不复盘,「项目永远在本地文件夹」;
  • [ ] 一门语言没学透就换下一门,浏览器里躺着五门语言的 hello world;
  • [ ] 把数据库当存储桶:无索引、无事务、SQL 拼接、不读执行计划;
  • [ ] 项目没有流量压力就先上微服务 / MQ / 分布式锁全家桶;
  • [ ] 出问题只会「看日志 + 重启」,不会用指标与链路定位,也不写事故复盘;
  • [ ] 密钥、口令、令牌写进代码或镜像层,直到被扫描工具点名(鉴权部署两页的安全检查清单上线前逐条过)。

附录:路线 × 本站文档速查

学习主题站内文档建议阶段
主线语言与 HTTP 服务Node.js / NestJSSpring BootGo 三选一
语言层伴学JavaScriptTypeScriptGo语言对比一、四
数据库与 SQL 优化数据库
缓存缓存二、三
鉴权认证鉴权认证三(含 IDOR 修复)
容器与部署容器与部署
消息队列消息队列
微服务微服务
系统设计系统设计
运行时与底层编译原理入门Rust(语言)一、四
Rust / C++ 服务端视角后端 Rust后端 C++(占位待规划,可从语言层起步)
过程留痕过程记录踩坑记录项目复盘全程

写作规范请参阅学习路径总览

基于 VitePress 构建 · 内容以知识共享方式沉淀