# 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代码训练师

Demo 1 Demo 2

Demo 1 Demo 2

一个前后端分离的在线评测系统示例项目,包含: - 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 示例、错误码与调试手册 - 提供最小生产部署模板(反向代理 + 进程守护) - 补充贡献指南、代码规范与测试流程