全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页

性能调优实战专题测试

12 题 50 分钟 难度:

考察知识点

  • 批量操作性能优化:ExecutorType.BATCH 执行器、foreach 批量插入、事务边界控制、内存管理策略
  • 连接池调优:HikariCP 核心参数(minimumIdle、maximumPoolSize、maxLifetime、connectionTimeout、leakDetectionThreshold)、连接泄漏排查
  • 缓存策略优化:MyBatis 二级缓存局限性、缓存穿透/击穿/雪崩识别与解决方案、分布式缓存一致性
  • 执行计划分析:EXPLAIN 关键字段解读(type、key、dependent、rows)、Extra 字段性能信号识别
  • 慢查询定位与优化:慢查询日志配置、mysqldumpslow 工具使用、多表 JOIN 优化策略、索引设计与优化
1
多选题

在 MyBatis 中进行大批量数据插入时,以下哪些做法可以有效提升性能?

A

使用 ExecutorType.BATCH 执行器代替默认的 SIMPLE 执行器

B

将所有数据放在单次 INSERT 语句中一次性插入,不设批量上限

C

合理设置 batchSize(如 500~2000),分批提交并控制事务边界

D

在 foreach 标签中使用 UNION ALL 替代多条 INSERT 语句

2
单选题

使用 MyBatis 的 <foreach> 标签实现批量插入时,以下哪种配置方式是正确的?

A

设置 open="VALUES" close=";" separator="," 生成多条独立 INSERT 语句

B

设置 open="(" close=")" separator=")," 配合单条 INSERT INTO table VALUES 语句

C

设置 open="" close="" separator="INSERT INTO" 动态生成多条 INSERT

D

设置 open="BEGIN" close="END;" separator="" 使用 PL/SQL 块包装

3
简答题

某系统需要每小时向数据库插入约 50 万条日志记录,当前实现使用默认的 SqlSessionFactory 逐条插入,耗时超过 40 分钟且频繁出现连接超时和 OOM。请分析该方案的问题所在,并给出一个完整的高性能批量插入方案设计,包括:

  1. 执行器选择
  2. 批量大小设置
  3. 事务边界控制
  4. 内存管理策略
4
判断题

在 MyBatis 项目中,为了提高系统并发处理能力,应该将数据库连接池的最大连接数(maxActive/maxPoolSize)设置为尽可能大的值(如 1000),这样可以支持更多并发请求。

A

B

5
填空题

在 HikariCP 连接池配置中,以下参数分别控制不同的连接池行为,请填写每个参数的作用:

  1. ________________________:用于维持连接池的基础容量,避免低峰期连接全部关闭后高峰期重新创建。
  2. ______________________:超过该时间后连接会被强制关闭并重新创建,防止数据库端的连接超时导致"连接已关闭"异常。
  3. ________________________:开启后每次从连接池取出连接前会执行一次轻量级校验(如 SELECT 1),确保连接可用。
  4. ________________________:超过该时间仍未获取到连接则抛出异常,防止无限等待导致线程堆积。
6
单选题

某基于 MyBatis 的系统在高并发时段频繁出现 "Connection is not available, request timed out after 30000ms" 错误,但数据库端显示当前活跃连接数远低于连接池上限。最可能的原因是什么?

A

连接池的 maxLifetime 设置过长,连接在数据库端已关闭但连接池仍认为其有效

B

存在连接泄漏(Connection Leak),部分 SqlSession 使用后未正确关闭

C

minimumIdle 设置过小,连接池预热不足导致突发流量时无法及时获取连接

D

数据库端的 max_connections 参数限制导致连接池无法创建更多连接

7
单选题

在 MyBatis 二级缓存与 Redis 集成的架构中,以下关于缓存问题的描述和解决方案,匹配正确的是?

A

缓存穿透:热点 key 过期瞬间大量请求打到数据库 — 解决方案:设置互斥锁(如 SETNX)

B

缓存击穿:大量不同 key 同时过期导致数据库瞬时压力暴增 — 解决方案:过期时间加随机偏移

C

缓存雪崩:查询不存在的数据,缓存无法命中,每次都打到数据库 — 解决方案:布隆过滤器或缓存空值

D

缓存穿透:大量不同 key 同时过期 — 解决方案:使用布隆过滤器

8
多选题

在高并发系统中,关于 MyBatis 二级缓存(基于 namespace 的本地缓存)的局限性,以下哪些说法是正确的?

A

MyBatis 二级缓存是 Mapper 级别的,同一个 namespace 下的所有操作共享同一块缓存区域

B

在多表关联更新场景中,MyBatis 二级缓存无法自动感知关联表的数据变化,可能导致缓存脏数据

C

在分布式部署(多实例)下,MyBatis 内置的二级缓存各实例间不共享,可能出现数据不一致

D

配置 readOnly=true 时,MyBatis 会序列化缓存值,每个查询返回新的副本,保证线程安全

9
填空题

使用 MySQL 的 EXPLAIN 分析 SQL 执行计划时,以下关键字段反映不同维度的执行信息,请填写各字段的含义:

  1. ________________________:如 ALL(全表扫描)、ref(索引查找)、range(范围扫描)、index(全索引扫描)等,是判断查询效率的首要指标。
  2. ________________________:当该字段为 NULL 时说明没有使用索引。
  3. ________________________:当值为 dependent 时表示依赖外部查询,无法独立执行。
  4. ______________:该值越大说明查询需要处理的数据量越大,优化时应重点关注该值较高的查询。
10
多选题

分析 SQL 执行计划时,EXPLAIN 输出的 Extra 字段出现以下哪些值时,说明该查询存在明显的性能问题需要优化?

A

Using index

B

Using temporary

C

Using filesort

D

Using where

11
单选题

在 MySQL 中定位慢查询时,以下关于慢查询日志的配置和使用,说法错误的是?

A

可通过 SET GLOBAL slow_query_log = 'ON' 动态开启慢查询日志

B

long_query_time 默认值为 10 秒,只有超过该时间的 SQL 才会被记录

C

mysqldumpslow 工具可以将慢查询日志按 SQL 模板归类统计

D

开启慢查询日志对数据库性能没有任何影响,生产环境可随时开启

12
简答题

某电商系统的商品搜索接口在生产环境经常出现响应超时(>5s),经排查该接口底层通过 MyBatis 执行一条多表 JOIN 查询。请设计一套完整的慢查询定位与优化流程,包括:

  1. 如何在生产环境中发现并收集慢查询信息
  2. 如何分析该 SQL 的性能瓶颈
  3. 针对多表 JOIN 场景,列举至少 4 种具体的优化手段
← 上一个试卷 存储过程与高级查询专题测试
下一个试卷 → 批量操作与性能优化专题测试

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库