如何阅读
- 系统学习:点击「开始阅读」,先了解这本书的学习路径,再按章节顺序通读。
- 查找章节:点击「全书目录」,直接查看分章索引,跳到需要的小节。
- 选择起点:初学者先读入门卷,有基础的读实战卷,研究语言机制的读高级卷或系统编程卷。
这些电子书以网页章节形式在线阅读。每个系列围绕一个完整主题编排,技术书稿与创作手记按领域分别收录。
在线书架 / BOOKS
从第一章开始,把知识读成体系。
按领域与学习阶段整理的在线电子书与创作手记。覆盖 Rust、Lua、TypeScript、Python、Java(Spring Boot)、Go、AI Agent、MMO 服务器开发(Go 主线 + Java 21 双栈对照,四卷本 180 篇)、游戏开发(含 Cocos 四卷本与《游戏引擎实现原理》四卷本)与文学创作,从阅读指南进入,或按全书目录查找章节。
了解阅读方式4 部书稿
从所有权与借用,到工程实战与系统编程。
3 部书稿
从脚本基础,到语言机制与游戏业务。
2 部书稿
从客户端引擎,到服务端架构与完整项目。
4 部书稿
用 Go 从零实现一套能真跑、能压测、能跨服的 MMO 服务端 aegis,Java 21 作为双栈对照。
用 Go 从零实现 aegis 的网络底座:协议、KCP、会话、路由、定时器、Actor、同步模型与安全,直到能登录、能移动、能广播的最小服务器。
把玩法装进底座:实体运行时、AOI、战斗、背包、任务、社交、交易与匹配,把《晨曦大陆》做成单服可玩。
把单服推成集群:服务发现、RPC、网关集群、实例调度、跨服玩法、缓存、分库分表与分布式事务。
把服务端交付并长期运营好:压测、性能、可观测性、部署发布、配置热更、数据分析、GM 后台与容灾演练。
4 部书稿
从零手写 2D 运行时,到 Cocos Creator 3.8 交付产品,再到引擎内部与客户端联机。
手写 mini2d 运行时打通帧循环、渲染、物理与存档,每章对照 Cocos Creator 3.8。
用 Cocos Creator 3.8 交付《方块冲刺》,走到 H5 / 微信小游戏 / 原生三端上线。
深入渲染管线、Effect 体系与内存性能,学会读源码、裁剪引擎并评估升级。
从预测与和解到弱网降级,用可单测的纯逻辑实现《方块冲刺》双人竞速客户端。
4 部书稿
用 TypeScript 从零实现一个 3D 游戏引擎:内核、渲染、子系统与工具,直到工程化交付。
用 TypeScript 从零写出 helio 内核:内存、句柄、ECS、任务与反射,直到《微光岛》第一个能走动的方块。
从 RHI 三后端到帧图与后处理,把《微光岛》的小岛真正渲染出来。
资源管线、动画物理音频输入与脚本热重载,外加一套能编辑、能撤销、能存盘的编辑器。
构建、测试、性能、跨端与交付:把《微光岛》从能跑推到能发,并做跨引擎对照。
3 部书稿
按入门、实战、高级三步,建立类型与工程能力。
从基本类型、函数与泛型,到类型建模、模块和工程配置,以全栈项目收尾。
面向项目交付,覆盖测试、服务端与数据层、前端类型实践、API 契约及部署运维。
面向库与工具链作者,深入类型级编程、编译器 API、声明发布和运行时边界。
3 部书稿
从语言基础与工程交付,深入 CPython 与性能优化。
面向零基础读者,从数据结构与函数,到类型注解、并发异步、测试打包与应用项目。
从工程脚手架出发,实践 Web 服务、数据访问、后台任务、自动化与生产部署。
深入 CPython 对象模型、字节码、GC 与并发运行时,理解扩展机制和性能工程。
3 部书稿
从 Spring Boot 入门与工程实战,到框架内部机制与版本迁移。
面向零基础读者,从环境搭建与第一个接口,到 Web、数据访问、测试与完整项目。
从工程脚手架出发,实践 Web 服务、数据访问、缓存、消息与生产部署交付。
深入容器、自动配置、AOP、请求管线与事务机制,理解框架内部与 3.x 到 4.x 迁移。
4 部书稿
从语言入门到工程实战,再到高级特性与运行时原理。
3 部书稿
从零手写 Agent 引擎,到工程化服务,再到框架重写与生产化加固。
从零手写 Agent 引擎 minagent,把消息、工具、记忆、编排、评测到服务化逐章跑通。
把引擎装成可上线的研究助理服务,覆盖接口、数据、并发、可观测与部署交付。
用主流框架重写研究助理并剖析源码,补齐持久化、计算机使用、A2A 与生产化加固。
1 部书稿
一部长篇科幻小说的创作过程与长期写作经验。
这些电子书以网页章节形式在线阅读。每个系列围绕一个完整主题编排,技术书稿与创作手记按领域分别收录。
按书架顺序查看各系列的发布状态,展开分卷详情可查看每部书的篇数与目录。
目录篇仍为草稿,发布后开放阅读入口。
给 Task 加上 Complete() 与 Rename() 后,接收者的选择成了绕不开的问题。本节讲清值接收者与指针接收者的语义差异、方法集与接口满足规则、自动取址与不可寻址的坑、nil 指针接收者的安全性,并给出 TaskAPI 里每个方法的接收者决策依据。
结构体是 Go 组织数据的核心。本节把 TaskAPI 里的 Task 从散落字段提升为可初始化、可比较的值类型,讲清命名字段、三种字面量初始化写法、零值语义、值传递与指针传递的差别、字段对齐与可比较规则,并给出项目里 Task 的最终定义与常见初始化陷阱。
保留既有停止保护,将历史与回调加入共享循环,提供完整 Agent 文件和两轮离线演示,并验证失败轨迹与系统指令去重。
上节的 run() 只会跑到自然收敛,模型一卡住就束手无策。本节给循环装上五条止损线:无工具调用、达到 max_steps、stop_reason 为 max_tokens、工具连续失败、重复动作。我们用 AgentLoopError 把异常终止变成可诊断的数据,再用两个假模型分别制造死循环与原地打转,逐一验证每条止损线是否真的生效。
本节给 minagent 装上第一个 Agent 循环:run() 反复调用 model.complete,把 assistant 消息与工具结果追加进同一个消息列表,直到某一轮不再产生工具调用为止。我们用 FakeModel 跑通 (2+3)*4 的两步收敛,打印每一步的 Step 轨迹、最终回答与消息条数,并讨论这个朴素实现留下了哪些坑。
讲清 POST 为什么需要幂等键、幂等键的三种实现(唯一索引 / Redis 去重 / 状态机)各自的可靠性边界、乐观锁与 If-Match/ETag 的条件请求写法、并发写冲突用 409 还是 412 的取舍与重试语义,以及限流与防重各自解决什么问题。
GOMAXPROCS 该设几、channel 通信会不会因为核多而变慢,是调度层最常被问的两个问题。本节用 CPU 基准与 ping-pong 基准做核数扫描,给出「核数-吞吐」与「核数-通信延迟」两条真实曲线,再定位到 proc.go:schedule/findRunnable/wakep/stealWork。
runtime/trace 是逐事件记录,不是采样。本节用 go tool trace 的三个纯文本出口(-d=footprint 计数、-d=parsed 逐事件、-pprof 画像)从真实 trace 读出 goroutine 生命周期、STW/GC 阶段与阻塞归因,再定位到 runtime/trace.go:StartTrace 与 tracestatus.go:writeGoStatus。
容器里 Go 程序只用了限额一半的 CPU,是高频困惑。本节在真实 Docker 容器做矩阵实验:cgroup 限额 2/4/1.5 核时 GOMAXPROCS 各取多少,关掉 containermaxprocs 后吞吐如何变化;再定位到 runtime/cgroup_linux.go:defaultGOMAXPROCS 与 adjustCgroupGOMAXPROCS。
围绕借阅服务的列表接口,讲清 Pageable 与 Page/Slice 的取舍、count 查询的真实代价、偏移分页的深分页问题与 keyset 分页的写法、过滤参数的表达方式、排序字段白名单如何同时防注入与防全表扫描,以及分页元信息的响应信封该怎么定。
Green Tea GC 在 1.25 是可选的 GOEXPERIMENT,1.26 起成为基线默认;本节用各工具链的 buildcfg 源码钉死这一结论,并诚实报告本机微基准无法分离出它的独立收益。后半部分用一个真实受限 CPU 的 Docker 容器验证容器感知 GOMAXPROCS:--cpus=2 时 GOMAXPROCS 从 6 变成 2,关闭开关后恢复为 6。
同样的字符串存一万份,内存就白花一万份。Go 1.23 的 unique 包把重复值规范化为同一个 Handle,相等判断从逐字节比较退化成指针比较。本节实测同一字符串的 Handle 指针完全相同、结构体值也能规范化,并给出动态构造字符串场景下 200000 个值的真实内存对比。
并发测试里那些 time.Sleep(100*time.Millisecond) 既慢又脆。Go 1.25 的 testing/synctest 用假时钟把「等一秒」变成「瞬间推进」。本节实测假时钟跳过一小时、Wait 观察 goroutine 阻塞态、泄漏 goroutine 直接 panic,并给出 1.24 实验版到 1.25 正式版的 API 演进。
配置与密钥就位后,本节决定 ResearchCopilot 用哪个模型。我们实现一个 ModelRouter:按配置在真实 Anthropic 适配器与假模型之间切换,离线默认假模型(零凭据可跑);并让主模型失败时按链式顺序自动降级。我们用假模型真跑一次「主模型抛错 → 自动降级 → 请求仍然成功」的完整轨迹,并给出路由决策表。
上一节的 Settings 里还嵌着明文密码。本节给 ResearchCopilot 补上密钥治理:用 SecretStr 让密钥在打印、日志、序列化时自动脱敏,用 .env 与 .gitignore 配合完成本地注入,并在启动时对必需密钥做 fail-fast 检查。我们真跑两段代码展示脱敏效果与缺失报错,最后给出一份密钥清单表。
本节用 pydantic-settings 2.15.0 把 ResearchCopilot 散落的配置收成一个可校验的 Settings 对象,演示「默认值 → 配置文件 → 环境变量 → 显式参数」四级来源合并与 Field 校验。我们真跑两段代码:一段展示高层来源逐级覆盖低层,一段展示非法值被拒绝并给出清晰报错,并说明配置对象该如何注入服务。
改一个日志级别就重启整个服务,在生产上是不可接受的。本节给 TaskHub 实现配置热更新:用 SIGHUP 触发重载、用 atomic.Pointer 原子替换、校验失败时保留旧配置,并实测「合法变更生效、非法变更被拒且服务不中断」的完整行为,附校验规则设计与不该热更新的配置清单。
数据库密码、JWT 私钥、对象存储凭证一旦进了 git 历史或镜像层,就等于永久泄露。本节给 TaskHub 实现一个只认环境变量与权限受限文件的密钥加载器,实测 0600 文件放行、0644 文件拒绝、缺失报错的完整行为,并给出日志脱敏、密钥轮换与常见反模式清单。
同一个 TaskHub 二进制要跑在开发机、CI、预发、生产四种环境,靠改代码区分是灾难。本节给 TaskHub 建立四层配置优先级——默认值 < 配置文件 < 环境变量 < 命令行,用 YAML 文件加 os.LookupEnv 与 flag 实测每一层如何覆盖上一层,并给出环境变量命名与类型解析的工程约定。
本节讲解 NestJS 应用的两件「非业务」大事:配置如何按环境分层、用 schema 在启动时校验、并以类型安全的方式读取;生命周期钩子如何在模块与应用的启停节点执行初始化与清理,配合优雅关闭让进程在收到信号后体面退出。读完本节,你能让应用在配置错误时快速失败,也能保证关停时不丢连接、不漏任务。