🎓 引言
各位前辈好!在本文中,我将向您展示我的本科毕业设计——一个前后端分离的全栈项目:编程营地。🎉 该项目不仅已顺利完成答辩,还申请了软件著作权。 📝 请注意,目前AI数据分析功能暂时下线。🔄
🛠️ 
- 代码量:约6万行 📝
- 开发周期:约4个月 🕒
- 技术栈:
- 前端:Vue3 + Arco Design组件库 📱
- 后端:Springboot + Redis + MySQL + RabbitMQ 💻+Docker
- 微服务架构:实验性拆分,目前未完成 🔬
📚 背景介绍
在数字化时代,编程能力已成为学生必备的技能之一。🌐 我深入调研了力扣、洛谷等主流编程评测系统(OJ系统),发现它们大多为求职或竞赛设计。🏆 因此,推出一个面向校园的编程评测系统显得尤为重要,这不仅能提升学生的编程与算法思维能力,还能帮助教师精准掌握学生的学习状况。🏫
🏗️ 系统架构
系统层次图清晰展示了从用户层到存储层的各个层面。服务层通过消息轮询机制将判题信息返回至前端,并采用密钥请求头进行鉴权,同时实现了代码沙箱的隔离运行。🔒
🌈 系统功能介绍
由于涉及的内容比较多,这里重点介绍开发耗时较长的模块——题目推荐、代码编译与AI数据分析。
1. 题目推荐与代码编译模块
- 题目推荐:利用编辑距离推荐算法,根据题目标签的相似度推荐相似题目。🔍
- 代码编译:支持Java、Python、C、C++等语言,记录做题时长,并自动跳转至提交列表页。🔄
备注:相似题目推荐的实现思路是借用编辑距离推荐算法,通过比对不同题目的标签组合的相似度,计算后按照降序排列得到与本题相似度最高的5道题目。🔝
编辑距离算法实现代码示例
以下是编辑距离算法的实现案例,它是我们题目推荐功能的核心部分。
public static int minEditDistance(List<String> sourceTagList, List<String> targetTagList) {
// 源标签列表长度
int sourceLength = sourceTagList.size();
// 目标标签列表长度
int targetLength = targetTagList.size();
// 如果任一列表为空,返回另一个列表的长度作为编辑距离
if (sourceLength * targetLength == 0) {
return sourceLength + targetLength;
}
int[][] distanceMatrix = new int[sourceLength + 1][targetLength + 1]; // 编辑距离矩阵
// 矩阵初始化和算法逻辑...
}
//测试类
@Test
void testCompareTags() {
List<String> tagList1 = Arrays.asList("算法", "队列", "指针");
List<String> tagList2 = Arrays.asList("算法", "队列", "数组");
List<String> tagList3 = Arrays.asList("树", "深度优先");
// 需要变更1次
// 将“指针”替换成“数组”
int score1 = AlgorithmUtils.minDistance(tagList1, tagList2);
// 需要变更3次
// 将“算法”替换成“树”
// 将“队列”替换成“深度优先”
// 将“指针”删除
int score2 = AlgorithmUtils.minDistance(tagList1, tagList3);
System.out.println(score1);
System.out.println(score2);
}
备注:代码在沙箱中独立运行,与系统其他部分隔离,确保了安全性。同时,我们引入了RabbitMQ中间件来处理并发请求,提高了系统的稳定性和响应速度。🔒
代码运行状态
- ACCEPTED:接受 —— 代码运行正确,输出符合预期结果。🟢
- WRONG_ANSWER:错误答案 —— 代码运行正常,但输出结果与预期不符。🔴
- COMPILE_ERROR:编译错误 —— 代码无法通过编译阶段。🛑
- MEMORY_LIMIT_EXCEEDED:内存限制超出 —— 代码运行时超出了内存使用限制。💾
- TIME_LIMIT_EXCEEDED:时间限制超出 —— 代码运行耗时超过了规定的时间限制。⏱️
- OUTPUT_LIMIT_EXCEEDED:输出限制超出 —— 程序输出的数据量超出了限制。📄
- DANGEROUS_OPERATION:危险操作 —— 代码尝试执行不允许的操作。⚠️
- RUNTIME_ERROR:运行时错误 —— 代码在运行时遇到了未被捕获的异常。🐛
- SYSTEM_ERROR:系统错误 —— 由于系统问题导致代码无法正常运行或评判。🖥️
危险代码的研判
通过设置黑名单字典树来实现,确保了代码的安全性。🚫
目前存在的问题
代码运行内存获取不准确,我们计划通过计算编译代码前后的内存差值来解决这一问题。💡
2. AI数据分析模块
教师用户可以通过“AI数据分析”功能,上传文件并进行数据分析,获得可视化的分析结果和图表。📊
实现思路
使用easyExcel提取文件内容,通过AI进行分析,最后在前端渲染分析结论和图表。
目前存在的问题
当前AI提问字数限制导致无法处理较大数据量的文件,正在寻找解决方案以提升数据处理能力。🔍
3. 其他功能模块
- 论坛模块:提供交流平台。🗣️
- 数据导出:允许导出学生数据。📤
- 知识库:集成编程相关知识。📚
- 用户管理:简化用户信息管理。👥
- AI问答:实现零代码创建问答系统。🤖
🤔一些感悟
每一次强人所难的自我超越都让我变得更加成熟和坚强。
前辈,如果你已经看到了这里,可以给我提一些网站的优化意见嘛!比如AI还可以如何和本站的功能进行结合优化呢?或者未来的发展建议呢,比如城市选择、技术栈选择等;蟹蟹啦!