这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《Spring Boot 实战》13.1 调度方案选型
从图书借阅服务的逾期提醒出发,讲清 @Scheduled 的 fixedRate、fixedDelay、cron 三者真实差异,单线程调度器为何互相拖累,如何用 SchedulingConfigurer 换线程池,并横向对比 Quartz 与 XXL-JOB,最后给出一张按场景选型的决策表。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
从图书借阅服务的逾期提醒出发,讲清 @Scheduled 的 fixedRate、fixedDelay、cron 三者真实差异,单线程调度器为何互相拖累,如何用 SchedulingConfigurer 换线程池,并横向对比 Quartz 与 XXL-JOB,最后给出一张按场景选型的决策表。
本附录把全书用到的 Spring Boot 注解按用途分成启动配置、依赖注入、生命周期、条件装配、Web、校验、数据事务、测试八类,每类一张表列出注解、作用、所在包与详见章节,末尾附一张 3.x 到 4.x 的注解与包名变更对照表,方便迁移时逐条核对。
没有事务时,扣库存、记流水、扣额度会各自提交,中途失败就留下不一致数据。本节用图书借阅场景演示这个问题,再讲 @Transactional 加在方法还是类上、rollbackFor 默认只回滚运行时异常的坑、readOnly 与 timeout 的作用,以及 TransactionTemplate 编程式事务的适用场景。
用本机实测数字拆解多进程的三笔开销:fork/spawn/forkserver 的进程启动成本、跨进程 pickle 序列化税、Queue 与 Pipe 的通道差异;再用 shared_memory 实测 numpy 数组的零拷贝共享,最后给出线程池与进程池的选型决策表。
先如实交代本机并非自由线程构建,再从 PEP 703 的对象头改造、偏向引用计数、延迟引用计数与 Python 临界区入手,讲清 CPython 如何在拿掉 GIL 后维持内存安全,并给出 C 扩展 Py_mod_gil 迁移与生态评估的完整框架。
从 CPython 源码机制出发拆解 GIL:解释器循环为何必须持有全局锁、切换间隔怎样在安全点强制释放线程,并用本机 10 核实测数据画出 CPU 密集与 I/O 密集的影响边界,顺带用实测纠正「counter += 1 会丢更新」这一流传很广的误解。
脚本要有人在对的时间触发:本节讲透 cron 表达式与 crontab 写法、systemd timer 单元文件(Linux 配置,本机 macOS 未实测)、launchd plist,并用 fcntl 文件锁真跑防重入、用 state 文件做幂等、日志落盘。
把手工填表交给脚本:本节用 openpyxl 3.1.5 读写 Excel(样式、公式、只读模式),python-docx 1.2.0 生成 Word 与模板占位符替换,pypdf 6.19.0 合并拆分与提取文本,全部真跑并贴真实输出,附公式不自动计算的坑。
文件批处理最怕「一跑就毁数据」:本节用 pathlib / shutil / hashlib 真跑批量重命名、按规则归类、内容哈希去重与空目录清理,并讲透「先干跑再执行」的工程纪律、原子重命名与跨盘移动,以及 os.walk 对比 Path.walk 的取舍。
前面两节都说「用 -race 验证」,本节把 -race 当成正式工具讲透:它是编译期插桩而非采样,能给出带行号的读写双方栈;逐行解读一份真实竞态报告,实测它带来的性能开销,说明它查不出哪些问题、该怎么写并发测试,以及如何固定进 CI 流程。
上一节用锁保护了 store,但「谁等谁结束」「配置只加载一次」「只增不减的缓存」还缺趁手工具。本节讲透 WaitGroup 的 Add/Wait 时序与 Go 1.25 新增的 wg.Go、Once 与 OnceValue 的差别,并用实测数据回答 sync.Map 到底该不该用。
第 10 章的 worker pool 已经在并发读写同一份数据,但 store 还是裸 map,一压就 fatal error。本节讲清数据竞态,用 sync.Mutex 与 RWMutex 把 MemStore 改成并发安全,再用 atomic 计数器统计处理量,并给出四种同步手段的选型表。
把句末 [doc_id#chunk_id] 解析出来,可以检查坐标和词面相关性;这仍然不是事实核验。修订版不再把词汇重叠称为引用有效。错误的否定句可以与正确来源共享几乎全部词汇,拿到高重叠分。无引用句不会出现在 rows 中,不能把空 rows 当作全部通过。块存在、实际读取、词面相关和语义支持应分别检验。
把 10.1 切好的块做成两个工具:search(query) 返回命中块(doc_id、chunk_id、片段),read(doc_id, chunk_id) 取回完整块。两者注册进第 4 章的 ToolRegistry,再用假模型脚本化一条多跳检索轨迹并真跑。本节聚焦「检索作为工具」,检索算法复用第 9 章的关键词 + 哈希向量混合思路。
检索增强的第一步是把一堆文件变成可检索的块。本节先剥掉 frontmatter,再用带重叠的 chunk(text, size, overlap) 固定长度切块,并拿本仓库 content/posts/python/ 下 6 篇真实文章实测:文件数、总块数、平均/最长/最短块长全部给出。最后对比按字符切与按语义切的取舍,代码在 Python 3.14.6 跑通。
本文面向有编程基础但初学 Swift 的 iOS 开发者,系统梳理 Swift 5.9/6 的语言基础与现代语法。内容涵盖值类型与引用类型的语义差异、struct/enum/class 的选型决策、Optional 与可选链入门、闭包捕获语义与逃逸规则、属性包装器与 Result builder 的实现原理,以及值语义背后的写时复制机制。同时介绍 if/switch 表达式、宏 macros 等新特性,并给出符合 Swift API Design Guidelines 的命名建议。读完可建立清晰的选型与设计直觉,写出更安全、更易维护的 Swift 代码。
从有状态服务的视角讲透如何在 Kubernetes 上跑 Kafka:StatefulSet 的稳定网络标识与 Operator 模式的价值、Strimzi 的 Cluster Operator 与 Entity Operator 架构、核心 CRD 模型、Kafka CR 的 replicas 与 listeners 与 config 与 jvmOptions 与 storage 字段、StorageClass 与 PVC 持久化与 JBOD 与在线扩容、podAntiAffinity 与 topologySpreadConstraints 与机架感知的跨 AZ 高可用、滚动升级与扩容与分区再均衡与优雅停机、JMX Prometheus Exporter 与 PodMonitor 与 Cruise Control 监控运维,以及一整套真实踩坑清单
系统讲解 ksqlDB 在 Kafka 之上做流式 SQL 处理的完整知识体系:ksqlDB 与 Kafka Streams 的关系与架构分层、STREAM 与 TABLE 的语义差异与 changelog 主键模型、CREATE STREAM 与 WITH 子句的数据映射、Schema Registry 与 Avro 集成、TUMBLING/HOPPING/SESSION 三种窗口与 GRACE PERIOD 宽限期、Push 查询与 Pull 查询的路由与一致性、物化表与持久查询、流表 join 与重分区,以及何时选 ksqlDB 何时回归 Kafka Streams 的取舍对比与生产运维踩坑
从 Lag 的本质口径出发,系统讲解 Kafka 消费延迟的诊断与治理:log-end-offset 与 current-offset 的三者关系、时间口径 lag 与消息数 lag 的区别、kafka-consumer-groups.sh 与 JMX 指标采集、Prometheus 告警阈值设计、分层瓶颈定位决策树、生产端突增与网络往返瓶颈、消费端单条处理耗时与下游拖慢、GC 与序列化开销、分区倾斜与并行度扩容代价、pause/resume 背压与动态限流、降级丢弃策略与积压恢复演练,附完整参数调优清单与生产踩坑记录
深入解析 Kafka 分层存储与 KIP-405 的完整实现:从本地盘容量与成本的矛盾出发,拆解 Remote Log Manager 与 RLMM 的组件分工、local.retention.ms 等本地保留窗口与卸载触发条件、对象存储上的 segment 布局与元数据文件、冷热读写路径与回源延迟、存储成本与流量费的量化权衡,并给出启用顺序、回退风险与监控指标的生产实践。