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

GORM 高级技能认证测试

20 题 60 分钟 难度:

考察知识点

  • 性能优化与调优: N+1 查询问题、批量操作、查询优化、连接池调优、索引优化
  • 高级并发与锁机制: 悲观锁/乐观锁、分布式锁、死锁预防、高并发优化、事务隔离
  • 分库分表与多租户: 水平/垂直拆分、分片键设计、多租户架构、跨库事务、数据路由
  • 安全与数据保护: SQL 注入防护、数据加密、权限控制、审计日志、敏感字段处理
  • 源码分析与底层原理: 核心架构、反射机制、SQL 生成原理、性能优化、插件机制
  • 数据迁移与版本管理: 复杂迁移策略、版本控制、零停机部署、回滚恢复、数据一致性
  • 生态与工具链: GORM 生态项目、代码生成工具、测试工具集成、调试工具
1
单选题

在 GORM 中,以下哪种方式最能有效解决 N+1 查询问题?

A

使用多个独立的 Find 查询

B

使用 Preload 预加载关联数据

C

使用 Raw SQL 手写 JOIN

D

使用循环逐个查询关联数据

2
单选题

关于 GORM 的 批量操作性能调优,以下说法正确的是?

A

批量操作性能调优 是 GORM 的核心功能之一

B

批量操作性能调优 只能在特定数据库中使用

C

批量操作性能调优 需要手动配置才能启用

D

批量操作性能调优 已被 GORM v2 废弃

3
多选题

以下关于 Preload 和 Joins 的比较哪些是正确的?

A

Preload 发送多条 SQL,Joins 发送一条 SQL

B

Joins 在多对多关系中可能返回重复数据

C

Preload 对于深层关联更灵活

D

Joins 性能一定优于 Preload

4
单选题

在 GORM 中,如何对查询记录加行级排他锁(SELECT FOR UPDATE)?

A

db.Where("id = ?", 1).Locking("FOR UPDATE").First(&user)

B

db.Clauses(clause.Locking{Strength: "UPDATE"}).Where("id = ?", 1).First(&user)

C

db.Raw("SELECT * FROM users WHERE id = 1 FOR UPDATE").Scan(&user)

D

db.Where("id = ?", 1).First(&user, clauselocking.Update)

5
单选题

在 GORM 中使用悲观锁(如 SELECT ... FOR UPDATE)应该使用什么方法?

A

db.Clauses(clause.Locking{Strength: "UPDATE"})

B

db.Lock()

C

db.ForUpdate()

D

db.WithLock()

6
填空题

处理死锁的常见策略是捕获 ________ 错误,然后______事务。

7
单选题

在 GORM 中,如何实现按时间分表(如按月分表)?

A

使用 Table 方法动态切换表名

B

使用分区表功能

C

使用多数据源

D

GORM 不支持分表

8
单选题

在GORM分库架构中,当一个业务操作需要跨多个分库执行事务时,以下哪种方案可以保证数据一致性?

A

使用GORM的Transaction,在同一个事务中操作多个分库的DB实例

B

使用两阶段提交(2PC)协议,协调多个分库的事务提交

C

先提交第一个分库的事务,成功后再提交第二个,失败则回滚

D

跨库事务无法保证一致性,只能通过业务补偿处理

9
单选题

如何实现按月分表,动态切换到不同表?

A

db.Table("orders_202401").Where(...).Find(&orders)

B

db.Model(&Order{}).Scopes(TableByMonth(time.Now())).Find(&orders)

C

修改 TableName 方法

D

A 和 B 都可以

10
单选题

在 GORM 中,以下哪种方式最能有效防止 SQL 注入攻击?

A

使用字符串拼接构建查询条件

B

使用 Raw SQL 直接执行用户输入

C

使用 GORM 的 Where 方法配合占位符参数(?)

D

对用户输入进行 HTML 转义

11
单选题

在 GORM 中实现数据脱敏(如手机号中间四位显示为****),应该在哪个时机处理?

A

在 BeforeCreate 回调中处理

B

在 AfterFind 回调中处理

C

在数据库层面使用视图

D

在 BeforeSave 回调中处理

12
判断题

审计日志表应该设置为只允许 INSERT,不允许 UPDATE 和 DELETE,以确保审计 trail 完整。

A

B

13
单选题

GORM v2 的回调链(registerCallbacks)是如何组织的?

A

使用简单的函数数组

B

使用处理器链(handler chain),支持在目标回调前后注册

C

使用中间件模式

D

使用事件监听器

14
单选题

关于 GORM 的 预编译语句原理,以下说法正确的是?

A

预编译语句原理 是 GORM 的核心功能之一

B

预编译语句原理 只能在特定数据库中使用

C

预编译语句原理 需要手动配置才能启用

D

预编译语句原理 已被 GORM v2 废弃

15
判断题

预编译语句可以提高性能,因为 SQL 只需编译一次,后续执行只需传参数。

A

B

16
单选题

在生产环境中管理 GORM 数据库迁移,推荐使用的工具是?

A

GORM 的 AutoMigrate

B

golang-migrate 或 goose 等专业迁移工具

C

手动执行 SQL

D

每次启动时运行 AutoMigrate

17
判断题

修改字段默认值不会影响已有数据,只对新插入的记录生效。

A

B

18
单选题

在 GORM 中实现分表(如按月分表),推荐的方式是?

A

使用 Table 方法动态指定表名

B

使用多个模型分别映射

C

使用数据库分区表

D

使用分库分表中间件

19
单选题

使用 sqlmock 测试 GORM 代码的主要优势是什么?

A

不需要真实数据库且能模拟数据库行为和错误

B

测试执行速度更快

C

支持所有数据库方言

D

自动生成测试用例

20
多选题

使用 sqlmock 测试 GORM 代码时,需要 Mock 哪些内容?

A

ExpectQuery 模拟查询返回

B

ExpectExec 模拟执行结果

C

ExpectBegin/ExpectCommit 模拟事务

D

数据库连接字符串

← 上一个试卷 GORM 基础概念专题测试
下一个试卷 → 事务处理专题测试

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

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

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

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