往期开发(已经完成)

项目简介

  • 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
  • 功能模块

  1. 题目模块

    a. 创建题目(admin)
    b. 删除题目(admin)
    c. 修改题目(admin)
    d. 搜索题目(用户)
    e. 在线做题(用户)
    f. 提交题目代码(用户)

  2. 用户模块

    a.注册
    b.登录

  3. 判题模块

    a.提交判题(结果判断是否正确和错误)
    b.错误处理(内存溢出、安全性、超时)
    b.自主实现代码沙箱(安全沙箱,运行用户代码)
    b.开放接口(提供独立的新服务)

从项目中学习到的实践知识

  1. 此次依旧是跟随鱼皮大大全程直播听讲,参与项目完整的开发流程,能够独立开发上线项目。
  2. 在上一个项目中已经初使用 rabbitmq 到项目中,此项目会再次使用,熟悉 rabbitmq 的使用。
  3. 初次学习 java 进程控制、java 安全管理器、部分 JVM 知识点、虚拟机(云服务器)、Docker(代码沙箱) Spring Cloud 微服务、设计模式
  4. 本项目的选材新颖,打破网上统一的项目经验如外卖系统,别人做外卖,我做 OJ。
  5. 此项目还能够将所学的前后端知识进行一个综合应用,也是对技术学习掌握的如何的考验。
  6. 最主要的难点就是自主实现代码沙箱,目前我对于这个还是一个模糊的状态,希望通过本项目的学习能够一定的了解并使用 Docker 代码沙箱

个人对项目见解

第一次学习关于 java 项目的安全性问题,比如内存溢出,运行用户代码等等。最主要是针对于用户的代码,要在一个安全纯净的环境进行执行,还要过滤恶意代码防止攻击系统,造成系统瘫痪,将判题运行用户代码的操作进行解耦,收到用户代码时候,将代码放到安全沙箱中进行执行,最后让沙箱返回用户代码的执行结果,后端系统只需要将代码给沙箱,沙箱运行并返回结果,系统进行判断结果符合为正确即可,隔离了代码的执行环境,如果代码存在木马或者是恶意代码,在沙箱中执行,并不会影响到系统的运行。这样保证了系统的安全性,也对应用服务进行了解耦,增大了接口的响应效率,前端提交代码后,看到的是任务的执行状态,稍等后,后端修改任务状态正确就返回 succeed 错误就返回其他在沙箱中运行错误,或者是结果不符合错误。