Skip to content

Adcage/oJudge

Repository files navigation

oJudge

在线判题系统 (Online Judge),支持题目管理、代码提交、自动判题等功能。

项目架构

oJudge/
├── ojudge-frontend/              # 前端 - Vue 3 + TypeScript
├── ojudge-backend/                # 后端单体版 - Spring Boot 2.7
├── oJudge-backend-microservice/   # 后端微服务版 - Spring Cloud Alibaba
└── oJudge-code-sandbox/           # 代码沙箱服务 - Docker 隔离执行

模块说明

ojudge-frontend

基于 Vue 3 + TypeScript 的前端应用,UI 框架采用 Arco Design。

  • 用户登录 / 注册
  • 题目浏览、创建、管理
  • 在线做题与代码编辑(Monaco Editor)
  • 提交记录查看
  • 权限控制(未登录 / 普通用户 / 管理员)

ojudge-backend

Spring Boot 2.7 单体架构后端,主要技术栈:

  • MyBatis-Plus + MySQL 数据持久化
  • Redis + Spring Session 会话管理
  • RabbitMQ 异步判题消息队列
  • Elasticsearch 帖子搜索
  • 微信公众号接入
  • 腾讯云 COS 文件存储
  • AOP 鉴权拦截与日志记录

oJudge-backend-microservice

基于 Spring Cloud Alibaba 的微服务版本,包含以下服务:

服务 端口 说明
gateway 8170 API 网关
user-service 8171 用户服务
question-service 8172 题目服务
judge-service 8173 判题服务

服务注册与发现使用 Nacos,流量控制使用 Sentinel。

oJudge-code-sandbox

代码沙箱服务,负责安全地执行用户提交的代码。

  • JavaNativeCodeSandbox - 基于 SecurityManager 的本地执行
  • JavaDockerCodeSandbox - 基于 Docker 容器的隔离执行
  • 模板方法模式统一执行流程
  • 防止恶意代码(文件读写、内存溢出、死循环等)

快速开始

环境要求

  • Java 8+
  • Node.js 16+
  • MySQL 8.0+
  • Redis
  • RabbitMQ(单体版判题队列)
  • Docker(代码沙箱容器隔离)
  • Nacos(微服务版服务注册)

前端

cd ojudge-frontend
npm install
npm run serve

后端(单体版)

  1. 配置 application.yml 中的 MySQL、Redis、RabbitMQ 等连接信息
  2. 执行 sql/ 目录下的数据库初始化脚本
  3. 启动 Spring Boot 应用
cd ojudge-backend
mvn spring-boot:run

后端(微服务版)

  1. 启动 Nacos、MySQL、Redis、RabbitMQ 基础设施
  2. 按顺序启动各微服务:gateway → user-service → question-service → judge-service
  3. 也可使用 Docker Compose 一键部署
cd oJudge-backend-microservice
docker-compose -f docker-compose.env.yml up -d
docker-compose -f docker-compose.service.yml up -d

代码沙箱

cd oJudge-code-sandbox
mvn spring-boot:run

判题流程

  1. 用户在前端提交代码
  2. 后端将判题请求发送至 RabbitMQ 队列
  3. 判题服务消费消息,调用代码沙箱执行代码
  4. 代码沙箱在 Docker 容器中安全执行用户代码
  5. 沙箱返回执行结果(输出、耗时、内存等)
  6. 判题服务比对输出与预期结果,返回判题状态

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors