Interview Knowledge Base

底层原理与面试复习库

从具体问题出发,用数据结构、状态流转图和可运行示例理解后端与人工智能的关键机制,再整理成面试时能讲清的话术。

Go 核心深度专题
10 题
容器 / 类型系统 / 并发 / 调度 / GC 内存
MySQL 数据库深度专题
6 题
B+Tree / 索引设计与失效 / EXPLAIN / 事务与锁
Redis 缓存深度专题
3 题
核心结构 / 缓存高可用 / 分布式锁
MQ 消息队列深度专题
2 题
可靠性投递 / 幂等重试 / 死信治理
人工智能模型演进专题
1 题
卷积 / 循环记忆 / 注意力 / 大模型

已收录深度题解

人工智能模型#图像与序列两条路线人工智能入门

从 CNN 到 Transformer:两条路线如何走向大模型

CNN 是提取图像局部特征的卷积神经网络,Transformer 是让不同位置按相关程度交换信息的网络结构。沿时间线讲清循环网络、长短期记忆、注意力与两类大模型。

MySQL 查询优化#10 类索引失效原因面试高频

MySQL 索引失效:10 类原因、底层原理与 EXPLAIN 排查

从索引定位与扫描的区别出发,用 4 张 SVG 图推演最左前缀、函数条件和范围后的列过滤,再分析隐式类型转换、LIKE、OR、区分度、优化器成本与执行计划验证。

MySQL 事务#多版本并发控制事务核心

MVCC 与事务隔离:版本链怎样决定你看见什么

MVCC 是通过历史版本让普通读取通常不阻塞写入的机制。从读异常出发,逐步推导 undo 版本链、Read View 可见性、四种隔离级别,以及快照读与当前读的边界。

MySQL 并发控制#索引范围锁锁题必会

行锁、间隙锁与死锁:SQL 到底锁住了哪里

行锁保护已存在的索引记录,间隙锁保护尚未插入的索引范围。从完整索引扫描推导实际锁区间,再用事务等待环定位死锁与重试边界。

Redis 缓存高可用#回源保护高可用

缓存穿透、击穿与雪崩:从一次未命中到保护数据库

穿透是反复查询不存在的数据,击穿是热点键失效,雪崩是大量键或缓存服务同时失效。按入口分流,讲透空值、布隆过滤器、单飞重建、限流与恢复预热。

Redis 并发协调#租约与栅栏分布式高频

Redis 分布式锁:从 SET NX PX 到续期、误删与 Redlock

分布式锁让不同进程竞争同一资源时短期互斥。用完整时间线拆解原子获取、唯一令牌、安全释放、锁过期、让下游拒绝旧写入的栅栏令牌,以及 Redlock 多节点算法的故障假设。

MQ 消息队列#分段确认可靠性核心

MQ 消息可靠性:一条消息在哪些位置会丢

MQ 是在生产者与消费者之间暂存和转发消息的系统。沿业务库、生产者、负责保存转发消息的 Broker 和消费者四段,讲透发布确认、持久化、复制、消费确认和本地消息表。

MQ 消费治理#业务只生效一次消费必会

消费幂等、重试与死信:重复消息怎样只产生一次结果

幂等表示同一业务操作重复执行仍得到相同结果。拆解去重与业务事务、错误分类、指数退避、毒消息、死信恢复,以及幂等与顺序控制的区别。

Go 类型系统#行为抽象语言高频

Go Interface 与 nil:动态类型、动态值和方法集

Interface 是用一组方法描述行为要求的类型。沿隐式实现、值与指针方法集、接口的两部分、带具体类型的 nil 和类型断言,解释最经典的 error 不为空陷阱。

Go 并发生命周期#取消传播工程高频

Go Context:取消、超时和请求链路传播

Context 是沿调用链传递截止时间、取消信号和请求元数据的标准接口。画出父子传播树和端到端超时预算,讲透取消函数、请求值与 goroutine 泄漏。

Go 并发同步#共享状态保护并发高频

Go Mutex 与 RWMutex:互斥、读写锁和饥饿模式

Mutex 是一次只允许一个 goroutine 进入临界区的互斥锁,RWMutex 则允许并发读、写者独占。从快速路径、排队状态讲到内存顺序、写者优先和选型基准。

Go 内存管理#可达性追踪运行时核心

Go GC:从对象可达性到 Go 1.26 Green Tea

GC 是寻找不可达堆对象并回收其内存的机制。用对象图和阶段时间线解释并发标记清扫、写屏障、辅助标记,再讲 Go 1.26 Green Tea、回收频率参数与软内存限制。

MySQL 索引结构#页与有序多叉树索引三部曲 1/3

B+Tree 索引结构:从磁盘页到点查与范围扫描

B+Tree 是把有序数据分层存放的多叉树。只沿结构主线讲清内部页怎样缩小候选、叶子页怎样完成点查与范围扫描,以及聚簇索引和二级索引的叶子究竟保存什么。

MySQL 索引设计#从 SQL 推导列序索引三部曲 2/3

MySQL 索引设计:从一条 SQL 推导联合索引

联合索引是把多列按声明顺序组成有序键的索引。围绕同一张订单表,从过滤、排序、返回列和查询频率出发,推导列序、覆盖与回表、深分页方案,以及读收益与写成本怎样权衡。

MySQL 查询诊断#EXPLAIN 四步读法索引三部曲 3/3

MySQL 执行计划:10 分钟看懂 EXPLAIN

拿到普通 EXPLAIN 输出,按 key、type、rows、Extra 的顺序判断用了哪个索引、怎样访问、预计扫描多少,以及是否还需额外排序或临时表。

Redis 内存与底层#Core StructuresRedis 总纲

Redis 底层核心数据结构:对象、编码与自动转换

从 redisObject 的类型与编码分层出发,拆解 SDS、listpack、quicklist、dict、intset 和 skiplist,以及五种常用数据类型如何按数据规模自动选择底层结构。

Go 并发#Channel高频必考

Go Channel:有缓冲 vs 无缓冲,以及关闭后的读写行为

从底层结构 runtime.hchan、sendq/recvq 队列、sudog 以及 gopark 挂起唤醒流程,讲透为什么关闭后读不 panic、写会 panic,深入核心面试追问。

Go 内存与底层#Swiss Table Map1.24 新特性

Go Map:从 hash 到 Go 1.24+ Swiss Table

面向当前版本,拆解 H1/H2、Group 8-slot、control word、二次探测,以及 Directory 管理多张 Table 的局部扩容机制。

Go 旧版源码#Classic Map旧题库必会

Go 经典 Map:hmap、bmap、bucket 与渐进扩容

专门应对 Go 1.23 及之前旧题库:从 B、2 的幂与桶编号讲起,再拆解 tophash、overflow、两种扩容与渐进迁移。

Go 内存与底层#Slice高频必考

Go Slice 从 0 到底层:先搞懂为什么,再记 len、cap

先从日常创建和“数组选区”建立直觉,再推导长度、容量、共享底层数组、append 两条路径、扩容算法与内存陷阱。

Go 基础语义#new vs make基础高频

Go new 与 make:返回值、零值与初始化区别

从一块零值内存为什么不够用讲起,对比指针与原类型、nil Slice / Map / Channel、逃逸分析,以及 Go 1.26 新增的 new(x) 表达式初始化。

Go 并发#GMP Scheduler调度核心

Go GMP 调度器:G、M、P 如何协作

从 goroutine 创建与状态流转出发,拆解本地/全局队列、任务窃取、网络轮询、系统调用交接、sysmon 与异步抢占。