这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《Java 编程入门》6.3 作用域、生命周期与栈帧
从 LibraryService.borrow 的局部变量讲起,分清作用域与生命周期:花括号决定名字能用到哪里,栈帧决定局部变量活到什么时候,可达性决定对象活到什么时候;再用 javap 的局部变量表、真实调用栈和 StackOverflowError 把这三件事对上。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
从 LibraryService.borrow 的局部变量讲起,分清作用域与生命周期:花括号决定名字能用到哪里,栈帧决定局部变量活到什么时候,可达性决定对象活到什么时候;再用 javap 的局部变量表、真实调用栈和 StackOverflowError 把这三件事对上。
性能指标最容易在口径上失焦:同一个 LCP,均值、p75 与 p95 会讲出不同故事。本节把指标定义、采样边界、窗口聚合与主口径选择写进一个可运行的 TypeScript 指标字典,说明何时用分位、何时看均值,并用真实测试输出验证聚合结果与取舍。
用 library 的借书、还书和替换对象三个实验,讲清 Java 只有值传递:基本类型复制数值,对象复制引用;方法内重新赋值不影响调用方,通过引用修改对象却会影响。最后说明为什么返回内部 List 会泄漏状态,以及借还逻辑通过引用改 Book 时风险在哪。
从 LibraryApp 越堆越多的职责出发,讲清方法签名的组成、重载解析的三道关(严格匹配、装箱、可变参数),以及可变参数背后的数组语义;最后拆出 LibraryService,用重载的 addBook 和 search 把 CLI 与业务逻辑分开。
埋点失败后直接丢弃,会让故障现场永远缺一块。本节实现一个带 TTL、容量上限、优先级淘汰与跨批次去重的补报队列,说明 p0 事件如何避免被噪声挤掉,以及补报失败后重试、稍后、返回三种用户可恢复操作的分工,最后复盘一次埋点风暴的全过程与容量参数。
卷一收口第二步,把 arch-lab 的模块清单、依赖方向、部署单元与数据 owner 冻成一份带指纹的快照。本篇给出可机器读取的 Go 结构、三者闭合校验器和黄金指纹测试,并说明唯一运行时单元、单库数据所有权与 PostgreSQL L3 核对步骤。
弱网下只有成功与失败两态是不够的,超时、失败、半成功需要不同兜底。本节给出缓存年龄、关键字段缺失与重试预算共同参与的决策函数,解释为什么超时先看缓存、失败先重试,并用注入时钟验证滑动窗口预算与降级内容展示,说明缓存写回与手动重试的风险边界。
从 library 搜索参数的混合类型问题出发,讲清 instanceof 模式变量的流作用域、&& 右侧与提前返回后的作用范围,以及 switch 模式匹配里的 when 守卫和支配规则;最后用 parseValue 与 matches 把 year:2006、after:2006 这类过滤条件安全地落到 Book 字段上。
从 5.1 留下的 if/else 命令链出发,拆开 switch 的冒号写法、箭头写法与表达式写法,讲清 fall-through、yield 的作用域和枚举穷尽性检查;再用 library 的 Command 枚举与 dispatch 方法,把命令分发写成一张编译器能检查的表。
白屏往往不是某个组件写错,而是错误没有被分类、边界没有被放置。本节把端上错误分成可恢复、可降级、致命三类,给出不依赖 DOM 的分类器与嵌套边界模型,用注入时钟验证恢复预算与升级路径,并复盘一次局部兜底反而扩大故障的白屏事故,最后整理成可执行的评审清单。
从 library 的 CLI 命令分发出发,讲清 if/else 链、卫语句、for 与 while 各自适合的场景;再用真实运行结果说明循环边界和边遍历边删除,并点出字符串比较中常见的三个坑,最后落到可运行的 LibraryApp 骨架。
卷一收口的第一步,是把 arch-lab 的业务需求、技术与组织约束、延迟/可用性/容量/安全指标压成一份可机器校验的基线。本篇给出三种状态口径、一张标清目标与实测的 NFR 表,以及能拒收缺失 owner、目标与实测混用的 Go 校验器和真实基准输出。
以 arch-lab 的状态清单为例,区分事实来源、派生状态、缓存与临时状态,说明有状态服务为什么仍然可以部署;给出可运行的 stateinv 校验器,检查无主状态、来源无备份或恢复、派生状态无重建路径、本地盘持久化和破坏性迁移,并附本机真实 go test 输出。
以 arch-lab 的配置加载器为例,说明默认值、配置文件、环境变量与密钥的分层优先级,为什么未知键和危险默认值必须在启动时失败;给出可运行的 config 包与失败测试,覆盖缺失、非法、密钥入文件、生产环境误用假支付和沙箱地址,并附本机真实 go test 输出。
从 library 的罚金计算出发,讲清整数除法、取模符号、类型提升、溢出与 Math.addExact 系列方法;再解释 0.1 + 0.2 为什么不等于 0.3、金额为什么用分而不是 double,最后用位运算表示借阅状态标志,并给出可复现的本机输出与边界检查清单。
把 var 还原成编译期类型推断而不是动态类型:哪些位置能用、哪些位置编译失败、什么时候用 var 反而降低可读性;再讲 final 局部变量、static final 常量与「final 引用不等于不可变对象」的区别,并在 library 的 BookLabels 与 LoanPolicy 里落地。
《游戏引擎实现原理》卷四《工程与实战》导航页:把前三卷写出的 helio 引擎与《微光岛》真正交付出去——构建与资产管线、引擎的测试(headless 黄金图像与确定性回放)、性能预算与分配追踪、跨端探测与降级、模块裁剪、调试工具,最后做完整合项目、跨引擎对照与全书收官。含本卷定位、与前三卷的关系、L1–L4 可运行性口径、四部分 29 节索引与阅读路径。
前两节对照了「各家怎么做」,这一节回答「你该怎么选」。选型不是挑一个引擎名字,而是决定「哪些成本由你自己扛」。本节给出三条判断维度——差异化落在引擎的哪一层、团队与时间账、平台与维护年限——并把它写成一条可执行的规则:输入项目画像,输出建议与理由。
同一个特性,各家引擎的实现路径往往截然不同。本节挑三条最典型的路径——资源句柄、帧图、脚本绑定与热重载——逐条摊开 helio、Godot、Bevy、Defold 的做法与代价。helio 一侧贴本机真跑的代码(世代句柄、帧图拓扑序、WGSL include 展开),其余三家只据官方文档做原理级标注。
跨引擎对照最容易滑成「谁更好」的口水战。本节把比较拆成一条条单一坐标轴:实体与组件怎么排、一帧的顺序由谁定、句柄失效能不能被检测。每条轴只让 helio、Godot、Bevy、Defold 各占一行,helio 一侧用本机实跑的数字撑腰,其它引擎只做原理级标注并附官方文档链接。