社招三年后端开发核心面试题汇总与解析
对于拥有三年经验的后端开发工程师而言,面试不仅考察基础知识的广度,更看重对原理的深入理解及实际场景中的优化能力。本文汇总了高频出现的 20+ 道核心技术问题,涵盖 MySQL、Redis、Java 并发、网络协议、分布式系统及算法等模块,旨在帮助开发者系统梳理知识体系。
一、MySQL 数据库核心考点
1. MySQL 索引在什么情况下会失效
索引失效是性能优化的常见痛点,以下情况需特别注意:
- 查询条件包含 OR:若 OR 两边的字段中至少有一个没有索引,可能导致全表扫描。
- 类型隐式转换:字符串字段查询时未加引号(如
where name = 123),会导致索引失效。 - 模糊查询前缀通配符:使用
LIKE '%abc'无法利用索引,而LIKE 'abc%'可以。 - 联合索引顺序:违反最左前缀原则,查询条件未包含联合索引的第一个列。
- 函数运算:在索引列上使用内置函数或表达式(如
WHERE YEAR(create_time) = 2023)。 - 范围查询后的列:联合索引中,范围查询(>、<)之后的列索引失效。
- 否定查询:使用
!=、<>、NOT IN可能触发全表扫描。 - IS NULL/IS NOT NULL:在某些版本或特定统计信息下可能导致索引失效。
- 字符集不一致:关联字段编码格式不同(如 utf8mb4 vs latin1)。
- 优化器选择:当优化器估算全表扫描成本低于走索引时,将放弃索引。
2. InnoDB 与 MyISAM 存储引擎的区别
| 特性 | InnoDB | MyISAM |
|---|---|---|
| 事务支持 | 支持 (ACID) | 不支持 |
| 外键 | 支持 | 不支持 |
| 锁粒度 | 行级锁 / 表级锁 | 仅表级锁 |
| MVCC | 支持 | 不支持 |
| 全文索引 | 5.7+ 支持 | 原生支持 |
| 计数速度 | COUNT(*) 需扫描 | 有内部计数器,速度快 |
| 崩溃恢复 | 支持崩溃安全恢复 | 易损坏,需修复 |
| 主键要求 | 必须有主键 | 可选 |


