Skip to content

Releases: jangviktor-web/GongkaoNaoku

v1.2.0

Choose a tag to compare

@jangviktor-web jangviktor-web released this 22 Oct 04:44

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.js 89KB → 25KB(-72%),style.css 17KB → 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 — 首个正式版

Choose a tag to compare

@jangviktor-web jangviktor-web released this 02 Oct 15:46

把 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/macOS bash 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