【置顶】经典文章收录

Golang Goodbye, Clean Code 举例论述是否代码越干净越好 Golang实现的一些经典数据结构和算法 DataBase 数据库发展史 Career My career race is in the home stretch, here’s what I know 唯一不变的是变化本身,做好面对它的准备。幼稚、美好的规划最终基本都不会实现。 My best career advice: At every job you should either learn or earn. Either is fine, Both is best. But if it’s neither, quit. Interesting 鲍尔默的面试题 Linear Algebra 101 for AI/ML 看见概...

六月 7, 2024 · 1 分钟 · 271 字 · ZhangYong

Golang中Panic的捕获和处理机制

golang生态的错误处理机制和常见的面向对象语言不尽相同。通常情况下,我们可以将panic和recover机制结合起来处理程序运行期间发生的异常错误。 不过这也不是万能的,在语言层面有一些致命的错误是无法被recover捕获的。 本篇文章将会介绍常见的可恢复和不可恢复两大类Pani...

六月 4, 2025 · 2 分钟 · 822 字 · ZhangYong

阿里云PolarDB读写分离模式的高可用架构

大型服务架构往往对于RDS数据库的高并发、高可用和数据一致性有着严格要求,本文将介绍实际项目中使用阿里云PolarDB MySQL版本搭建满足上述要求的RDS数据库的经验。 高可用 通常情况下我们可以通过 虚拟IP(VIP) 技术和 MHA(Master High Availability) 在专有网络...

四月 17, 2025 · 4 分钟 · 1923 字 · ZhangYong

Golang GC

相关概念 栈对象:指分配在函数调用栈(goroutine stack)上的内存,通常是局部变量(如基本类型、结构体、数组等),它们的生命周期与所属的函数调用绑定,函数返回时被自动回收,无需垃圾回收(GC)干预。 堆对象:指分配在全局堆(heap)上的内存,它们的生命周期由垃圾回收器(G...

四月 3, 2025 · 5 分钟 · 2374 字 · ZhangYong

Golang GMP模型

什么是GMP G(Goroutine) G 是调度的基本单位,由 Go 运行时管理,比 OS 线程更轻量代表goroutine,主要保存状态信息以及寄存器的值。 当 goroutine 被调离 CPU 时,调度器负责把 CPU 寄存器的值保存在 g 对象的成员变量之中。 当 goroutine 被调度起来运行时,调度器又负责把 g 对象的成员变量所保存的寄存器值恢...

三月 28, 2025 · 6 分钟 · 3001 字 · ZhangYong

数据圭臬论

读写分离 主从切换一致性 分片 分库分表 数据倾斜 冷热分离 缓存 操作系统 L1缓存:容量最小、速度最快,每个物理核上独享 L2缓存:容量、速度次之,每个物理核上独享 L3缓存:容量最大、速度最慢,多物理核共享 CDN网络 TTL过期策略 源站调用CDN API强制刷新 客户端获取携带版本号或hash值参数...

三月 26, 2025 · 1 分钟 · 483 字 · ZhangYong

Golang 底层实现之sync.map

之前在文章《Golang 底层实现之map》里介绍过map在高并发场景下赋值or更新时会检查其标志位flags,当有其他协程在进行“写”操作时会触发panic。 通常为了避免程序出现预期之外的并发读写问题,我们会对map进行加锁保护,或者直接使用官方提供的并发安全map——sync....

三月 19, 2025 · 4 分钟 · 1695 字 · ZhangYong

OpenTelemetry+Tempo+Grafana搭建分布式Trace监控

上篇文章提到了Context在OpenTelemetry-Go中的应用 其中的经验来自于之前工作中对公司内部分布式服务做链路追踪的经历,所以这篇文章来做分布式链路追踪的实践回顾。 私有规范 最开始接触是公司准备针对内网微服务间的调用来做链路追踪,想法来自于Google的那篇著名文章《D...

三月 8, 2025 · 7 分钟 · 3505 字 · ZhangYong

Golang 原生包之Context

首先要说的是context/context.go源码是一个非常值得学习的实现案例,非常建议阅读源码。 其次关于context的功能简单点可以一言以蔽之: 「context 用来解决 goroutine 之间退出通知、元数据传递的功能。」 具体来说,context 提供了以下能力: 退出通知:通过 context 的取消机制,可...

二月 24, 2025 · 9 分钟 · 4089 字 · ZhangYong

Golang Channel

之前写过一篇文章 《关于对「Don’t communicate by sharing memory, share memory by communicating」的理解》 ,在里面介绍了我对Golang CSP设计理念中「通信」概念的理解。 所以,与前者不同的是,本篇更注重Channel相关底层实现的探索。 数据结构 type hchan struct { qcount uint // 当前队列中的元素数量 dataqsiz uint // chan...

二月 10, 2025 · 9 分钟 · 4477 字 · ZhangYong