kece

Project Url: zheco68-collab/kece
Introduction: 开源免费简洁的 -[算法]- -[数据库]- -[客观题]- 刷题平台
More: Author   ReportBugs   OfficialWebsite   
Tags:

KECE 课测:从练习到评测的在线学习平台

练习、评测与考试,在同一个平台完成。

简体中文 · English

在线体验   /   快速开始   /   项目文档


KECE(课测)是面向编程教学、日常练习和在线考试的评测平台。学生可以在题库中练习算法和 SQL、作答客观题并分享题解;教师可以组织题集、随堂课练与考试,查看作答和评测结果。

学习与练习 教学与管理
算法编程题、SQL 题与客观题 题目、测试数据与题集管理
按章节练习,查看提交和判题结果 组卷、随堂课练与考试管理
使用 Markdown 编写、阅读题解 查看成绩、提交记录与逐题统计

核心能力

  • 算法评测:在线编写代码,提交到隔离的容器环境执行,并查看评测状态与测试点结果。支持的语言以题目配置为准。
  • SQL 评测:在独立的判题 MySQL 实例中创建临时数据库,执行用户 SQL 并比较结果或数据变更。
  • 客观题与题集:支持客观题作答、解析以及按章节组织的单题型题集。
  • 课练与考试:教师可组织随堂课练和在线考试;考试支持 ACM 与 OI 计分模式。
  • 题解与成长记录:登录用户可直接发布 Markdown 题解,管理员可管理已发布内容;用户还可查看提交记录与排名。

首页终端里的打字和评测动画是展示效果,实际判题以提交后的评测结果为准。

从一道题到一次反馈

选题、编写代码、提交和查看结果构成一次完整练习。题目和题集为学习提供路径,课练和考试则让教师可以围绕同一套题库组织教学。

练习流程:选题、提交、排队、评测、查看结果

编写与提交

选择题目允许的语言,在在线编辑器中编写代码并提交。评测在后台执行,结果页展示状态和测试点信息,帮助定位问题。

代码提交工作台历史截图

查看评测结果

结果页汇总评测状态与测试点结果;实际可见的诊断信息取决于题目配置及当前用户权限。

测试点结果页面历史截图

以上截图来自 2026-10-14 的历史版本,用于展示主要工作流程;界面及功能以当前版本为准。

系统如何工作

KECE 系统架构:浏览器、Spring Boot、MySQL 持久任务和 Go 评测专池

前端通过 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/       产品、接口、架构和专项方案

文档

方案文档可能包含历史设计或尚未实施的建议,实际功能以当前代码和版本记录为准。

授权说明

本项目为私有工程系统,未经授权许可不得擅自用于商业运营、二次分发或公开部署。

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest