kece
练习、评测与考试,在同一个平台完成。
简体中文 · English
KECE(课测)是面向编程教学、日常练习和在线考试的评测平台。学生可以在题库中练习算法和 SQL、作答客观题并分享题解;教师可以组织题集、随堂课练与考试,查看作答和评测结果。
| 学习与练习 | 教学与管理 |
|---|---|
| 算法编程题、SQL 题与客观题 | 题目、测试数据与题集管理 |
| 按章节练习,查看提交和判题结果 | 组卷、随堂课练与考试管理 |
| 使用 Markdown 编写、阅读题解 | 查看成绩、提交记录与逐题统计 |
核心能力
- 算法评测:在线编写代码,提交到隔离的容器环境执行,并查看评测状态与测试点结果。支持的语言以题目配置为准。
- SQL 评测:在独立的判题 MySQL 实例中创建临时数据库,执行用户 SQL 并比较结果或数据变更。
- 客观题与题集:支持客观题作答、解析以及按章节组织的单题型题集。
- 课练与考试:教师可组织随堂课练和在线考试;考试支持 ACM 与 OI 计分模式。
- 题解与成长记录:登录用户可直接发布 Markdown 题解,管理员可管理已发布内容;用户还可查看提交记录与排名。
首页终端里的打字和评测动画是展示效果,实际判题以提交后的评测结果为准。
从一道题到一次反馈
选题、编写代码、提交和查看结果构成一次完整练习。题目和题集为学习提供路径,课练和考试则让教师可以围绕同一套题库组织教学。
编写与提交
选择题目允许的语言,在在线编辑器中编写代码并提交。评测在后台执行,结果页展示状态和测试点信息,帮助定位问题。
查看评测结果
结果页汇总评测状态与测试点结果;实际可见的诊断信息取决于题目配置及当前用户权限。
以上截图来自 2026-10-14 的历史版本,用于展示主要工作流程;界面及功能以当前版本为准。
系统如何工作
前端通过 API 向业务后端提交请求;业务后端在同一事务内持久化提交记录、不可变用例清单引用与评测任务(judge_job),各语言独立的 Go 专池节点(cpp、java、python、mysql、arkts)通过受控内部协议主动领单、拉取 SHA-256 校验用例、续租并回传结果。算法代码在无网络受限 Docker 沙箱中运行,SQL 使用独立的判题数据库实例与一次性受限账号。具体容量与可靠性受硬件、槽位配额和题目负载影响,需要通过实际压测验证。
| 组件 | 技术 |
|---|---|
| 前端 | Vue 3、TypeScript、Vite、Pinia、Monaco Editor |
| 后端 | Java 17、Spring Boot、MyBatis、Flyway |
| 评测 | Go 专池节点(C++ / Java / Python / MySQL / ArkTS)、Docker、Linux Cgroups |
| 数据 | MySQL 业务库(含持久任务与租约控制面)、独立 MySQL 判题实例、Redis 缓存 |
管理员可在「评测机管理」登记节点、分配宿主机槽位、发起自检、启用或排空节点。Redis 继续提供业务缓存,编程题和 SQL 题的评测任务由 MySQL 持久化管理。
本地隔离测试中,MySQL 单池、Python 单池及混合池的 30/100/300 并发批次共完成 1290 单,全部判为 AC。测试使用单用例轻量题,生产容量须按目标硬件和题型单独验收。 容量与对账报告
快速开始
以下步骤用于本地开发。启动脚本会复用已有的业务 MySQL,并启动或复用 Redis 和 SQL 判题 MySQL 容器;它不会自动创建业务数据库,也不会替你安装前端依赖。
1. 准备环境
- Node.js 20.19+ 或 22.12+、npm、JDK 17、Go 1.22+、Docker。
- 已启动的 MySQL 8,默认地址为
localhost:3306。预先创建kece数据库,并为后端准备可访问该库的账号。 - 默认后端数据库账号为
kece;如需使用其他连接参数,可设置DB_HOST、DB_PORT、DB_NAME、DB_USER和DB_PASSWORD,以 后端配置 为准。 - Linux/macOS 脚本还需要
nc和pgrep。Docker 必须可从当前用户访问。
确保 3307 和 6379 可供判题数据库与 Redis 使用。不要把 SQL 判题连接指向业务 MySQL 实例:判题过程会创建并清理临时库及账号。
2. 安装前端依赖
在仓库根目录执行:
cd frontend
npm ci
cd ..
3. 启动开发环境
如需演示数据,启动前设置 SPRING_PROFILES_ACTIVE=dev;默认配置不会启用演示数据。
# Windows PowerShell,仓库根目录
$env:SPRING_PROFILES_ACTIVE = 'dev'
.\deploy\start.ps1
# Linux / macOS,仓库根目录
export SPRING_PROFILES_ACTIVE=dev
bash ./deploy/start.sh
前端默认访问 localhost:5173,后端 API 位于 http://localhost:8080/api/v1,日志位于 .logs/。接口文档位于 http://localhost:8080/api/v1/swagger-ui.html。首次启动需要下载依赖和容器镜像;请查看日志确认各服务实际就绪。
开发模式在账号不存在时会初始化本地演示账号:管理员 admin@kece.local / admin123、教师 teacher@kece.local / teacher123。如果账号已存在,不会保证密码被重置。
停止由脚本管理的本地进程,使用 deploy/stop.ps1 或 deploy/stop.sh。运行前请先阅读脚本,确认停止范围。
新评测节点首次启动需要一次性接入码。后端就绪后,在后台登记节点,配置 JUDGE_ENROLLMENT_CODE 启动对应专池,再完成自检和启用。已有节点可用持久化凭据重连。 节点接入教程
开发 profile 的演示账号仅供本地测试,默认密码及演示数据的启用方式以代码为准。生产环境必须更换所有默认凭据和 JWT 密钥,并独立配置数据库、Redis 和评测隔离。仓库中的 Compose 判题机使用
privileged与 Docker socket,标注为本地开发用途,不应直接作为生产安全配置。
项目结构
KECE/
├── frontend/ Vue 前端:题库、作答、题解与管理界面
├── backend/ Spring Boot 业务 API 与数据库迁移
├── judger/ Go 评测服务、沙箱与结果比较
├── deploy/ 本地启动、停止与容器配置
└── docs/ 产品、接口、架构和专项方案
文档
- 产品需求与功能范围
- 全局接口规范与公共约定
- 题解模块落地方案
- 前端架构重构与去重方案
- 评测机分池与扩容实施方案
- 评测机代码抽离与分池改造落地方案
- 评测机容量与灰度对账报告
- 专池部署与运维手册
- 版本变更记录
方案文档可能包含历史设计或尚未实施的建议,实际功能以当前代码和版本记录为准。
授权说明
本项目为私有工程系统,未经授权许可不得擅自用于商业运营、二次分发或公开部署。
