如何阅读
- 系统学习:点击「开始阅读」,先了解这本书的学习路径,再按章节顺序通读。
- 查找章节:点击「全书目录」,直接查看分章索引,跳到需要的小节。
- 选择起点:初学者先读入门卷,有基础的读实战卷,研究语言机制的读高级卷或系统编程卷。
这些电子书以网页章节形式在线阅读。每个系列围绕一个完整主题编排,技术书稿与创作手记按领域分别收录。
在线书架 / 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 部书稿
一部长篇科幻小说的创作过程与长期写作经验。
这些电子书以网页章节形式在线阅读。每个系列围绕一个完整主题编排,技术书稿与创作手记按领域分别收录。
按书架顺序查看各系列的发布状态,展开分卷详情可查看每部书的篇数与目录。
目录篇仍为草稿,发布后开放阅读入口。
本节介绍如何在运行时检查数据形状:用 Zod 声明 schema,用 z.infer 让编译期类型自动推导,告别「类型与校验规则各写一份」的漂移。内容覆盖 parse 与 safeParse 的取舍、issues 结构、optional/default/transform/refine 等修饰、z.input 与 z.output 的差异、判别联合与递归 schema,以及常见坑。
本节从类型擦除讲起:TypeScript 编译时会把 interface、类型注解与断言全部抹掉,只留下 JavaScript,于是「编译通过」并不等于「运行时安全」。我们会逐一拆开真实项目里最容易出事的几类盲区,包括 JSON.parse 后的断言、越界索引、Object.keys 的字符串键、结构化类型的多余属性、非空断言与异步回调,并给出信任边界清单,帮你判断校验该加在哪里。
从「我什么都没配,Tomcat 怎么就起来了」这个疑问出发,逐层拆开 @SpringBootApplication 背后的三个注解:@SpringBootConfiguration、@EnableAutoConfiguration 与 @ComponentScan,用等价代码验证,并给出包扫描与 exclude 的常见误用与排查方法。
同步库直接写进 async 会阻塞整个事件循环。本节用本地服务实测 requests 串行、to_thread 与 httpx.AsyncClient 的耗时差,讲连接池、contextvars、async for 与 async with,并盘点假异步:忘记 await、循环里串行 await、create_task 丢引用,最后说明何时不该用异步。
create_task 立刻调度、gather 要 await 才跑。本节对比 gather 与 TaskGroup 的错误处理:gather 不取消兄弟任务,TaskGroup 会取消并用 ExceptionGroup 汇总;再讲 asyncio.timeout、shield、CancelledError 的 BaseException 语义、Queue、Semaphore 与 Runner。
协程函数调用后只返回一个协程对象,不 await 就静默不执行。本节从 async def 与 await 的语义讲起,用真实计时证明单线程并发,再用 time.sleep 与 asyncio.sleep 的对比说明阻塞调用如何卡死事件循环,并厘清 get_running_loop 与 get_event_loop 的差异。
为《孢子三部曲》第一轮重写建立每周复盘机制,控制范围、记录变更、防止任务膨胀和旧稿再次拖住正文。
用 mvn package 把 demo 打成可执行 jar,拆解 BOOT-INF/classes、BOOT-INF/lib 与 JarLauncher 的内部结构,讲清 4.0 移除可执行 jar 启动脚本、4.1 用 tools 取代 layertools 两条变更,并说明分层 jar 与 Docker 镜像的关系。
对比传统 war 部署与内嵌 Tomcat,拆解 SpringApplication.run() 的环境准备、容器创建、Bean 加载与服务器启动四步,逐行解读 4.1.1 真实启动日志,并给出端口占用、Bean 创建失败、依赖缺失三类常见启动问题的日志特征与排查方法。
本节讲 TypeScript 最易被误用的一项能力:不新建声明,而是往已有类型上「长」成员。先讲清声明合并的规则,再区分在脚本里 declare module 与在模块里 declare module 这两个语义相反的写法,演示给 Request 加 user、给 process.env 加字段等真实场景,并列出冲突报错与规避手法。读完你能安全地做全局增强。
本节讲的是 .d.ts 的实战编写:当一个库既没有自带类型、社区也没有 @types 包时,如何从 JavaScript 源码、README 与运行时行为反推出准确的签名。内容覆盖三种粒度的声明策略、函数重载与可选参数、类与命名空间的合并写法、CommonJS 的 export = 与 import =、资源文件的通配声明,以及用类型测试保证声明不撒谎。读完你能为任意内部老库补上可用的类型。
本节从类型擦除讲起,解释为什么编译产物 .js 里不剩任何类型信息、消费方却依然能获得完整补全,从而引出 .d.ts 声明文件。我们会拆开 declare 的每一种用法,讲清「脚本」与「模块」在声明文件里的分水岭,梳理 @types 的查找顺序、typeRoots 与 types 的差别以及三斜线指令,并亲手写一个最小可用的声明文件。读完你能独立排查「找不到模块的类型声明」这类报错。
在 demo 项目里写出第一个 REST 接口:用 @RestController 与 @GetMapping 暴露 /hello,对比返回字符串与返回对象自动 JSON 序列化的差别,掌握 @RequestParam 与 @PathVariable 两种取参方式,并用 curl 完成一次真实的请求与响应验证。
从 TCP/IP 分层讲起,用 socket 手写能跑通的 echo server/client,理解 bind/listen/accept/connect/send/recv、粘包与分帧、settimeout;再用原始 socket 看清 HTTP 请求行长什么样,对比 urllib、requests 会话复用与 httpx 同步/异步双接口。
线程池与进程池共享同一套 concurrent.futures 接口:submit 返回 Future、map 保序、as_completed 抢先返回,异常要调用 result() 才抛出。本节实测进程池的 __main__ 守卫报错、小任务反转、chunksize 与启动开销,并讲清进程间共享数据。
GIL 让同一时刻只有一个线程执行 Python 字节码。本节讲清它保护什么、为何存在,用真实计时证明 CPU 密集多线程不提速而 IO 密集近线性提速,再讲透 Thread/Lock/Event/Semaphore/Queue、竞态复现与线程进程选型。
说明如何在第一轮重写中同步校正孢子生态规则和自然线索,避免设定、天气、土地、菌丝和人物行动彼此脱节。
本节读懂 demo 项目:给出标准 Maven 目录树并解释各目录职责,逐行拆解启动类与 @SpringBootApplication、SpringApplication.run;重点讲包扫描规则,说明启动类为何必须放根包;再讲 application.properties 与 yml 的位置与优先级、.gitignore 建议,以及两种运行方式的差别。
本节讲清如何用 start.spring.io 生成项目骨架:逐字段说明表单怎么填,强调 4.x 中 Spring Web 对应 spring-boot-starter-webmvc;给出等价的 curl 命令行方式,逐段解读生成的 pom.xml,并用表格对比 3.x 与 4.x 生成物在 parent 版本与 starter 名上的差异。
本节从使用者视角切换到包作者视角,讲清一个 npm 包如何被 TypeScript 正确识别。先看 package.json 里 main、module、types 这些历史字段的来历与局限,再重点拆解 exports 条件导出与其中的 types 条件、顺序要求,最后给出类型声明的三种来源、发布自己包的完整配置,以及消费者最常撞上的几类报错。