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

推荐订阅源

G
Google Developers Blog
Google DeepMind News
Google DeepMind News
Hugging Face - Blog
Hugging Face - Blog
D
Docker
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
Project Zero
Project Zero
Engineering at Meta
Engineering at Meta
J
Java Code Geeks
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Simon Willison's Weblog
Simon Willison's Weblog
S
Security Affairs
NISL@THU
NISL@THU
T
Tor Project blog
A
About on SuperTechFans
宝玉的分享
宝玉的分享
腾讯CDC
S
Schneier on Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
P
Privacy International News Feed
雷峰网
雷峰网
C
Cyber Attacks, Cyber Crime and Cyber Security
Vercel News
Vercel News
Cisco Talos Blog
Cisco Talos Blog
D
DataBreaches.Net
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Google Online Security Blog
Google Online Security Blog
Recorded Future
Recorded Future
L
LINUX DO - 热门话题
Microsoft Security Blog
Microsoft Security Blog
Latest news
Latest news
C
Check Point Blog
有赞技术团队
有赞技术团队
T
The Exploit Database - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
云风的 BLOG
云风的 BLOG
SecWiki News
SecWiki News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
爱范儿
爱范儿
月光博客
月光博客
V
Vulnerabilities – Threatpost
T
Threat Research - Cisco Blogs
P
Palo Alto Networks Blog
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
Webroot Blog
Webroot Blog
S
Security @ Cisco Blogs

博客园 - 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发给你~)