每日一题自动更新系统说明
本文档详细说明了CCZU ACM网站每日一题功能的自动更新机制,包括系统架构、工作原理、题目管理方法以及常见问题解答。
系统架构
每日一题自动更新系统主要由以下几个部分组成:
- 题目数据库:存储在
docs/daily/database/problem_list.json
中,包含所有题目的元数据 - 题目内容:存储在
docs/daily/database/content/
目录下,每个题目对应一个Markdown文件 - 自动更新脚本:位于
scripts/update_daily_problem.js
,负责根据当前日期选择和发布题目 - GitHub Actions工作流:定义在
.github/workflows/daily-problem.yml
,负责定时触发更新脚本
工作原理
系统的工作流程如下:
- GitHub Actions按照预设的时间(每天北京时间凌晨0:05)自动触发工作流
- 工作流检出最新代码,并设置Node.js环境
- 运行更新脚本,脚本执行以下操作:
- 读取题目数据库,查找当天日期对应的题目
- 更新每日一题首页,显示最新的3个题目
- 更新网站首页的"最新日程"部分
- 创建当天题目的页面,从内容库中读取详细题目内容
- 更新月度归档页面
- 工作流将更改提交并推送到GitHub仓库
- VitePress网站自动重新构建和部署最新内容
题目管理
添加新题目
要添加新题目,需要完成以下步骤:
在
docs/daily/database/problem_list.json
文件中添加新题目的元数据,格式如下:json{ "id": "题目唯一标识符,如leetcode-123", "title": "题目标题", "date": "预定发布日期,格式为YYYY-MM-DD", "difficulty": "难度,如简单、中等、困难", "tags": ["标签1", "标签2", ...], "source": "题目来源,如LeetCode 123", "content_file": "存储题目内容的文件名" }
在
docs/daily/database/content/
目录下创建对应的内容文件(如two-sum.md
),包含题目的详细描述和解法
修改现有题目
- 直接在
problem_list.json
中修改相应题目的元数据 - 如需修改题目内容,编辑对应的内容文件
调整发布日期
如果需要调整题目的发布顺序或日期,只需在 problem_list.json
中修改题目的 date
字段即可。
常见问题与解答
Q: 如何手动触发每日一题更新?
A: 您可以在GitHub仓库的Actions页面手动触发"每日一题自动更新"工作流。或者在本地运行以下命令:
bash
node scripts/update_daily_problem.js
Q: 如何确保某个特定日期有对应的题目?
A: 请检查 problem_list.json
文件,确保有一个题目的 date
字段与该日期匹配。建议提前几周规划好题目发布日程。
Q: 是否可以一次添加多个题目?
A: 可以。您可以一次在 problem_list.json
中添加多个题目,只要每个题目的 date
字段设置正确,系统会在对应的日期自动发布。
Q: 如何修改题目发布的时间?
A: 编辑 .github/workflows/daily-problem.yml
文件中的 cron
表达式。目前设置为 '5 16 * * *'
,对应北京时间凌晨0:05。
系统维护
日常维护
- 定期检查 GitHub Actions 运行日志,确保自动更新正常进行
- 提前准备足够的题目,确保系统有足够的题目可以发布
- 定期更新题目库,添加新的算法题目
故障排除
如果自动更新失败,请检查:
- GitHub Actions 运行日志中的错误信息
- 确保
problem_list.json
格式正确 - 确保所有引用的内容文件都存在
- 检查脚本中的路径配置是否正确
未来改进计划
- 添加题目难度分布统计功能
- 实现题目自动推荐系统
- 集成在线评测功能
- 添加用户提交代码和讨论功能
贡献指南
欢迎对每日一题系统进行改进!如果您有好的建议或想参与开发,请:
- Fork 项目仓库
- 创建您的功能分支
- 提交您的更改
- 推送到分支
- 创建新的 Pull Request
感谢您对 CCZU ACM 每日一题系统的关注和支持!