# code_online_judging_system
**Repository Path**: xenogene/code_online_judging_system
## Basic Information
- **Project Name**: code_online_judging_system
- **Description**: 开源软件实践项目
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-25
- **Last Updated**: 2026-04-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Intelli OJ——你的下一代AI代码训练师
一个前后端分离的在线评测系统示例项目,包含:
- AI智能代码训练
- FastAPI 后端接口
- SQLite 数据存储
- 多语言判题核心
- 原生 HTML/CSS/JavaScript 的 Web IDE 前端
- Docker 启动脚本
- redis 缓存加速
- `pydantic-settings` 配置中心
- `slowapi` 接口限流
- `RQ + Redis` 异步判题任务队列
当前版本已经内置题库、登录鉴权、排行榜、个人统计和管理员发题能力,适合作为课程作业、演示项目或二次开发基础。
## 已有功能
### 判题核心
- 支持 `Python`、`C`、`C++`、`Java`、`JavaScript`、`Go`等10+语言
- 自动编译并执行测试点
- 支持判题结果:
- `Accepted`
- `Wrong Answer`
- `Compile Error`
- `Runtime Error`
- `Time Limit Exceeded`
- `Memory Limit Exceeded`
- `Language Not Supported`
- 支持时间限制与内存限制
- 支持可选 Docker 运行沙箱
- 兼容 Windows 与类 Unix 环境的基础运行方式
### 平台能力
- 用户注册、登录、JWT 鉴权
- 默认管理员账号初始化
- 题目列表、搜索、难度筛选
- 题目详情、样例、统计信息
- 提交记录查询(支持分页)
- 收藏题单(手动维护)
- 错题本(按历史非 AC 提交自动归档)
- 异步判题任务提交与状态轮询
- 排行榜
- 个人统计
- 管理员创建题目和测试点
### 前端界面
- 题库浏览
- 题目详情展示
- 语言切换与代码模板
- CodeMirror Web IDE 编辑器
- 判题结果展示
- 提交记录面板
- 收藏页(`favorites.html`)
- 错题本页(`wrongbook.html`,自动记录历史错题)
- 排行榜与个人统计面板
- 管理员发题面板
- AI代码训练面板
## 项目结构
```text
.
├── backend
│ ├── app
│ │ ├── main.py
│ │ ├── judge.py
│ │ ├── models.py
│ │ ├── schemas.py
│ │ ├── security.py
│ │ ├── database.py
│ │ └── problem_bank.py
│ ├── tests
│ │ └── test_judge.py
│ ├── requirements.txt
│ ├── Dockerfile
│ └── oj.db
├── frontend
│ ├── index.html
│ ├── styles.css
│ ├── app.js
│ └── Dockerfile
├── scripts
│ ├── docker_up.sh
│ └── docker_down.sh
├── docker-compose.yml
└── OPTIMIZATION_PLAN.md
```
## 环境依赖
建议先安装以下运行时工具(用于后端服务和多语言判题):
- Python `3.10+`
- C/C++ 编译器:`gcc`、`g++`
- Java:`javac` + `java`
- Node.js(用于 JavaScript 判题)
- Go(用于 Go 判题)
- Redis(可选;启用异步队列时需要)
如果仅体验同步判题,可先不启动 Redis 和 Worker(见下文“模式 A”)。
## 依赖安装
### macOS / Linux
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -r backend/requirements.txt
```
### Windows PowerShell
```powershell
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r backend\requirements.txt
```
## 本地启动-Docker 运行
推荐使用脚本:
```bash
bash scripts/docker_up.sh
```
一键起前后端:
```bash
docker compose -f docker-compose.yml up -d --build backend frontend
```
如果你希望一键拉起前后端(并重建镜像),在项目根目录执行:
```bash
docker compose -f docker-compose.yml up -d --build --force-recreate backend frontend
```
查看运行状态:
```bash
docker compose -f docker-compose.yml ps
```
查看后端日志:
```bash
docker logs --tail 200 -f xeno-oj-backend
```
停止:
```bash
bash scripts/docker_down.sh
```
如果本机支持 `docker compose`,也可以直接:
```bash
docker compose up --build
```
访问地址:
- 前端:`http://127.0.0.1:5173`
- 后端 API 文档:`http://127.0.0.1:8000/docs`
## 可配置环境变量
后端支持以下常用环境变量:
- `OJ_DATABASE_URL`
- 自定义数据库连接地址
- `OJ_SECRET_KEY`
- 自定义 JWT 密钥
- `OJ_ACCESS_TOKEN_EXPIRE_MINUTES`
- JWT 过期时间,单位分钟
- `OJ_REFRESH_TOKEN_EXPIRE_DAYS`
- Refresh Token 过期时间,单位天
- `OJ_ALLOWED_ORIGINS`
- 允许跨域访问的来源,多个值用逗号分隔
- `OJ_USE_DOCKER_SANDBOX`
- 是否启用 Docker 运行沙箱,`true` / `false`
- `OJ_DOCKER_IMAGE`
- Docker 沙箱镜像名称
- `OJ_PYTHON_COMMAND`
- 自定义 Python 运行命令,例如 `python3` 或 `python`
- `OJ_REDIS_ENABLED`
- 是否启用 Redis 缓存,`true` / `false`,默认 `true`
- `OJ_REDIS_URL`
- Redis 连接地址,默认 `redis://127.0.0.1:6379/0`
- `OJ_CACHE_TTL_SECONDS`
- 通用缓存过期秒数(兜底)
- `OJ_CACHE_PROBLEMS_TTL_SECONDS`
- 题目列表缓存过期秒数
- `OJ_CACHE_PROBLEM_DETAIL_TTL_SECONDS`
- 题目详情缓存过期秒数
- `OJ_CACHE_LEADERBOARD_TTL_SECONDS`
- 排行榜缓存过期秒数
- `OJ_AUTH_LOGIN_RATE_LIMIT`
- 登录接口限流规则,默认 `15/minute`
- `OJ_AUTH_REGISTER_RATE_LIMIT`
- 注册接口限流规则,默认 `10/minute`
- `OJ_SUBMISSION_RATE_LIMIT`
- 提交接口限流规则,默认 `30/minute`
- `OJ_ADMIN_WRITE_RATE_LIMIT`
- 管理写接口限流规则,默认 `60/minute`
- `OJ_QUEUE_ENABLED`
- 是否启用异步判题队列,默认 `true`
- `OJ_QUEUE_NAME`
- RQ 队列名,默认 `judge`
- `OJ_QUEUE_JOB_TIMEOUT_SECONDS`
- 判题任务超时时间(秒),默认 `90`
## 测试
当前仓库内置了判题核心的基础单元测试:
```bash
python -m unittest discover -s backend/tests
```
## 说明
- 默认 SQLite 文件位于 `backend/oj.db`
- 启动时会自动同步内置题库
- `OPTIMIZATION_PLAN.md` 中整理了后续可继续扩展的优化方向
- 当前项目仍然是教学/课程级实现,距离生产级判题平台还有安全隔离、异步调度、监控等方面的工作
## 接续本项目(Roadmap)
### 1) 学习闭环
- 错题本增加“仍未通过 / 已修复”分层
- 按题型、难度和时间窗生成复盘队列
- 引入阶段目标与每周训练计划
### 2) 判题可靠性
- 细化各语言资源限制与超时策略
- 补齐沙箱审计日志与失败重试机制
- 增加 RQ / Redis 队列监控与告警
### 3) 协作与部署
- 完善 API 示例、错误码与调试手册
- 提供最小生产部署模板(反向代理 + 进程守护)
- 补充贡献指南、代码规范与测试流程