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

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. 因为参与了数据库设计,觉得对业务逻辑有了更深的理解。数据库设计的时候,表字段应该思考得更加全面,这对开发和后期拓展都是有用的。

怎么和其他模块对接

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值