跳至主要內容
OJ 单机版沙箱

Docker沙箱改造

1.模板方法优化代码沙箱

先确认设计模式的应用场景和现有的业务场景是否匹配

模板方法概念

模版方法:定义一套通用的执行流程,让子类负责每个执行步骤的具体实现

模版方法的适用场景:适用于有规范的流程,且执行流程可以复用

作用:大幅节省重复代码量,便于项目扩展、更好维护

对比JavaNativeCodeSandbox、JavaDockerCodeSandbox的方法实现流程,基本都是遵循同样的一套思路,只不过可能每个步骤的实现细节可能有所不同


holic-x...大约 4 分钟项目oj-platform
OJ 基于Docker构建代码沙箱

​ 先配置好虚拟机环境,Docker在虚拟机环境上操作(也可使用远程服务器,如果是构建项目测试的话建议使用虚拟机,以免玩崩)

Docker核心

1.Docker基本概念

为什么要使用Docker技术?

为了提升系统的安全性,把不同的程序和宿主机进行隔离,是的某个程序(应用)的执行不会影响到系统本身

Docker 技术可以实现程序和宿主机的隔离

什么是容器?(可以把一个容器理解为一个新的电脑(定制化的操作系统))

​ 理解为对一系列应用程序、服务和环境的封装,从而把程序运行在一个隔离的、密闭的、隐私的空间内,对外整体提供服务。


holic-x...大约 30 分钟项目oj-platform
OJ 代码沙箱

​ 基于判题服务的构建,基本打通了用户提交问题记录的业务逻辑,前面的实现是基于Example代码沙箱,主要是为了打通业务逻辑而设定的存在,参考原有远程代码沙箱设计概念,可单独构建一个可执行程序用作用作远程代码沙箱执行操作

沙箱服务构建

​ 创建一个web项目,构建沙箱服务

  • Springboot:2.7.6

  • Maven:3.5.2

  • JDK版本:1.8版本(切换Server URL:https://start.aliyun.com)

  • 初始化引用依赖:Spring Web、lombok


holic-x...大约 26 分钟项目oj-platform
OJ 模块开发

04-模块开发

用户提交问卷信息查询

1.后端接口开发(todo)

扩展思考:后端接口响应慢的优化思路

​ 后端接口响应慢的优化思路:用逻辑操作替换频繁调用service请求(网络数据库交互)

​ 两端代码的分析:前者是一次性获取所有的内容,然后做逻辑处理;后者是每次遍历都访问一次数据库

2.前端组件开发

开发前端页面:

1)用户注册页面

2)创建题目页面(管理员)


holic-x...大约 13 分钟项目oj-platform
OJ 判题服务开发

判题模块预开发

​ 如何理解预开发概念:指的是先梳理开发框架和整体开发思路、架构设计,先把业务流程的架子先搭好,调通整个业务流程和基本逻辑,然后再实现优化

1.梳理判题模块和代码沙箱的关系

​ 构建思路:最简单的实现方式就是在同一个项目中通过代码调用的方式实现,为了让代码沙箱更具备通用性,将代码沙箱服务抽离出来,判题模块与其交互则通过http调用接口的方式进行验证,让这两个模块完全解耦

​ 判题模块:调用代码沙箱,把代码和输入交给代码沙箱去执行

​ 代码沙箱:只负责接受代码和输入,返回编译运行的结果,不负责判题(可以作为独立的项目/服务,提供给其他的需要执行代码的项目去使用)


holic-x...大约 17 分钟项目oj-platform
OJ 后端接口开发

数据表设计&代码结构设计扩展知识点

【业务前缀】概念

什么情况下要加业务前缀?什么情况下不加?

加业务前缀的好处,防止多个表都有类似的类,产生冲突;不加的前提,因为可能这个类是多个业务之间共享的,能够复用的。

【定义VO类】概念

作用是专门给前端返回对象,可以节约网络传输大小、或者过滤字段(脱敏)、保证安全性。

【用户ID生成规则】

为了防止用户按照id顺序爬取题目,建议把id的生成规则改为ASSIGN_ID,而不是从1开始自增(@TableId(type = IdType.ASSIGN_ID)


holic-x...大约 8 分钟项目oj-platform
OJ 项目构建

前端通用模板构建

环境依赖

推荐环境:

nodejs:V18.16.0 或者 16(node -v);切换和管理 node 版本的工具:https://github.com/nvm-sh/nvm

npm 版本:9.5.1(npm -v)

本地环境:

node:v20.11.1

npm:10.2.4

vue:@vue/cli 5.0.8

初始化


holic-x...大约 28 分钟项目oj-platform
OJ 项目概要

需求分析

OJ=Online Judge 在线判题评测系统

​ 用户可以选择题目,在线做题,编写代码并且提交代码;系统会对用户提交的代码,根据我们出题人设置的答案来判断用户的提交结果是否正确, ACM(程序设计竞赛),也是需要依赖判题系统来检测参赛者的答案是否合理

​ OJ系统最大的难点在于 判题系统

​ 用于在线评测编程题目代码的系统,能够根据用户提交的代码、出题人预先设置的题目输入和输出用例,进行编译代码、运行代码、判断代码运行结果是否正确。

​ 判题系统作为一个开放 API提供给大家,便于开发者开发自己的 OJ系统。


holic-x...大约 11 分钟项目oj-platform