一个 HTTP 请求花了 500ms,DNS?TCP?TLS?服务端?没有 httptrace,你只能猜。Go 标准库的 httptrace 能把请求拆成 5 个独立阶段精确测量耗时——不用第三方库,不用改代码架构。
三种 Go runtime 不会报告但线上常见的隐蔽阻塞模式:RWMutex writer-preference 导致的递归读阻塞、channel send 接收方退出后的永久阻塞、context 链断裂。从 goroutine dump 信号反推根因的排查框架。
不背 24 种 GOF 模式,理解四条 Go 设计理念——组合、接口、零值、并发。每一条都让传统设计模式以更简洁的形式自然涌现。
泛型不是语法糖,而是编译期门禁——它把类型混乱从运行时拉回编译期,让编译器替你问一句:这个类型真的该进来吗?
每次 json.Unmarshal 产生 23 次堆分配——用实测数据算清 GC、分配、初始化三笔账,追踪 v2 怎么还、sonic/jsoniter/easyjson 怎么转嫁,给出按场景选型的决策框架。
三种限流算法的教科书定义和生产实现存在系统性偏离——Nginx 不是纯漏桶、滑动窗口的精确性有内存代价、令牌桶在分布式下并不简单。理解偏离才能从面试答案走到生产选型。
从 PHP 到 Go 的迁移,本质不是语法切换,是复杂度归属变化——错误、副作用、状态从运行时和框架兜底里,被搬到类型、错误返回、测试和审查里。一组对照实验 + 迁移 PR 评审现场 + 五点判断框架,告诉你迁移真正完成的标志。
包管理器不只是下载工具,它要回答三个更难的问题:版本谁决定、来源谁证明、构建如何复现。安装层解决「拿到包」,快照层让依赖树可审查,协议层规定信任边界。lock diff 不是噪音,是构建输入的审计记录。
并发模型不是 CSP / Actor / 线程谁更先进,而是在状态归谁、等待归谁、失败归谁三件事上做不同责任分配。用同一个任务编排器横切 Go / Erlang / Java,看责任如何在代码表面落位。
用 Go 1.17、1.18 和 1.26 实测 slice 扩容曲线,解释旧公式为什么会在 1024 附近断裂,以及 1.18 真正修掉了什么。