OJ判题项目-介绍(一)
往期开发(已经完成)
- OJ 判题项目-介绍(一)
- OJ 判题项目-初始化(二)
- OJ 判题项目-前后端联调(三)
- OJ 判题项目-简易判题机(四)
- OJ 判题项目-原生代码沙箱(五)
- OJ 判题项目-Docker 代码沙箱(六)
- OJ 判题项目-微服务改造(七)
项目简介
- OJ = Online judge 在线判题测评系统
- 用户可以选择题目,在线做题,编写代码并提交代码
- 系统会对用户提交的代码,根据系统设定的答案,来判断用户的提交结果是否正确
- OJ 判题系统的最大难点在于如何判题,也就是如何设计判题系统,并在开发结束后提供开发 API
- 此次的代码沙箱通过自己来实现
项目特点
目前网上并无此类型项目的教程,即使有也不是从 0->1 的完成进度,对于此次项目能够应用到 Spring Cloud,Docker 代码沙箱,虚拟机等这些。
此次系统会将前后端的大部分技术栈都应用到项目之中,并进行前端从 0->1 的搭建,后端依旧使用万能模板进行初始化,必要的一些增啥改查(用户) 完成 session 域登录。
技术选型
后端技术
- Spring Boot
- AOP 切面编程
- Spring Cloud 微服务
- Docker 代码沙箱
- JVM 部分涉及
- Rabbitmq 消息队列
- mybatis-plus 持久层
- mysql 数据库
- 设计模式
前端技术
- Vue3
- Arco Design 组件库
- axios 请求库
- openAPI 第三方生成接口
- typescript
功能模块
- 题目模块
a. 创建题目(admin)
b. 删除题目(admin)
c. 修改题目(admin)
d. 搜索题目(用户)
e. 在线做题(用户)
f. 提交题目代码(用户) - 用户模块
a.注册
b.登录 - 判题模块
a.提交判题(结果判断是否正确和错误)
b.错误处理(内存溢出、安全性、超时)
b.自主实现代码沙箱(安全沙箱,运行用户代码)
b.开放接口(提供独立的新服务)
从项目中学习到的实践知识
- 此次依旧是跟随鱼皮大大全程直播听讲,参与项目完整的开发流程,能够独立开发上线项目。
- 在上一个项目中已经初使用 rabbitmq 到项目中,此项目会再次使用,熟悉 rabbitmq 的使用。
- 初次学习 java 进程控制、java 安全管理器、部分 JVM 知识点、虚拟机(云服务器)、Docker(代码沙箱) Spring Cloud 微服务、设计模式
- 本项目的选材新颖,打破网上统一的项目经验如外卖系统,别人做外卖,我做 OJ。
- 此项目还能够将所学的前后端知识进行一个综合应用,也是对技术学习掌握的如何的考验。
- 最主要的难点就是自主实现代码沙箱,目前我对于这个还是一个模糊的状态,希望通过本项目的学习能够一定的了解并使用 Docker 代码沙箱
个人对项目见解
第一次学习关于 java 项目的安全性问题,比如内存溢出,运行用户代码等等。最主要是针对于用户的代码,要在一个安全纯净的环境进行执行,还要过滤恶意代码防止攻击系统,造成系统瘫痪,将判题运行用户代码的操作进行解耦,收到用户代码时候,将代码放到安全沙箱中进行执行,最后让沙箱返回用户代码的执行结果,后端系统只需要将代码给沙箱,沙箱运行并返回结果,系统进行判断结果符合为正确即可,隔离了代码的执行环境,如果代码存在木马或者是恶意代码,在沙箱中执行,并不会影响到系统的运行。这样保证了系统的安全性,也对应用服务进行了解耦,增大了接口的响应效率,前端提交代码后,看到的是任务的执行状态,稍等后,后端修改任务状态正确就返回 succeed 错误就返回其他在沙箱中运行错误,或者是结果不符合错误。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 keep初心!
