# onlinejudge-backend **Repository Path**: stackbaile/onlinejudge-backend ## Basic Information - **Project Name**: onlinejudge-backend - **Description**: 在线评测系统后端 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-20 - **Last Updated**: 2024-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OnlineJudge 在线评测系统 > 作者:[斩码飞刀] 用户可以选择题目,浏览题目,搜索题目,在线做题,编写代码并且提交代码; 管理员可以管理题目,添加题目测试用例,用户管理。 在系统后端,能够根据管理员设定的题目测试用例在自主实现的代码沙箱中对代码进行编译、运行、判断输出是否正确。 ## 项目源码: 前端:https://gitee.com/stackbaile/onlinejudge-web 后端:https://gitee.com/stackbaile/onlinejudge-backend 代码沙箱:https://gitee.com/stackbaile/onlinejudge-code-sandbox ## 技术选型: 前端: 1. Vue3 2. Vue-CLI 脚手架 3. Vuex 状态管理 4. Axios 请求处理 5. Arco Design 组件库 6. 前端工程化:ESLint + Prettier + TypeScript 7. 通用前端项目模板(通用布局、权限管理、状态管理、菜单生成) 8. Markdown 富文本编辑器 9. Monaco Editor 代码编辑器 10. OpenAPI 前端代码生成 后端: 1. Spring Boot 后端开发框架 2. 聚合接口文档Knife4j 3. Java 进程控制 4. Java 安全管理器 5. Docker 代码沙箱自主实现 6. 虚拟机+远程开发 7. MySQL 数据库 8. Druid 数据连接池 9. Mybatis-Plus以及Mybatis X自动生成 10. Redis缓存数据库 11. 多种设计模式 1. 策略模式 2. 工厂模式 3. 代理模式 4. 模板方法模式 12. JVM内存控制 13. Minio对象存储 ## 效果展示: 用户主页: ![image-20240530153452117](README.assets/image-20240530153452117.png) 用户登录(较简陋啊): ![image-20240530153514569](README.assets/image-20240530153514569.png) 用户注册: ![image-20240530153530297](README.assets/image-20240530153530297.png) 管理员首页: ![image-20240530153600104](README.assets/image-20240530153600104.png) 题目浏览、做题页面: ![image-20240530153748329](README.assets/image-20240530153748329.png) 创建题目页: ![image-20240530153952505](README.assets/image-20240530153952505.png) 题目管理页面: ![image-20240530154043007](README.assets/image-20240530154043007.png) 用户管理页面: ![image-20240530154114685](README.assets/image-20240530154114685.png) 个人信息页: ![image-20240530154140764](README.assets/image-20240530154140764.png) ![image-20240530154201292](README.assets/image-20240530154201292.png) 题目提交浏览页: ![image-20240530154237500](README.assets/image-20240530154237500.png) ## 特点 ### 主流框架 & 特性 - Spring Boot 2.7.x - Spring MVC - MyBatis + MyBatis Plus 数据访问(开启分页) - Spring Boot 调试工具和项目处理器 - Spring AOP 切面编程 - Spring Scheduler 定时任务 - Spring 事务注解 ### 数据存储 - MySQL 数据库 - Redis 内存数据库 - 阿里云OSS对象存储 ### 工具类 - Hutool 工具库 - Lombok 注解 ### 业务特性 - Spring Session Redis 分布式登录 - 全局请求响应拦截器(记录日志) - 全局异常处理器 - 自定义错误码 - 封装通用响应类 - Swagger + Knife4j 接口文档 - 自定义权限注解 + 全局校验 - 全局跨域处理 - 多环境配置 ## 业务功能 - 提供示例 SQL(用户、帖子、帖子点赞、帖子收藏表) - 用户登录、注册、注销、更新、检索、权限管理 - 帖子创建、删除、编辑、更新、数据库检索、ES 灵活检索 - 帖子点赞、取消点赞 - 帖子收藏、取消收藏、检索已收藏帖子 - 支持分业务的文件上传 ### 单元测试 - JUnit5 单元测试 - 示例单元测试类 ### 架构设计 - 合理分层 ### MySQL 数据库 1)修改 `application.yml` 的数据库配置为你自己的: ```yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/my_db username: root password: 123456 ``` 2)执行 `sql/create_table.sql` 中的数据库语句,自动创建库表 3)启动项目,访问 `http://localhost:8101/api/doc.html` 即可打开接口文档,不需要写前端就能在线调试接口了~ ![](doc/swagger.png) ### Redis 1)修改 `application.yml` 的 Redis 配置为你自己的: ```yml spring: redis: database: 1 host: localhost port: 6379 timeout: 5000 password: ``` 2)修改 `application.yml` 中的 session 存储方式: ```yml spring: session: store-type: redis ``` 3)移除 `MainApplication` 类开头 `@SpringBootApplication` 注解内的 exclude 参数: 修改前: ```java @SpringBootApplication(exclude = {RedisAutoConfiguration.class}) ``` 修改后: ```java @SpringBootApplication ```