OJ在线判题系统 项目时间:2025.5-2025.8
项目介绍:基于 Spring Cloud 微服务 + MQ + Docker 的编程题目评测系统。系统能够根据管理员预设的题
目用例对用户提交的代码进行执行和评测;系统中自主实现的代码沙箱可作为独立服务供其他开发者调用。
主要工作:
负责判题机与代码沙箱模块设计,抽象统一的代码沙箱接口,通过 静态工厂模式 + Spring 配置实现
多沙箱灵活切换
使用 代理模式 对代码沙箱接口进行能力增强,统一实现了对代码沙箱调用前后的日志记录,减少重
复代码。
由于判题逻辑复杂、且不同题目的判题算法可能不同(比如Java题目额外增加空间限制),选用 策略模
式 代替if else独立封装了不同语言的判题算法,提高系统的可维护性。
通过编写Java脚本自测代码沙箱,模拟了多种程序异常情况并针对性解决,如使用 黑白名单+字典树
的方式实现了对敏感操作的限制。
为保证沙箱宿主机的稳定性,选用Docker隔离用户代码,使用 Docker Java 库创建容器隔离执行代
码,并通过tty和Docker进行传参交互,从而实现了更安全的代码沙箱。
使用Java安全管理器和自定义的 Security Manager 对用户提交的代码进行权限控制,比如关闭写文
件、执行文件权限,进一步提升了代码沙箱的安全性。