惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
大猫的无限游戏
大猫的无限游戏
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LangChain Blog
S
SegmentFault 最新的问题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Project Zero
Project Zero
P
Privacy & Cybersecurity Law Blog
V
Vulnerabilities – Threatpost
博客园 - 三生石上(FineUI控件)
Recorded Future
Recorded Future
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
宝玉的分享
宝玉的分享
aimingoo的专栏
aimingoo的专栏
T
Tor Project blog
T
The Exploit Database - CXSecurity.com
Schneier on Security
Schneier on Security
H
Help Net Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
M
MIT News - Artificial intelligence
W
WeLiveSecurity
P
Proofpoint News Feed
A
About on SuperTechFans
S
Securelist
I
InfoQ
G
Google Developers Blog
博客园 - 司徒正美
博客园 - 叶小钗
Latest news
Latest news
F
Fortinet All Blogs
G
GRAHAM CLULEY
腾讯CDC
Jina AI
Jina AI
S
Schneier on Security
I
Intezer
V
Visual Studio Blog
美团技术团队
V2EX - 技术
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
罗磊的独立博客
Y
Y Combinator Blog

蛋蛋之家

SUMIFS和LET函数——让 Excel 自己动起来 Halo 博客晚间卡顿排查记:从"玄学卡顿"到"真凶落网" 我用这个开源项目,把 AI 绘画提示词变成了"代码"——awesome-gpt-image-2 深度体验报告 群晖部署 LX Music Server:浏览器就是你的音乐播放器【详细版】 别用一个人的奔跑,耗尽两个人的余生——《你凭什么认为我会一直喜欢你呢》 博客评论自动填充新方案:兼容 Vue/React 响应式绑定与跨架构填充逻辑 2026 生产级指南:Halo 2.x + PostgreSQL 自动化部署与性能优化手册 从 Typecho 转向 Halo 2.x:全能型 Nginx 架构与 SEO 无损迁移指南 Typecho 迁移 Halo 完整教程:数据库视图解决表前缀 + 自动提取封面图 + 去重检测 我的 CodeBuddy 装备库:218个技能全公开 + 使用心得 为博客添加自定义评论表情 Comment2Bark:Typecho评论推送到Bark插件 又拍云插件 UpyunFile v1.2 更新:修复 Typecho 1.3.0 兼容性问题 手把手修复RSS 403:从PHP警告到Cloudflare拦截的全链路排查 网站被镜像怎么办?2026年反镜像攻防实战指南 VLESS + Reality + Vision:2026 极致隐蔽节点搭建全解析 给OpenList和Alist加上液态玻璃效果,颜值直接拉满! 网页截图瞬间“赛博飞升”?手把手教你根治 Windows HDR 截图发白 群晖 NAS 影音终极方案:Docker Rclone + OpenList 完美挂载 Plex 全攻略 一个简洁高效的SVG图标库 告别重复劳动!一键填充评论的神奇书签脚本 - 蛋蛋之家 解锁思源笔记的隐藏力量:siyuan-patch 深度体验与技术实现 Oracle Cloud 自救指南:旧手机丢失后如何绕过 MFA 重新登录【更新2026年最新政策】 本站已加入“萌国ICP备案”联萌!😄 Excel 月报自动化指南:告别重复劳动,让数据主动为你服务 梦呓:为异地女友准备的2周年惊喜礼物 Typecho 多吉云插件优化:更灵活的存储目录配置 甲骨文云硬盘扩容指南:从50G到200G的“免费午餐”怎么吃? ⏰ 时间同步:当你的服务器开始“穿越”时,如何优雅地把它拉回现实 Typecho 又拍云文件管理插件修改版使用指南:新增自定义目录结构功能 华为鸿蒙6.0回退4.2记录 最近小公主情绪不佳 劳动节的家乡景色 烟台山公园一游 群晖搭建ChatGPT Web 推荐脚本:ChatGPT - 提示选择器 Activation Method for JetBrains Products (English version) JetBrains 系列产品激活方法 疫情三年后再进校园 修复searchEngineJump在谷歌搜索页面不生效问题 事情既然发生了,可以是遗憾,不要去后悔。 侄女的试唱会比赛 新一代图片编码格式测试 省科技馆之行 Typora Windows版破解补丁及主题推荐 在Typora中使用PicList上传图片 域名ICP备案之变更网站 Ubuntu 系统如何使用 root 用户登录 中国联通——让一切自由连不通 如何选购适合的口罩? 今天移动营业厅遇到一个小姐姐,真的好美 它不乐意 如何解决Typecho文章不是Markdown语法创建问题 探手抓住这一天的尾巴,为自己庆生 收到腾讯云自媒体分享计划2月份礼品 尝试百度Spider抓取异常问题 甲骨文DD重装系统及失联救砖教程 终于MrDoc升级v0.8.7成功了 Windows 端口查询及杀死进程 甲骨文实例开通与X-UI安装 国艺花鸟市场的悠闲 在思源笔记中使用群晖Synology C2对象存储服务 MrDoc升级v0.8.7失败 居居的手工作品 Linux系统时间同步命令小结 AList安装指南 宝塔面板降级 v7.7.0 及解除强制绑定手机、免费安装专业版插件的方法 修复群晖Synology Drive client右键菜单缺失问题 Windows11 展开折叠的右键菜单为传统模式 在 Windows 下批量将 Markdown 文档转为 Word 文档 Typecho的一些修改记录 Markdown语法——Mermaid 有两种新方案—CloudFlare官方免费CNAME接入教程 居居的新冠历程 群辉安装Transmission套件、增强汉化WebUI并备份做种列表 群晖 docker 部署思源笔记 Office for Mac 2019 License Installer 公众号通过api发送小程序消息 Windows 10下 iTunes 备份默认存储路径修改 Excel查找返回多个值,并将返回的值放在同一个单元格里面 七牛云测试域名失效后如何下载空间中的文件 入手三星860 evo 500g SSD固态硬盘 分享一套耐看的鼠标指针 如何重置OmniFocus数据库 Office for Mac 2016 License Installer Mac下配置终端+iTerm 2主题 如何制作苹果系统安装U盘 LNMP部署typecho,开启SSL、强制开启https Stylish样式如何设置为特定网址不生效? Typecho插件错误号:42S01的解决方法 电动车被偷了 热火 R150 上手开箱 UltraMon 3.3.0 汉化+注册机 如何用 MWeb 发布 Typecho 文章 测试 Mweb 发布到印象笔记功能 忘记了iPhone访问限制的密码该怎么办? 新玩具KAREE电子烟,先试试 Mac mini 2011 开启Handoff方法 见微知著 浅谈手游创新 PhoneClean Pro授权注册激活码
500道Word题库太痛苦?于是我写了个智能学习平台
吴蛋蛋 · 2026-05-18 · via 蛋蛋之家

一、事情是这样的

公司突然通知:“要考安全生产,题库发群里了,大家自己看。”

打开那个 Word 文档,我沉默了。

500 道题,密密麻麻挤在一起。没有分类,没有标签,翻几页就忘了前面看过什么。错题得自己拿本子记,学到哪了全凭感觉。

我试着看了半小时,眼睛酸,脑子乱,完全不知道看了多少、还剩多少。

"这不行,得想个办法。"——我的第一反应不是 "硬看",而是 "能不能做个工具?"

于是接下来几个周末,我折腾出了这个学习平台。

前后对比图
前后对比图

二、我遇到了哪些问题

问题1:记住答案位置,而不是知识点

按顺序做题,做着做着发现:我不是真会,只是记住了 "这题选 C"。

我的解法:每次打开,题目顺序随机;同一道题,选项顺序也随机。

// 题目顺序打乱
const questionOrder = Utils.shuffleArray([...Array(totalQuestions).keys()]);

// 选项顺序打乱,正确答案位置跟着变
const shuffledOptions = Utils.shuffleArray([...originalOptions]);
const shuffledAnswer = shuffledOptions.indexOf(originalAnswer);

这样一来,同一道题每次出现都不一样。你不能靠记位置,只能真懂。

问题2:进度总丢

Word 文档没有记忆功能。今天看到第 50 题,明天打开,得从头翻。

我的解法:自动保存学习进度,下次打开接着来。

// 存到本地
studySession: {
    questionIds: [],      // 题目列表
    currentIndex: 0,      // 做到哪题了
    answeredIds: [],      // 哪些题已经答过
    questionStates: {}    // 每道题的答题状态
}

关掉浏览器、重启电脑,回来还能继续。不用翻,不用找,打开就是上次离开的地方。

问题3:上一题下一题,跳来跳去

点 "上一题" 回去看看,再点 "下一题",结果跳到一道全新的题。刚才那道去哪了?

我的解法:用数组记录浏览历史,像浏览器的前进后退。

图片生成词:简洁的流程图,显示浏览历史栈的工作原理,箭头指示前进后退,清晰的步骤标注,蓝色和白色主调,技术文档风格

浏览记录:[第1题, 第5题, 第3题]
                    ↑
                  当前在这里

点"上一题" → 回到第5题
点"下一题" → 回到第3题(不是新题!)

只有回到最末尾,点"下一题"才会出新题

这样导航就顺了。想回顾就回顾,回顾完继续往前走。

问题4:手机上看太难受

用手机做题,各种按钮、进度条占满屏幕,题目被挤到只剩一点点。

我的解法:压缩顶部空间,把进度直接放在题号后面。

之前:

  • 第一行:题型、分类、题号

  • 第二行:筛选控件

  • 第三行:进度条 + 百分比

现在:

  • 第一行:题型、分类、第 9/58 题 (14%)、筛选控件

  • 没了

答题区域一下子大了不少。手机上按钮也改成垂直排列,不容易点错。


三、技术方面的一些事

纯前端,零后端

整个项目:

  • 一个 HTML 文件

  • 几个 JS 文件

  • 没有服务器

  • 没有数据库

  • 数据存在浏览器本地

部署超简单,丢到 GitHub Pages 就行。

模块化

js/
├── app.js          // 页面切换、初始化
├── study.js        // 学习逻辑(最复杂)
├── exam.js         // 考试模块
├── state.js        // 状态管理
├── storage.js      // 本地存储
├── ui.js           // 界面控制
└── utils.js        // 工具函数

每个文件干一件事,改起来不头疼。

AI帮了大忙

说实话,没有 AI 辅助,我不可能在几个周末做完。

  • 写代码:复杂逻辑先让 AI 生成骨架,我再改

  • 找 Bug:出错直接把代码和报错给 AI,省得自己瞪眼看

  • 查文档:不用翻 MDN,直接问 AI

AI 不是替代我,是让我更快。就像用计算器,你还是得知道怎么算。


四、功能清单

学习计划

  • 分三个阶段:基础→强化→冲刺

  • 完成一阶段才能解锁下一阶段

  • 记录连续学习天数

题库学习

  • 500+ 题,覆盖法律、法规、国标

  • 题目随机出现

  • 选项随机排列

  • 按类别、题型筛选

  • 自动保存进度

  • 上一题 / 下一题导航

习题本

  • 错题自动收集

  • 收藏夹

  • 错题重做

  • 批量清空

模拟考试

  • 60 分钟限时

  • 60 道题

  • 100 分制,60 分及格

  • 考完自动算分

  • 错题自动进习题本

体验优化

  • 手机、平板、电脑都能用

  • 提示消息从中间上方弹出,不挡题目

  • 答题区域尽量大


五、踩过的坑

坑1:新学习继承了旧状态

现象:点开始新学习,第一题直接显示答案。

原因:questionStates 没清空,上次学习的答题状态还在。

修复:初始化新会话时,questionStates 必须设为空对象。

AppState.studySession = {
    // ...其他字段
    questionStates: {}  // 从这里开始,别继承旧的
};

坑2:最后一题进度不满

现象:500 题全做完了,进度显示 99%。

原因:更新进度的函数在记录答案之前执行了。

修复:调整执行顺序,先记录答案,再更新进度。

坑3:随机到重复题目

现象:同一道题连续出现好几次。

原因:纯随机,没有排除已答题。

修复:只从未答题里随机。

const unanswered = allQuestions.filter(q => !answeredIds.includes(q.id));
return unanswered[Math.floor(Math.random() * unanswered.length)];

六、亮点:答案解析和记忆技巧

本身题目只有题干和答案,这多不方便记忆啊,于是我用 kimi,花了好长时间调试,然后给每道题都加了答案解析和记忆技巧。

答案解析:题目出自哪条安全生产的法律法规,做到有法可依。

记忆技巧:有个口诀(顺口溜),帮助记忆。

答案解析和记忆技巧
答案解析和记忆技巧

​七、还有什么想做

  • 成就系统(连续学习 7 天勋章之类的)

  • 学习数据统计(哪类题错得多)

  • 支持导入 Excel 题库

  • 同事间排行榜

  • 离线使用(PWA)

先这样吧,考过的话,就考过了...


八、最后说两句

做这个工具,我最大的感受是:

AI 真的能提高效率。 几个周末做完一个完整应用,以前不敢想。但 AI 只是工具,关键还是得有想法、知道要解决什么问题。

用户体验比技术重要。 从 Word 到网页,技术上没什么难的,但体验差太多了。题目随机、进度保存、手机适配,这些才是让人愿意用的原因。

简单最好。 纯前端、无后端、零依赖,部署和维护都省心。


相关链接