首页/ 学科题库/ gorm/ GORM 中级技能认证测试
gorm 模拟试卷 · 技能认证

GORM 中级技能认证测试

24 题 60 分钟 难度:★★

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

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

试卷习题(24 题)

参考答案在文末
判断题
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
想在手机上在线作答这套卷子?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可限时作答并自动判分。
了解产品 App
← 上一套 CRUD 基础操作专题测试 下一套 → GORM 初级技能认证测试