在线OJ系统后端涉及到的知识点

  • WSL
  • MariaDB
  • 模块
  • 数据库设计
    • 用户角色相关
    • 权限相关
    • 老师/管理员相关
    • 学生相关
    • 课程相关
    • 题目相关
    • 提交相关
    • 考试相关
  • 青岛大学开源Judger
  • 项目难点
  • 有什么提升
  • 怎么和其他模块对接

WSL

Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。

MariaDB

mariadb是Mysql的一个分支。MariaDB 被设计为 MySQL 的直接替代产品,具有更多功能,新的存储引擎,更少的错误和更好的性能。

  • 为什么要选择使用MariaDB?

MariaDB和MySQL完全兼容,但是MariaDB适用范围更广,可以实行包括API和命令行,是MySQL的替代品和升级产品。

模块

├── course 课程模块
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py  数据库定义文件
│   ├── serializers.py  序列化器
│   ├── tests.py
│   ├── urls   url定义
│   │   ├── admin.py  用于管理员端的url
│   │   ├── statistics.py 用于统计中心的url
│   │   └── student.py  用于学生端的url
│   └── views API接口实现
│       ├── admin.py 用于管理员端的API
│       ├── statistics.py 用于统计中心的API
│       └── student.py 用于学生端的url
├── data 静态文件存储
├── demo 示例
├── exam 考试模块
├── lab 实验课模块
├── lecture 主讲课模块
├── oj 项目配置
├── problem 题目模块
├── submission 提交模块
├── user 用户模块
├── utils 辅助函数等
├── manage.py
├── README.md
├── requirements.txt 项目依赖

如上图树结构。一共包含8个模块:课程模块、考试模块、实验课模块、主讲课模块、题目模块、提交模块、用户模块、示例模块(就是个Demo)。一个模块下的目录结构又如上图中的课程模块,最主要是models.py定义数据库表的结构;serializers.py是序列化器,序列化返回客户端的数据;/urls文件夹存放老师、学生、管理员三个角色的API的请求路径;/views文件夹存放老师、学生、管理员三个角色的具体API实现。

描述:软件学院在线OJ系统。但是不仅仅是像LeetCode那样只能做题、练习的功能,我们还能让学生能够查看编程类课程表、考试、提交作业、成就等功能;老师可以对题目进行一些修改、发布信息、修改测试案例等功能;管理员对所有数据进行管理。我主要负责的功能是管理员模块,主要是实现对学生相关表、老师相关表等全部数据的增删改查。

数据库设计

navicat可以对数据库的表结构进行绘制。Django对表结构转存到MySQL中时,会将子应用的名字、定义模型时的类名拼接在一起,且模型类名会全部转化成小写。例如:Course子应用下的CourseTeacher类存放在数据库中的表名为course_courseteacher。

主键:拥有主键的表,其主键与其他表相关联。
外键:以主表的主键值作为外键,可以通过外键与主表进行关联查询。

用户角色相关

主要有三个角色:老师、学生、管理员

权限相关

权限表、角色表、角色拥有权限表

老师/管理员相关

课程拥有老师表、课程拥有老师角色类型表、老师所属角色表、管理员所属角色表

学生相关

学生历史排名表、学生关注表、年度报告表、成就类型表、学生成就表

课程相关

课程表、学生参与课程表、课程消息表、课程资源表、主讲课表、主讲课资源表、实验课表、实验课资源表

题目相关

题目表、标签表、测例表、测例标签表、未通过案例错误类型表、语言表、实验课题目表、练习题表

提交相关

题目提交表、未通过提交的未通过案例表、实验课提交表、实验课题目提交表、实验报告表
、练习题提交表

考试相关

考试表、学生考试表、学生考试提交表、考试题目表

文档链接:https://github.com/nkucs/opep/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%96%87%E6%A1%A3

青岛大学开源Judger

判题部分是青岛大学开源项目。该项目的文档指定了6个判题参数:

  1. src:源代码
  2. max_cpu_time:运行最长时间
  3. max_memory:内存最大的限制
  4. output:希望的输出
  5. test_case_id:上传测例返回的id
  6. language_config:语言配置

项目难点

没有难点,我们可以创造难点:

  1. 环境配置,无疑,每个项目中环境配置都是困难的,版本号、机器型号等等等。
  2. 在线判题开源库的接入。虽然我没有做这一块的逻辑,但是因为对这里比较感兴趣,就和同学们有交流。看文档,看源码,用别人的东西。但是说难也不难,只要看懂一次,就知道后续怎么去用了。就是怕那种陷入要把所有东西都弄会的怪圈。(提倡这种做法,但是在开发里面会拉低效率)

有什么提升

  1. 因为是大项目,很多人参加,所以需要团队配合和沟通。比如说前后端之间的沟通,不仅对前后端分离开发有了一个更深的理解,而且团队合作能力也得到了提升。
  2. 对django框架的使用更加熟悉了。
  3. 因为参与了数据库设计,觉得对业务逻辑有了更深的理解。数据库设计的时候,表字段应该思考得更加全面,这对开发和后期拓展都是有用的。

怎么和其他模块对接

我们的后端项目是按照不同的角色来进行分工的,三种角色:学生、老师、管理员。他们之间耦合度是很低的,所以,后端开发基本上是隔离的。这个对接的话,最主要是和前端开发人员的对接。按照前后端开发的思路,我们在开发前,对业务逻辑进行梳理之后,确定了一些基本的需求,就对接口进行了约定,前端发送什么数据过来,后端返回什么数据给前端,这些都是写好文档了的。

在线OJ后端涉及到的知识点相关推荐

  1. 基于Java实现简单的在线 OJ 系统

    项目名称:在线 oj 系统 项目背景: 每个人都有自己的梦想,一个程序猿要实现自己的梦想,平时的练习就必不可少.平时的刷题是必不可少的,力扣网和牛客网是我平时刷题的两个网站.里边的功能深深的吸引了我, ...

  2. JavaWeb项目——基于Servlet实现的在线OJ平台 (项目问答+代码详解)

    文章目录 项目演示 预先知识 请问 在处理用户同时提交代码时是 多进程处理还是 多线程处理? 你是如何创建多进程的逻辑的 如何获取到编译与运行后的结果? 编译运行模块 子进程之间如何并发? 文件读写操 ...

  3. 在线OJ项目(3)------实现接口与网页前端进行交互

    我们先想一下:我们要具体进行设计那些网页呢?有几个页面?都是干啥的?如何设计前后端交互的接口? 当前我们已经把数据库的相关操作给封装好了,接下来我们可以进行设计一些API,也就是HTTP风格的接口,通 ...

  4. 试着模仿LeetCode做一个在线OJ系统(超级阉割版)(附项目测试)

    文章目录 引言--痛苦的刷题 1.简单的需求 2.读写文件模块 (1)读文件readFile() 输入:文件路径 返回值:String (2)写文件writeFile() 输入:文件路径,文件 3.创 ...

  5. 在线 OJ 项目(四) · 前端设计与项目总结

    一.页面设计 题目列表页 题目详情页 二.获取到后台数据 实现思路 遇到换行问题 小结 引入 ace.js 三.项目总结 接下来将实现 online-oj 项目的前端界面. 先随便从各大网站上下载网页 ...

  6. 在线 OJ 项目(三) · 处理项目异常 · UUID · 校验代码的安全性 · 阶段性总结

    一.处理异常 二.区分不同请求的工作目录 UUID 对 Task 类进行重构 三.校验代码的安全性 四.阶段性总结 书接上回,我们自己测试没问题,是因为使用了正常数据:万一用户输入的是非法的请求,该咋 ...

  7. 【项目】在线OJ的项目,快进到自己造题刷

    [项目]编写一个在线OJ的项目 1.项目目标 2.项目环境 3.模快划分 1.试题模块 2. 编译模块 3.http模块 4.工具模块 4.各模块具体实现: 4.1 http模块 4.1.1 响应获取 ...

  8. dbms_job涉及到的知识点

    用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点 1.创建job: variable jobno number; dbms_job ...

  9. 毕设项目:基于BS模型的在线OJ系统

    系列文章目录 文章目录 系列文章目录 前言 一.在线OJ系统描述 二.在线编译模块 1.搭建一个HTTP服务器完成在线编译 2.收到HTTP请求,进行数据格式转化(HTTP中body的内容转换为JSO ...

  10. 腾讯云tcp架构考试涉及到哪些知识点?腾讯云是什么?

    对于一些技术人员来说想要提高自己的业务水平,除了平时不断钻研外,还可以通过参加一些技术考试来获得官方的能力认可,现在社会上很多工作都是有一定的门槛,是否取得相关的证书就是一个很好的证明.不同行业的资格 ...

最新文章

  1. 智能合约和区块链技术:入门指南
  2. Win10 通过cmd查看端口占用、相应进程、杀死进程等的命令
  3. python生成随机密码
  4. c语言 异或_C语言经典例题来袭!5大方法告诉你答案
  5. [转]GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名
  6. LoadRunner脚本增强技巧之检查点
  7. springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)...
  8. python中用turtle绘制正方形_在Python-Turtle图形中创建正方形和旋转正方形的简单方法...
  9. 中山大学2018年数学分析高等代数考研试题
  10. 删除一个数据库中所有数据的方法
  11. julia的安装以及三个报错解决(包安装、dot函数无定义、定义变量无法在循环中使用)
  12. 写DM9000网卡芯片驱动的预备知识
  13. Hacking the PS4, part 1
  14. python——【2】gzip模块二进制格式读取压缩文件
  15. 【杂谈】斯科特与阿蒙森的南极点竞赛
  16. excel冻结窗口怎么设置_说说Word和Excel表头共享,全部方法供你选择
  17. QT Critical error detected c0000374
  18. 开发随笔——花生壳错误“您的局域网服务器连接失败,请检查局域网IP与端口“
  19. 关于SQL的char,varchar字段在导出时切断中文字符显示问号或乱码的问题[原创]
  20. ARP攻击原理与实践

热门文章

  1. word 文档多级列表编号设置
  2. 快商通智能客服云平台入选中科院《互联网周刊》“智能营销榜”
  3. PMI采购MogaFX经理人指数是什么
  4. 360安全桌面没有计算机了,360安全卫士桌面上的图标不见了怎么办
  5. 修复MacOS X上QuickTime 7.2中的AVI播放错误
  6. 【题解】洛谷 P1957 口算练习题
  7. LOJ3049 [十二省联考2019] 字符串问题 【后缀自动机】【倍增】【拓扑排序】
  8. 苹果开发者账号实名认证相关问题
  9. 高跟鞋,五角星与黄金分割比
  10. 疼痛共情ERP成分解析