7AA7 博客
Cache 孙 2026-10-18 UID:133
1

数据库事务日志:WAL、redo 与 undo 的作用机制

数据库

把某一行从 1 改成 2,如果直接改磁盘上的数据页,这是一次随机写。数据库每秒要改成千上万行,数据页在磁盘上的位置又是分散的,全靠随机写会立刻碰到 IOPS 上限。日志的作用就是把这个随机写换成顺序写。 为什么需要 WAL 顺序写和随机写不在同一个量级:机…

2.3k 0 8
Cache 孙 发布于 · 2026-10-18
Riven 2026-10-15 UID:71
2

灰度发布与蓝绿部署:流量切分的工程实现

软件架构

发布本身不是难点,难点是新版本有问题时能在多大范围快速止损。滚动发布逐个替换实例,回滚要数十分钟,这段时间全部用户都在受影响面。蓝绿和灰度解决的都是这件事:把"回滚"换成"切流",把止损时间从重建实例的量级压缩到改一次路由配置的量级。 蓝绿与灰…

2.6k 0 26
Riven 发布于 · 2026-10-15
苏念禾 2026-10-14 UID:79
3

MQTT 协议详解:QoS、遗嘱与断线重连

硬件与 IoT

MQTT 跑在 TCP 之上,报文头最小只有 2 字节,这套设计是为窄带宽、高延迟、不稳定的链路准备的。理解它的关键点不在于"能连上发消息",而在于想清楚消息在哪个环节可能丢、丢了之后由谁负责重发。 发布订阅模型与 broker 的位置 设备不直接互相寻址。发布者…

2.6k 3 10
江眠 最后回复于 · 2026-10-15
Cache 孙 2026-10-18 UID:133
4

代码重构的安全手法:小步、可回滚、有测试

开发技能

重构失败很少是因为设计能力不够,多数是因为一次改动太大:改到一半发现行为理解错了,此时进退两难——往前是未知,往后是几百个文件的 diff 已经无法撤销。让重构可控的核心不是技术,是把不可控的部分切小。 重构与改行为是两件事 重构的严格定义是:在不…

1.5k 2 11
顾清池 最后回复于 · 2026-10-18
Moon 槐 2026-10-16 UID:80
5

备份与恢复演练:RPO/RTO 的落地

数据库

备份脚本每天在跑,日志显示成功,监控面板上一片绿色。直到某天需要真正用它恢复数据的时候,才发现文件是坏的、binlog 有断档、或者恢复出来少了几个小时的记录。备份本身不产生价值,能被成功用于恢复的备份才产生价值。 先把两个指标定义清楚 RPO(Recov…

1.8k 0 13
Moon 槐 发布于 · 2026-10-16
HexCreek 2026-10-14 UID:92
6

一个桌面工具箱的架构取舍:C++/Qt 客户端 + Go 服务端

软件架构

做桌面工具这类软件,技术选型的讨论往往陷入"哪个语言更好"的口水仗,但真正决定成败的是职责怎么划分。我参与开发的 7AA7工具箱是一套 C++/Qt 客户端加 Go 服务端的组合,这篇文章把当年几个关键取舍的思考过程摊开,不讲结论的正确性,讲推理的过程。 一…

2.1k 4 15
North 北境 最后回复于 · 2026-10-15
硅屿 2026-10-13 UID:95
7

IoT 设备安全:认证、加密与固件防篡改

硬件与 IoT

一批同型号设备共用同一套密钥时,破解其中一台的成本会被均摊到全部设备上。单台的破解难度也许只是"拆开外壳、读一次 flash",但当它换来十万台设备的身份,投入产出比就变了。设备安全的许多设计,本质是抬高杠杆的另一头。 设备身份:一机一密还是全网共…

2k 0 7
硅屿 发布于 · 2026-10-13
NullRef 2026-10-16 UID:87
8

SQL 之外的选择:什么场景值得看看 Rust

编程语言

"我们这门技术栈用得挺好,为什么还要看别的"——这是技术选型里最合理的疑问。这篇文章不劝人换语言,只想把话说清楚:Rust 在哪类问题上有结构性优势,在哪类问题上是给自己找麻烦,以及想试水的时候有哪些低成本的切入方式。 先说定位。Rust 是一门编译型系…

1.4k 0 13
NullRef 发布于 · 2026-10-16
许既白 2026-10-13 UID:107
9

微调、提示词与 RAG:三条路线的成本与效果边界

智能AI

三者改动的是三个不同的东西 把一次生成写成条件分布 P(y | x; θ),x 是输入上下文,θ 是权重。三条路线各自动一个变量: 路线 改动对象 模型权重 知识来源 提示词工程 x 不变 靠上下文现场提供 RAG x(拼接检索结果) 不变 外部库,运行时拉取 …

1.9k 2 17
宋识 最后回复于 · 2026-10-13
林见川 2026-10-17 UID:69
10

前端状态机实践:用状态机管理复杂交互

大前端

一个上传组件里出现五个布尔标志不算稀奇:isLoading、isError、isSuccess、isPaused、isValidating。每个标志单独看都合理,合在一起就埋下了隐患。 布尔标志的组合爆炸 $n$ 个独立的布尔标志,理论上能表示 $2^n$ 种组合。五个标志就是 32 种,而真正合法…

1.4k 0 5
林见川 发布于 · 2026-10-17
晚棠 2026-10-12 UID:77

深度专家 vs 广度通才:职业路径的取舍

程序人生

"应该做专家还是做通才"这个问题之所以难答,是因为它被问成了一个身份选择。实际它是个资源配置问题:在给定阶段,把有限的学习时间投到竖(某一领域的纵深)还是横(跨领域的连接)。答案随阶段变化,也随市场供需变化。 竖从哪里来 深度不是靠"用了五年某…

2k 2 7
Byte 吴 最后回复于 · 2026-10-13
VectorQ 2026-10-19 UID:96

事务与隔离级别:脏读、不可重复读与幻读

数据库

ACID 四个字母里,A、C、D 在工程上相对好验证:原子性靠日志回滚,持久性靠刷盘策略,一致性是业务与约束共同保证的结果。真正让人头疼的是 I——隔离性。它的定义本身就带着妥协:完全隔离等价于串行执行,性能不可接受;降低隔离又会引入各种读写异常。工程…

831 0 6
VectorQ 发布于 · 2026-10-19
林砚 2026-10-13 UID:111

低功耗设计:休眠模式与功耗预算

硬件与 IoT

电池供电设备的续航不是靠某一个技巧凑出来的,而是一开始就按功耗预算倒推出来的。先把平均电流的目标定下来,再往回拆每个环节能花多少,这是唯一可控的路径。 功耗的四个来源 运行电流:MCU 跑代码、外设工作时的电流。主频和供电电压越高电流越大。同一…

1.5k 1 12
裴鹿 最后回复于 · 2026-10-13
云知夏 2026-10-15 UID:82

技术方案汇报的结构化表达

程序人生

方案被驳回,很多时候不是方案本身有问题,而是听的人在前十分钟没能建立起"这件事大概是什么、要花多少、风险在哪"的框架,后面的细节就全部悬空了。汇报是一种有结构的工程产物,可以拆开练。 结论先行:前三句话要装什么 技术人习惯按推导顺序讲:背景→调…

1.2k 2 3
许既白 最后回复于 · 2026-10-16
码同客 2026-10-10 UID:88

单元测试怎么写才有价值:测试边界与可测性设计

开发技能

一套 90% 覆盖率的测试套件,完全可能是零价值的:改错一个判断条件,测试照样全绿;重构一次内部实现,三十个用例同时变红,其中没有一个对应真实缺陷。覆盖率衡量的是"代码被执行过",它不衡量"错误能被发现"。 价值来自改动时的信心 给测试估值的一个近似…

1.8k 1 10
栈外游 最后回复于 · 2026-10-10
Schema 李 2026-10-09 UID:130

数据库连接池原理:连接数不是越多越好

数据库

线上服务响应变慢,第一反应往往是"连接池不够用,调大最大连接数"。调完可能确实缓解,也可能更慢,甚至把数据库拖垮。连接池的参数不是孤立的,它连接的是应用侧并发模型与数据库侧执行模型两端。理解两端的成本结构,才能知道连接数该定多少。 一条连接的…

2.2k 0 9
Schema 李 发布于 · 2026-10-09
Liora 2026-10-08 UID:78

学习新技术的高效路径:30 天可验证计划

程序人生

学新技术最常见的两种走法都容易半途而废:一种是从第一章开始逐页读,读到第三章还没写过一行代码;另一种是直接上手抄 demo,跑通了就以为会了,等真要用时发现处处是洞。 差别在于有没有一个可验收的产出节奏。下面这套路径按 30 天设计,每周一个能拿出…

2.2k 0 9
Liora 发布于 · 2026-10-08
凛川 Wave 2026-10-16 UID:74

JavaScript 异步演进:从回调到 async/await

编程语言

JavaScript 的异步史,某种意义上就是"怎么把回调写得像同步代码"的进化史。从 callback 到 Promise 再到 async/await,每一步都在解决上一阶段留下的可读性和错误处理问题。把事件循环和这三代写法的关系理顺,写异步代码时心里才有底。 一、事件循环:异步…

807 0 12
凛川 Wave 发布于 · 2026-10-16