Code Monkey home page Code Monkey logo

himitzh / hoj Goto Github PK

View Code? Open in Web Editor NEW
580.0 12.0 130.0 233.67 MB

⚡🔥Hcode Online Judge(HOJ)🔥⚡:基于SpringCloud与Vue前后端分离,分布式架构的在线测评平台OJ (An open source online judge system base on SpringBoot, Springcloud Alibaba and Vue.js !)

Home Page: https://docs.hdoi.cn

License: MIT License

Java 54.52% HTML 5.92% JavaScript 8.44% Vue 31.00% CSS 0.12%
oj springboot nacos vuejs java onlinejudge vjudge remote-judge

hoj's Introduction

Hcode Online Judge(HOJ)

logo

Java Spring Boot SpringCloud Alibaba MySQL Redis Nacos Vue Github Star Gitee Star QQ Group 598587305

简体中文 | English

一、总概

  • 基于Vue和Spring Boot、Spring Cloud Alibaba构建的前后端分离,分布式架构的评测系统
  • 支持多种评测语言:C、C++、C#、Python、PyPy、Go、Java、JavaScript、PHP、Ruby、Rust
  • 支持HDU、POJ、Codeforces(包括GYM)、AtCoder、SPOJ、LIBRE的Remote Judge评测
  • 支持移动端、PC端浏览,拥有讨论区与站内消息系统
  • 支持私有训练、公开训练(题单)和团队功能
  • 完善的评测功能:普通测评、特殊测评、交互测评、在线自测、子任务分组评测、文件IO
  • 完善的比赛功能:打星队伍、关注队伍、外榜、滚榜
在线Demo 在线文档 Github&Gitee仓库地址 QQ群
https://hdoi.cn https://docs.hdoi.cn https://github.com/HimitZH/HOJ https://gitee.com/himitzh0730/hoj 598587305(已满)、743568562

注意:

  1. 建议使用Centos8以上或Ubuntu16.04以上的操作系统!!!不然判题机(judgeserver)可能无法正常启动
  2. 若一定要用Centos7系统,部署请先看文档说明:https://docs.hdoi.cn/deploy/faq/
  3. 服务器配置尽可能使用2核4G以上,保证服务的正常启动与运行。
  4. 尽量不要使用突发性能或共享型的云服务器实例,有可能造成评测时间计量不准确。
  5. 有任何部署问题或项目bug请发issue或者加QQ群。
  6. 如果要对本项目进行商业化,请在页面底部的Powered by指向HOJ本仓库地址,顺便点上star收藏本项目对开发者的支持,谢谢。

二、部署

部署文档:基于docker-compose部署

部署仓库:https://gitee.com/himitzh0730/hoj-deploy

三、更新

请在docker-compose.yml当前文件夹下执行docker-compose pull拉取最新镜像,然后重新docker-compose up -d即可。

四、上线日记

时间 内容 更新者
2020-10-26 正式开发 Himit_ZH
2021-04-10 首次上线测试 Himit_ZH
2021-04-15 判题调度2.0解决并发问题 Himit_ZH
2021-04-16 重构解耦JudgeServer判题逻辑,添加部署文档 Himit_ZH
2021-04-19 加入rsync实现评测数据同步,修复一些已知的BUG Himit_ZH
2021-04-24 加入题目模板,修改页面页脚 Himit_ZH
2021-05-02 修复比赛后管理员重判题目导致排行榜失效的问题 Himit_ZH
2021-05-09 添加公共讨论区,题目讨论区,比赛评论 Himit_ZH
2021-05-12 添加评论及回复删除,讨论举报,调整显示时间。 Himit_ZH
2021-05-16 完善权限控制,讨论管理员管理,讨论删除与编辑更新。 Himit_ZH
2021-05-22 更新docker-compose一键部署,修正部分bug Himit_ZH
2021-05-24 判题调度乐观锁改为悲观锁 Himit_ZH
2021-05-28 增加导入导出题目,增加用户页面的最近登录,开发正式结束,进入维护摸鱼 Himit_ZH
2021-06-02 大更新,完善补充前端页面,修正判题等待超时时间,修补一系列bug Himit_ZH
2021-06-07 修正特殊判题,增加前台i18n Himit_ZH
2021-06-08 添加后台i18n,路由懒加载 Himit_ZH
2021-06-12 完善比赛赛制,具体请看在线文档 Himit_ZH
2021-06-14 完善后台管理员权限控制,恢复CF的vjudge判题 Himit_ZH
2021-06-25 丰富前端操作,增加POJ的vjudge判题 Himit_ZH
2021-08-14 增加spj对使用testlib的支持 Himit_ZH
2021-09-21 增加比赛打印功能、账号限制功能 Himit_ZH
2021-10-05 增加站内消息系统——评论、回复、点赞、系统通知的消息,优化前端。 Himit_ZH
2021-10-06 美化比赛排行榜,增加对FPS题目导入的支持 Himit_ZH
2021-12-09 美化比赛排行榜,增加外榜、打星队伍、关注队伍的支持 Himit_ZH
2022-01-01 增加公开训练和公开训练(题单) Himit_ZH
2022-01-04 增加交互判题、重构judgeserver的三种判题模式(普通、特殊、交互) Himit_ZH
2022-01-29 重构remote judge,增加AtCoder、SPOJ的支持 Himit_ZH
2022-02-19 修改首页前端布局和题目列表页 Himit_ZH
2022-02-25 支持PyPy2、PyPy3、JavaScript V8、JavaScript Node、PHP Himit_ZH
2022-03-12 后端接口全部重构,赛外榜单增加缓存 Himit_ZH
2022-03-28 合并冷蕴提交的团队功能 Himit_ZH、冷蕴
2022-04-01 正式上线团队功能 Himit_ZH、冷蕴
2022-05-29 增加在线调试、个人主页提交热力图 Himit_ZH
2022-08-06 增加题目标签的分类管理(二级标签) Himit_ZH
2022-08-21 增加人工评测、取消评测 Himit_ZH
2022-08-30 增加OI题目的subtask、ACM题目的'遇错止评'模式 Himit_ZH
2022-10-04 增加比赛奖项配置,增加ACM赛制的滚榜 Himit_ZH
2022-11-14 增加题目详情页专注模式,优化首页布局 Himit_ZH
2023-05-01 增加题目评测支持文件IO Himit_ZH
2023-06-11 增加允许比赛结束后提交 Himit_ZH
2023-06-27 支持Ruby、Rust Himit_ZH
2024-03-13 支持LibreOJ的远程评测 Himit_ZH、Nine

五、部分截图

以下截图页面均支持中英文国际化,点击底部的转换即可全网站转换,包括后台管理,同时浏览器会记住本次选择的语言

1. 首页

首页页面

首页

首页英文

首页英文

2. 站内消息

站内消息系统

站内消息系统

站内消息系统

3. 题目

题目列表页

题目列表页

题目详情页

题目详情页

4. 训练

训练列表页

训练列表页

训练题目列表页

训练题目列表页

5. 比赛

比赛列表页

比赛列表页

比赛以西南科技大学某届新生赛截图为例

比赛详情首页

比赛详情页

比赛题目列表页

比赛题目列表

比赛排行榜

  • ACM比赛

    比赛排行榜

  • OI比赛

    oi排行榜

  • 滚榜

    在这里插入图片描述

6. 评测

提交列表页

在这里插入图片描述

7. 排行榜

排行榜

排行榜

8. 团队

团队列表页

团队题目列表页

9. 讨论

公共讨论区

公共讨论区

评论组件

评论组件

10. 个人

个人首页

个人首页

个人设置页

个人设置

11. 管理后台

管理后台首页

管理后端

12. 手机端

部分手机端显示

手机端

评论区

hoj's People

Contributors

abel-j avatar himitzh avatar huangyan0804 avatar iuaenasong avatar jiuxiajingfan avatar sgpublic avatar xy0797 avatar zhanshihui avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hoj's Issues

发现一个bug 当go-judge返回的exitStatus的值大于2147483647 会爆int导致异常处理的时候捕获不到 会抛出System.error

测试题目是https://loj.ac/p/100
测试时的代码是:
// import io, os
// input = io.BytesIO(os.read(0,os.fstat(0).st_size)).readline
// mod = 10**9+7
// n, p, m = [int(i) for i in input().split())]
// A = [[int(j) for j in input().split()] for i in range(n)]
// B = [[int(j) for j in input().split()] for i in range(p)]
// for i in range(n):
// ri = [0]m
// for k in range(p):
// s, bk = A[i][k], B[k]
// for j in range(m):
// ri[j] = (ri[j]+s
bk[j])%mod
// print(*ri)
#include
#include
#include
using namespace std;

const long long MOD = 1000000007;
const long long T = MOD << 32;

int main() {
long long n, p, m;
cin >> n >> p >> m;
long long A[n][p], B[p][m];

for (long long i = 0; i < n; ++i)
    for (long long j = 0; j < p; ++j) {
        cin >> A[i][j];
        A[i][j] = (A[i][j] + T) % MOD;
    }

for (long long i = 0; i < p; ++i)
    for (long long j = 0; j < m; ++j) {
        cin >> B[i][j];
        B[i][j] = (B[i][j] + T) % MOD;
    }

for (long long i = 0; i < n; ++i) {
    long long ri[m];
    fill(ri, ri + m, 0);

    for (long long k = 0; k < p; ++k) {
        for (long long j = 0; j < m; ++j) {
            ri[j] += A[i][k] * B[k][j];
            ri[j] %= MOD;
        }
    }

    for (long long j = 0; j < m; ++j)
        cout << ri[j] << ' ';

    cout << endl;
}

return 0;

}

團體賽

最近學校要舉辦團體賽,想請問HOJ是否有團體賽的功能

建议添加一个执行代码的按钮

不知道这个想法是否可行,类似于力扣那种提交代码旁边有个执行代码,可以来测试用例。如果不行就请忽略,谢谢。

help

你好大佬,我想请教一下如何进行输出文件与标答的比对,然后怎么用go-judge进行特判和交互题的,能帮我点一点思路吗,感激不尽

前端项目无法正常完成build

环境:

Node.js v20.15.0

[email protected]

windows 11

使用淘宝源(https://registry.npmmirror.com)

问题现象:

npm install执行后一直转圈,无法安装

删除hoj-vue/package-lock.json后问题解决

运行npm run build

报错,详情见附件的log.txt

附件:

log.txt

当前的建议:

  1. 附上可build该项目的开发环境的版本

  2. hoj-vue/.gitignore里面添加一行:

package-lock.json

避免坑其它开发者

新增題目時卡住

您好,我在新增題目時有時網頁會卡住,並且回傳請求超時的訊息

项目后期还会完善吗

题库作答语言可以增加一些,比如:Rust等等,支持增加导入多方题库(目前的题库难度偏低了一些),还有就是支持代码调试以及代码可视化,还有就是用户界面希望支持夜间模式

Remote Judge

大佬您好,我是台灣的學生(因此沒辦法用QQ)跟您聯繫。我想請問這個平台的remote judge是否支援codeforces中的mashup

留个记录

如果是从docker 转物理部署,警告,记得把比赛 PROCEDURE 程序 也同步一下。

/sqlAndsetting/hoj.sql#L1067

DataBackup重启后judgeToke未刷新

每当重启DataBackup后,JudgeDispatcher的judgeToken(hoj.judge.token)值还是上一次的值,本次启动推送到nacos的新的judgeToken没有动态刷新,导致调用在线测评时,judgeServer端报:对不起!您使用的判题服务调用凭证不正确!访问受限!

登录的账号和实际登上的号不是同一个

比如我登root,点开我的首页显示的是别人的首页,提交记录啥的也全是别人的。刚部署完这个问题不是很频繁,最近几乎每次隔一段时间重新进入网站都会出现点开首页是别人或者显示uid不能为空(这个估计是因为别人串到我的账号上去了,所以我这进来再看首页就是空的),重新登录得过两分钟才恢复正常,求问大佬这个可能是因为什么原因,该怎么调,最近几乎每个人隔一段时间就会串,每次进都得重新登录等两分钟

address already in use

@HimitZH
感谢你优秀的开源项目!

请问下这种问题怎么解决呢?

Creating network "standalone_hoj-network" with driver "bridge"
Creating network "standalone_default" with the default driver
Creating hoj-autohealth ... 
Creating hoj-redis      ... 
Creating hoj-mysql      ... 
Creating hoj-mysql      ... error
WARNING: Host is already in use by another container

ERROR: for hoj-mysql  Cannot start service hoj-mysql: driver failed programming external connectivity on endpoint hoj-mysql (54a5c7101ee106d79c8e8dc15293223628d69f6cafb76bf48ff17fb64cd2eefb): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use
Creating hoj-autohealth ... done
Creating hoj-redis      ... done
ERROR: for hoj-frontend  Cannot start service hoj-frontend: driver failed programming external connectivity on endpoint hoj-frontend (4d5a6b634d1a24d594a98f84913bef3cf632dfb7dcd8491f4ed0125996fa1907): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

ERROR: for hoj-mysql  Cannot start service hoj-mysql: driver failed programming external connectivity on endpoint hoj-mysql (54a5c7101ee106d79c8e8dc15293223628d69f6cafb76bf48ff17fb64cd2eefb): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use

ERROR: for hoj-frontend  Cannot start service hoj-frontend: driver failed programming external connectivity on endpoint hoj-frontend (4d5a6b634d1a24d594a98f84913bef3cf632dfb7dcd8491f4ed0125996fa1907): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
ERROR: Encountered errors while bringing up the project.

关于重试机制的一些问题

尊敬的开发者您好,最近在阅读您的项目代码,存在一个疑问,希望您能在闲暇之余给予解惑。

对于一个评测请求发送到Redis中对应的等待队列后,将会调用判题服务:

if (isContest) {
    isOk = redisUtils.llPush(Constants.Queue.CONTEST_JUDGE_WAITING.getName(), JSONUtil.toJsonStr(task));
} else {
    isOk = redisUtils.llPush(Constants.Queue.GENERAL_JUDGE_WAITING.getName(), JSONUtil.toJsonStr(task));
}
...
// 调用判题任务处理
judgeReceiver.processWaitingTask();

在 judgeReceiver.processWaitingTask() 方法中按照(比赛、评测、调试)优先级处理Redis等待队列中的任务(通过redisUtils.lrPop(queue)获取并删除等待队列中一个任务),然后在handleJudgeMsg方法中处理:

public void handleJudgeMsg(String taskStr, String queueName) {
        ...

    // 调用判题服务
    dispatcher.dispatch(Constants.TaskType.JUDGE, new ToJudgeDTO()
            .setJudge(judge)
            .setToken(token)
            .setRemoteJudgeProblem(null));
        ...
    // 接着处理任务
    processWaitingTask();
}

最后,代码来到defaultJudge方法,该方法是向判题机发送请求并处理重试判题的方法,在该方法中定义了一个用于每间隔2秒重复执行的任务
scheduler.scheduleWithFixedDelay(getResultTask, 0, 2, TimeUnit.SECONDS);
然而在任务代码中,releaseTaskThread(taskKey)方法是用于该任务释放的,可是这个代码却放在finally代码块中,这意味着无论该任务执行成功与否,在finally代码块中都会将该任务关闭,然而此时Redis的等待队列中已经将该任务删除,因此我好奇如何进行任务执行的重试操作

public void defaultJudge(ToJudgeDTO data, String path) {

        Runnable getResultTask = () -> {
            if (count.get() > maxTryNum) {
                releaseTaskThread(taskKey);
                return;
            }
            if (judgeServer != null) { 
            ...
                try {
                   ...
                } catch (Exception e) {
                    ...
                } finally {
                    ...
                    releaseTaskThread(taskKey);
                }
            }
        };
        ScheduledFuture<?> scheduledFuture = scheduler.scheduleWithFixedDelay(getResultTask, 0, 2, TimeUnit.SECONDS);
        futureTaskMap.put(taskKey, scheduledFuture);
    }

当然也很有可能是我理解错误或者部分代码没有注意到,总之,期待您的回复。

分布式判题服务的同步问题

咱们这个多个判题机是每100s拉取主服务rsync-master的所有评测数据?那主服务器带宽小点不是直接瘫掉了?
如果是这样同步数据的话,这操作有点吓人。。。

低性能机器上docker容器一直反复重启

希望作者修改下docker-compose.yml

hoj-autohealth:字段添加环境变量

    environment:
      - AUTOHEAL_CONTAINER_LABEL=all

改成

    environment:
      - AUTOHEAL_CONTAINER_LABEL=all
      - AUTOHEAL_START_PERIOD=300

也就是5分钟后再开始检查

否则如果使用J1900 CPU或类似性能的小主机部署,启动Nacos到一半就会直接被认为不健康然后杀死容器,进而导致服务完全不可用

指定用戶通知

請問對指定用戶發送通知的功能是被關掉了還是還沒有做?

我想把一个用户提升为管理员的时候在后台操作时候提示服务器异常

进docker看了下日志,提示如下信息。不知道是不是我操作不对

2021-10-05 17:16:05 [http-nio-6688-exec-3] ERROR hoj - 系统通用异常-------------->org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'null' in 'class top.hcode.hoj.pojo.entity.UserRole' at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:78)

关于CodeForces服务降级的提示

开发者您好,我是Sean。
作为一名网络安全工程师,以及HOJ的忠实用户,我不得不提示您:CodeForces启用了Cloudflare的网络保护。这将会导致部分RemoteJudge出现提交失败和无法获取评测结果的情况。望知悉。
另:Atcoder和SPOJ目前尚未启用。但是我向他们的Dev Team了解,不排除启用自制的保护功能。

除了超级管理员,其他管理员创建的比赛,不能对比赛再次修改和添加题目

2023-10-11 16:43:52 [http-nio-6688-exec-3] ERROR hoj - 系统通用异常-------------->java.lang.NullPointerException
at top.hcode.hoj.manager.admin.contest.AdminContestManager.getContest(AdminContestManager.java:82)
at top.hcode.hoj.service.admin.contest.impl.AdminContestServiceImpl.getContest(AdminContestServiceImpl.java:36)
at top.hcode.hoj.controller.admin.AdminContestController.getContest(AdminContestController.java:65)
at top.hcode.hoj.controller.admin.AdminContestController$$FastClassBySpringCGLIB$$cdf3b1d5.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor$1.proceed(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:82)
at org.apache.shiro.authz.aop.AuthorizingMethodInterceptor.invoke(AuthorizingMethodInterceptor.java:39)
at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor.invoke(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:115)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
at top.hcode.hoj.controller.admin.AdminContestController$$EnhancerBySpringCGLIB$$87edd035.getContest()
at top.hcode.hoj.controller.admin.AdminContestController$$FastClassBySpringCGLIB$$cdf3b1d5.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor$1.proceed(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:82)
at org.apache.shiro.authz.aop.AuthorizingMethodInterceptor.invoke(AuthorizingMethodInterceptor.java:39)
at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor.invoke(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:115)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
at top.hcode.hoj.controller.admin.AdminContestController$$EnhancerBySpringCGLIB$$e1c49101.getContest()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

代码模板问题

前端显示不对啊,正常情况不是应该仅显示中间这部分吗?
image

/hoj/testcase目录下的pronlem_xxxx的文件夹是什么时候或者什么机制下回在/judge/test_case目录下生成一份 problem_xxxx的文件夹

批量上传个题目,包含输入输出用例,用户会自动解压到/hoj/testcase目录下。在执行提交测评时会提示"System error"。如图:
image
按照控制台日志提示,排查到test_case不存在。如图:
image
在跟踪测试用例执行过程中,发现执行器会在.judge/test_case目录下查找测试用例。上传的测试用例在/hoj/testcase目录下。
请问是缺失哪个流程或者代码没有执行。
服务器没有使用docker部署,使用的是linux本地化部署。

Arm64 Support?

您好,我想问一下是否考虑编译Arm64的docker镜像?

因为sandbox支持arm64,我通过HOJ-Deploy仓库自己改了一下Dockerfile编译了arm64的镜像,并且已经持续稳定的运行了一年,希望能发布一下官方的镜像,不然每次修改源码后需要自己重新编译还挺麻烦的

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.