RSS
菜单
社区成员个人主页
阿成员
DEV CN / 成员主页

阿青 · 社区话题账号

查看阿青 · 社区话题账号发布的技术文章、关注圈子与公开讨论。

0技术文章4关注圈子467圈内发布1关注者
COMMUNITY POSTS

交流圈发布内容

作者在不同技术圈子中的观点与讨论

1
# Golang

Go 为什么是云原生第一语言?K8s、Docker 与生态分析

Go 是云原生基础设施的第一语言:Kubernetes、Docker、etcd、Prometheus、Istio、Cilium、Terraform、HashiCorp 全家桶均用 Go 编写。原因:① 编译成静态单二进制,镜像小、启动快、无运行时依赖(libc 除外),容器友好;② 并发模型适合网络/控制平面服务;③ 跨平台交叉编译容易(GOOS/GOARCH);④ 内存占用低,适合资源受限的 sidecar;⑤ 标准库网络能力强。学…

2
# Golang

Go 微服务框架怎么选?go-zero、Kratos、go-kit 对比

go-zero:国内活跃、goctl 代码生成、内置限流/熔断/链路/分布式事务支持,开箱即用,业务落地快;Kratos:B站开源、模块化、与 protobuf/gRPC 深度集成,适合规范团队;go-micro:老牌但维护放缓;自研组合:Gin + grpc + go-kit(轻量灵活)。其他生态:服务发现 etcd/consul/Nacos、网关(Kong/APISIX)、可观测(Prometheus + Jaeger)。选型看:团…

3
# Golang

高并发系统怎么设计?分层架构、缓存、消息队列与兜底策略

分层设计:① 接入层:负载均衡(Nginx/LB)、CDN、限流(令牌桶)、WAF;② 应用层:无状态服务(方便水平扩展)、异步化(MQ 削峰)、缓存(Redis 本地缓存+分布式)、并发控制(worker pool)、优雅降级熔断(断路器);③ 数据层:读写分离、分库分表、索引优化、连接池。兜底:超时/重试/熔断/降级、链路追踪(trace)、监控告警(指标+日志)。Go 落地:Gin + Redis + MySQL + Kafka…

4
# Golang

Go GMP 调度细节:work stealing、抢占式调度与系统调用

调度循环(schedule):P 从本地 runq(无锁环形队列,256 容量)取 G → 执行;本地空 → 从全局队列(锁保护)批量取 → 再空 → 从其他 P 偷一半(work stealing)。触发点:G 主动让出(channel 阻塞、系统调用、runtime.Gosched)、抢占(1.14+ 基于信号,10ms 超时、栈增长检查)。系统调用:M 进入 syscall,P 解绑给新 M 继续执行其他 G;syscall 返回…

5
# Golang

Go defer 实现原理:deferproc 与开放编码优化

defer 语句编译时注册:① 编译器把 defer 转换为 runtime.deferproc 调用,defer 信息(函数指针、参数、执行位置)压入 goroutine 的 defer 链表(g._defer,LIFO 结构);② 函数返回前执行 runtime.deferreturn,从链表取出按后进先出执行。优化:Go 1.14+ 开放编码(open-coded defer)——可内联到函数末尾、无开销(适用 8 个内无循环、无…

6
# Golang

Go slice 扩容策略详解:翻倍扩容、1.25 倍与内存对齐

append 时 len < cap 直接用;len == cap 触发扩容:① 新容量估算:期望 = 旧 cap + 追加数;oldcap < 256 → newcap = oldcap × 2;oldcap >= 256 → newcap += (oldcap + 3×256) / 4(约 1.25 倍);② 内存对齐修正:按元素类型大小向上取整到分配类的规格(如 8 字节对齐的 size class),实际 newcap 可能大于…

7
# Golang

Go sync.Mutex 源码解析:自旋、饥饿模式与状态位设计

Mutex 底层是 state 字段(int32)+ sema(信号量)。状态位:locked(是否锁定)、woken(是否有唤醒的 waiter)、starving(饥饿模式标志),低 29 位是等待者计数。模式:① 正常模式——新 goroutine 直接 CAS 尝试抢锁,抢不到进等待队列(FIFO),唤醒的 waiter 与新来的竞争(新来的可能在栈上自旋,有优势);② 饥饿模式——等待超过 1ms 进入,新来的直接排队不抢,防…

8
# Golang

Go map 扩容机制:翻倍扩容、等量扩容与渐进式迁移

map 扩容触发:① 装载因子 > 6.5 → 翻倍扩容(bucket 数 ×2,重新哈希);② 溢出桶过多(> 2×bucket 数)→ 等量扩容(整理溢出桶)。扩容是渐进式:不是一次性 rehash,而是每次写操作迁移 1-2 个旧桶(oldbuckets),避免大停顿。迁移期间读:先查新桶再查旧桶。等量扩容不增加桶数,只把溢出桶数据搬回主桶减少链表长度。注意:map 扩容期间并发读写仍会 panic(非并发安全);遍历顺序随机与扩…

9
# Golang

Go channel 源码解析:hchan 结构、环形缓冲与收发流程

channel 底层是 hchan 结构体:① 环形缓冲区 buf(有缓冲时存储数据);② sendx/recvx(发送/接收索引);③ sendq/recvq(等待队列:阻塞的发送者/接收者 goroutine);④ mutex 保护所有操作。发送流程:缓冲有空位 → 写入环形缓冲;无缓冲或缓冲满 → 挂到 sendq 并 gopark 阻塞;有等待接收者 → 直接复制给接收者。接收相反。关闭:closechan 置 closed 标…

10
# Golang

Go 缓存与数据库一致性:Cache Aside、延迟双删怎么实现

常见模式:① Cache Aside(旁路缓存):读(缓存 miss → 查库 → 写缓存);写(先更新 DB,再删缓存——延迟双删防并发不一致);② 最终一致:异步消息(DB binlog → MQ → 更新缓存)、Canal 监听;③ 强一致:DB 为主,缓存只加速(读穿透)。坑:缓存与 DB 双写不一致、缓存雪崩(过期时间加随机)、穿透(布隆过滤器/空值缓存)、击穿(单 key 热点加锁重建)。原则:能容忍最终一致用异步,强一致避…