后端高频面试题解析:进程线程协程 / TCP / 索引

一、进程、线程、协程

概念 资源 切换成本 说明
进程 独立内存空间 高 隔离强,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 为什么必须等。能讲权衡,才是真懂。