一、进程、线程、协程
| 概念 | 资源 | 切换成本 | 说明 |
|---|---|---|---|
| 进程 | 独立内存空间 | 高 | 隔离强,IPC 通信重 |
| 线程 | 共享进程内存 | 中 | 切换轻,但要处理竞态 |
| 协程 | 用户态,依附线程 | 极低 | 由程序调度,适合 IO 并发 |
一句话:进程管资源隔离,线程管并发执行,协程管高并发 IO。
二、TCP 三次握手与四次挥手
- 握手:SYN → SYN+ACK → ACK,确认双方收发能力;
- 挥手:FIN → ACK → FIN → ACK,因为全双工,关闭要双向各一次;
- TIME_WAIT:主动关闭方等待 2MSL,确保最后的 ACK 到达、旧报文消失,防止端口复用串包。
三、MySQL 索引为什么用 B+ 树
- 磁盘 IO 友好:B+ 树矮胖,三层能存千万级,查询稳定 O(log n);
- 非叶子节点只存键,单页能放更多分支;
- 叶子节点链表相连,范围查询极快;
- 对比哈希:哈希等值快但不支持范围与排序;对比二叉树:树太高 IO 多。
四、最左前缀原则
联合索引 (a, b, c) 能命中 a、(a,b)、(a,b,c),但跳过头列 b 用不上索引。建索引按查询频次和区分度排序列顺序。
五、答题技巧
别只背定义,讲清”为什么“和”代价“:为什么用 B+ 而不用哈希、TIME_WAIT 为什么必须等。能讲权衡,才是真懂。