这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《MMO 服务器开发》1.2 状态归谁:防重复发奖与旧数据覆盖
上一节立了「一个状态只能有一个写者」,但现实里这条原则会被两种方式破坏:写者其实不止一个,以及写者写的是旧数据。它们对应两个最经典的事故——重复发奖与旧数据覆盖。本节先把两个事故的根因拆开,再推出版本单调与幂等键两条守卫,最后用一份能跑的 Go 代码把这两条守卫钉成断言。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
上一节立了「一个状态只能有一个写者」,但现实里这条原则会被两种方式破坏:写者其实不止一个,以及写者写的是旧数据。它们对应两个最经典的事故——重复发奖与旧数据覆盖。本节先把两个事故的根因拆开,再推出版本单调与幂等键两条守卫,最后用一份能跑的 Go 代码把这两条守卫钉成断言。
卷一讲完网络内核的四层,这一卷换一个视角重新切一遍:从玩法系统的状态归属出发,回答 gateway / logic / scene / data 各自该持有什么状态。本节先把「谁写状态,谁就是那一层」立成第一原则,再把每条命令归到唯一的处理层、把每份状态归到唯一的写入者,最后用一份能跑的 Go 代码把这两条归属规则钉成断言。
16.2 把服务编排起来了,但容器编排还有三件「看不见却致命」的事:配置怎么注入、健康检查怎么区分 liveness 与 readiness、收到 SIGTERM 后怎么优雅退出。本节讲清用环境变量注入配置、两条健康线各自的取舍、以及「停止接新请求→等在途 run 收尾→关连接池→退出」四步。用 uvicorn 0.54.0 + lifespan 真发 SIGTERM,贴出完整日志序列与参数表。
上一节做出了 ResearchCopilot 的镜像,但一个镜像撑不起一个服务——它还要数据库、缓存和后台 worker。本节写 docker-compose.yml 编排这四个服务,讲清 depends_on 不等于「依赖就绪」(须配 healthcheck)、同一镜像靠 command 扮演 api/worker 两种角色。真跑 config 与 ps 起栈验证。
本节是 TS 落点三的上半场:把 ResearchCopilot 打成 Python + Node 双栈镜像。用多阶段构建分别产出 TS 前端产物与 Python 依赖,只把产物拷进运行时镜像;再叠加 .dockerignore、--no-cache-dir、slim 基础镜像与 digest 固定四个瘦身杠杆。Dockerfile 在本机真构建,贴出镜像体积、分层与容器内验证的真实输出。
用状态数量、禁止迁移、异步边界与副作用密度四个信号,判断一段状态该用状态机还是普通布尔标记;给出可运行的 TypeScript 判定函数与上传状态机,验证非法事件拒绝、重试上限与状态可达性,并用列表筛选和表单校验说明这条判据的反例边界,避免抽象过度或抽象不足。
把订单状态与 outbox 消息收进同一个本地事务,用快照回滚验证“要么都成功、要么都不可见”;再实现至少一次投递与消费端按 message_id 去重,给出 outbox 表结构、Go 实现、内存版测试与真实 go test 输出,并说明 PostgreSQL 索引的 L3 验证边界。
《Java 编程入门》全书导航页:说明本书定位、读者画像与前置知识,给出零基础、有语言基础、查漏补缺三条学习路径与八周计划,并按六个部分列出 18 章 54 节的完整章节索引,另含序、前言、附录 A–D 与常见问题速查,每一节都配一句话说明,方便按需定位与跳读。
把服务端状态从组件状态里拆出来,按价格、会话、内容流、详情与配置分别设定 ttl、stale 窗口与刷新模式,给出一个注入时钟、支持 stale-while-revalidate 与代际失效的 TypeScript 缓存,并用可运行测试验证过期、去重、前缀失效与旧响应回写拦截。
审计日志回答的是「谁在什么时候对什么做了什么」,而它本身也是攻击目标。本节把 TaskHub 的审计落成防篡改的哈希链:本机真实跑通写入 3 条记录校验通过,再改写第 2 行结果字段,校验立刻报「第 2 行内容被篡改」;并给出审计与业务日志的分离、保留期与合规映射。
加密的目标是「数据即使被截获或拖库也读不出」。本节把 TaskHub 的传输与存储两条链路都落成可运行代码:用真实握手演示强制 TLS 1.3 如何拒绝只支持 1.2 的客户端,用 AES-GCM 把 32 字节明文加密成 60 字节并验证篡改必然失败,用 bcrypt 演示同口令两次哈希不同、校验正确。
多租户系统里,一个没校验的查询参数就可能让 A 租户读到 B 租户的数据。本节用真实 Postgres 容器跑通两段对照实验:字符串拼接的查询被注入读到 2 行(越权),参数化查询命中 0 行(挡下);再用 html/template 演示输出转义,并给出白名单校验、命令注入与路径穿越的防护清单。
给出 Spring Boot 4 模块化重构的动因与全貌:从单一 spring-boot-autoconfigure 大 jar 拆成按技术划分的模块、根包与 starter 命名约定、starter 改名对照、Flyway/Liquibase 新增 starter,以及 Jackson 3 与 Jakarta EE 11 基线对依赖声明和 import 语句的实际影响。
本节为图书服务建立生产可用的日志基线:讲清 SLF4J 门面与 Logback 实现的分工,以及为什么不要直接依赖 Log4j2 API;给出六个级别的选择依据与 logging.level.<包名> 的精确控制;解读 4.1.1 的真实启动日志;讲透 logging.file.name 与 path 的差别、轮转配置、4.1 的 Log4j 文件轮转与 logging.group 分组。
《Python高级编程》全书导航页:说明高级卷在 Python 三卷体系中的定位、读者画像与前置知识,梳理 11 章从对象模型到生态演进的纵深线,并按章列出全部 33 节的完整索引,另交代全书 3.14.6 实测口径、两条阅读路径与延伸阅读方向,帮你从会用走到懂原理。
从 PEP 的状态机讲起,用 __future__ 与 warnings.deprecated 实测弃用周期,再用 sys.version_info、requires-python 与 CI 矩阵搭特性检测;最后逐条实测 3.14 的迁移点:PEP 649 注解延迟、PEP 765 finally 控制流、PEP 784 compression.zstd、多进程默认启动方式与 PEP 758。
真编译一个 C 宿主把 CPython 嵌进来,实测 Py_Initialize、PyRun_SimpleString、Py_InitializeFromConfig 的调用与返回值;再读 3.14.6 的真实头文件,对比标准构建与自由线程构建的对象布局、共享引用状态位、PyMutex 与临界区,并如实交代本机无法实测的部分。
用 uv build 真打一个包,逐文件拆开 wheel 的 .dist-info、RECORD、METADATA 与 .data/ 目录并实测安装落点,再看 entry_points 如何生成 console script、PEP 517 后端钩子的真实调用顺序,以及 wheel tag、平台标签与 abi3 的匹配规则。
《Python编程实战》全书导航页:说明实战卷在 Python 三卷体系中的定位、读者画像与前置知识,梳理四个部分之间的依赖关系,并按部分列出 18 章 54 节的完整章节索引,另给两条阅读路径建议与延伸阅读方向,帮你把入门语法升级为可交付的生产级工程能力。
交代本书的读者对象、前置知识、六部分结构与章节依赖,列出 JDK 25、Maven 和终端的环境清单与真实版本输出,说明代码、输出、省略号和命令的书写约定,以及三种阅读路径、验证代码的具体方法、版本不一致时的排查顺序与本书刻意不覆盖的范围。