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

GORM 高级技能认证测试

21 题 90 分钟 难度:★★★

考察知识点

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

  1. 性能优化与调优(3题)
      • N+1 查询优化
      • 批量操作性能调优
      • 查询计划分析与读写分离
  2. 高级并发与锁机制(3题)
      • 悲观锁与乐观锁实现
      • 分布式锁集成
      • 死锁检测与处理
  3. 源码分析与底层原理(3题)
      • GORM 内核架构
      • 回调链机制
      • 反射与元编程
      • 预编译语句原理
  4. 分库分表与多租户(3题)
      • 分表策略与分库路由
      • 多租户数据隔离
      • 跨库事务处理
  5. 数据迁移与版本管理(3题)
      • 迁移脚本编写
      • 生产环境迁移策略
      • 数据一致性校验
  6. 安全与数据保护(3题)
      • SQL 注入防护
      • 敏感数据加密与脱敏
      • 权限与审计日志
  7. 生态与工具链(3题)
      • gen 代码生成器
      • 第三方驱动适配
      • 测试与 Mock 实践
💡 参考答案在文末
单选题
1

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

A

GORM 的 AutoMigrate

B

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

C

手动执行 SQL

D

每次启动时运行 AutoMigrate

2

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

A

AutoMigrate

B

golang-migrate 或 goose

C

手动执行 SQL 脚本

D

每次启动时自动运行迁移

3

在 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)

4

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

A

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

B

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

C

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

D

对用户输入进行 HTML 转义

5

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

A

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

B

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

C

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

D

对用户输入进行 HTML 转义

6

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

A

字符串拼接 SQL 语句

B

使用 Raw 方法直接执行 SQL

C

使用 Where 方法的占位符(?)和参数绑定

D

对用户输入做 HTML 转义

7

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

A

使用多个独立的 Find 查询

B

使用 Preload 预加载关联数据

C

使用 Raw SQL 手写 JOIN

D

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

8

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

A

使用多个独立的 Find 查询

B

使用 Preload 预加载关联数据

C

使用 Raw SQL 手写 JOIN

D

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

9

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

A

使用多个独立的 Find 查询

B

使用 Preload 预加载关联数据

C

使用 Raw SQL 手写 JOIN

D

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

10

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

A

GORM 的 AutoMigrate

B

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

C

手动执行 SQL

D

每次启动时运行 AutoMigrate

11

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

A

使用 Table 方法或 Scopes 动态指定表名

B

创建多个模型分别对应不同表

C

使用数据库分区表

D

使用数据库中间件

12

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

A

使用简单的函数数组

B

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

C

使用中间件模式

D

使用事件监听器

13

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

A

使用 Table 方法动态切换表名

B

使用分区表功能

C

使用多数据源

D

GORM 不支持分表

14

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

A

使用简单的函数数组

B

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

C

使用中间件模式

D

使用事件监听器

15

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

A

简单数组顺序执行

B

处理器链,每个处理器有前置和后置回调

C

标准中间件模式

D

事件监听器模式

16

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

A

使用 Table 方法动态指定表名

B

使用多个模型分别映射

C

使用数据库分区表

D

使用分库分表中间件

17

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

A

使用 Table 方法动态指定表名

B

使用多个模型分别映射

C

使用数据库分区表

D

使用分库分表中间件

多选题
18

以下哪些场景适合使用分表策略?

A

日志数据按月份存储

B

订单数据按年份归档

C

用户数据按地区分布

D

单表数据量超过千万级

19

以下哪些场景适合使用悲观锁?

A

库存扣减:多个并发请求同时扣减同一商品库存

B

用户信息查询:多个用户同时查看同一用户资料

C

账户余额转账:从一个账户扣款同时向另一个账户加款

D

计数器自增:页面访问次数统计

填空题
20

分表后查询需要____________或使用____________确定目标分表,避免全表扫描。

21

使用悲观锁扣减库存:

Go
db.!!1_Transaction!!(func(tx *gorm.DB) error {
    var product Product
    tx.Clauses(clause.Locking{!!2_Strength!!: "UPDATE"}).
        Where("id = ?", productID).First(&product)
    if product.Stock < quantity {
        return errors.New("库存不足")
    }
    product.Stock -= quantity
    return tx.!!3_Save!!(&product).Error
})
参考答案
1.B 2.B 3.B 4.C 5.C 6.C 7.B 8.B 9.B 10.B 11.A 12.B 13.A 14.B 15.B 16.A 17.A 18.A;B;D 19.A;C 20.遍历所有分表;路由规则 21.Transaction;Strength;Save
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 GORM 基础概念专题测试
下一套试卷 → 事务处理专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码