文章
2026
2025
2020
- 从零开始的代码评测系统设计与实践(五) —— 新的开始从零开始的代码评测系统设计与实践
OJ 系列第五篇,也是这轮连载的收尾。复盘 WeJudge 三个大版本踩过的产品和技术坑,宣布要把判题功能拆成独立的 WeJudge Polygon 服务,以及 deer-executor 从 v1 到 v2 的演进史。
- 从零开始的代码评测系统设计与实践(四) —— 特殊评测从零开始的代码评测系统设计与实践
OJ 系列第四篇。严格比对遇上浮点数精度就懵了,于是把判定权交给出题者自己写的检查器。这篇讲特殊评测、交互判题的实现原理,以及 Testlib 这套工具能帮出题人省多少事。
- 从零开始的代码评测系统设计与实践(三) —— 运行结果处理从零开始的代码评测系统设计与实践
OJ 系列第三篇。拿到 rusage 之后怎么算出运行时间和内存占用,SIGSEGV、SIGXCPU、SIGKILL 这些信号怎么翻译成 TLE / MLE / RE / OLE,以及双游标法比对输出、处理 PE 格式错误的坑。
- 从零开始的代码评测系统设计与实践(二) —— 资源占用与限制从零开始的代码评测系统设计与实践
OJ 系列第二篇。用 setrlimit 卡住 CPU 时间、内存和文件大小的硬限制,再靠 setitimer 的 ITIMER_PROF 补上毫秒级精度——TLE、MLE、OLE 判定背后的资源限制实现细节。
- 2020 年粤澳计算机程序设计大赛网络赛总结
WeJudge 3.0 扛住了立项以来最大型的一场比赛——2000 多人同场竞技,一台主服务器加三台判题机。这是那天的监控曲线、翻过的车,和该谢的人。
- 从零开始的代码评测系统设计与实践(一) —— 进程和输入输出从零开始的代码评测系统设计与实践
OJ 系列第一篇。从 fork()/vfork() 创建进程讲起,到进程调度的就绪/执行/阻塞三态,再到用 dup2 重定向标准输入输出、用 wait4 等待子进程退出——判题机内核最基础的一层地基。
- 从零开始的代码评测系统设计与实践(序)从零开始的代码评测系统设计与实践
OJ 系列开篇。五年前一次和老师的突发奇想,从此一头扎进在线判题系统的开发。这篇讲清楚 OJ 是怎么工作的、WeJudge 这些年是怎么长起来的,以及接下来这个系列打算聊什么。
