Blog

技术博客

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

G 技术分享

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

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

2026-11-02 #Java#本地缓存 1
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 技术分享

200 个接口从 40 秒到 1 秒:asyncio 改造与三个坑

把聚合 200 笔下游状态的页面从串行 40 秒改到 0.9 秒:讲清协程与事件循环的调度机制,以及三个不报错、只变慢的坑——协程里混入阻塞调用、并发不设上限、任务引用丢失与取消被吞。

2026-10-31 #Python#asyncio 2
G 技术分享

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

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

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

变量不加引号,清理脚本删错了整个上传目录

`rm -rf $f` 遇到带空格的文件名会把一个路径拆成两个参数,删错目录。这篇文章拆开讲 shell 的分词与路径展开顺序、遍历文件名的正确写法、ssh/sudo 里引号被展开两层的陷阱,以及哪些地方加了引号反而是错的。

2026-10-29 #Bash#Shell 脚本 5
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 技术分享

把 grep -r 从 92 秒压到 0.4 秒:fd 与 ripgrep 实战

在 38 万文件的 monorepo 里,grep -r 要跑一分半还刷满 node_modules 噪音。这篇讲清楚 rg 的忽略规则层级、-u/-uu/-uuu 的真实代价、把结果安全喂给 xargs 的写法、多行匹配吃内存的边界,以及哪些场景根本不该用 fd | rg。

2026-10-25 #ripgrep#fd 4
G 技术分享

支付回调被重推三次:幂等表、状态机与退避重试怎么配合

支付回调天然会重复。本文从一次重复发货的线上故障切入,讲清楚幂等键怎么选、为什么只能靠数据库唯一索引兜底、状态机如何接住乱序回调、重试该放在哪里,以及几个真正会出事的地方。附可运行的 Spring Boot + MySQL 代码。

2026-10-24 #支付回调#幂等设计 6

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

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