2025年12月的闲谈

thbcm阅读(366)

最近一年,我负责的项目主要以多端混合开发为主,以PC端管理系统与配套的H5生态为辅。这段时间中,我发现公司有些同事思考太远,经常会引起不必要的沟通与讨论,可能会持续浪费一个小时的工作时间。(PS备注:关于无效沟通讨论这种事,被大领导开KISS会议点名批评过某些同事,我不是空穴来风。)典型的案例就是我目前负责的最新项目,各种考虑深远,各种配套想实现,但现实却带来迎头痛击,小程序被下架。

消费者组重平衡与消息顺序性保证:原理、操作与实践

thbcm阅读(386)

Kafka 的
顺序性仅在 Partition 内保证:同一 Partition 的消息按写入顺序(Offset 递增)存储和消费。
不同 Partition 间无序。因此,要保证业务消息顺序(如同一订单的创建→支付→发货),需确保这类消息进入
同一 Partition

CSP-S2025做题记录

thbcm阅读(392)

于是对于一个人,只需考虑三个社团中的最大值和次大值,那么首先,如果按所有人都分配到对于那个人中三个社团最大值之后,人数最大的社团也是小于等于
\(\lfloor\frac{n}{2}\rfloor\) 的话,那么答案直接就是将所有人对应的最大值加起来就行了,设这个值为
\(sum\),否则的话,考虑如何微调。

OWASP 2025 年十大安全风险(OWASP Top 10:2025):读懂应用安全的“风向标”,避开高频高危坑

thbcm阅读(436)

2025年,
OWASP Top 10迎来第8版。这一次,它不仅保留了访问控制失效、注入攻击等经典风险,还新增了2个贴合当下技术趋势的类别,同时对部分风险的范围进行了扩展。今天,我们就来好好拆解这份指南,帮你搞懂“哪些风险必须优先防范”“新版变化背后有什么逻辑”,以及“如何落地到实际工作中”。

MAF快速入门(4)多Agent工作流编排

thbcm阅读(418)

上一篇,我们学习了MAF中如何持久化聊天记录到关系型数据库。这一篇,我们来学习一下工作流编排。不知大家是否记得,我们在之前用Semantic Kernel学习过多Agent编排的一些知识,例如顺序,并发,移交等模式仍然历历在目。那么,今天,我们用MAF的工作流编排来实现一下,看看有什么不一样。

.NET周刊【11月第2期 2025-11-09】

thbcm阅读(382)

文章讨论.NET 开发者在 AI 领域的潜力,反驳了对.NET 与 AI 不匹配的常见误解。作者指出,虽然 Python 在 AI 研究阶段有优势,但在生产环境中,.NET 因其性能、类型安全和企业集成能力更为优越。文章详细介绍了微软在.NET AI 生态的快速发展,强调了 Semantic Kernel 和 MEAI 等工具的推出,使.NET 开发者能够灵活开发 AI 应用。这些发展使得.NET 开发者能够与 AI 的红利接轨,而不必转型为 Python 开发者。

从硬盘I/O到网络传输:Kafka与RocketMQ读写模型及零拷贝技术深度对比

thbcm阅读(400)

在RocketMQ中,所有主题的所有消息数据,无论其逻辑归属如何,都会被首先写入到一个名为提交日志(CommitLog)的中心化大文件中。这个CommitLog文件由多个固定大小(默认为1GB)的文件顺序组成,当前只有一个文件处于可写状态。因为所有写操作都集中在这一点,即便随着主题和队列数量的急剧增加,硬盘在同一时间也只对一个文件进行追加写入,从而保证了绝对的顺序写。为了进一步提升I/O效率,RocketMQ采用内存映射(mmap)技术来读写CommitLog。

当消息需要被消费时,直接扫描庞大的CommitLog显然是低效的。为此,RocketMQ为每个主题的每个消息队列(ConsumeQueue)建立了一个独立的、轻量级的消费队列文件。每个ConsumeQueue条目都是固定长度的(20字节),其中存储了该消息在CommitLog中的物理偏移量(Offset)(8字节)、消息总大小(Size)(4字节)以及消息Tag的哈希码(8字节)。当消费者拉取消息时,它首先顺序读取对应ConsumeQueue文件中的索引条目,根据获取到的物理偏移量,再到CommitLog中定位并读取到完整的消息数据。这种“先读索引,再读数据”分离的模式,既保证了写入的绝对顺序性,又实现了消费时的高效查找。

此外,为了支持按消息Key或时间范围等维度的快速查询,RocketMQ还提供了可选的索引文件(IndexFile)。其底层数据结构本质上是一个存储在硬盘上的哈希表。IndexFile由文件头、哈希槽(Slot Table)和索引条目列表(Index Linked List)三部分组成。当根据Key查找时,先计算Key的哈希值并定位到对应的哈希槽,该槽内存储了指向最新一条索引条目的指针。由于可能存在哈希冲突,具有相同哈希值的索引条目会通过前向指针形成一个链表。


联系我们