惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
量子位
B
Blog RSS Feed
Schneier on Security
Schneier on Security
L
LINUX DO - 最新话题
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
Hacker News: Ask HN
Hacker News: Ask HN
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
N
News | PayPal Newsroom
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
PCI Perspectives
PCI Perspectives
aimingoo的专栏
aimingoo的专栏
D
Docker
T
The Exploit Database - CXSecurity.com
Last Week in AI
Last Week in AI
W
WeLiveSecurity
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
J
Java Code Geeks
O
OpenAI News
C
Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Help Net Security
Help Net Security
Scott Helme
Scott Helme
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
V
V2EX
P
Proofpoint News Feed
Simon Willison's Weblog
Simon Willison's Weblog
A
About on SuperTechFans
S
Securelist
G
Google Developers Blog
Cyberwarzone
Cyberwarzone
The GitHub Blog
The GitHub Blog

博客园 - woodfish

偏序集的Dilworth定理 fork()调用的一个趣题 实现google那种输入框提示的功能 POJ 3691 安徽第二题 有限状态自动机+DP 哈尔滨赛区网络预选赛总结 [计算几何]点集中的点能组成多少个正方形 [计算几何]POJ 1375 点对圆的切线+线段重叠 [计算几何]POJ 1556 判断线段相交+Dijkstra [计算几何] POJ 1873 暴力+凸包 [计算几何]POJ 1266 三角形的外接圆 圆的参数方程 POJ 1026 置换群 [计算几何]POJ 1031 计算点对多边形的偏转角度 [计算几何]POJ2079 求点集中面积最大的三角形 [计算几何]POJ3608 求2个不相交凸包的最短距离 [计算几何]凸包的旋转卡壳算法 C++禁止一个类被继承的技术 C与汇编的接口技术 计算位数的3种方法 避免使用条件分支
XJOJ历经2个月终于完成啦~~
woodfish · 2009-02-21 · via 博客园 - woodfish

XJ Online Judge System历经2个月终于完成了,其实早在大二上学期末的时候就开始写了,不过当时由于一些原因没能坚持写下去,这学期大三上期末的时候又想写了,于是把原来的程序全部重写了一遍。
系统目前只能运行在Linux系统中,里面使用了少量的QT4的东东,该OJ系统的特色有:
1。采用C/S结构来进行评测,S端只负责取题以及更新状态与客户端交换信息,C端进行全部的评判工作,编译-》运行-》评测等等。C端采用多线程技术,这样C端可以运行在多台机器上,每台机器又可以多线程评测,于是web服务器的压力非常小,并且评测的并发度可以非常大。同时,一个评测线程的意外死亡也不会影响其他的线程。
2。S端取任务不是无限循环的去读取数据库,而是使用了生产者/消费者模型,生产着负责周期性的一次从数据库中取出多个任务丢到任务缓冲池,消费者从任务缓冲池中读取任务发送给C端进行评测。当没有任务时,消费者和C端都会挂起睡眠,这样,对系统的资源利用率会很高。
3。安全性很高,一般考虑了安全性的OJ大多数只是用一个权限非常低的用户来执行用户提交的程序,但是这还远远不够,用户仍然能够提交对系统产生破坏性的程序,比如不停的fork(),本OJ对静态程序(C,C++等)采用了linux内核级别的调试工具ptrace,可以追踪用户程序所有的系统调用,对有危险的系统调用进行截获,从根源上阻止了危险的程序。对于Java程序,采用了一个安全沙箱的技术,将用户提交的程序Main.class动态载入到安全沙箱中以一个线程来运行,这样安全沙箱就可以彻底控制用户程序的运行状况。
4。对Java程序的评测准,一般的OJ把Java程序的运行当作普通的静态程序来运行,这样不仅会导致安全问题,也会使得评测用户程序运行的时间,消耗的内存非常不准确。因为我们知道,Java程序是必须运行在JVM下的,而启动JVM的时间是很长的,JVM所占的内存也是相当大的。本OJ由于采用了上述安全沙箱的方式来运行Java程序,因此可以完全解决这个问题。
5。WEB方面,采用了PHP中很著名的SMARTY模板引擎,对很多页面进行缓存处理,使得服务器的压力进一步减小。

OJ的源代码已经放到 code.google.com上面了,欢迎大叫提建议,提bug哦,更加欢迎大家一起来继续开发(我现在也还在继续完善这个oj,如果有谁对这个感兴趣,想一起开发的,请联系我,我会把SVN发给你~)