做刷题站,先把六种题型和错题本搭起来

题库系统 使用文档
题库系统 使用文档

一个培训班想把题库搬到线上,第一反应通常是「把 Excel 导进去」。真做起来才发现,Excel 里只有题干和 ABCD,学员要的东西它给不了:这道题我上次做错过吗,这一类题我到底掌握了多少,能不能只练最近错的二十道。

题库系统(Problem,云题库)解决的就是这些。它把题目、分类、练习、错题、笔记串成一条线,前台挂在 /problem 下面,后台管题。

六种题型,一套结构

单选题、多选题、判断题、填空题、问答题、组合题。前四种是客观题,能自动判对错;问答题得人工看;组合题可以把几个小题打包成一道大题,材料共用、小问分开答。

题目挂在两层分类下:分类(ProblemCat)决定它出现在哪个题库里,章节(ProblemChapter)决定它在题库内部排第几章。标签是另一套并行的东西,可以打「Java」「数据结构」「阿里巴巴」这种跨分类的标记,一个题能挂多个标签,标签自己还能分组。

后台录题之外还有导入。把表格按模板整理好,一次灌几千道进去,导入任务在后台排队跑,长度超了会报错并指出是哪一行。

前台看到的三层

首页是搜索加标签矩阵。顶部一条蓝色横幅放搜索框,下面按「职业方向 / 编程语言 / 软件开发 / 计算机基础 / 数据结构 / 公司」几组铺开标签,点哪个标签进哪个题集。右侧竖着「最新题目」和「最近资讯」,进来不知道搜什么的人,从这些入口也能点进去。

题库首页:顶部搜索框,左侧按职业方向、编程语言、数据结构分组的标签矩阵,右侧最新题目

列表页每条题目一行:题型标签打头,题干一行,下面是标签胶囊,右端跟着「正确率 71% | 评论 1 | 点击 846」。这个正确率是所有做过这道题的人算出来的平均,不是给某个人看的。右栏有「专项训练」入口,还有按题型筛选(全部 / 单选 / 多选 / 判断 / 填空 / 问答 / 组合)。

题目列表:每条带题型标签和标签胶囊,右侧显示正确率、评论数、点击数

详情页是做题的地方。题干在上,选项竖排,选完点「确定」出结果。下面是用户评论,没登录的人只能看到「请登录后再回复」。右栏是题目信息、收藏按钮、上一题/下一题,刷题时不用退回列表。

题目详情:多选题干、ABCD 四个选项、确定按钮,下方是评论区和上一题下一题

学员自己的那几页

这是题库和「一堆题目」的区别所在。登录之后每个分类下多出四本账,各自独立:

  • 错题本(/problem/cat/{id}/errors):做错的题自动记进来,可以按分类一键清空,清空后重新开始攒;
  • 收藏(/fav):手动存,适合「这题先留着」;
  • 笔记(/note):写自己的理解,只自己看得见;
  • 已掌握(/mastered):做对并确认之后标一下,和错题本是两本账,互不移除。

再往上是「专项训练」和「分类考试」。专项训练是个统一入口,靠一个 mode 参数决定抽哪批题:顺序(order)、随机(random)、错题(errors)、收藏(fav)、记过笔记的(note)、按题型(type)、按章节(chapter)、所有人常错的(commonMistake)。后台还能预置练习题(test),一套题按顺序发下去。分类考试是整卷,交卷给分数。要更完整的考试能力(限时、组卷、成绩单),得再装「试卷考试系统」,那是另一个模块。

AI 搜题是个云服务

/problem/ai_search 这一页允许传一张题目照片,AI 识别后给解析。实现上,图片转成 base64 传到后台(限 10MB),落在 problem_ai_search 表里,再调魔众的云模型接口返回内容,整个过程要求登录。

手机端拍照搜题:图片识别出的文字填进搜索框,下面是匹配到的题目列表

它不是本地算的,走的是云端模型,涉及调用次数和费用;图片地址如果配了下载器客户端,会先转一道 CDN。如果站点只是内部练习用,这个入口可以不开。

搭起来要动的地方

  1. 先装框架(5.0.0 以上)和「通用用户系统」,题库依赖它做登录与错题归属;模块市场搜「云题库」装上,会带 Vendor 依赖。
  2. 建分类,建章节,把标签组配好。分类决定前台的入口结构,开工前想清楚,中途改会连累已导入的题。
  3. 导题。表格按后台给的模板整理,先导 50 道试一遍,看清导入结果里的失败原因再批量灌。
  4. 想要搜题快,得开 MySQL 全文索引:给 question.questionText 建 FULLTEXT ... WITH PARSER ngram,再把配置 Problem_MysqlFulltext 置 1,清缓存。不建索引也能搜,只是走 like,题量上万之后会明显变慢。
  5. 上线前检查存储目录权限,题目里的图片走的还是数据上传那套。

两个容易踩的坑

题干长度有上限。 question.questionText 是 varchar(2000),汉字在 MySQL 里占 3 字节,实际能放六百多个汉字。超长会被截断,而且截断是静默的。材料题多的话,先把字段改成 TEXT(question_answer.answer、question_analysis.analysis 同理)。

组合题和普通题不要混在一个分类里。 专项训练按分类抽题,一个分类里既有单选题又有组合题,练习节奏会很乱,组合题单独建一个分类更清楚。

适合谁

教育培训机构、职业资格考试培训、企业内部的知识考核,题量在几千到几万道、需要按知识点组织练习的场景。如果只是想把一份试卷发出去让人做一遍,装「试卷考试系统」比装题库更直接;反过来,题目要长期积累、反复练、还要看正确率趋势,那就得从题库这层开始搭。

更新: 2026-11-14 10:22:44
QQ
微信
客服