bigfish 头像

bigfish

记录技术和生活。

自建 Umami 给博客做访问统计

不接 Google Analytics,用 Umami + 现有的 Postgres 自建一套无 Cookie 的访问统计,含国内的镜像拉取、数据库迁移和 API 初始化。

自建 Umami 给博客做访问统计

用 Zola + Linkita 把博客搬到自己的对象存储上

不租服务器、不用 Netlify,把静态博客直接托管在自建的 RustFS(S3 兼容对象存储)上,并补齐 SEO 与访问统计。

用 Zola + Linkita 把博客搬到自己的对象存储上

领域驱动设计(DDD):从三层架构到 DDD 架构的演化

三层架构在复杂业务下的三个典型问题——业务逻辑分散、领域模型贫血、过度依赖数据存储,以及对应的 DDD 分层与各层职责划分。

领域驱动设计(DDD):从三层架构到 DDD 架构的演化

领域驱动设计(DDD):从基础代码探讨高内聚低耦合的演进

不堆概念,从一段下单的「事务脚本」代码开始,逐步演进到实体、值对象、聚合根与领域服务,说明 DDD 到底解决了什么耦合问题。

领域驱动设计(DDD):从基础代码探讨高内聚低耦合的演进

CMS 三色标记法

并发标记下用户线程改引用会导致对象漏标。记录三色标记法的原理,以及 CMS 用增量更新、G1 用原始快照各自解决漏标问题。

CMS 三色标记法

ReentrantLock 源码解析

从 lock() 一路跟到 AQS 的 acquire、tryAcquire 和 LockSupport.park,理清独占锁的获取、自旋与阻塞唤醒流程。

ReentrantLock 源码解析