全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

数据库优化与JDBC高级专题

专题说明

本专题系统讲解Java数据库优化与JDBC高级技能,数据库是应用的核心组件,掌握连接池优化、事务管理、批处理、分页优化、索引优化等技术是开发高性能应用的关键。

学习目标

  1. 掌握数据库连接池配置与优化策略
  2. 理解PreparedStatement批处理优化原理
  3. 掌握事务隔离级别与传播行为
  4. 理解SQL注入防范原理与最佳实践
  5. 掌握大数据量分页查询优化方案
  6. 掌握连接泄漏检测与监控方法
  7. 理解数据库索引原理与优化策略

学习内容

本专题涵盖八大核心知识点:

知识点核心内容
数据库连接池优化HikariCP/Druid配置、连接池大小设置
PreparedStatement与批处理预编译、addBatch/executeBatch、rewriteBatchedStatements
事务管理与隔离级别ACID、四种隔离级别、MVCC、Spring事务传播
结果集映射与元数据ResultSet游标、ResultSetMetaData、ORM映射
SQL注入防范PreparedStatement、MyBatis #{} vs ${}
大数据量分页查询LIMIT OFFSET问题、游标分页、子查询优化
连接泄漏检测与监控try-with-resources、泄漏检测参数、监控指标
数据库索引优化B+树索引、聚簇索引、覆盖索引、最左匹配

学习建议

  1. 理解底层原理:连接池、批处理、索引都需要理解底层实现才能正确优化
  2. 结合实际场景:分页优化、索引设计需要根据实际数据量和查询特点决定
  3. 重视安全防护:SQL注入是严重安全问题,必须使用PreparedStatement
  4. 监控先行:优化前先监控定位瓶颈,优化后验证效果

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

📝 配套习题(20 题)

1
判断题

使用数据库连接池可以复用连接,避免频繁创建和销毁连接,显著提升数据库访问性能。

A

B

2
单选题

Spring Boot 2.x默认使用的数据库连接池是?

A

Druid

B

HikariCP

C

DBCP

D

C3P0

3
单选题

数据库连接池大小设置的原则是?

A

越大越好,避免连接不足

B

根据数据库处理能力和并发需求合理设置,过大反而影响性能

C

固定为10,所有应用都适用

D

必须等于数据库最大连接数配置

4
多选题

数据库连接池的关键配置参数有哪些?

A

maximumPoolSize:最大连接数

B

minimumIdle:最小空闲连接数

C

connectionTimeout:获取连接超时时间

D

idleTimeout:空闲连接超时回收时间

5
判断题

PreparedStatement相比Statement的优势包括预编译SQL提升执行效率,以及防止SQL注入攻击。

A

B

6
单选题

MySQL JDBC驱动中,rewriteBatchedStatements=true参数的作用是?

A

自动重写错误的SQL语句

B

将批量插入重写为多值INSERT语句,大幅提升性能

C

自动回滚失败的批量操作

D

限制批量操作的最大数量

7
判断题

数据库事务的ACID特性包括原子性、一致性、隔离性和持久性。

A

B

8
单选题

不可重复读和幻读的区别是?

A

不可重复读是数据被修改,幻读是数据被删除

B

不可重复读是某行数据被修改,幻读是行数变化(插入或删除)

C

不可重复读和幻读是同一问题

D

不可重复读只发生在低隔离级别,幻读只发生在高隔离级别

9
单选题

MySQL默认的事务隔离级别是?

A

READ UNCOMMITTED

B

READ COMMITTED

C

REPEATABLE READ

D

SERIALIZABLE

10
多选题

以下关于数据库隔离级别的描述,哪些是正确的?

A

READ UNCOMMITTED可能产生脏读、不可重复读、幻读

B

READ COMMITTED避免脏读,但仍可能不可重复读和幻读

C

REPEATABLE READ避免脏读和不可重复读,标准SQL下仍可能幻读

D

SERIALIZABLE避免所有并发问题,但性能最差

11
判断题

使用PreparedStatement并绑定参数可以有效防止SQL注入攻击,因为参数值不会作为SQL语法解析。

A

B

12
单选题

MyBatis中#{}和${}的区别是?

A

#{}和${}效果相同,只是语法不同

B

#{}是参数绑定防注入,${}是字符串替换可能注入

C

#{}用于表名,${}用于字段名

D

${}比#{}性能更高

13
判断题

MySQL使用LIMIT OFFSET分页时,OFFSET越大性能越差,因为数据库需要扫描跳过前N条记录。

A

B

14
单选题

大数据量深分页优化方案中,"游标分页"或"键值分页"的核心思想是?

A

使用更大的LIMIT值

B

通过上一页最后一条记录的ID作为下次查询起始条件,避免OFFSET扫描

C

每次查询全表数据在内存中分页

D

使用缓存存储所有分页结果

15
判断题

数据库连接泄漏是指程序获取连接后未正确关闭,导致连接无法归还池,最终连接池耗尽。

A

B

16
单选题

HikariCP配置leakDetectionThreshold的作用是?

A

设置连接最大存活时间

B

检测连接使用后未归还,超过阈值记录泄漏日志

C

检测连接是否有效

D

设置连接超时时间

17
判断题

数据库索引可以加速查询,但会增加INSERT、UPDATE、DELETE的写入成本,因为需要同时更新索引。

A

B

18
单选题

关于MySQL InnoDB聚簇索引的说法,正确的是?

A

聚簇索引和数据分开存储,查询需要回表

B

聚簇索引叶子节点直接存储行数据,主键查询效率最高

C

聚簇索引只能建立在主键上

D

聚簇索引和二级索引存储方式相同

19
单选题

什么是"覆盖索引"?它的优势是?

A

覆盖所有字段的索引,查询最全面

B

索引包含查询所需的所有列,无需回表获取数据

C

覆盖整张表的索引

D

多个索引覆盖同一个字段

20
多选题

数据库索引设计的原则有哪些?

A

为WHERE条件、JOIN关联、ORDER BY排序的列建索引

B

选择区分度高的列:唯一值多,过滤效果好

C

复合索引遵循最左匹配,最常用条件放左边

D

避免过多索引,通常不超过5-6个单表索引

← 上一个专题 性能调优实战专题
下一个专题 → 数组与方法专题

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

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

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

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