OJ 在线判题项目笔记
原文地址:SSPUOJ项目说明 · 语雀
引言
从2023/11/08到2024/01/28,
历时2个月,跟随鱼总视频的节奏和自己的理解、想法和掌握的知识,在原有OJ系统的基础上,做了一系列扩充。
从前端到后端,
从Java到Python再到Java,
从Java开发到深度学习再到代码沙箱,
从单体到微服务,
从宿主机到虚拟机,
从本地到服务器。
自己也从经验欠缺者,到现在跟着鱼总视频和自己的学习,收获了很多。在很多方面都实现了零的突破,比如:
\1. 设计模式:策略模式、模板模式、代理模式...
\2. Java安全管理器
\3. 第一期视频:系统的调研、设计,至今仍对鱼总的一句话记忆犹新:核心业务逻辑。
\4. 期间有个权限设计问题有问过鱼总,又了解了RBAC。
\5. 第一次用Docker打包部署项目
\6. 第一次实现代码沙箱
\7. 第一次搭建Minio对象存储
\8. 第一次使用RabbitMQ
\9. 第一次使用Spring Cloud Alibaba的微服务方案,之前只用过Netflix。
\10. 等等等太多了,回头我需要再过一遍。
同时这两月又学习了java基础、集合、IO、多线程等知识,也将这些理解融入和应用到了系统中。
虽然完全手敲花了不少时间,尤其很多次遇到bug屡屡破防,但为了自己的目标,还是咬牙坚持下来,并想尽办法解决,也提升了解决问题的能力和知识记录输出的能力。
一、技术选型
(1) 前端
\1. Vue3
\2. Vue-CLI 脚手架
\3. Vuex 状态管理
\4. Axios 请求处理
\5. Arco Design 组件库
\6. 前端工程化:ESLint + Prettier + TypeScript
\7. 通用前端项目模板(通用布局、权限管理、状态管理、菜单生成)
\8. Markdown 富文本编辑器
\9. Monaco Editor 代码编辑器
\10. OpenAPI 前端代码生成
(2)后端
\1. Spring Boot 后端开发框架
\2. Spring Retry 重试机制
\3. Sa-Token 权限认证框架
\4. Spring Cloud Alibaba 微服务
\5. Nacos 注册中心
\6. OpenFeign 客户端调用
\7. GateWay 网关
\8. 聚合接口文档Knife4j
\9. Java 进程控制
\10. Java 安全管理器
\11. Docker 代码沙箱自主实现
\12. 虚拟机+远程开发
\13. MySQL 数据库
\14. Druid 数据连接池
\15. Mybatis-Plus以及Mybatis X自动生成
\16. Redis缓存数据库
\17. RabbitMQ 消息队列
\18. 多种设计模式
a. 策略模式
b. 工厂模式
c. 代理模式
d. 模板方法模式
\19. JVM内存控制
\20. Python内存控制
\21. Minio对象存储
\22. SSE消息推送通信技术
\23. Pytorch深度学习框架
\24. RSA非对称加密
(3)架构图(见图片)
二、拓展点
(1)前端
\1. 引入Json字符串编辑器:json-editor-vue3,使Json相关参数显示更优雅:
\2. 引入时钟组件和座右铭接口,丰富首页内容:
\3. 实现剪切板复制功能:引入 vue-clipboard3 插件
\4. 实现md文件导出功能
(2)后端
\1. Sa-Token权限认证框架引入及同端互斥登录支持:
作用说明: 引入Sa-Token框架提升系统的安全性和权限管理,实现对同端互斥登录的支持,增强用户账户的安全性。
官方文档:Sa-Token
\2. Druid数据源引入:
作用说明: 引入Druid数据源,优化系统数据库连接池,提升系统的数据访问效率和性能。
\3. 新功能模块拓展:系统、题单、题解、组织、竞赛、反馈等:
作用说明: 拓展系统的功能范围,包括系统管理、题单组织、用户题解分享、组织活动竞赛等,提供更全面的服务和用户体验。
\4. 用户管理细致化,支持封号、解封操作:
作用说明: 提升用户管理的灵活性,管理员可以对用户进行更精细化的管理,包括封号和解封操作,以维护系统秩序。
\5. 用户注册与登录辅助功能:邮箱注册、图形验证码:
作用说明: 引入邮箱注册和图形验证码,提高注册过程的安全性,同时限制用户在短时间内多次请求,防范恶意行为。
\6. Docker代码沙箱改造:
作用说明: 对Docker代码沙箱进行改造,增强系统对代码执行的安全性和可控性,提供更安全的编程环境。
实现笔记:编程导航 - 做您编程路上的导航员
\7. Minio对象存储搭建:
作用说明: 引入Minio对象存储,用于有效地管理和存储系统中的大量文件,提升系统的文件管理和存储效率。
实现笔记:编程导航 - 做您编程路上的导航员
\8. Pytorch框架训练Text CNN模型实现文章评论审核:
作用说明: 利用Pytorch框架训练Text CNN模型,实现对文章评论的自动审核,提高系统对内容的审核和过滤效果。
实现笔记:编程导航 - 做您编程路上的导航员
\9. 文章点赞功能实现与总结:
作用说明: 添加文章点赞功能,促进用户间的交流和互动,同时提供对用户喜好的记录和分析。
实现笔记:编程导航 - 做您编程路上的导航员
\10. 文章评论功能实现与总结:
作用说明: 实现文章评论功能,为用户提供对系统内容的反馈和讨论平台,加强社区互动。
实现笔记:编程导航 - 做您编程路上的导航员
\11. 排行榜功能实现与总结:
作用说明: 引入排行榜功能,展示用户在系统中的表现和成就,激发用户积极参与和竞争,同时为用户提供更多的社区互动机会。
实现笔记:编程导航 - 做您编程路上的导航员
\12. 引入讯飞星火GPT模型第三方API,采用SSE消息通信技术和RSA非对称加密:
作用说明: 通过整合讯飞星火GPT模型API,系统在出题环节得到先进的自然语言处理支持,从而提高题目的质量和多样性。同时,引入SSE消息通信技术和RSA非对称加密,加强系统与API之间的安全通信。这一组合创新不仅提升了系统的智能出题能力,还确保了出题过程中的信息传递安全性,为用户创造了更加安全、便捷和有趣的学习体验。
三、主要功能模块
\1. 用户模块
注册: 允许新用户创建账户并填写必要信息。
登录: 提供安全的登录途径,确保用户能够访问个人账户。
密码找回: 提供忘记密码时的找回机制,保障账户安全。
信息查看与修改: 用户可以查看和修改个人信息,以保持信息的准确性。
关注、取关: 提供关注和取关其他用户的功能,以建立用户之间的社交网络。
\2. 题目模块
智能出题与改题: 基于智能算法,系统能够生成和改进编程题目。
在线做题: 提供用户在线解答题目的平台,记录用户的提交历史。
查看提交结果: 用户能够查看他们的题目提交结果,包括通过或失败的状态。
题解发布: 允许用户分享他们对题目的解答,促进知识分享。
\3. 文章模块
查看文章: 提供用户浏览系统内发布的文章的功能。
分析文章: 支持用户对文章进行分析,以促进学术交流。
点赞文章: 用户可以为喜欢的文章点赞,以表达赞同或支持。
评论文章: 允许用户在文章下方发表评论,提供交流的平台。
导出文章: 用户可以导出文章以便离线阅读或分享。
\4. 题单模块
题单创建与修改: 用户可以创建和修改题单,用于组织相关题目。
题单权限说明: 系统提供详细的题单权限说明,确保合适的权限设置。
题单信息查看: 用户可以查看题单的详细信息,包括包含的题目和权限设置。
\5. 组织模块
组织创建与修改: 用户可以创建和修改组织,建立自己的学术团体或社群。
加入组织: 提供用户加入不同组织的入口,扩大社交圈。
组织信息查看: 用户能够查看组织的详细信息,包括成员和活动。
组织权限: 提供灵活的组织权限管理,确保组织内部运作顺畅。
退出组织: 允许用户主动退出不再感兴趣的组织。
转让组织: 组织管理员可以将组织的管理权限转交给其他成员。
组织成员管理: 管理员可以查看和管理组织成员,确保组织的稳定运行。
\6. 竞赛模块
竞赛创建与修改: 用户能够创建和修改编程竞赛,设定相关参数。
竞赛设置: 提供灵活的竞赛设置,包括时间、题目集、权限等。
竞赛参与: 允许用户报名参与竞赛,挑战编程能力。
竞赛成员管理: 竞赛管理员可以管理竞赛成员的权限和状态。
竞赛排行榜统计: 实时更新竞赛成绩,提供排行榜展示。
\7. 问题反馈与申请
提交问题或申请: 提供用户一个途径向开发团队提交问题或提出申请。
修改问题或申请: 允许用户修改之前提交的问题或申请。
撤回反馈或申请: 用户有权撤回之前提交的问题或申请。
查看申请进度: 提供用户查看问题反馈或申请处理进度的途径。
\8. 系统配置
服务器信息查看: 管理员可以查看服务器运行状态和信息。
系统参数配置: 提供管理员配置系统参数的权限,以满足特定需求。
系统操作日志管理: 记录系统的操作日志,以便后期审查。
在线用户管理: 管理员能够查看和管理当前在线的用户。
用户信息管理: 管理员可以查看和管理系统用户的基本信息。
四、代码版本
因为要将OJ作为毕设项目,所以项目代码暂不公开。
代码版本目前有两个:
单体多模块版本:目前部署的就是这个版本。
微服务版本:本地已打包并测试通过,但因服务器配置受限,暂不部署。
五、使用文档
如何使用本系统:SSPUOJ使用文档 · 语雀
六、访问地址
请留意端口号不能缺失。
七、问题收集
我深知自己还有很多不足,毕竟是2个月搞出来的,相对比较紧张。
于是再此恳切希望体验该系统的老铁可以提出一些建议,无论是批评还是bug或者功能需求,都可以在下面的简短问卷中填写,不胜感激:
八、阶段二拓展点:
目前在计划中的:
引入Mongdb数据库,管理题解等文档数据
引入ES,更高效查询
尝试完善代码沙箱中的内存和时间精确统计
优化前端显示
丰富各模块功能,如支持多级评论,目前仅支持二级评论
九、联系方式
期间如有任何问题,欢迎与我讨论,我的联系方式如下:
gitee:朱卓烜 (crzzx) - Gitee.com
十、End
明年就是春招了,因此OJ系统的第一阶段就此告一段落,应付简历。剩下的时间将属于力扣和八股文。呼~,希望能坚持下来这最后的时间,并最终有所收获吧。







