logo
0
0
WeChat Login

云原生在线考试系统

📖 项目概述

这是一个基于云原生架构的在线考试系统,采用前后端分离设计,支持考生考试、考官出题与阅卷等功能。系统使用 Docker 容器化部署,具有高可用、易扩展的特点。

系统版本

版本说明功能范围
V1最小可用考试系统选择题(单选/多选/判断)考试、自动评分
V2编程题判分系统在 V1 基础上新增编程题自动评测(Java)

✨ 核心特性

  • ✅ 用户认证与授权(考生/考官双角色)
  • ✅ 试卷管理与题目编辑
  • ✅ 在线考试与自动阅卷
  • ✅ 编程题自动判题系统(V2 新增)
  • ✅ 考试结果查看与分析
  • ✅ 健康检查与监控
  • ✅ 容器化部署(Docker + Docker Compose)
  • ✅ 数据持久化(MySQL + Redis)

🏗️ 系统架构

┌─────────────────┐ ┌─────────────────┐ │ Frontend │ │ Backend │ │ (Vue 3 + Vite) │◄────────►│ (Go + Gin) │ │ :3000 │ │ :8080 │ └─────────────────┘ └─────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ MySQL │ │ Redis │ │Prometheus│ │ :3306 │ │ :6379 │ │ :9090 │ └──────────┘ └──────────┘ └──────────┘

🚀 快速启动

一键启动

./start.sh

启动脚本会自动完成以下操作:

  1. 构建 Docker 镜像(frontend, backend)
  2. 启动所有服务容器(MySQL, Redis, Backend, Frontend)
  3. 初始化数据库结构和种子数据
  4. 配置网络和服务间通信

停止服务

docker compose down

如果需要删除所有数据卷:

docker compose down -v

🌐 服务访问地址

服务地址说明
📱 前端应用http://localhost:3000Vue 3 用户界面
🧪 后端APIhttp://localhost:8080Go RESTful API
💚 健康检查http://localhost:8080/healthz服务健康状态
📊 指标监控http://localhost:8080/metricsPrometheus 指标
📈 Prometheushttp://localhost:9090监控面板

🔐 默认账号

系统已创建以下测试账号:

角色用户名密码密钥
考生testuserpassword123kotres-gyxfa3-vywmyQ
考官examineradmin123mazmyk-gubbit-pohFo1

⚠️ 生产环境请修改默认密码和密钥


📚 文档导航

快速导航

需求推荐文档
项目整体说明ddocs/V1版本/V1.03_项目文档/11_项目主README.md
API 接口文档docs/API.md
详细项目文档docs/PROJECT_DOCUMENTATION.md
完整文档索引ddocs/README.md

文档结构

/workspace/ ├── README.md # 本文件 - 项目主入口 ├── ddocs/ # 完整文档库 │ ├── README.md # 文档索引 │ ├── V1版本/ # V1 版本文档 │ │ ├── V1.01_基础修复/ │ │ ├── V1.02_前端优化/ │ │ └── V1.03_项目文档/ │ └── V2版本/ # V2 版本文档 │ ├── V2.01_数据库迁移/ │ ├── V2.02_编程题功能/ │ ├── V2.03_开发工具/ │ ├── V2.04_架构设计与文档/ │ ├── V2.05_代码优化/ │ ├── V2.06_后端开发/ │ ├── V2.07_前端开发/ │ ├── V2.08_数据库与部署/ │ └── V2.09_问题记录与测试/ ├── docs/ # 核心文档 │ ├── API.md # API 接口文档 │ └── PROJECT_DOCUMENTATION.md # 详细项目文档 └── cloud-native-exam-system/ # 主项目代码 ├── backend/ # Go 后端服务 └── frontend/ # Vue 3 前端应用

📋 技术栈

前端技术

  • 框架: Vue 3.3+ (Composition API)
  • 语言: TypeScript 5.0+
  • 构建: Vite 5.0+
  • 状态管理: Pinia 2.1+
  • 路由: Vue Router 4.2+
  • 样式: Tailwind CSS 3.4+
  • HTTP: Axios 1.6+
  • Web 服务器: Nginx Alpine

后端技术

  • 语言: Go 1.24
  • Web 框架: Gin
  • ORM: 标准 database/sql
  • 数据库: MySQL 8.0
  • 缓存: Redis 7 Alpine
  • 认证: JWT (golang-jwt/jwt)
  • 日志: Zap Logger
  • 监控: Prometheus

DevOps

  • 容器: Docker
  • 编排: Docker Compose
  • CI/CD: CNB (Cloud Native Build)
  • 镜像仓库: CNB Docker Registry

🔄 业务流程

考生流程

1. 用户登录/注册 ↓ 2. 查看可用考试列表 ↓ 3. 选择考试开始答题(倒计时开始) ↓ 4. 答题 ├─ 单选题/多选题/判断题 └─ 编程题(V2 新增,支持自测运行) ↓ 5. 提交答卷 ├─ 选择题即时评分 └─ 编程题异步判题(V2 新增) ↓ 6. 查看成绩与详细结果

考官流程

1. 用户登录/注册 ↓ 2. 创建试卷 ├─ 选择题 └─ 编程题(V2 新增,支持测试用例配置) ↓ 3. 发布考试(设置时间窗口) ↓ 4. 查看考生提交记录 ├─ 选择题成绩 └─ 编程题判题结果(V2 新增) ↓ 5. 查看成绩统计与分析

💻 编程题功能(V2 新增)

判题机制

1. 接收代码提交(POST /api/exams/:id/coding/submit) ↓ 2. 创建 code_submission 记录(status=pending) ↓ 3. 更新为 judging 状态 ↓ 4. 创建临时工作目录 ↓ 5. 生成 Java 源文件(Main.java) ↓ 6. 编译 Java 代码(javac) ├─ 编译成功 → 继续 └─ 编译失败 → 返回 CE (Compile Error) ↓ 7. 依次执行测试用例 └─ 对每个测试用例: ├─ 限制时间(time_limit_ms) ├─ 限制内存(memory_limit_kb) ├─ 执行并捕获输出 └─ 比对标准答案 ↓ 8. 生成判题结果(judge_result) ↓ 9. 更新 code_submission.score ↓ 10. 前端轮询获取结果(每1秒,最多30次)

判题结果说明

结果码说明英文全称
AC通过Accepted
WA答案错误Wrong Answer
TLE超时Time Limit Exceeded
MLE内存超限Memory Limit Exceeded
RE运行错误Runtime Error
CE编译错误Compilation Error
SE系统错误System Error

相关文档


📊 数据库设计

核心数据表(V1)

表名说明关键字段
users用户表id, username, password_hash, role, status
paper试卷表id, name, total_score
question题目表id, paper_id, type, score, content, answer_key
exam考试表id, title, status, start_at, end_at, paper_id
submission提交记录表id, exam_id, student_id, status, submitted_at
answer答案表id, submission_id, question_id, value
result成绩表id, submission_id, total_score

V2 新增表

表名说明关键字段
code_submission编程题提交表id, submission_id, question_id, code, status, score
judge_result判题结果表id, submission_id, verdict, compile_log, execution_log

🎯 项目特点

  1. 云原生架构 - 完整的容器化部署,支持 Kubernetes 扩展
  2. 前后端分离 - 独立开发部署,API 驱动
  3. RESTful 设计 - 标准化的 REST API 接口
  4. 高可用性 - 健康检查、自动恢复、监控告警
  5. 易维护性 - 清晰的分层架构、完善的文档
  6. 可扩展性 - 模块化设计、微服务友好
  7. 类型安全 - TypeScript + Go 强类型语言
  8. 现代技术栈 - Vue 3 Composition API + Go Gin
  9. 编程题支持 - 自动判题、多测试用例、资源限制(V2)

🔧 故障排查

端口冲突

如果提示端口被占用:

# 查看占用进程 lsof -i :3000 # 前端端口 lsof -i :8080 # 后端端口 lsof -i :3306 # MySQL 端口 lsof -i :6379 # Redis 端口 # 强制结束进程 sudo kill -9 <PID>

镜像构建失败

清理后重新构建:

docker compose down --rmi all ./start.sh

数据库初始化失败

检查数据库配置和 SQL 文件:

# 查看 MySQL 日志 docker compose logs mysql # 重置数据库(会删除所有数据) docker compose down -v ./start.sh

前端无法访问后端

如果前端显示"后端服务未启动":

  1. 检查后端是否正常运行:curl http://localhost:8080/healthz
  2. 查看后端日志:docker compose logs backend
  3. 检查网络连接:docker network ls

登录失败

如果遇到登录问题:

  1. 确认使用正确的用户名和密码
  2. 检查后端日志:docker compose logs backend
  3. 清除浏览器缓存和 localStorage
  4. 使用默认测试账号验证系统状态

📝 开发规范

Git 提交规范

feat: 新功能 fix: 修复 bug docs: 文档更新 style: 代码格式调整 refactor: 重构 test: 测试相关 chore: 构建/工具链相关

代码规范

  • Go: 遵循 Go 官方规范,使用 gofmt 格式化
  • TypeScript: 使用 ESLint + Prettier
  • 组件: 单一职责原则,组件复用
  • API: RESTful 设计规范,统一响应格式

🚀 未来计划

  • 实现 Kubernetes 部署
  • 添加更多编程语言支持(Python、C++ 等)
  • 实现无状态化改造(Redis Token 管理)
  • 添加接口限流机制
  • 实现判题异步化(Redis Stream)
  • 性能优化与压测
  • 添加更多监控指标
  • 实现日志聚合与追踪

📞 联系方式

如有问题或建议,请查看详细文档或提交 Issue。


最后更新: 2026-03-03 | 当前版本: V2.0.0

About

云原生在线考试系统,基于 Go + Gin、Vue3 + Vite 构建,支持选择题与 Java 编程题自动判题。采用分层架构(Handler / Service / Repo),MySQL + Redis 持久化,JWT 认证与角色权限控制。Docker Compose 一键部署,具备健康检查、异步判题、日志追踪与测试体系,面向工程化与可扩展设计。

考试云原生考试系统编程题选择题
Language
Go38%
Vue33.6%
TypeScript21.3%
Shell2.5%
Others4.6%