数据库与中间件
2026/8/21大约 2 分钟
数据库与中间件
测试中常用 SQL 有哪些?
- 增删改查(INSERT/UPDATE/DELETE/SELECT)、WHERE 条件过滤、ORDER BY/LIMIT、JOIN(INNER/LEFT/RIGHT)、聚合(COUNT/SUM/GROUP BY/HAVING)、子查询、索引查看(EXPLAIN)。
什么是事务?ACID 是什么?
- 事务是一组不可分割的操作,要么全部成功要么全部回滚。
- Atomicity 原子性、Consistency 一致性、Isolation 隔离性、Durability 持久性。
数据库隔离级别有哪些?脏读、幻读是什么?
- 读未提交、读已提交(RC)、可重复读(RR,MySQL 默认)、串行化。
- 脏读:读到未提交数据;不可重复读:同一查询两次结果不同;幻读:范围查询结果行数变化(插入)。
- RR 通过 MVCC + 间隙锁解决大部分幻读。
什么是索引?为什么要建索引?什么情况索引失效?
- 索引是加速查询的数据结构(B+ 树),能减少扫描行数。
- 失效场景:
LIKE '%xx'前缀模糊、函数运算(WHERE YEAR(create_time)=2024)、隐式类型转换、OR 连接非索引列、!= / NOT IN、联合索引不满足最左前缀。
Redis 常见数据类型与使用场景?
- String(缓存/计数器/分布式锁)、Hash(对象存储)、List(消息队列/时间线)、Set(去重/标签)、ZSet(排行榜/延时队列)。
- 使用场景:缓存、会话、限流、排行榜、分布式锁(SETNX + Lua + 过期时间)。
Redis 缓存常见问题:穿透、击穿、雪崩?
- 穿透:查询不存在的数据,缓存与 DB 都没有 → 布隆过滤器 / 缓存空值。
- 击穿:热点 key 过期瞬间大量请求打到 DB → 互斥锁 / 逻辑过期。
- 雪崩:大量 key 同时失效 / Redis 宕机 → 过期时间加随机值、多级缓存、高可用(集群/哨兵)。
消息队列(Kafka/RabbitMQ)的作用?测试关注什么?
- 作用:异步解耦、削峰填谷、流量控制、日志采集。
- 测试关注:消息不丢失(生产 ack、消费手动 ack)、不重复消费(幂等)、顺序性、积压告警与处理、分区与消费组、死信处理、延迟消息。
如何测试微服务架构?
- 服务间调用链路(Mock 下游)、注册发现(Nacos/Eureka)、配置中心动态生效、网关路由与限流、熔断降级(Sentinel/Hystrix)、分布式事务(Seata)、链路追踪(SkyWalking/Zipkin)。