连接池与会话与连接泄漏与保活

共 20 题
#

1. MySQL 中 wait_timeout、interactive_timeout 的影响?

A wait_timeout 作用于非交互式程序连接,interactive_timeout 作用于交互式命令行连接 ✓ 正确答案
B 两者都只作用于交互式命令行连接
C 两者含义完全相同,只是别名不同
D 连接池空闲连接超过 interactive_timeout 才会被服务端关闭
#

2. PostgreSQL 中连接与 session 的关系,连接池复用与 session 状态?

A 一个连接就是一个 session,session 级状态在连接复用时会残留 ✓ 正确答案
B 一个连接可以承载多个并发 session
C 连接池复用时 PostgreSQL 会自动重置所有 session 状态
D 临时表与会话无关,连接复用后自动消失
#

3. 主流连接池,HikariCP、Druid、c3p0、DBCP 的对比?

A HikariCP 以丰富监控功能著称,是默认选择
B Spring Boot 2.x 默认使用 HikariCP,需要监控与 SQL 防护时可选 Druid ✓ 正确答案
C c3p0 是当前性能最好的连接池
D DBCP 内置 SQL 防火墙与慢 SQL 拦截
#

4. 数据库连接池(Connection Pool)的必要性,减少 TCP/握手开销、限制连接数?

A 连接池主要为了减少 SQL 语句本身的执行时间
B 连接池通过复用连接降低 TCP 握手与认证开销,并限制连接数保护数据库 ✓ 正确答案
C 连接池能无限制提高数据库吞吐量,无需考虑数据库连接上限
D 连接池与连接复用无关,只是管理工具
#

5. 连接池的关键参数,initialSize、minIdle、maxActive、maxWait?

A maxActive 是连接池中最小空闲连接数
B initialSize 必须大于 maxActive
C maxWait 是连接建立超时时间,与获取连接无关
D HikariCP 的 maximumPoolSize 对应 Druid 的 maxActive,minIdle 对应 minimumIdle ✓ 正确答案
#

6. 连接池的预热(Warmup)与验证(Validation)?

A 预热是在流量高峰时动态建立连接
B test-on-borrow 在归还连接时验证,test-while-idle 在取出时验证
C 验证查询必须用复杂的大语句才能保证连接有效
D test-on-borrow 每次取出都验证,可靠性最高但增加一次往返开销 ✓ 正确答案
#

7. 连接池大小与数据库 max_connections 的规划,多应用实例 × 池大小的数学与过载保护

A 连接池可以无限分配,数据库会自动扩容
B max_connections 只影响交互式连接,不影响连接池
C 单实例池大小越大越好,不必考虑数据库上限
D 所有实例连接池总和必须小于数据库 max_connections 并预留运维余量 ✓ 正确答案
#

8. PgBouncer、ProxySQL 等外部连接池的实现?

A 它们作用在应用进程内,与 HikariCP 相同
B 外部连接池一定比进程内连接池性能高
C 它们只能用于 MySQL,不能用于 PostgreSQL
D 它们独立部署在应用与数据库之间,集中管理数据库连接数 ✓ 正确答案
#

9. MySQL 中 wait_timeout 与连接保活的协同?

A 保活周期应小于 wait_timeout,才能在服务端断开前激活连接 ✓ 正确答案
B 保活周期应大于 wait_timeout 才有效
C 两者完全无关,不需要协同
D 保活只能通过回调数据库变量实现
#

10. 连接保活(Keep-Alive)的实现,心跳、空闲连接检测?

A 空闲连接检测(test-while-idle)定时验证空闲连接,失效则剔除 ✓ 正确答案
B 心跳是在连接断开后自动重连
C 保活查询必须使用重型 SQL 才有效
D 保活只对 PostgreSQL 有效,MySQL 不支持
#

11. 连接泄漏的检测,Druid 的 leakDetectionThreshold?

A 它控制连接池最大连接数
B 连接借出超过该毫秒数未归还时打印堆栈,用于定位连接泄漏 ✓ 正确答案
C 它控制连接验证查询的超时时间
D 它用于设置数据库 wait_timeout
#

12. 连接泄漏(Connection Leak)的成因,未关闭连接、异常未释放?

A 异常抛出时未在 finally 中关闭连接是常见泄漏原因,应使用 try-with-resources 保证归还 ✓ 正确答案
B 连接泄漏只发生在数据库重启时
C 连接池会自动防止一切连接泄漏,无需关心
D 连接泄漏只影响性能,不会导致连接耗尽
#

13. Druid 连接池的核心特性,监控统计、SQL 防火墙、慢 SQL 拦截与连接泄漏检测如何工作?与 HikariCP 相比现在还有哪些选型价值?

A HikariCP 内置 SQL 防火墙与监控面板
B 两者都不支持连接泄漏检测
C Druid 性能一定比 HikariCP 高
D Druid 通过 Filter 体系提供监控统计、SQL 防火墙、慢 SQL 拦截与泄漏检测,与性能导向的 HikariCP 形成差异化 ✓ 正确答案
#

14. HikariCP 的优势来源,字节码精简、FastList 与并发集合优化如何降低获取连接的延迟,其参数调优(maximumPoolSize 等)的关键点?

A HikariCP 不使用并发集合,全靠单线程
B HikariCP 依赖大量复杂代码实现高性能
C maximumPoolSize 越大性能一定越高
D HikariCP 通过 FastList 和字节码精简减少连接获取/归还开销,maximumPoolSize 应按并发压测确定而非越大越好 ✓ 正确答案
#

15. 连接复用时会话状态的残留(SET 变量、临时表、用户变量)对业务的影响与清理

A SET 变量、临时表等会话状态会残留并污染后续请求,需用 DISCARD ALL/RESET CONNECTION 清理 ✓ 正确答案
B 连接复用不会残留任何会话状态
C 临时表在事务提交后自动全库清理,无需关心
D 会话状态残留只影响性能不影响数据正确性
#

16. 连接池与长事务的相互影响,长事务长时间占用池连接导致池耗尽,如何用事务超时、连接最长持有时间与慢 SQL 告警治理?

A 长事务只影响连接数量,不影响数据库锁
B 长事务不会影响连接池,可以无限运行
C 事务超时只能靠数据库 DBA 人工设置
D 长事务会长时间占用池连接,导致池耗尽,需用事务超时、慢 SQL 告警治理 ✓ 正确答案
#

17. 坏连接剔除与故障转移,数据库重启/网络闪断后连接池如何检测并剔除失效连接(validation 查询、错误分类),避免雪崩?

A 数据库重启后失效连接会自动被客户端感知,无需检测
B 通过 validation 查询与错误分类剔除失效连接,并限速重建避免连接风暴雪崩 ✓ 正确答案
C 失效连接应保留在池中,等待数据库自动恢复
D 连接池永远无法感知数据库重启
#

18. 连接池的监控指标,活跃/空闲/等待连接数、获取等待时间与拒绝次数如何采集与告警,连接池容量与数据库 max_connections 的联动治理?

A 活跃连接数接近 maxActive 且等待激增时应仅考虑加大池,无需排查数据库
B 连接池监控指标无法采集,只能人工观察
C 通过活跃/等待/获取超时等指标采集告警,池容量需与数据库 max_connections 联动预留余量 ✓ 正确答案
D 连接池容量可以无限大于数据库 max_connections
#

19. 多数据源与读写分离下的连接池设计,主库/从库连接池独立配置的依据,动态数据源切换时连接与事务的绑定如何保证?

A 主库与从库应共用同一连接池
B 主从库独立配置连接池,事务开启后连接绑定到固定数据源,不能中途切换 ✓ 正确答案
C 动态数据源切换可以在事务中途随意更换数据源
D 读写分离不需要独立连接池,只需一个连接池
#

20. 连接池连接的前置初始化(初始化 SQL)与字符集/时区设置

A 每个连接必须手动单独设置字符集
B 初始化 SQL 与字符集时区无关,只用于建表
C 初始化 SQL 用于建立连接时统一设置字符集、时区等会话环境,保证连接状态一致 ✓ 正确答案
D 初始化 SQL 会降低连接池性能,不能使用