首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >题库怎么建才不崩?题目结构、难度标签与抽题的 5 个要点

题库怎么建才不崩?题目结构、难度标签与抽题的 5 个要点

原创
作者头像
用户5658160
发布于 2026-09-24 09:10:00
发布于 2026-09-24 09:10:00
740
举报

导读:考试系统上线最怕什么?抽题重复、难度忽高忽低、答案和题干对不上。这些问题的根子都在题库建模:题目结构不规范、难度没有量化、抽题算法太随意。本文给出题库建设的落地要点,含可直接复制的表结构与抽题策略。

一、题目结构:题干、选项、答案分开存

题目表不要只存一个"题目"字符串,结构化字段才能支撑后续的抽题和统计:题型(单选/多选/判断/填空)、题干、选项、答案、难度、知识点、启用状态。答案与选项分开存,避免解析时出错:

代码语言:sql
复制
CREATE TABLE question (
  id BIGINT PRIMARY KEY,
  type VARCHAR(16),       -- single/multi/judge/blank
  stem TEXT,              -- 题干
  options JSON,           -- ["A:xxx","B:xxx",...]
  answer JSON,            -- ["A"] 或 ["A","C"] 或 "正确"
  difficulty TINYINT,     -- 1-5,难度分
  knowledge_id BIGINT,    -- 知识点标签
  enabled TINYINT DEFAULT 1
);

要点:选项用 JSON 存固定顺序,抽题后前端按序渲染;答案单独字段且可加密,防止接口返回题目时把答案一起带出去。

二、难度标签:用试测数据校准,不拍脑袋

难度不是"我感觉这题难",要量化:难度 = 1 - 正确率。新题先用预估难度入池,跑过一定答题量后用真实正确率回填。难度分 5 档与正确率对应关系:

代码语言:json
复制
{ "1": ">=0.9", "2": "0.8-0.9", "3": "0.6-0.8", "4": "0.4-0.6", "5": "<0.4" }

要点:难度标签要定期重算(题目做过大量考生后正确率会漂移);试卷难度不是各题难度的平均,要先定目标分再反推题目难度组合。

三、抽题策略:随机之外还要防重复

抽题最怕三件事:同一套卷子题重复、相邻考生卷子太像、同一知识点覆盖不全。基础做法是"按知识点配额 + 池内随机",配额外再加一个去重游标:

代码语言:javascript
复制
// 按知识点分组抽题:每组随机取,且不取本次会话已抽过的
function pickQuestions(poolByKnowledge, quota) {
  return quota.flatMap(({ knowledgeId, count, usedIds }) =>
    poolByKnowledge[knowledgeId]
      .filter(q => !usedIds.has(q.id))
      .sort(() => Math.random() - 0.5)
      .slice(0, count)
  );
}

要点:同一考生连续两次考试的抽题交集要控制在阈值内(重题率记录到日志);抽题结果要落库留痕(试卷快照),考后申诉有据可查。

四、答案安全:返回题目不带答案

接口返回题目时绝不能把 answer 字段带出去,否则抓包就全泄了。做法:答题接口只返回题干/选项/题型,答案只在判分服务内部比对;需要的话对答案做加密存储:

代码语言:bash
复制
# 答题接口返回:不带 answer 字段
GET /api/exam/questions
# => [{"id":1,"stem":"...","options":[...],"type":"single"}, ...]

要点:判分在服务端做,前端只传选项,不能信任前端算分;答案加密要防逆向,密钥不进前端包。

五、踩坑清单

  1. 题目只存一个字符串:选项答案解析全靠正则,抽题统计全废;
  2. 难度拍脑袋:试卷难度失控,考生成绩忽高忽低没法解释;
  3. 抽题纯随机:卷子之间重复题多,同一知识点覆盖不全;
  4. 接口返回答案:抓包即泄题,考试直接失效;
  5. 试卷不留快照:考后申诉无据可查,扯皮没完;
  6. 题目停用不清场:下架题还留在考生卷子里,事故。

六、工程落地建议

题库要按「结构建模 → 难度量化 → 策略抽题 → 答案安全」落地,字段规范化、难度数据化、抽题留痕化、答案服务端化,四件事环环相扣。同类分层在乔拓云教育系统的题库模块中有对应实现,中小教培机构可直接参照该模块的题目结构与抽题策略起步。

七、复盘清单

  • 题干/选项/答案分开存储,选项有序;
  • 难度按正确率量化并定期重算;
  • 按知识点配额抽题,重题率记录监控;
  • 答题接口不含答案,判分只在服务端;
  • 试卷快照落库,考后申诉有据;
  • 题目停用后从抽题池即时剔除。

结语

题库是考试系统的心脏:结构管住数据、难度管住质量、抽题管住公平、安全管住底线。这四层做好,抽题不重复、难度不飘、泄题不出现,考试系统才敢真正上线。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、题目结构:题干、选项、答案分开存
  • 二、难度标签:用试测数据校准,不拍脑袋
  • 三、抽题策略:随机之外还要防重复
  • 四、答案安全:返回题目不带答案
  • 五、踩坑清单
  • 六、工程落地建议
  • 七、复盘清单
  • 结语
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档