Repository navigation
FAQ
Q: 代码提交后一直显示「评测中」?
A: 检查启动日志 log/<时间戳>/server.log 是否有报错(start.bat 将服务的全部输出写入该文件,控制台窗口不显示服务日志)。可能是编译器未安装或路径未配置。启动时也会自动把中断的提交收敛为系统错误,不会永远挂起。
Q: 内存显示 0KB?
A: 沙箱模式下内存由 Job Object 测量;回退模式(非 Windows 平台,或显式 NoldOJ_ALLOW_NO_SANDBOX=1 且无 sandbox_runner.exe)在 Windows 上每 150ms 用 tasklist 轮询内存、超过限额立即终止(结果标记 MEMORY_LIMIT),内存限制依然生效。显示 0KB 通常是非 Windows 回退或采样未取到值(如进程过早退出),不代表没有内存测量。确保 backend/sandbox/sandbox_runner.exe 存在——start.bat 只要 sandbox_runner.cpp 在且 g++ 可用就会重新编译,启动日志中也有对应 WARN(Windows 缺 exe 且未显式回退时判题会 fail-closed 拒绝执行)。
Q: 如何添加新语言? A: 以超级管理员登录,进入「语言」管理页面,填写编译/运行命令即可(存数据库、热生效)。
Q: 自定义计分脚本怎么写?
A: 使用 @变量 赋值、if/fi 条件判断(支持括号)、min()/max()/abs() 函数。完整语法见 判题与沙箱。
Q: 代码查重如何使用? A: 以教师及以上身份在题目管理点「查重」;查重异步执行、报告页实时显示进度。≥85% 高度相似(红)、≥70% 疑似(橙),点「查看详情」并排对比、相同 token 金色高亮。比赛结束后可在比赛管理「一键查重」。
Q: 如何在题目描述中使用公式?
A: 行内公式 $E=mc^2$,块级公式 $$\sum_{i=1}^{n} i$$。
Q: 如何嵌入视频/网站?
A: Bilibili 用 @[bilibili](BV号),任意网站 @[url](URL),音频 @[audio](URL),视频 @[video](URL),Office 文档 @[office](URL)(须公网 https),ECharts 图表 @[echarts]({JSON}),Mermaid 流程图用 @[mermaid] 与 @[/mermaid] 包裹多行文本。
Q: 如何搜索题目/比赛/文章?
A: 列表页顶部搜索框输入关键词,支持模糊匹配并忽略空格(搜 a+b 可匹配 A + B Problem)。
Q: 讨论区如何使用? A: 题目详情页切到「讨论」Tab。登录用户可发帖、回复(楼中楼最多两层)、编辑/删除自己的帖子;教师可置顶、标记官方题解、锁定;管理员可删除任意帖子。内容经 marked.js 渲染 + DOMPurify XSS 防护。
Q: AI 安全审查如何配置?
A: 编辑 config/ai.txt:SECURITY_ENABLED=true 启用安全审查,SECURITY_URL 设 AI 服务地址(默认 http://localhost:11434/api/chat),SECURITY_MODEL 设模型(默认 qwen3:1.7b),SECURITY_KEY 可选(需认证的服务)。AI 提示与 AI 测试数据生成是另外两组独立开关(HINT_ENABLED、TESTDATA_ENABLED,未配置的 URL/Model/Key 回退 SECURITY_*)。详见 配置说明。
Q: 验证码是如何工作的?
A: 自绘 SVG 验证码:启动时用 opentype.js 把字体字形转 <path> 轮廓(答案不写入 DOM,免疫 DOM 读取),4 位随机字符(排除 O/0/I/1,crypto.randomInt),叠加干扰线与湍流扭曲防 OCR。一次性使用、5 分钟有效、点击图片刷新。开关:config/captcha.txt 的 CAPTCHA_ENABLED。
Q: 忘记/如何重置密码?
A: 超级管理员在用户管理点「重置密码」;邮箱功能启用(config/email.txt)时可走自助找回。默认 admin 初始口令仅在首次启动日志 log/<时间戳>/server.log 中显示一次。
Q: 如何修改某用户的图床限额? A: 超级管理员在用户管理找到目标用户点编辑,改单文件大小限制与总存储空间;只能管理权限低于自己或自己的账号。
Q: 数据库在哪里?
A: 默认 backend/data/NoldOJ.db,SQLite 格式,v1.8.0 起由 Node 内置 node:sqlite 驱动,重启后数据保留。备份/迁移见 数据库。
Q: 虚拟比赛是什么? A: 对已结束的比赛可「虚拟参加」获得私有实例:点击「开始」起计时、时长等于原赛、不可暂停、关闭浏览器计时不停(以服务端时间为准)、提交计入虚拟排行榜但不影响原榜、同一比赛仅一次。
Q: 端口 3000 被占用/改端口?
A: 设环境变量 PORT(优先)或改 backend/config/config.js 的 port;stop.bat 只杀监听 3000 端口的 node 进程(改过端口后需手动结束)。
NoldOJ · Windows 在线评测系统 · MIT License