Repository navigation
Releases: jangviktor-web/GongkaoNaoku
Release list
v1.2.0
v1.2.0 — 2026-10-22
主题:把"偶发报错"和"看不到解析"两个最影响体验的问题彻底解决。
一次彻底的系统自检后,修掉了 1 个会造成注册失败的服务端并发缺陷、1 个答题流程中断的
前端状态缺陷,重写了整套视觉样式,并把首屏体积压缩了七成。
🐞 修复
1. 注册 / 登录 / 游客登录偶发 database is locked(严重)
用户看到的现象:点注册或游客登录,有时弹出一句 database is locked,重试一下又好;人多的时候几乎必现。
根因(三层叠加):
| 层 | 问题 | 后果 |
|---|---|---|
| 连接管理 | 所有请求线程共用同一条 SQLite 连接,且连接永不关闭(单进程可积累 36+ 个文件句柄);写操作加锁、读操作不加锁 | 读事务与写事务在同一条连接上交错,是报错的主要放大器 |
| 数据写入量 | 新账号注册时要预铺 27,506 行空白学习进度(每道题一行),在 180 万行的用户库上实测插入 1.3 秒 + 提交 0.6 秒 | 每次注册独占写锁约 2 秒,两人同时注册必然撞车 |
| 等待策略 | 锁等待只有默认 5 秒,且失败不重试 | 外部进程(备份、命令行、另一实例)短暂占锁时,用户直接看到报错 |
| 修复方式: |
- 每个请求独享连接,用完即关;异常中断自动回滚,不给进程留半截事务
- 锁等待统一放宽到 30 秒:短暂占用时等待而不是报错
- 所有写路径统一串行 + 失败回滚
- 取消预铺进度行,改为按需生成:抽题、看详情、收藏、评分、交卷时,只给涉及到的题补一行(毫秒级)
效果:
| 指标 | 修复前 | 修复后 |
|---|---|---|
| 单次注册耗时 | ~1.5 秒 | ~50 毫秒 |
| 写锁持有时间 | ~2 秒 | 毫秒级 |
| 24 人同时注册 | 全部失败,或最长等 40 秒 | 24/24 成功,总耗时 1.1 秒 |
2. 评分后立刻翻页,解析一秒都看不到(体验)
现象:点「忘记 / 一般」的瞬间就切到下一题,刚展开的官方解析、易错点、推理链被一起划走;
倒计时超时判错更是直接跳过解析,用户连自己为什么错都不知道。
修复:评分后停在原题,只把评分区换成「已记录 · 看完解析再继续 [下一题 →]」,
正文与解析原地保留。看完按 空格 / 回车或点按钮再前进;键盘 1–4 评分与前进操作互不冲突。
3. 夜读(暗色)主题下彩色按钮文字几乎不可见(可访问性)
暗色主题的强调色是亮色(亮度 74%),按钮文字却沿用白色,实测对比度仅约 1.7:1,
远低于 WCAG AA 的 4.5:1。现按主题分别指定前景色:深底配白字、亮底配深墨,两套主题均达到 AA 标准。
4. 非法 URL 参数导致 500
访问 ?size=abc、?page= 这类畸形参数时后端直接抛 500。现已统一容错,退回默认值。
5. 「继续上次刷题」按了没反应(v1.1.1 已修,此处归档说明)
恢复会话时未补齐 marked 等字段,渲染时抛 TypeError,页面停在总览面板看似无响应。
现已补齐会话字段并对渲染加保护:任何情况下按钮都不会再点不动。
✨ 新增
- 纸感专注视觉主题:暖纸白底 + 墨色文字,标题用宋体、正文用无衬线,题面成为绝对主角;圆角收窄、阴影压淡、去掉全部弹跳动效,阅读宽度限制在 68 字以内
- 独立夜读主题:暗色不是简单反色,而是重新调配墨纸关系,行高单独放宽到 1.8
- 移动端两级适配(820px / 560px):选项触控高度提到 46px 以上,评分按钮 52px
- 尊重系统「减少动态效果」设置
- 服务端 gzip 压缩:
app.js89KB → 25KB(-72%),style.css17KB → 4.8KB - 静态资源强缓存 30 天,靠
?v=版本串穿透,日常访问不再有协商往返 - 启动预热:题库索引先读进页缓存,冷启动后首个请求不再抖动
🔧 改进
- 题库与用户库分库存储:
kaogong.db(只读题库)与users.db(账号与学习记录)彻底分离,备份只需复制users.db一个文件,更新题库不会碰到学习进度 - 导入同步改为单事务,中途失败不再留下半截数据
- 首次启动自动完成分库迁移(幂等、失败整体回滚、迁移前自动备份)
- 统计口径改为「题库总数 − 已学」,不再依赖预铺行
⚠️ 升级注意
- 版本串
20261022b:浏览器会自动拉新,无需手动清缓存 - 首次以本版启动会自动完成分库迁移,并在同目录留下
kaogong.db.bak-<时间戳>备份,确认无误后可手动删除 - 本版不启用 WAL 模式:跨库事务的原子性依赖回滚日志,开启 WAL 会破坏该保证
- 备份用户数据请用
sqlite3 users.db ".backup",不要直接cp正在使用的库文件
🧪 质量验证
| 测试 | 结果 |
|---|---|
| API 冒烟(56 项) | 56/56 |
| 浏览器端到端(13 路由 + 2 条完整流程) | 15/15 |
| 数据库锁专项回归(新增) | 16/16 |
| 线上站点实测(12 路由 + E2E) | 16/16 |
| 24 路并发注册压测 | 24/24,1.1 秒 |
| 360 次混合读写压测 | 360/360,6 秒内 |
Full Changelog: v1.0.0...v1.2.0
🎉 考公脑库 v1.0.0 — 首个正式版
把 27,506 道行测真题,变成一台听话的记忆机器。
不是题库浏览器,是间隔重复引擎——学过的题,会在你刚好要忘的那一刻回来找你。
🌐 立即在线体验(免注册可用)
✨ 核心特性
🧠 SM-2 间隔重复引擎
- 每道题独立记忆状态(间隔 / 难度系数 / 复习次数),到点才推送,不到点不打扰
- 作答后四档自评(忘记 / 困难 / 一般 / 熟悉),答错自动缩短间隔直到稳住
- 全程键盘流:
A/B/C/D选项 ·空格看标注 ·1/2/3/4自评
📚 真题题库(随仓库分发,克隆即用)
- 27,506 道题 · 506 份试卷 · 2008–2026 年 · 31 个省区市 + 国考 + 选调 + 多省联考
- 每道题自带:官方解析 + 审题路径 / ⚡最快解法 / ⚠易错坑 / 拿分口诀 / 母题归纳
- 配图 199MB 全部本地化,断网照常刷题
- 题量口径经逐题核查:上游 58,890 题行去重后 25,382 道,本项目覆盖 99.56%(详见
docs/题库差距核查报告.md)
👥 多账号 + 游客模式
- 注册账号(PBKDF2 加盐哈希),任何设备登录续上进度
- 游客模式一键进入免注册,退出即销毁不留残留
- 服务端按账号隔离,一套部署多人共用互不可见
📝 练习与复习全家桶
| 功能 | 说明 |
|---|---|
| 开始练习 | 按模块 / 大类 / 考点筛选,逐题作答即时判分 |
| 复习到期 | 引擎推送的当日队列,先回忆再核对再自评 |
| 错题本 | 答错自动收集,稳定后自然淡出 |
| 模拟考试 | 限时整卷、倒计时、题号跳转、交卷即判分并计入记忆曲线 |
| 材料组题 | 资料分析按同段材料成组(1,578 组),贴近考场节奏 |
| 疑点复核 | 官方解析存疑题逐条核验 |
| 数据统计 | 连续打卡 / 半年热力图 / 各模块正确率 / 薄弱考点排行 |
| 考点导航 | 同一考点跨省份横向对比,一键练同类题 |
🎨 界面
- 暗色 / 亮色 / 跟随系统三态主题
- 字号 14–19px 可调、专注模式隐藏侧栏
🚀 部署
- 本地:Windows 双击
启动考公系统.bat;Linux/macOSbash start.sh - WorkBuddy 在线应用:一键部署获得公开网址,同学研友浏览器即用
📦 安装(三步,约 10 秒出题库)
git clone https://gitee.com/jangviktor/GongkaoNaoku.git
cd GongkaoNaoku
python3 assemble_db.py # 合并分卷题库 → kaogong.db
python3 server.py # 启动,浏览器打开 http://127.0.0.1:8300零第三方依赖(Python 3.8+ 标准库即可),题库数据库与配图已随仓库提供。
🙏 致谢
题库原题与蒸馏方法来自开源项目 ERRRC/xingcezhenti(515 卷 / 58,890 题行 / 图片本地化),感谢原作者与贡献者的开放分享。
仅供个人学习使用 · 真题版权归原作者与原题库平台所有
Full Changelog: v1.0.0...v1.0.0