QQ扫一扫联系
一个培训班想把题库搬到线上,第一反应通常是「把 Excel 导进去」。真做起来才发现,Excel 里只有题干和 ABCD,学员要的东西它给不了:这道题我上次做错过吗,这一类题我到底掌握了多少,能不能只练最近错的二十道。
题库系统(Problem,云题库)解决的就是这些。它把题目、分类、练习、错题、笔记串成一条线,前台挂在 /problem 下面,后台管题。
单选题、多选题、判断题、填空题、问答题、组合题。前四种是客观题,能自动判对错;问答题得人工看;组合题可以把几个小题打包成一道大题,材料共用、小问分开答。
题目挂在两层分类下:分类(ProblemCat)决定它出现在哪个题库里,章节(ProblemChapter)决定它在题库内部排第几章。标签是另一套并行的东西,可以打「Java」「数据结构」「阿里巴巴」这种跨分类的标记,一个题能挂多个标签,标签自己还能分组。
后台录题之外还有导入。把表格按模板整理好,一次灌几千道进去,导入任务在后台排队跑,长度超了会报错并指出是哪一行。
首页是搜索加标签矩阵。顶部一条蓝色横幅放搜索框,下面按「职业方向 / 编程语言 / 软件开发 / 计算机基础 / 数据结构 / 公司」几组铺开标签,点哪个标签进哪个题集。右侧竖着「最新题目」和「最近资讯」,进来不知道搜什么的人,从这些入口也能点进去。

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

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

这是题库和「一堆题目」的区别所在。登录之后每个分类下多出四本账,各自独立:
/problem/cat/{id}/errors):做错的题自动记进来,可以按分类一键清空,清空后重新开始攒;/fav):手动存,适合「这题先留着」;/note):写自己的理解,只自己看得见;/mastered):做对并确认之后标一下,和错题本是两本账,互不移除。再往上是「专项训练」和「分类考试」。专项训练是个统一入口,靠一个 mode 参数决定抽哪批题:顺序(order)、随机(random)、错题(errors)、收藏(fav)、记过笔记的(note)、按题型(type)、按章节(chapter)、所有人常错的(commonMistake)。后台还能预置练习题(test),一套题按顺序发下去。分类考试是整卷,交卷给分数。要更完整的考试能力(限时、组卷、成绩单),得再装「试卷考试系统」,那是另一个模块。
/problem/ai_search 这一页允许传一张题目照片,AI 识别后给解析。实现上,图片转成 base64 传到后台(限 10MB),落在 problem_ai_search 表里,再调魔众的云模型接口返回内容,整个过程要求登录。

它不是本地算的,走的是云端模型,涉及调用次数和费用;图片地址如果配了下载器客户端,会先转一道 CDN。如果站点只是内部练习用,这个入口可以不开。
question.questionText 建 FULLTEXT ... WITH PARSER ngram,再把配置 Problem_MysqlFulltext 置 1,清缓存。不建索引也能搜,只是走 like,题量上万之后会明显变慢。题干长度有上限。 question.questionText 是 varchar(2000),汉字在 MySQL 里占 3 字节,实际能放六百多个汉字。超长会被截断,而且截断是静默的。材料题多的话,先把字段改成 TEXT(question_answer.answer、question_analysis.analysis 同理)。
组合题和普通题不要混在一个分类里。 专项训练按分类抽题,一个分类里既有单选题又有组合题,练习节奏会很乱,组合题单独建一个分类更清楚。
教育培训机构、职业资格考试培训、企业内部的知识考核,题量在几千到几万道、需要按知识点组织练习的场景。如果只是想把一份试卷发出去让人做一遍,装「试卷考试系统」比装题库更直接;反过来,题目要长期积累、反复练、还要看正确率趋势,那就得从题库这层开始搭。