《实战项目-个人在线OJ平台》1.项目简介和演示

💡Yupureki:个人主页

✨个人专栏:《C++》 《算法》《Linux系统编程》《高并发内存池》《MySQL数据库》

《个人在线OJ平台》


🌸Yupureki🌸的简介:


目录

[1. 项目介绍](#1. 项目介绍)

[1.1 技术栈:](#1.1 技术栈:)

[1.2 架构特点](#1.2 架构特点)

[1.3 核心功能模块](#1.3 核心功能模块)

[1.3.1 题目管理模块](#1.3.1 题目管理模块)

[1.3.2 判题系统模块](#1.3.2 判题系统模块)

[1.3.3 前端界面模块](#1.3.3 前端界面模块)

[2. 项目演示](#2. 项目演示)

[3. 项目宏观结构](#3. 项目宏观结构)

[4. 编写思路](#4. 编写思路)


项目链接https://github.com/Yupureki-code/OnlineJudge

1. 项目介绍

该项目基于C++-httlib开发的在线编程评判系统,支持题目管理、ACE代码编辑、多测试用例判题系统、响应式设计。系统采用分布式架构和模块化设计,支持负载均衡,具有极强的可拓展性和可维护性

1.1 技术栈:

后端技术栈:

  • 语言 :C++
  • 操作系统 : Linux
  • HTTP 服务器 :httplib
  • JSON 处理 :jsoncpp
  • 模板引擎 :ctemplate
  • 数据库 :MySQL
  • 日志系统 :自定义日志策略

前端技术栈:

  • HTML5 :页面结构
  • CSS3 :样式和响应式设计
  • JavaScript :交互逻辑
  • ACE 编辑器 :代码编辑
  • Bootstrap :UI 组件

1.2 架构特点

  • 分层架构 :主服务器采用经典的 MVC 设计模式 → Model,View,Controller各司其职,保证高解耦合度
  • 分布式设计 :主服务器,编译服务器分离设计 → 实现智能负载均衡机制,选择负载最小的编译服务器,提升性能
  • 守护进程设计 :服务器都支持作为守护进程运行 → 适合在生产环境中持续运行,保证项目稳定性和可维护性
  • 责任链模式设计 :实现单一责任的原则,并控制处理权 → 提升代码的灵活性与动态性

1.3 核心功能模块

1.3.1 题目管理模块

  • 功能 :管理题目列表、题目详情、分页显示
  • 实现 :
    • 支持分页显示,每页 5 道题
    • 题目排序功能
    • 题目详情展示,包括描述、输入输出示例等
    • 代码编辑界面,集成 ACE 编辑器

1.3.2 判题系统模块

  • 功能 :编译用户代码、运行测试用例、判断结果
  • 实现 :
    • 多编译服务器支持,通过负载均衡提高性能
    • 详细的判题逻辑,包括编译错误、运行时错误、正确、错误等状态
    • 支持去除空白字符影响的判题逻辑
    • 多测试用例支持,正确聚合多个测试用例结果

1.3.3 前端界面模块

  • 功能 :提供用户访问的界面
  • 实现 :
    • 响应式设计,支持移动端和桌面端
    • 题目列表和详情页面
    • 代码编辑器(ACE)集成
    • 判题结果展示
    • 导航功能

2. 项目演示

主页面:

题库:

题目介绍与代码编写:

判题界面:

3. 项目宏观结构

我们的项目核心是三个模块

  1. comm:公共模块
  2. compile_server:编译与运行模块
  3. oj_server:获取题目列表,查看题目编写题目界面,负载均衡,其他功能

从而实现类似于洛谷风格的在线OJ

具体架构:

  • oj_server(主服务器):处理 HTTP 请求,管理题目,协调判题 关键文件: oj_server.cpp , oj_control.hpp , oj_view.hpp , oj_model.hpp
  • compile_server(编译和判题服务器):负责代码编译和运行,执行判题逻辑 关键文件: compile_server.cpp , entry.hpp , judge.hpp , compiler.hpp
  • comm(公共组件):提供通用工具和功能 关键文件: comm.hpp , logstrategy.hpp
  • MySQL(数据库):负责题目的各项数据的存储 关键存储: questions(题目的属性,如标题,难度,描述等) tests(题目的各个测试用例,如输入输出数据等)

4. 编写思路

  1. 先编写compile_server
  2. 再编写oj_server
  3. version1:文件系统版本
  4. 前端页面编写
  5. version2:MySQL版本
  6. 拓展功能思路与展望
相关推荐
镜像视界(浙江)科技有限公司9 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
a1879272183110 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记10 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Logic10110 小时前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题
老赵的博客10 小时前
c++面试之从虚函数表到Rtti一次性讲清楚
c++·qt
Navigator_Z10 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
是隼人11 小时前
buuctf-pwn picoctf_2018_shellcode(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
wzdark11 小时前
基于链表的内存池设计与内存复用机制4
java·数据结构·链表
潜创微科技11 小时前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳
wzdark11 小时前
多维数组在算法设计中的存储映射问题4
算法