Blog

技术博客

格达软件工程师的实战经验、技术选型与行业观察

G 技术分享

手写 LRU 缓存:O(1) 双向链表与 6 个真实坑

从本地缓存被 OOMKilled 的真实场景出发,用 Go 泛型手写一个 O(1) 的 LRU,讲清哈希表为什么必须存节点指针、Get 不挪位置会退化成 FIFO、分片锁的收益与代价、按条数淘汰的内存陷阱,以及 LRU 挡不住扫描流量时该换什么。

2026-11-04 #LRU#Go 0
G 技术分享

shared_ptr 泄漏排查与三种智能指针的选型边界

从一个回调捕获 shared_from_this 导致的内存泄漏出发,讲清 unique_ptr、shared_ptr、weak_ptr 各自该在什么时候用:所有权怎么判断、shared_ptr 的原子操作与 make_shared 的代价、weak_ptr 的 TOCTOU 陷阱,附可运行的基准代码和选型表。

2026-11-03 #C++#智能指针 2
G 技术分享

我给本地缓存加了 TTL 和 LRU,踩了三个并发坑

从一个风控服务的真实场景出发,手写一个带过期时间和 LRU 淘汰的进程内缓存工具类。讲清链表与 Map 的并发删除竞态、时间源选择、清理线程的两个陷阱,以及缓存击穿的处理方式。

2026-11-02 #Java#本地缓存 2
G 技术分享

200 万条联想词,Trie 吃掉 2.2 GB 之后

200 万条搜索词的前缀匹配,用 HashMap 做 Trie 吃掉 2.2 GB 内存。本文拆解这 2.2 GB 的具体构成,对比 26 叉数组、Radix Tree、双数组 Trie 和排序数组二分的真实开销,并记录空串、surrogate pair、热更新等边界上的踩坑。

2026-11-01 #Trie#Radix Tree 3
G 技术分享

Vue 列表输入卡 300ms:六处改动与各自的代价

5000 行订单列表,搜索框每敲一个字符卡 250ms。这篇文章拆解卡顿的真实来源(不是 computed 没缓存,是 patch 了 4 万个 DOM 节点),给出虚拟滚动、shallowRef、v-memo、key 选择的可用代码,以及每种优化不该用的场景。

2026-10-30 #Vue 3#渲染性能 2
G 技术分享

Docker 多阶段构建:Go 镜像从 1.1GB 到 12MB

一个 Go 服务用最朴素的 Dockerfile 构建出来 1.11GB,改一行代码要等 47 秒。这篇拆开每一层看体积从哪来,用多阶段加 BuildKit 缓存把它降到 12.4MB、热构建 3 秒,并列出走到 distroless 和 scratch 之后必然会踩的坑:动态链接、CA 证书、时区、没有 shell。

2026-10-28 #Docker#多阶段构建 2
G 技术分享

WebSocket 心跳与重连:解决假在线和重连风暴

断网后界面仍显示已连接、消息发出去石沉大海,这是 WebSocket 最常见的故障。文章从一次地铁切网的假在线排查出发,给出客户端应用层心跳、服务端协议级探活、全抖动指数退避重连的完整实现,并算清各层超时与心跳的流量代价。

2026-10-26 #WebSocket#心跳检测 4
G 技术分享

Vue 3000 行表格渲染从 1.8s 到 190ms

一个 3000 行不分页的订单表格,切路由白屏 1.8 秒、改筛选卡 400 毫秒。按测量结果逐项排查:内联箭头函数、模板内计算、reactive 深代理、v-memo 的漏依赖坑,最后用虚拟滚动把首屏压到 190ms。

2026-10-23 #Vue 3#前端性能 3
G 技术分享

UPDATE 成功、SELECT 查不到:RR 幻读复现

两个事务在 RR 隔离级别下先查后插,计数没超却多发了券;更怪的是 UPDATE 影响行数为 1,同一事务里 SELECT 却查不到这行。这篇文章用可复现的 SQL 会话讲清快照读与当前读的差异、间隙锁的边界,以及唯一索引和原子更新怎么兜底。

2026-10-22 #MySQL#事务隔离级别 4
G 技术分享

订单表涨到 8000 万行,我劝你先别急着分库分表

订单表到了八千万行就必须拆?先看一条慢 SQL 再决定。这篇讲清分片键怎么选、基因法让订单号自带路由、跨分片分页与 count 的正确写法,以及事务、扩容、运维要付的真实代价。

2026-10-20 #分库分表#MySQL 8

有软件开发需求?我们 24 小时内响应

提交您的需求,格达软件将为您提供免费的需求评估与技术方案建议,咨询全程不收取任何费用。