程序员对力扣应该都熟悉的,在上面可以使用任意一门熟悉的编程语言写代码,在线执行代码,提交,看到击败超过 90%,你会不会心跳一下?用的同时,你是否想过力扣背后的设计和实现,假如让你自己设计一个类似力扣的系统呢?你可以把这个当作系统设计的面试题,思考如何回答。
最好的回答,就是自己真正动手设计一个,当然这太难了,不过 GitHub 上有现成的,你只需要自己部署下,然后用一用,对照着功能,阅读源码,最后觉得不爽的话,自己改一改源码。这个过程,一定能学到很多知识。我的 Web 技能就是从别人的项目那里学到的。
先来个截图:
通过这个项目,你可以学习到 Docker、Django、Django REST Framework、Vue、Redis、PostgreSQL 技术栈,前后端分离,模块化编程,微服务等设计实践。
功能点
1、ACM/OI 两种比赛模式、实时/非实时评判 任意选择
2、丰富的可视化图表,一图胜千言
3、支持 Template Problem,可以添加函数题甚至填空题
4、更细致的权限划分,超级管理员和普通管理员各司其职
5、多语言支持:C, C++, Java, Python2, Python3,题目可以选择使用的语言
6、Markdown & MathJax 支持
7、比赛用户IP限制 (CIDR ranges)
安装部署
无论你是 Linux、MacOS 还是 Windows,请先安装 Docker、Python、pip、git、docker-compose 工具,确保在命令行可以执行 docker、python、pip、git、docker-compose 命令,安装方法自行搜索。
请选择磁盘空间富余的位置,克隆项目,并进入目录:
- git clone -b 2.0 https://github.com/QingdaoU/OnlineJudgeDeploy.git && cd OnlineJudgeDeploy
Docker 一键部署:
- docker-compose up -d
想知道到底启动了那些服务,可以看文件 docker-compose.yml 的内容,看不懂就去 Doker 官方文档看每一个命令的解释。
根据网速情况,大约 5 到 20 分钟就可以自动搭建完成,全程无需人工干预。
等命令执行完成,然后运行 docker ps -a,当看到所有的容器的状态没有 unhealthy 或 Exited (x) xxx 就代表已经启动成功。
浏览器打卡 http://localhost/ 就可以看到:
注册后,可以在个人设置页面设置系统为中文语言。
截图
源代码
在线测评项目源代码:
后端(Django): https://github.com/QingdaoU/OnlineJudge
前端(Vue): https://github.com/QingdaoU/OnlineJudgeFE
判题沙箱(Seccomp): https://github.com/QingdaoU/Judger
判题服务器(对Judger的封装): https://github.com/QingdaoU/JudgeServer