判题端设计
server层与judge层交互
判题器为实现水平扩展功能采用了springboot + native code的方式进行开发。利用异步分发机制,通过rabbitmq实现异步队列,保持水平扩展性。
整体流程如下
核心交互的实体类如下
public class JudgeTask {
private String taskId;
private int problemId;
private LanguageEnum language;
private String code;
private JudgeLimit limit;
private boolean specialJudge;
private LanguageEnum specialJudgeLanguage;
}
判题器任务转换
对于判题器的内部接收到任务将转化成判题器支持的任务形式
判题器测试点比对
对于获取题目测试点
判题流程
当判题器收到判题请求执行一下流程,对题目进行运行的程序进行沙箱的封装以及判定