在线判题系统 (Online Judge),支持题目管理、代码提交、自动判题等功能。
oJudge/
├── ojudge-frontend/ # 前端 - Vue 3 + TypeScript
├── ojudge-backend/ # 后端单体版 - Spring Boot 2.7
├── oJudge-backend-microservice/ # 后端微服务版 - Spring Cloud Alibaba
└── oJudge-code-sandbox/ # 代码沙箱服务 - Docker 隔离执行
基于 Vue 3 + TypeScript 的前端应用,UI 框架采用 Arco Design。
- 用户登录 / 注册
- 题目浏览、创建、管理
- 在线做题与代码编辑(Monaco Editor)
- 提交记录查看
- 权限控制(未登录 / 普通用户 / 管理员)
Spring Boot 2.7 单体架构后端,主要技术栈:
- MyBatis-Plus + MySQL 数据持久化
- Redis + Spring Session 会话管理
- RabbitMQ 异步判题消息队列
- Elasticsearch 帖子搜索
- 微信公众号接入
- 腾讯云 COS 文件存储
- AOP 鉴权拦截与日志记录
基于 Spring Cloud Alibaba 的微服务版本,包含以下服务:
| 服务 | 端口 | 说明 |
|---|---|---|
| gateway | 8170 | API 网关 |
| user-service | 8171 | 用户服务 |
| question-service | 8172 | 题目服务 |
| judge-service | 8173 | 判题服务 |
服务注册与发现使用 Nacos,流量控制使用 Sentinel。
代码沙箱服务,负责安全地执行用户提交的代码。
- JavaNativeCodeSandbox - 基于 SecurityManager 的本地执行
- JavaDockerCodeSandbox - 基于 Docker 容器的隔离执行
- 模板方法模式统一执行流程
- 防止恶意代码(文件读写、内存溢出、死循环等)
- Java 8+
- Node.js 16+
- MySQL 8.0+
- Redis
- RabbitMQ(单体版判题队列)
- Docker(代码沙箱容器隔离)
- Nacos(微服务版服务注册)
cd ojudge-frontend
npm install
npm run serve- 配置
application.yml中的 MySQL、Redis、RabbitMQ 等连接信息 - 执行
sql/目录下的数据库初始化脚本 - 启动 Spring Boot 应用
cd ojudge-backend
mvn spring-boot:run- 启动 Nacos、MySQL、Redis、RabbitMQ 基础设施
- 按顺序启动各微服务:gateway → user-service → question-service → judge-service
- 也可使用 Docker Compose 一键部署
cd oJudge-backend-microservice
docker-compose -f docker-compose.env.yml up -d
docker-compose -f docker-compose.service.yml up -dcd oJudge-code-sandbox
mvn spring-boot:run- 用户在前端提交代码
- 后端将判题请求发送至 RabbitMQ 队列
- 判题服务消费消息,调用代码沙箱执行代码
- 代码沙箱在 Docker 容器中安全执行用户代码
- 沙箱返回执行结果(输出、耗时、内存等)
- 判题服务比对输出与预期结果,返回判题状态