99-Go 后端开发面试题库大全

💡 使用指南:这是一份终极题库,汇集了我们之前的学习内容、飞书真题以及高频考点。题目按模块分类,难度分级(🟢 基础、🟡 进阶、🔴 困难/实战)。你可以随时拿出来自测,或者把它作为“刷题清单”。

📂 目录

  1. Go 语言基础与进阶
  2. 并发编程 (GMP & 锁)
  3. 数据库 (MySQL)
  4. 缓存 (Redis)
  5. 计算机网络 & 操作系统
  6. 微服务与分布式 (K8s/Kratos)
  7. 场景设计与算法

1. Go 语言基础与进阶

🟢 基础

  • Go vs Java:为什么选择 Go?相比 Java 有什么优势?
  • Slice:Slice 和 Array 的区别?底层结构是什么?扩容机制是怎样的?
  • Map:Map 是线程安全的吗?底层结构 (hmap) 是什么?遍历顺序是固定的吗?
  • Defer:多个 defer 的执行顺序?defer 修改具名返回值会发生什么?
  • Interfacenil 接口的坑(var i interface{} = (*int)(nil) 是 nil 吗?)

🟡 进阶

  • 内存逃逸:什么是内存逃逸?哪些场景会触发逃逸?(栈 堆)
  • GC (垃圾回收):Go 的三色标记法是什么?写屏障 (Write Barrier) 解决了什么问题?
  • Context:Context 的作用?ValueCancelTimeout 怎么用?
  • 反射reflect 包怎么用?为什么尽量少用反射?

🔴 困难/实战

  • PProf 排查:线上 CPU 100% 怎么排查?内存泄漏怎么查?
  • Panic 捕获:子协程 panic 会导致主进程挂掉吗?如何优雅恢复?

2. 并发编程 (GMP & 锁)

🟢 基础

  • Goroutine:协程和线程的区别?为什么协程轻量?
  • Channel:无缓冲 vs 有缓冲 Channel 的区别?已关闭 Channel 读写会怎么样?
  • Mutex:互斥锁 (sync.Mutex) 和读写锁 (sync.RWMutex) 的区别?

🟡 进阶

  • GMP 模型:详细解释 G、M、P 的作用和调度流程。
  • Work Stealing:P 是怎么偷其他 P 的任务的?为什么要从尾部偷?
  • Sync.Map:为什么比 Mutex + Map 快?(读写分离、空间换时间)
  • WaitGroup & ErrGroup:如何等待一组协程结束?发生错误怎么处理?

🔴 困难/实战

  • 调度细节:M 什么时候会休眠?调度器怎么防止全局队列饿死?
  • 并发模式:手写生产者-消费者模型?手写并发安全队列?
  • 锁底层:Mutex 是悲观锁还是乐观锁?自旋锁 (Spin Lock) 是什么?

3. 数据库 (MySQL)

🟢 基础

  • 索引:B+ 树和 B 树的区别?为什么 MySQL 用 B+ 树?
  • 事务:ACID 是什么?
  • 隔离级别:读未提交、读已提交、可重复读、串行化分别解决了什么问题?

🟡 进阶

  • MVCC:多版本并发控制原理?Read View 是怎么工作的?
  • :行锁、表锁、间隙锁 (Gap Lock)、临键锁 (Next-Key Lock)。
  • 幻读:MySQL 怎么解决幻读的?(快照读 vs 当前读)
  • 日志:Binlog、Redo Log、Undo Log 的区别和作用?

🔴 困难/实战

  • 慢 SQL 优化:Explain 怎么看?Using filesort / Using temporary 如何优化?
  • 深分页Limit 1000000, 10 怎么优化?(子查询 ID / 游标)
  • 主从延迟:读写分离导致读不到最新数据怎么办?

4. 缓存 (Redis)

🟢 基础

  • 数据类型:常用 5 种类型及其使用场景?(String, List, Hash, Set, ZSet)
  • 持久化:RDB 和 AOF 的优缺点?

🟡 进阶

  • 过期策略:Redis 是怎么删除过期 Key 的?(定期 + 惰性)
  • 缓存异常
    • 缓存穿透:查不存在的数据(布隆过滤器)
    • 缓存击穿:热点 Key 过期(互斥锁)
    • 缓存雪崩:大量 Key 同时过期(随机时间)
  • ZSet 底层:跳表 (SkipList) 原理?时间复杂度?

🔴 困难/实战

  • 双写一致性:更新 DB 后删缓存?延迟双删?Canal 订阅?
  • 分布式锁setnx 怎么实现?看门狗机制 (Redisson) 是什么?
  • 大 Key/热 Key:怎么发现?怎么处理?

5. 计算机网络 & 操作系统

🟢 基础

  • TCP/IP:三次握手、四次挥手流程?为什么握手是3次挥手是4次?
  • HTTP:状态码 (301/302/401/403/502/504)?GET vs POST?
  • 进程/线程:区别?通信方式有哪些?

🟡 进阶

  • HTTPS:TLS 握手过程?对称加密 vs 非对称加密?
  • IO 模型:BIO, NIO, AIO, IO 多路复用 (Epoll)?(Select vs Epoll)
  • 零拷贝:Sendfile / Mmap 原理?
  • TCP 细节:TIME_WAIT 为什么是 2MSL?粘包拆包怎么解?

6. 微服务与分布式 (K8s/Kratos)

🟢 基础

  • CAP 理论:为什么只能三选二?(P 发生时 C/A 的权衡)
  • K8s:Pod, Deployment, Service 的作用?

🟡 进阶

  • 服务发现:客户端发现 (Kratos+Etcd) vs 服务端发现 (K8s Service/DNS)?
  • RPC:Protobuf 为什么比 JSON 快?gRPC 基于什么协议 (HTTP/2)?
  • 分布式 ID:雪花算法 (Snowflake) 原理?时钟回拨怎么解?

🔴 困难/实战

  • 全链路追踪:TraceID 怎么透传?
  • 限流熔断:令牌桶 vs 漏桶?Hystrix 熔断状态机?
  • 配置中心:Nacos / Etcd 配置热更新原理?

7. 场景设计与算法

📐 算法 (力扣高频)

  • 链表:反转链表、K 个一组翻转、环形链表。
  • 数组:两数之和、三数之和、接雨水。
  • :层序遍历、最近公共祖先。
  • DP:爬楼梯、最大子序和。

🏗️ 系统设计

  • 秒杀系统:如何抗住 10w QPS?(缓存、削峰、限流、异步)
  • 短链接系统:长转短原理?(Hash vs 发号器)
  • 排行榜:实时 Top 100 怎么做?(Redis ZSet)

建议

  1. 把这份文档打印出来或复制到你的笔记软件。
  2. 每掌握一个,就在 [ ] 里打个 x
  3. 面试前重点复习🔴 部分的实战题。