在服务器上执行可以启动目前的判题测试库:
docker run -p 12002:5432 -e POSTGRES_PASSWORD=abc123 -d --rm judgedb:1.0
-p为端口映射,12002为服务器主机端口(也就是JDBC要连接的端口,-e POSTGRES_PASSWORD=abc123 为设置容器的密码,账户默认为postgres,-d为不开命令行,后台运行服务,--rm为停止容器后自动删除,judgedb:1.0为目前的镜像)
然后如果测试数据库被污染,可以docker stop [容器ID]
关闭容器并删除,然后重新运行上述命令
Online Judge的作用?(
这里可以用表情包,
原来:手动判作业、很多同学argue分数、交题两个星期才能看到自己对不对
现在:OJ 自动化,体验良好
)
- 减轻老师和SA判题的工作量
- 保证判作业的公正性
- 能给学生及时的做题反馈
一个学生做题的故事:
登录OJ→修改个人信息→看题→交题→查看结果反馈→查看自己的得分
- 交题的结果反馈需要及时(阐述提高性能的设计)
- 防止删库跑路$盗号?(OJ安全沙箱的设计&Spring security)
- 结果:可以智能提示结果错误的原因(可选)(少结果|多结果|结果错误|语法错误)、耗时和内存
SA和老师出题&判题过程:
- 需要上传:一份正确的sql文件、一份返回结果集(比如.csv格式)、自定义判题脚本文件(可选)
- 做题过程中,查看题目准确率和同学们的交题情况(能够针对性的统计错误信息)
- 老师可以自定义一次Assignment的分数权重、数据库类型、时间内存要求等等
- 老师可以给学生创建账号、赋予权限
- 查重?
- 作业定时开始,定时结束
其它特色功能:
- 防误交(避免不小心连续多次提交同一份错误代码导致扣分)
- 数据灾备
- 比赛分组系统
设计模式:
-
WEB开发经典的MVC 框架
优点:各个模块耦合度低,方便分工合作开发
-
判题的过程是一个生产消费模型
-
效果图
-
v使用到的技术:
-
vue.js
-
vuetify
-
vue-router
vuex
axios
ESL int
Typescript
scss
-
Springboot中的SpringMVC,负责处理前端请求并调用相关服务返回结果
技术:spring security,springMVC
-
用户信息管理
-
作业&问题管理
-
判题
-
信息统计
技术:docker,docker java,线程池
处理OJ本身产生的数据
-
kafka实现多种数据库支持
-
nosql缓存数据库(redis)来处理某时间段大量请求的问题
-
Druid连接池(扩展性、日志、注入加载、restful API)
待定