- 博客(52)
- 收藏
- 关注
原创 2026-11-05-Go内存管理面试
内存分配器分层、三色标记、写屏障、STW、内存泄漏——Go 内存管理这块面试最容易问懵。这篇把分配器到 GC 到泄漏排查串成十连问,每题配答案框架和追问应对,文末给 GC 调优对照表。
2026-11-05 20:08:11
331
原创 Go 项目实战:日志系统三个致命坑,一次故障排查多花 3 小时,traceID+结构化日志改完
线上支付接口偶发超时,拉日志排查发现三个问题:级别混乱、没有 traceID、日志拖慢服务。这篇复盘三个坑的拆解,用 traceID 贯穿全链路、结构化日志加异步写改完,文末给日志规范对照表,可直接当团队规范落地。
2026-11-05 20:07:54
289
原创 Go IM 源码实战(15):11 个开关少传一个就全开,消息落不落库看这张 map
一条消息会不会落库、会不会计未读、会不会推离线,全看它身上那张 11 个 key 的开关表。而这张表里 key 不存在时默认是 true——所以老客户端不传 options 也不会瘫痪,但新客户端想关掉某个开关必须显式传 false。这篇从字节层面讲清三个 ID 的分工、信封为什么用 JSON 而载荷用 protobuf、base64 那 33% 的体积换来了什么,以及一个建了 map 又把它扔掉的函数。
2026-11-04 20:19:20
301
原创 2026-11-04-Go批量导出实战
一个后台导出接口,订单量冲到 2 万后内存飙到 90%、P99 到 12 秒。复盘发现三个批量任务的经典坑:全量加载、全量拼字符串、串行写。这篇用分页游标+errgroup并发+信号量限流+写临时文件四招改完,P99 压到 900 毫秒,文末给批量任务自查清单表。
2026-11-04 20:13:02
355
原创 Go 并发面试十连问:goroutine 泄漏拖垮 3 万 QPS,channel 关闭后写一次就 panic
goroutine 和线程到底差在哪、channel 关闭后写会怎样、GMP 调度一次怎么走——这三个 Go 并发面试题,背答案的人多,说清楚底层的人少。这篇文章把并发面试高频考点串成十连问,每题配答案框架和追问应对,文末给排查清单表。
2026-11-04 20:12:45
260
原创 2026-11-03-Go context面试十连问
线上搜索接口超时设了 3 秒,P99 却常年 28 秒——排查发现第三层兜底逻辑把 ctx 换成了 Background(),取消信号当场断线。这篇用这个真实故障开场,把 context 的十个高频面试追问一次讲透:取消为什么传不动、WithValue 为什么被骂、不调用 cancel 会不会泄漏、同一个 ctx 能不能多个 goroutine 共用。附一张 context 故障 30 秒排查清单和 WithValue 使用对照表,建议收藏。
2026-11-03 21:59:35
311
原创 万字详解|Go 进阶(五):sync 包底层:Mutex 自旋 4 次转饥饿,WaitGroup 漏 1 个 Done 挂起 3000 goroutine
线上 goroutine 只涨不降、pprof 一片 semacquire,持锁的人到底在哪?这篇从 runtime/sema.go 的 state 位域讲起,把 Mutex 的 CAS 快路径、4 次自旋、1ms 饥饿阈值、RWMutex 的 readerCount 关门术逐层拆开,附 WaitGroup 漏 Done 挂起 3000 goroutine 的真实排查过程、sync 类故障速查表和 30 秒定位清单,Go 1.25.4 源码实测。
2026-11-02 19:40:34
649
原创 Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
1 万条消息每秒,光是校验和扇出就要查 15 万次缓存,全压 Redis 会先撞带宽和延迟。把最热的数据搬进进程内存,一次命中从 0.3 毫秒变成 100 纳秒,但代价是"失效"变难:一个用户改了昵称,可能连带 5 个 key、几十个节点。这篇讲 LRU 为什么是两个数据结构、为什么分 500 个槽、双 TTL 在防什么,以及一个依赖图引起的循环失效。
2026-11-02 19:38:07
542
原创 Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
用户有 30 个会话,28 个都有新消息,他只看到 2 个红点。查下来是三个不同原因:有的设了不接收、有的免打扰、还有的被归到了系统消息会话。这篇讲会话 ID 为什么必须先排序再拼、未读数为什么能直接用减法算(以及它依赖的四个前提)、阅后即焚为什么不删消息只抬水位。
2026-11-02 19:37:46
1240
原创 万字详解|Go 进阶(四):channel 底层与泄漏排查:5000 个 goroutine 睡死,发送方挂起后谁来唤醒
线上 goroutine 只涨不降、pprof 一拉一片 chan send 阻塞,发送方挂起后到底谁能把它唤醒?这篇从 runtime/chan.go 的 hchan 结构体讲起,把 chansend 四步源码路径、sendq/recvq 两条等待队列、select 随机性原理逐层拆开,附 5000 goroutine 泄漏的真实排查过程、四类故障速查表和 30 秒定位清单,Go 1.25.4 实测。
2026-11-01 19:55:48
462
1
原创 Go IM 源码实战(12):建个 500 人的群,写的是 500 条记录
建一个 500 人的群,写的不是一条记录:1 条群 + 500 条成员 + 500 条会话 + 1 条通知,跨四个服务。这篇讲群这块真正的三个数:群成员为什么要用中间表不能塞数组、禁言为什么必须分两层、解散一个群为什么要删 8 类缓存。顺带讲一个我踩过的坑——转让群主之后,管理员凭空少了两个。
2026-10-29 20:16:55
319
1
原创 Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
A 手机退出登录,B 手机同账号还能收发消息,十几秒后才被踢。查了四小时才明白:token 状态缓存在每个服务进程的内存里,踢人的广播还在路上。这篇讲全项目最小的 106 行鉴权中枢、token 在 Redis 里的真实结构、五种多端互踢策略,以及三处依赖 map 遍历顺序的隐患。
2026-10-29 20:16:10
344
原创 RAG 生成层面试十连问:答案不给出处、幻觉率从 3% 飙到 18%,引用校验怎么兜底
同样的召回率,生成层能让答案一个天上一个地下。本文用 10 个面试追问拆开 RAG 生成与评估链路:片段怎么排、引用怎么落地、幻觉率口径怎么定义、从 3% 飙到 18% 的排查顺序,附一份能直接跑的评估脚本和一张生成层排查速查表。
2026-10-29 19:55:58
499
原创 Go IM 源码实战(10):gRPC 超时不往下传,一次慢查询拖垮整条链路
接口 P99 从 200ms 涨到 900ms,查了一整天没找到任何一行变慢的代码。最后看 goroutine 数才发现:三层的 context.WithTimeout(ctx, 3s) 各写各的,上游超时返回了,下游还在算。这篇讲 gRPC 层的四个坑:超时是预算不是参数、重试会放大故障、业务错误码让标准治理失效、PanicCapture 排错了位置。
2026-10-28 20:18:19
266
1
原创 Go IM 源码实战(9):账号明明在线,推送却找不到人:8 个网关怎么路由
测试同事说:"我在电脑前收得到,一走开手机就没通知。"日志里在线推送成功,离线推送却没触发。查了四小时才发现,判断逻辑藏在一个叫 pushTerminal 的白名单里——PC 在线不算送达。这篇讲推送最后一公里的三件事:连接在哪台网关、什么算在线、500 人的群怎么扇出。
2026-10-28 20:17:59
481
3
原创 Go 项目实战:2 万条定时导出把内存打爆,errgroup+信号量 40 行改完,P99 从 12s 压到 900ms
一次周五晚上的 OOM:凌晨 5 分钟涌进 2 万条订单,2 万个 goroutine 把 4GB 内存的服务打到重启三次。本文完整复盘定位过程与三把刀改造:errgroup+SetLimit 收并发、独立槽位取代共享 buffer、分批流式拉平内存——峰值内存降 85%、P99 降 93%,附可直接抄走的 Go 1.25+ 并发导出池代码。
2026-10-28 19:55:49
577
原创 Go IM 源码实战(8):四个 Kafka topic,落库失败不返 error 会静默丢消息
一条消息从 msg 服务发出去到落进 Mongo,中间经过了四个 Kafka topic。我一开始以为这层是多余的,直到 Mongo 抖了一次——发送接口毫无感觉,队列自己积压自己消化。这篇讲清四个 topic 各干什么、同会话保序靠的三层防线、批处理为什么必须有两个触发条件,以及我在这套代码里找到的四个坑:Do 没有返回值,所以业务失败根本没法表达。
2026-10-27 20:44:48
266
原创 Go IM 源码实战(7):断线三天重连,水位算错就漏消息
用户点了"清空聊天记录",退出重进,消息全回来了;另一个用户把历史往下翻,翻到第 40 页还在加载。两个 bug 一个原因:拉取接口少夹了一层水位边界。这篇把同步的四个水位、四道边界、镜像的 isEnd 判定讲透,也讲清未读数为什么能直接用 maxSeq 减 hasReadSeq——这个减法成立是有前提的。
2026-10-27 20:44:28
295
原创 RAG 检索面试十连问:召回率从 92% 掉到 61%,答案句被拦腰截断怎么排查
召回率从 92% 掉到 61%,团队折腾两天换 embedding 模型却没搞清楚问题出在切分。本文用 10 个面试追问拆开 RAG 检索链路:切分怎么切、混合检索怎么融、rerank 什么时候上、召回率暴跌的排查顺序,附一个能直接跑的 chunk 切分评估脚本和排查速查表。
2026-10-27 19:56:10
543
原创 Go IM 源码实战(6):一条消息只占 1/100 个文档,100 是改不了的硬编码
一条 500 人群里的消息只存一份,但 500 个人打开看到 500 种样子——撤回的看不到、删了的不显示、自己的那条带已读。这背后是"分桶 + 读时改写"两个设计:100 条消息塞一个 Mongo 文档,靠 (seq-1)/100 定位;展示形态在读取时才拼。这篇顺带算清一件事:为什么这个 100 一旦上线就不能改,改了历史消息会全乱。
2026-10-26 20:34:58
295
原创 Go IM 源码实战(5):seq 分配两段式 Lua,号段发完那 3 秒会撞号
群聊里两个人同时发消息,序号撞成了同一个。查了半小时日志才发现,问题不在并发写,而在号段发完那一刻:Redis 里这一段用尽,第二段 Lua 还没写回,两个请求同时走了 Mongo 兜底。这篇拆开 518 行 seq 分配器,讲清两段式 Lua 的 4 个状态、10 次重试失败后为什么只打日志、以及单聊 50 / 群聊 100 这两个数字是从哪来的。
2026-10-26 20:34:19
355
原创 万字详解 | Go 进阶(三)内存分配器:一次 make 背后 9 次跳转,它和 GC 怎么配合不拖垮延迟
网关服务白天正常,晚上高峰 P99 从 3ms 飙到 40ms,gctrace 里 GC 占比只涨到 2.1%,调大 GOGC 却只降 5ms。本文顺着一次 make([]byte, 512) 的 9 站旅程拆开 Go 内存分配器:66 个 size class 怎么分、mcache 凭什么无锁、span 双位图怎么与 GC 互不打架,附可复制的 benchmark 代码和分配慢/GC 频繁排查速查表。Go 1.25 源码口径,建议收藏备用。
2026-10-26 19:56:42
846
原创 Go IM 源码实战(4):发消息 16 行不落库,11 个开关配错满屏红点
发送接口只有 16 行,而且它不落库——消息投进 Kafka 就直接返回成功。这篇拆 OpenIM 的消息发送链路:三个 ID 各管什么、为什么通知类型完全不校验、11 个开关怎么决定一条消息的一生、已读回执为什么必须关掉 4 个开关,以及我读代码时挖到的两个真 bug。
2026-10-25 20:54:26
292
原创 Go IM 源码实战(3):HTTP 155 条路由,限流退避永远只等 1 秒
一个 README 里写着「可选」的参数,代码里却是必填;一个限流中间件写成了 CPU/CPU,退避时间永远 1 秒。这篇拆 OpenIM 的 HTTP API 层:11 层中间件为什么顺序不能乱、155 条路由怎么做到风格完全一致、认证中间件只处理 POST 会留下什么隐患,以及那个恒等于 1.0 的 loadRatio 到底算什么 bug。
2026-10-25 20:53:59
227
原创 RAG 检索层变天:NVIDIA 三模型全开源,官方实测 token 成本立降 14%,旧方案会失效吗
10 月 17 日到 21 日四天,NVIDIA 把文档解析、向量嵌入、重排序三个模型接连开源,权重开放可商用,官方实测换套检索配置每轮 token 成本降约 14%,Embed 8B 在 ViDoRe v3.1 拿到 61.17 nDCG@10。这篇不吹不黑:三个模型各管哪段、14% 该怎么打折看、和 BGE/Jina 怎么选,三张对照表直接拿走。
2026-10-25 19:55:55
588
原创 Go IM 源码实战(2):WebSocket 握手 11 步,少 1 个参数连不上
照着文档连 WebSocket 网关,握手一直失败,报错只有一行 strconv.ParseBool: parsing "": invalid syntax——文档说这参数可选,代码里却是必填。这篇拆 OpenIM 网关握手的 11 步:每一步失败返回什么、连接数检查为什么必须放在鉴权之前、10 万连接到底吃掉多少 fd 和内存,以及多端互踢为什么必须连 token 一起废掉。
2026-10-23 20:37:16
319
原创 Go IM 源码实战(1):一条群消息 1500 次写入,同步做会拖垮整个服务
给 App 加个聊天功能,很多人的第一反应是建一张 message 表、发消息就 INSERT。等群聊、离线补拉、多端同步、未读红点一个个压上来,才发现查询全乱、消息会重、红点永远对不上。这篇从一个 400 个 Go 文件的开源 IM 服务端讲起:一条 500 人群消息为什么会产生 1500 次写入,以及它凭什么敢在投完 Kafka 就立刻返回成功。
2026-10-23 20:36:44
93
原创 万字详解 | Go 进阶(二)GC 三色标记:STW 从 10ms 压到 40μs,1 次 Full GC 让线上 P99 抖了 3 秒
Go 服务平时不卡,一到业务高峰就周期性抖一下?八成是 GC 并发标记被分配速率拖垮,辅助标记全压在业务 goroutine 上。这篇从三色标记主干讲到混合写屏障,用 gctrace 逐段拆开 STW 为什么只有 40 微秒,再给 GOGC 调优、GOMEMLIMIT 配置和三个线上故障的真实定位过程。看完能看懂自己服务的 GC 曲线,知道参数该往哪边调。
2026-10-23 20:00:29
444
原创 Go 项目骨架 25 个目录只用 9 个:错误码错 1 位,线上排查多花 3 小时
新手搭 Go 工程最爱直接套 project-layout 的 25 个目录,结果一半目录从建起来就没用过,错误码还随手从 1001 开始编。上线后排查一个问题,先在十几个空目录里迷路,再对着对不上的错误码猜位置,一下午就没了。这篇把我们团队实际留下的 9 个目录、三段式错误码编码和配置分层一次讲清,附可运行的骨架代码和目录取舍速查表。
2026-10-22 19:04:52
1187
原创 Go GMP 调度器 10 个高频追问:3 个线上故障让 P99 从 80ms 飙到 2s、10 万 goroutine 泄漏
线上一个 Go 服务,QPS 没涨、内存却一路飙到 8G,P99 从 80ms 直接跳到 2s——查下来是 GMP 调度器在偷偷拖后腿:goroutine 泄漏、P 被系统调用卡住、GOMAXPROCS 在容器里取错。这篇把 G、M、P 怎么配合、调度循环怎么转、10 个面试高频追问和 3 个真实线上故障一次讲清,每个故障都给排查命令和定位路径。
2026-10-21 20:33:52
442
原创 万字详解 | Go 进阶(一)GMP 调度器:10万个goroutine凭什么不慌?
GMP 调度器是 Go 高并发的发动机。本文用一家餐厅的故事讲透 G/M/P 三角色、本地队列与 work stealing、从协作式到异步抢占的演进、netpoller,并拆解容器里 GOMAXPROCS 配错导致 P99 飙高的经典事故与 Go 1.25 的自动修复。万字长文,建议收藏慢读。
2026-10-20 14:46:53
608
原创 一周AI热点速览 | Gemini 4 Argon百万上下文全球上线、Meta开源8160亿参数Muse Spark:大模型进入“比干活“时代
过去一周AI圈依旧神仙打架:Google Gemini 4 Argon全球上线、Meta首款前沿模型亮相并开源8160亿参数模型、DeepSeek深夜更新、Kimi K3.1预告百万上下文……本文用5分钟带你看完本周最值得关注的AI动态,文末附对Go后端/Agent开发者的3条落地建议。
2026-10-19 08:00:49
327
原创 上下文一长就忘事?万字长文教你构建Agent“工作台便签+档案柜”记忆系统
万字长文!工具稳了,下一个翻车点就是记性。用“工作台便签和档案柜”的生活比喻,带你掌握短期上下文窗口管理、长期记忆存储、读写策略与淘汰机制。记忆和RAG到底有什么区别?窗口满了只会截断怎么办?新旧记忆冲突听谁的?面试高频考点全解析,配面试追问提示与答题框架,帮你打通记忆分层。
2026-10-16 20:01:11
200
原创 Agent 线上翻车最多的地方!万字拆解工具调用、幂等设计与面试八股
万字长文!循环让Agent动起来,但手脚乱动照样出事。用“给师傅配工具箱”的生活比喻,把工具定义、参数校验、权限分级、幂等设计和结果回灌讲透。工具描述怎么写才能防幻觉?写操作幂等键怎么设计?工具太多塞不下prompt怎么办?每个技术点附带面试官追问提示,帮你彻底解决Agent手脚不听使唤的问题。
2026-10-14 20:08:06
429
原创 Agent死循环一晚上烧掉一个月预算?万字拆解工程级循环设计与面试考点
万字长文!Agent是接单制的,不是一问一答。用“接单、干活、交活、复盘”四大场景,带你吃透ReAct循环的工程实现。为什么状态机比while循环更稳?终止条件怎么设三层?死循环怎么排查?融合面试高频追问与答题框架,带你从Demo跑起来到稳上线,面试时讲明白,一篇讲透。
2026-10-13 20:00:00
495
原创 RAG 不进化就淘汰!2026到2027年 最新趋势全解读:Agentic RAG、GraphRAG、多模态、长上下文,面试官都在问
万字番外篇!2026 年 RAG 生态大变天:Agentic RAG 让检索从被动变主动研究,多模态 RAG 把图片表格录音全拉进语义空间,GraphRAG 用知识图谱补上关系推理,长上下文和 RAG 分层共存,自适应检索让参数自己学,评估治理成了合规硬要求。每一条趋势都标了官方发布时间和来源,回扣前六篇基础,附赠面试话术。面试官问“最近 RAG 有什么新进展”,这一篇直接甩他脸上。建议收藏。
2026-10-12 20:04:20
958
9
原创 RAG落地常见坑与评估上线:怎么知道这套东西好不好用?万字收尾
专栏收官之作!RAG落地五大坑逐一拆解:切分不合理、召回不准、Prompt太长、模型不遵循上下文、评估缺失。用修车铺试车、模拟考出题、餐厅试营业三大比喻,讲透分层评估、评估集建设、上线监控、生产容错。从能跑到敢扛生产流量,这一篇帮你把坑全填平,面试和落地都稳了。
2026-10-11 19:54:31
417
2
原创 RAG检索重排与引用溯源:怎么找到真正有用的资料?面试加分项
RAG检索链路全拆解!混合召回为什么比纯向量强?重排和召回有什么区别?Prompt怎么编排才不迷失?引用溯源为什么是RAG最能打的优势?用“秘书整理材料”、“餐厅上菜”、“给厨师配菜单”、“论文脚注”四大比喻,把检索、重排、编排、溯源讲得透透的。面试加分项,这一篇必看。
2026-10-09 19:38:04
429
3
原创 一文搞懂向量与向量数据库:文字怎么变成可计算的数字?面试必问
从“地图坐标”到“语义地图”,小白也能懂的向量与向量数据库!一文讲透向量是什么、Embedding怎么把文字变成数字、余弦相似度和欧氏距离到底用哪个。为什么传统数据库做不了语义检索?向量数据库和传统库什么关系?面试必问的Embedding、相似度、向量检索全在这,帮你彻底搞懂RAG的底层引擎
2026-10-08 19:54:29
434
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅