全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页

GORM 中级技能认证测试

20 题 50 分钟 难度:

考察知识点

  • 数据库连接池管理: 连接池配置、连接数限制、连接生命周期管理、性能调优
  • 事务处理: 事务开启/提交/回滚、嵌套事务、隔离级别、事务传播
  • 关联关系管理: 一对一/一对多/多对多关联、Preload 预加载、关联操作优化
  • 钩子函数与回调机制: BeforeSave/AfterSave 钩子、回调执行顺序、自定义回调
  • 高级查询技术: 复杂条件查询、子查询、分组聚合、分页查询、原生 SQL 执行
  • 错误处理与日志: 错误类型识别、日志配置、调试技巧、慢查询分析
  • 软删除机制: DeletedAt 字段配置、查询过滤、Unscoped 查询、数据恢复
  • 插件系统: 插件注册、自定义插件开发、插件扩展点
1
单选题

ConnMaxLifetime 参数的作用是什么?

A

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

B

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

C

连接的最大使用次数

D

连接的超时时间

2
多选题

以下哪些是 GORM 错误的正确处理方式?

A

使用 errors.Is 判断错误类型

B

使用 result.Error 获取错误

C

使用 result.RowsAffected 判断影响行数

D

直接比较 err == gorm.ErrRecordNotFound

3
单选题

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

A

db.Begin()

B

db.StartTransaction()

C

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

D

以上都是

4
单选题

GORM 如何实现嵌套事务(保存点)?

A

使用 tx.Begin() 嵌套

B

使用 tx.SavePoint("name") 和 tx.RollbackTo("name")

C

使用 tx.NestedTransaction()

D

GORM 不支持嵌套事务

5
填空题

在事务中创建保存点的代码是 tx._________("sp1"),回滚到该点的代码是 tx.__________("sp1")。

6
单选题

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

A

使用 hasMany tag

B

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

C

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

D

使用 oneToMany tag

7
填空题

如果需要在多对多关系的中间表中添加额外字段(如创建时间),可以定义________________并使用 gorm:"many2many:中间表名;foreignKey:!!2_外键1;joinForeignKey:连接外键" 配置。

8
多选题

以下哪些方式可以实现关联数据的级联更新?

A

db.Session(&gorm.Session{FullSaveAssociations: true}).Save(&user)

B

db.Model(&user).Association("Profile").Replace(&profile)

C

db.Save(&user.Profile)

D

分别更新 user 和 profile

9
单选题

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

A

在记录插入数据库之前

B

在记录插入数据库之后

C

在记录更新之前

D

在记录删除之前

10
多选题

以下关于更新钩子的描述,哪些是正确的?

A

BeforeUpdate 在 Updates 和 Save 方法时都会调用

B

钩子中可以修改字段值

C

如果钩子返回错误,更新会被中止

D

AfterUpdate 无法修改字段值

11
判断题

事务隔离级别越高(如 Serializable),数据库的并发性能就越低。

A

B

12
多选题

在 Web 应用中,如何将事务与中间件结合实现每个请求一个事务?

A

在中间件中开启事务,传给 handler

B

Handler 使用传入的事务对象执行操作

C

中间件根据 handler 返回的 error 决定 Commit 或 Rollback

D

每个 handler 自己开启和提交事务

13
多选题

db.Model(&User{}).Select("id, name").Where("age > ?", 18).Order("name").Limit(10) 的 SQL 等价语句是?

A

SELECT id, name FROM users WHERE age > 18 ORDER BY name LIMIT 10

B

SELECT * FROM users WHERE age > 18 ORDER BY name LIMIT 10

C

SELECT id, name FROM users ORDER BY name LIMIT 10

D

查询顺序不影响最终 SQL

14
单选题

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

A

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

B

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

C

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

D

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

15
单选题

在GORM日志中,关于SQL参数的记录方式,以下哪种做法最合理?

A

总是记录完整的SQL参数值,便于排查问题

B

永远不记录参数值,只记录SQL模板,避免泄露敏感信息

C

根据日志级别决定是否记录参数值,Info级别记录,Warn/Error级别不记录

D

对敏感参数(如密码)进行脱敏后再记录,其他参数正常记录

16
单选题

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

A

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

B

使用 db.Restore() 方法

C

使用 db.Undelete() 方法

D

软删除的记录无法恢复

17
判断题

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

A

B

18
单选题

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

A

db.Use(plugin)

B

db.Plugin(plugin)

C

db.Register(plugin)

D

db.Add(plugin)

19
多选题

Prometheus 支持以下哪些指标类型?

A

Counter 计数器(只增不减)

B

Gauge 仪表盘(可增可减)

C

Histogram 直方图(分布统计)

D

Summary 摘要(分位数统计)

20
单选题

在 GORM 中集成 Prometheus 监控指标采集,应该使用什么方式?

A

使用 gorm.io/plugin/prometheus 插件

B

手动注册 Prometheus 指标

C

使用 HTTP 中间件

D

解析 GORM 日志

← 上一个试卷 CRUD 基础操作专题测试
下一个试卷 → GORM 初级技能认证测试

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

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

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

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