RabbitMQ 核心八股

一句话结论 RabbitMQ 的核心是 Exchange → Binding → Queue 的路由模型。消息可靠性靠三阶段保障(Confirm + 持久化 + ACK),死信队列处理失败消息,延迟消息靠 TTL+DLX 实现。 Exchange 类型


Kafka 核心八股

一句话结论 Kafka 是分布式日志系统——消息按序追加到 Partition 末尾(顺序写),消费者按 Offset 拉取(Pull 模型)。高吞吐靠顺序写 + 零拷贝 + 批量压缩。 核心概念 概念


Redis 持久化与高可用

一句话结论 RDB 是快照备份(全量、快、可能丢数据),AOF 是命令日志(增量、安全、文件大)。生产环境两者结合使用。高可用靠主从复制 + Sentinel + Cluster三级递进。 持久化 RDB(Redis Database) SAVE: 主线程执行 → 阻塞所有请求 ❌ BGSAVE:


MySQL EXPLAIN 与慢查询优化

30 秒回答 EXPLAIN 是用来判断 SQL 执行计划的工具,面试重点看 5 个字段:type、key、rows、Extra、possible_keys。优化慢查询的顺序一般是:先确认慢 SQL 和执行频率,再看执行计划是否走对索引,然后检查扫描行数、回表、排序、临时表、锁等待和数据量增长。不要


MySQL B+ 树与索引

一句话结论 MySQL InnoDB 用 B+ 树作为索引结构——非叶子节点只存键不存数据、叶子节点存完整行并通过双向链表连接。千万级数据只需 3-4 层,范围查询顺序 I/O 极快。 核心原理 为什么 B+ 树 二叉树千万数据约 24 层(24 次随机 I/O),B+ 树每节点存 1000 个键


MySQL 锁:行锁/间隙锁/临键锁

一句话结论 InnoDB 有三种锁:行锁(锁定具体行)、间隙锁(锁定行之间的间隙,防插入)、临键锁(行锁+间隙锁,InnoDB 默认)。RR 隔离级别通过临键锁解决幻读。 核心原理 三种锁 表数据: [id=5] ...(间隙)... [id=10] ...(间隙)... [id=15] SELE


MySQL 索引类型与优化

一句话结论 MySQL 索引优化围绕一个核心目标:减少回表。手段是覆盖索引、联合索引、索引下推,工具是 EXPLAIN。 覆盖索引 一句话: 查询所需字段全部能从索引中获得,不需要回表查聚簇索引。 -- 索引: (user_id, status, created_at) SELECT user_id


MySQL 事务隔离与 MVCC

一句话结论 MySQL InnoDB 通过 MVCC(多版本并发控制) 实现非锁定的一致性读——每个事务看到的是快照数据,读写互不阻塞。隔离级别决定了快照的"新鲜程度"。 核心原理 四大隔离级别


Go select 详解

一句话结论 select 是 Go 的多路复用语句——同时监听多个 Channel 操作,哪个先就绪执行哪个。多个同时就绪则伪随机选择一个,避免饿死。配合 default 可实现非阻塞操作。 核心原理 执行机制 1. 对所有 case 的 Channel 上锁(按地址排序防死锁) 2. 检查是否有


Go panic 与 recover

一句话结论 panic 中断当前 Goroutine 的正常执行,沿调用栈向上传播并执行沿途的 defer。recover 只能在 defer 中捕获 panic,阻止程序崩溃。 核心原理 panic 传播 func C() { panic("error in C") } func B() { C(