来练手吧,一个类似力扣的在线测评项目

阅读大约需要 2 分钟

程序员对力扣应该都熟悉的,在上面可以使用任意一门熟悉的编程语言写代码,在线执行代码,提交,看到击败超过 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

公众号回复「在线测评」也可以获取,这样当某天你需要项目地址的时候不需要翻页找文章。

另外,公众号回复「GitHub」告诉你如何找到有趣的开源项目。

最后的话

这个项目是青岛大学开源的,目前 GitHub 上有 4.1k 个星,挺热门也挺有技术含量的,接下来我会好好研究一下,有问题入群讨论啊,加我好友备注「入群」即可。

判断一个链表是否是另一个链表的子序列是一道常见的问题。对于这个问题,我们可以使用双指针的方法来解决。双指针一个指向主链表,一个指向子序列链表。我们同时遍历两个链表,比较指针指向的节点是否相同。如果相同,我们就同时向后移动两个指针;如果不相同,我们只移动主链表的指针。当子序列链表遍历完毕时,说明所有的节点都匹配成功,那么它是主链表的子序列;如果主链表遍历完毕,而子序列链表还没有遍历完,说明子序列链表中的节点没有完全匹配,那么它不是主链表的子序列。这种方法的时间复杂度是O(n + m),其中n是主链表的长度,m是子序列链表的长度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [力扣之判断一个链表是否是回文链表](https://blog.csdn.net/chenbaifan/article/details/121450273)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [[力扣] 203.移除链表元素](https://download.csdn.net/download/weixin_38667920/13759251)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值