在线编程比赛训练系统

基本信息

案例ID:215267

技术顾问: - 1年经验 - 万悉地科技有限公司

联系沟通

微信扫码,建群沟通

项目名称:在线编程比赛训练系统

所属行业:教育 - 职业技能

->查看更多案例

案例介绍

项目描述:
基于Spring Boot + Spring Cloud 微服务 + Docker( + Vue 3 + Arco Design)的编程题目在线评测系统。在系统前台,管理员可以创建、管理题目;用户可以自由搜索题目、阅读题目、编写并提交代码。在系统的后端,能够根据管理员设定的题目测试用例在自主实现的代码沙箱中对代码进行编译、运行、判断输出是否正确。其中,代码沙箱可以作为独立服务,提供给其他开发这使用。
技术选型:
前端:
Vue 3 + Vue-CLI脚手架 + Vuex状态管理
Arco Design 组件库 + 前端工程化:ELint + prettier + TypeScript
后端:
Java Spring Cloud + Spring Cloud Alibaba 微服务 + Spring Boot
Nacos注册中心 + Gateway + Docker
MySQL + Mybatis-Plus + Redis分布式session + RabbitMQ
主要工作:
系统架构:根据功能职责,将系统划分为负责核心业务的后端模块、负责校验结果的判题模块、负责编译执行代码的可复用代码沙箱。各模块之间相互独立,并通过API接口和分包的方式实现协作。
库表设计:根据业务流程自主设计用户表、题目表、题目提交表、并通过给题目表添加userId索引提升检索性能。
自主设计判题机模块的架构,定义了代码沙箱的抽象调用接口和多种实现类(比如远程/第三方代码沙箱),并通过静态工厂模式+spring配置化的方式实现了对多种代码沙箱的灵活调用。
使用代理模式对代码沙箱接口进行能力增强,统一实现了对代码沙箱调用前后的日志记录,减少重复代码。
由于判题逻辑复杂、且不同题目的判题算法可能不同(比如Java题目额外增加空间限制),选用策略模式代替if-else独立封装了不同语言的判题算法,提高系统的可维护性。
为了保证沙箱宿主机的稳定性,选用Docker隔离用户代码,使用Docker Java库创建容器隔离执行代码,并通过tty和Docker 进行传参交互,从而实现了更安全的代码沙箱。
为保证项目各模块的稳定性,选用Spring Cloud Alibaba 重构单体项目,(使用Redis分布式session存储登录用户信息)并将项目划分为用户服务、题目服务、判题服务、公共模块。

相似案例推荐

其他人才的相似案例推荐

发布任务

企业点击发布任务,工程师会在任务下报名,招聘专员也会在1小时内与您联系,1小时内精准确定人才

微信接收人才推送

关注猿急送微信平台,接收实时人才推送

接收人才推送
联系需求方端客服
联系需求方端客服