99-Go 后端开发面试题库大全
💡 使用指南:这是一份终极题库,汇集了我们之前的学习内容、飞书真题以及高频考点。题目按模块分类,难度分级(🟢 基础、🟡 进阶、🔴 困难/实战)。你可以随时拿出来自测,或者把它作为“刷题清单”。
📂 目录
1. Go 语言基础与进阶
🟢 基础
- Go vs Java:为什么选择 Go?相比 Java 有什么优势?
- Slice:Slice 和 Array 的区别?底层结构是什么?扩容机制是怎样的?
- Map:Map 是线程安全的吗?底层结构 (
hmap) 是什么?遍历顺序是固定的吗? - Defer:多个 defer 的执行顺序?defer 修改具名返回值会发生什么?
- Interface:
nil接口的坑(var i interface{} = (*int)(nil)是 nil 吗?)
🟡 进阶
- 内存逃逸:什么是内存逃逸?哪些场景会触发逃逸?(栈 → 堆)
- GC (垃圾回收):Go 的三色标记法是什么?写屏障 (Write Barrier) 解决了什么问题?
- Context:Context 的作用?
Value、Cancel、Timeout怎么用? - 反射:
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)
建议:
- 把这份文档打印出来或复制到你的笔记软件。
- 每掌握一个,就在
[ ]里打个x。- 面试前重点复习🔴 部分的实战题。