全部学科
Python全栈
python
NodeJS全栈
nodejs

插件机制专题测试

10 题 45 分钟 难度:★★

考察知识点

  • 插件拦截原理:四大核心拦截对象(Executor、ParameterHandler、ResultSetHandler、StatementHandler)、JDK 动态代理实现、多插件执行顺序
  • 分页插件原理:PageHelper 核心机制、ThreadLocal 参数传递、SQL 重写(COUNT 查询 + LIMIT 分页)
  • 性能监控插件:PerformanceInterceptor 功能与局限、生产环境 SQL 监控方案选型
  • Interceptor 接口实现:自定义插件开发流程、intercept/plugin/setProperties 方法职责
💡 参考答案在文末
判断题
1

MyBatis 配置了多个插件时,它们的执行顺序是按照在 mybatis-config.xml 中配置的顺序依次执行的,先配置的插件会先被拦截执行(即先执行外层的 intercept 逻辑)。

A

B

2

MyBatis 性能监控插件(PerformanceInterceptor)适合在生产环境中长期使用,因为它对性能的影响可以忽略不计。

A

B

单选题
3

MyBatis 插件机制中,@Intercepts 注解用于声明插件需要拦截的目标对象和方法。以下哪个对象不属于 MyBatis 插件可拦截的四大核心对象?

A

Executor(执行器)

B

ParameterHandler(参数处理器)

C

TransactionManager(事务管理器)

D

StatementHandler(语句处理器)

4

MyBatis 插件的底层拦截机制基于什么技术实现?

A

CGLIB 字节码增强

B

JDK 动态代理

C

ASM 字节码操作

D

反射直接调用

5

MyBatis 分页插件(如 PageHelper)实现分页的核心原理是什么?

A

在 Mapper 接口方法中手动添加 LIMIT 子句

B

使用 ResultSet 分页,查询全部数据后在内存中截取

C

拦截 Executor 的 query 方法,通过反射修改 BoundSql 中的 SQL 语句,追加 LIMIT 子句

D

拦截 StatementHandler 的 prepare 方法,重新生成带 LIMIT 的 SQL

6

MyBatis 自带的性能监控插件 PerformanceInterceptor(MyBatis 3.x 早期版本)的主要功能是什么?

A

自动为慢 SQL 添加索引建议

B

拦截 Executor 的 update 方法,统计 SQL 执行时间并输出日志

C

拦截 StatementHandler 的 query 和 update 方法,打印 SQL 及其执行时间

D

缓存 SQL 执行计划,提升重复查询性能

多选题
7

关于 PageHelper 分页插件的实现机制,以下说法正确的有哪些?

A

PageHelper 使用 ThreadLocal 存储分页参数(页码、每页条数),确保线程安全

B

PageHelper.startPage() 必须在 Mapper 方法调用之前执行,否则分页不生效

C

PageHelper 会自动对所有 SQL 语句进行分页,无需手动调用 startPage()

D

PageHelper 在执行分页查询前,会先执行一条 COUNT SQL 获取总记录数

8

在 MyBatis 项目中,以下哪些方式可以用于 SQL 性能监控?

A

自定义 Interceptor 拦截 StatementHandler,记录 SQL 执行时间并写入监控系统

B

使用 P6Spy 等第三方 SQL 日志框架,在代理层捕获 SQL 和执行时间

C

依赖 MyBatis 内置的 PerformanceInterceptor 作为生产环境主要监控手段

D

使用 Druid 连接池的 StatFilter,通过其 SQL 统计功能进行性能分析

填空题
9

PageHelper 在重写 SQL 实现分页时,会将原始 SQL 改写为两条:一条是 COUNT 查询,一条是 LIMIT 分页查询。原始 SQL 为 "SELECT u.id, u.name FROM user u WHERE u.age > 18 ORDER BY u.id",改写后的 COUNT SQL 为 "SELECT ____________ FROM user u WHERE u.age > 18",LIMIT SQL 为原始 SQL 追加 "____________"。请填写空白处的内容。

简答题
10

请简述 MyBatis 中实现自定义 Interceptor 需要完成的步骤,并说明 Interceptor 接口中三个方法(intercept、plugin、setProperties)各自的作用。

参考答案
1.正确 2.错误 3.C 4.B 5.C 6.C 7.A;B;D 8.A;B;D 9.COUNT(0);LIMIT ?,? 10.
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 插件开发高级应用专题测试
下一套试卷 → 日志配置与调试专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码