前言
那么这里博主先安利一些干货满满的专栏了!
首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。
本项目Github地址
- Load-balanced-online-OJ-system
Load-balanced-online-OJ-system
负载均衡OJ系统
这是一个负载均衡的OJ系统项目
代码的实现细节可见
1. 项目简介
实现类似leetcode的在线编程系统。
后台可以部署多台编译服务主机(cr主机),然后oj_server服务将通过算法将大量的提交请求负载均衡地部署到每台cr主机上。如果后台有cr主机挂掉了,oj_server也能正确识别。
架构如下。
2. 所用技术和开发环境
所用技术
C++STL、Boost准标准库、cpp-httplib第三方开源网络库、ctemplate第三方开源前端网页渲染库、jsoncpp第三方序列化反序列化库、负载均衡设计、分布式系统、多进程多线程控制、Mysql C Connect、Ace前端在前编辑器、html/css/js/jquery/ajax
开发环境
- centos服务器
- vscode
3. 项目运行展示
3.1 页面展示
主页。
题目列表(可继续增加题目)
答题界面。
答案/编译出现错误样例。
代码补全。
3.2 后端展示
编译服务后端。
oj服务后端。
瞬间多次提交,查看负载均衡情况。
可以看到oj_server是可以很好的实现负载均衡的,每一台后台主机都能得到请求。
4. 下载和运行方法
4.1 运行
克隆仓库。
git clone https://github.com/Yufccode/Load-balanced-online-OJ-system.git
- 1
进入仓库。
cd Load-balanced-online-OJ-system
- 1
编译生成可执行。
make
- 1
此时在oj_server目录下和compile_server目录下已经分别有一个可执行了。
然后分别在三个命令行下启动compile_server,然后在第四个命令行下启动oj_server
# 三个命令行分别执行这三个
./compile_server 8081
./compile_server 8082
./compile_server 8083
- 1
- 2
- 3
- 4
./oj_server # 第四个命令行执行这个命令
- 1
在浏览器浏览访问8080端口即可。
如果是云服务器记得放开防火墙,否则也无法访问。
4.2 增加/调整cr服务的主机或把cr服务部署到远端
现在默认是三台cr服务的主机。可以增加,修改配置文件就行了。
./oj_server/conf/service_machine.conf
- 1
127.0.0.1:8081
127.0.0.1:8082
127.0.0.1:8083
- 1
- 2
- 3
改里面的配置就行了,很简单,如果要部署到远端就改成你远端的ip就行了,然后如果要增加主机的话直接在后面接着加上去即可。
4.3 发布项目
调用最上级目录的makefile
文件即可。
make
- 1
make之后就会有一个make_output
目录,里面就是要发布的内容。
5. 增加题目的方法
所以题目的信息都存储在这目录下。
./oj_server/questions
- 1
目录结构如下所示。
.
├── 1
│ ├── desc.txt
│ ├── header.cpp
│ └── tail.cpp
├── 2
│ ├── desc.txt
│ ├── header.cpp
│ └── tail.cpp
├── 3
│ ├── desc.txt
│ ├── header.cpp
│ └── tail.cpp
├── 4
│ ├── desc.txt
│ ├── header.cpp
│ └── tail.cpp
└── question.list
4 directories, 13 files
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
question.list格式。
1 字符串长度 简单 1 30000
2 判断回文数 中等 1 30000
3 求最大值 简单 1 30000
4 N皇后 困难 1 30000
- 1
- 2
- 3
- 4
每一列分别是,题目列表,题目名称,难度,cpu运行时间限制,内存使用限制。
每一个以数字为名字的文件夹代表每一个题目的详细信息。
desc.txt
是题目描述和一些详细信息。
header.cpp
是展示给用户的代码片段。
tail.cpp
是后端用于测试的代码片段。
增加题目按照上述的格式进行添加即可。
前言
转眼间,现在已经是2025年了,距离刚步入大学已经过去了一年半了。还记得当初之所以报考计算机专业主要是考虑到疫情之后,工作不好找,但是计算机专业的就业率高,就业的广度也是比较大的。暑假期间,在成功地分配到计算机科学与技术专业之后,也没在网上具体了解过该专业到底是学什么,而是一昧的在玩。直到进入大学,军训完成之后,才发现与我预料中的完全是不一样的。 我当时也决定开始好好地学习,但由于高中几年都是比较辛苦过来的(自我感觉),大一先轻松轻松,于是除了上课之外,基本没咋学过,而且上课也是看着老师讲,根本没有练习,直至后面要开始考试了,我才开始学C语言,还好考试的题目简单就过了。当时,我就暗自下定决心,寒假要开始好好的学习了。也就是在2024年初,开始正式学习C语言,从当时的一无所知,到现在能够熟练使用Java编写代码了。以下既是对我2024年学习的总结,也是分享给那些与我之前一样迷茫的初学编程者的。
学习过程回顾
近年来,随着越来越多的行业人员需要学习简单的编程,导致Python火遍大江南北。虽说市面上有着许多的培训机构以及免费的视频学习,但这种往往是良莠不齐的。对于学习能力很强的人来说,这些都不是问题,但是对于我们这种普通人来说,直接抛出Python可能会让我们的大脑意识宕机,我们的初学语言不应该是这种偏应用层的,更多需要的是偏底层的语言,通过学习这些原理,我们就会更好的理解这些知识,而不是简单地处于应用层面上。我的第一门编程语言是C语言,是自己在B站上找到up主的视频学习的,可以直接在B站上面搜索 "C语言"即可:
这些主推荐都是经过广大网友筛选出来的,我们可以任选其一,放心品尝。
也是在此期间接触到了CSND这个平台,我当时也是抱着试一试的态度注册了账号,并且发布了学习的笔记,后面随着粉丝与阅读量的增多,慢慢的也就喜欢上了学习编程与敲代码。这或许就是传说中的"学习正反馈"吧。
到现在为止,我已经学习了JavaSE、数据结构、MySQL数据库,JavaEE正在学。
遇到的困难与挑战
在编程学习的过程中,想必我们都需要过类似下面的情况:
1、明明我的代码和视频(书)中的一样,为什么不能运行呢?
2、写出来的代码和预期的效果根本不一致。
....
遇到这种情况,我们都需要去进行调试。调试也是程序员必备的技能之一,我们要熟练使用开发工具,这样才知道哪一个是跳过函数,哪一个是进入函数,哪一个是跳到下一个断点等。
调试在写算法题时,也是非常有用的。还记得当时刚开始刷算法题时,连个双层for循环的暴力解法都不会,去解答去看代码时,也是一愣一愣的。最后还是求助他人,才知道调试的好处,可以一步一步的拆解代码,去仔细分析。
除了编码和算法题之外,我们在学习的过程中,最好能够记录学习的过程。正所谓:好记性不如烂笔头,我们正常人不可能会过目不忘,这时就需要通过笔记来唤醒我们丢失的记忆。
注意:在学习编程的过程中,千万不能去背代码,或者死记硬背这些语法,一定得自己去敲代码来感受一下。
除此之外,大学的学习与以前的学习是完全不一样的,周围的环境不一样。中学的时候,大家都是在一起学习,根本没有人会松懈,而大学则不同,需要的是自己的自制力,如果自制力不够的话,很有可能根本就学不了。我大一的时候,由于学校要晚自习,再加上自己也是比较松懈的,因此基本上就是在寝室学习,而寝室的学习氛围可以说是非常差的,大一上学期和室友们都是处于一种浑浑噩噩的状态,基本上回到寝室都是玩,根本不想学习,到了大一下学期才稍微好一点(自己带着降噪耳机在床上学习),大二没有晚自习之后基本上都是跑到图书馆里面去敲代码了。
取得的成就与收获
在经过一年的学习之后,我的编码能力虽然还不是很强,但是相比最初之时,大有进步。
Gitee个人首页提交截图:
我们一定要坚持敲代码,尤其是时间一长,我们后面再来看前面的代码会觉得很有成就感。
CSDN个人首页截图:
这一年也是在不断的学习与进步,每当我学习到了一个新的知识点之后,我都会将这些知识给记录下来整理到一起发布到CSDN上面。现在回想起来,还是挺不容易的,尤其是迈出第一步。
牛客网:
LeetCode:
问题与不足
以我现在的能力还是很多的不足的,以后未来的路也是很长的。
1、编码能力:对于一个功能接口的实现,不一定可以写出来,这很明显是编码能力不是很强。
2、项目的开发能力:由于现在还是处于学习的阶段 ,根本没有接触过前后端交互的项目,以至于根本不知道如何根据文档进行项目的开发。
以上两点是我未来需要提升的。对于编码能力的提升,最好以及最快的途径就是多刷题。对于初学者来说,更多的是去刷语法题,巩固语法,提升编码能力。但是对于已经熟悉语法的学习者,提升编码能力就需要多刷算法题了,并且也需要时常总结,因此最好的办法还是写笔记来帮助我们更好更快的学习。而针对项目的开发能力,由于暂时没有接触到项目,只能暂时搁浅了。
未来学习计划与目标
1、希望能在2025年完结之前,将与工作息息相关的主流技术给学习完毕。
2、刷题,一定要每天都刷题来应对未来的笔试。
3、争取今年能做1-2个项目出来,并简历给写好。
加油!希望我们未来一年越来越好!!!
诸君,共勉之。
评论记录:
回复评论: