本项目是面向高校程序设计教学、算法训练和自主学习场景的在线判题(OJ)与AI辅助教学平台。建设目标是把题目生产、代码提交、自动评测、训练组织、学习反馈和智能答疑整合为闭环,降低教师组织实验与批改成本,提高学生练习效率和反馈及时性。
平台按用户、题目、判题、训练、课程团队、论坛、消息、文件和公共能力等领域拆分。核心功能包括:多语言题库管理,题目标签/分类、代码模板、测试数据、每日一题与随机练习;代码在线自测、正式提交、评测详情和状态长轮询;课程/公开训练的创建、启停、时间控制、题目编排、成员管理、通过状态、排行榜、成绩统计及Excel导出;AI问答以流式对话提供题目理解、思路启发和学习辅助;同时具备用户与角色权限、通知、讨论、反馈等配套能力。
典型流程为:教师创建题目并配置语言、资源限制和测试数据,将题目编入训练;学生选题编码并提交;系统异步调度沙箱完成编译运行、用例比对与资源统计,实时返回结果,并将提交数据同步到题目统计、训练记录及排行榜;学生可继续查看详情、调整代码或发起AI问答,形成“教、学、练、测、评、答”一体化业务闭环。
我担任项目总负责人,兼任后端开发与运维,负责需求分析、服务边界和数据模型设计、任务拆解、接口规范、代码审查、联调上线与运行维护;亲自负责判题、题目、训练和AI问答四个核心模块。
整体采用Java 21、Spring Boot 3.3、Spring Cloud/Alibaba微服务架构,围绕11个业务服务与统一网关建设,使用Nacos完成注册发现和配置管理,OpenFeign进行服务间调用,MyBatis-Plus+MySQL持久化,Redis承担热点缓存和状态加速,RabbitMQ完成异步解耦,Spring Security/JWT实现网关统一认证及角色权限控制。
判题模块设计“提交入队—任务消费—沙箱执行—结果落库—事件广播”链路,支持本地、远程及第三方沙箱策略、多语言编译运行、普通/函数题模式、CPU/内存/实际时间限制、逐用例结果与分数统计;通过双队列、可配置线程池、Redis缓存、异步自测和长轮询,解决判题耗时任务阻塞接口、突发提交削峰及跨服务状态同步问题。题目模块实现题目全生命周期、标签分类、多语言模板、测试数据ZIP上传下载、每日/随机题及缓存失效;训练模块实现课程关联、参与权限、时间边界、提交记录、AC统计、动态排行和Excel成绩导出。
AI问答通过Dify接入,在网关完成JWT校验、路径重写、服务端密钥注入、流式响应转发及CORS响应头治理,避免密钥下发客户端。运维侧负责Nacos环境配置、Maven多模块构建与流水线、Docker容器/镜像管理、服务制品更新、SSH远程操作、日志与故障排查。最终打通题目—判题—训练—统计—AI全链路,使核心服务可独立部署、扩缩容和迭代,体现了从架构设计、核心编码到上线运维的端到端交付能力。