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

GORM 中级技能认证测试

24 题 60 分钟 难度:★★

考察知识点

本试卷覆盖以下核心知识点:

  1. 关联关系管理(3题)
      • 一对一、一对多、多对多关系配置
      • 关联查询与预加载
      • 关联数据创建与更新
  2. 高级查询技术(3题)
      • 链式查询
      • 子查询与聚合查询
      • 分页查询与原生 SQL
  3. 事务处理(3题)
      • 事务基础与嵌套事务
      • 事务上下文传递
      • 事务隔离级别配置
  4. 钩子函数与回调机制(3题)
      • 创建/更新/删除/查询钩子
  5. 错误处理与日志(3题)
      • 错误类型识别
      • 日志配置与慢查询监控
  6. 插件系统(3题)
      • 插件注册与使用
      • Prometheus 监控与 Jaeger 链路追踪
  7. 软删除机制(3题)
      • DeletedAt 字段
      • 软删除查询过滤与恢复
  8. 数据库连接池管理(3题)
      • 连接池配置与生命周期管理
💡 参考答案在文末
判断题
1

在 GORM 中查询一对多关系时,默认会自动加载关联的子记录。

A

B

2

GORM 的链式调用方法(如 Where、Select)会修改原始 DB 对象,因此不应在并发环境中复用同一个 DB 对象。

A

B

3

GORM的SlowThreshold参数用于设置慢查询的时间阈值,当SQL执行时间超过该阈值时会以Warn级别输出日志,这可以帮助识别性能问题。

A

B

单选题
4

在 GORM 中恢复一条软删除的记录,正确的做法是?

A

使用 Unscoped 找到记录后,将 DeletedAt 设置为 nil 并 Save

B

使用 db.Restore() 方法

C

使用 db.Undelete() 方法

D

软删除的记录无法恢复

5

在 GORM 中对软删除的模型执行真正的物理删除,应该使用什么方法?

A

db.Delete()

B

db.Unscoped().Delete()

C

db.HardDelete()

D

db.ForceDelete()

6

在 GORM 中,如何配置一对多关系?

A

使用 hasMany tag

B

在"一"方定义切片类型的字段

C

在"多"方定义切片类型的字段

D

使用 oneToMany tag

7

如何在 GORM 中注册一个插件?

A

db.Use(plugin)

B

db.Plugin(plugin)

C

db.Register(plugin)

D

db.Add(plugin)

8

GORM 链式查询中,哪个方法会实际执行 SQL 查询?

A

Where

B

Select

C

Find

D

Order

9

在GORM中配置日志输出,以下哪种日志级别最适合生产环境使用?

A

Silent - 完全关闭所有日志输出

B

Error - 只输出错误级别的日志

C

Warn - 输出警告和错误级别的日志

D

Info - 输出所有SQL语句和参数

10

ConnMaxLifetime 参数的作用是什么?

A

连接在池中的最大空闲时间

B

连接从创建到回收的最大时间

C

连接的最大使用次数

D

连接的超时时间

11

GORM 的 BeforeCreate 钩子在什么时候被调用?

A

在记录插入数据库之前

B

在记录插入数据库之后

C

在记录更新之前

D

在记录删除之前

12

在 GORM 中恢复一条软删除的记录,正确的做法是?

A

使用 Unscoped 找到记录后,将 DeletedAt 设置为 nil 并 Save

B

使用 db.Restore() 方法

C

使用 db.Undelete() 方法

D

软删除的记录无法恢复

13

在 GORM 中,如何开始一个事务?

A

db.Begin()

B

db.StartTransaction()

C

db.Transaction(func(tx *gorm.DB) error { ... })

D

以上都是

多选题
14

以下关于 GORM 一对多关系外键配置的描述,哪些是正确的?

A

默认使用"父级名+ID"作为外键(如 UserID)

B

可以使用 foreignKey tag 自定义外键

C

外键必须手动在数据库中创建

D

AutoMigrate 会自动创建外键约束

15

以下哪些情况可能导致数据库连接泄漏?

A

忘记关闭 Rows 结果集

B

事务没有 Commit 或 Rollback

C

连接池参数设置不当

D

查询超时

16

以下哪些场景适合使用 BeforeCreate 钩子?

A

为新用户生成默认头像 URL

B

对密码字段进行加密

C

发送注册成功邮件

D

校验用户名长度

17

关于GORM的日志配置,以下哪些说法是正确的?

A

可以通过logger.New创建自定义的日志器,指定日志级别和输出方式

B

GORM默认将日志输出到标准输出(stdout),可以通过配置修改

C

可以通过设置IgnoreRecordNotFoundError控制是否记录"记录未找到"的日志

D

GORM的日志系统基于zap,可以直接使用zap的配置

18

GORM 插件可以用于以下哪些场景?

A

数据库监控

B

链路追踪

C

软删除增强

D

自动审计日志

19

以下哪些是 GORM 的终结方法(会立即执行 SQL)?

A

Find

B

First

C

Where

D

Count

20

以下关于 GORM 事务使用的描述,哪些是正确的?

A

db.Transaction 方法会自动处理 Commit 和 Rollback

B

手动事务需要调用 tx.Commit() 或 tx.Rollback()

C

事务中的错误应该返回 error,由 Transaction 方法处理

D

事务只能包含单个数据库操作

填空题
21

____________设置连接在池中的最大空闲时间,超过该时间的空闲连接会被____________,以释放资源。

22

定义 GORM 钩子的方法是实现____________方法,如果返回错误则会____________插入操作。

23

GORM 插件需要实现____________方法返回插件名称,以及____________方法在数据库连接建立后初始化。

24

使用 db.Transaction 时,如果函数返回____________则自动提交事务,如果返回____________则自动回滚事务。

参考答案
1.错误 2.正确 3.正确 4.A 5.B 6.B 7.A 8.C 9.C 10.B 11.A 12.A 13.D 14.A;B;D 15.A;B 16.A;B;D 17.A;B;C 18.A;B;C;D 19.A;B;D 20.A;B;C 21.ConnMaxIdleTime;关闭 22.BeforeCreate(tx *gorm.DB) error;中止 23.Name() string;Initialize(db *gorm.DB) error 24.nil;error
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 CRUD 基础操作专题测试
下一套试卷 → GORM 初级技能认证测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码