为师生打造的编程评测系统与AI赋能畅想 🚀

223 阅读5分钟

🎓 引言

各位前辈好!在本文中,我将向您展示我的本科毕业设计——一个前后端分离的全栈项目:编程营地。🎉 该项目不仅已顺利完成答辩,还申请了软件著作权。 📝 请注意,目前AI数据分析功能暂时下线。🔄

🛠️

  • 代码量:约6万行 📝
  • 开发周期:约4个月 🕒
  • 技术栈
    • 前端:Vue3 + Arco Design组件库 📱
    • 后端:Springboot + Redis + MySQL + RabbitMQ 💻+Docker
    • 微服务架构:实验性拆分,目前未完成 🔬 QQ_1720625793384.png

📚 背景介绍

在数字化时代,编程能力已成为学生必备的技能之一。🌐 我深入调研了力扣、洛谷等主流编程评测系统(OJ系统),发现它们大多为求职或竞赛设计。🏆 因此,推出一个面向校园的编程评测系统显得尤为重要,这不仅能提升学生的编程与算法思维能力,还能帮助教师精准掌握学生的学习状况。🏫 QQ_1720625681844.png

🏗️ 系统架构

系统层次图清晰展示了从用户层到存储层的各个层面。服务层通过消息轮询机制将判题信息返回至前端,并采用密钥请求头进行鉴权,同时实现了代码沙箱的隔离运行。🔒 image.png

🌈 系统功能介绍

由于涉及的内容比较多,这里重点介绍开发耗时较长的模块——题目推荐、代码编译与AI数据分析。

1. 题目推荐与代码编译模块

  • 题目推荐:利用编辑距离推荐算法,根据题目标签的相似度推荐相似题目。🔍
  • 代码编译:支持Java、Python、C、C++等语言,记录做题时长,并自动跳转至提交列表页。🔄 1.png 1.png

1.png

image.png

备注:相似题目推荐的实现思路是借用编辑距离推荐算法,通过比对不同题目的标签组合的相似度,计算后按照降序排列得到与本题相似度最高的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数据分析”功能,上传文件并进行数据分析,获得可视化的分析结果和图表。📊 1.png

1.png

实现思路

使用easyExcel提取文件内容,通过AI进行分析,最后在前端渲染分析结论和图表。

目前存在的问题

当前AI提问字数限制导致无法处理较大数据量的文件,正在寻找解决方案以提升数据处理能力。🔍

3. 其他功能模块

  • 论坛模块:提供交流平台。🗣️ image.png
  • 数据导出:允许导出学生数据。📤 QQ_1720629189953.png
  • 知识库:集成编程相关知识。📚 image.png image.png
  • 用户管理:简化用户信息管理。👥 image.png
  • AI问答:实现零代码创建问答系统。🤖 image.png

🤔一些感悟

每一次强人所难的自我超越都让我变得更加成熟和坚强。

Cache_-49cb08d2c419064a.jpg

前辈,如果你已经看到了这里,可以给我提一些网站的优化意见嘛!比如AI还可以如何和本站的功能进行结合优化呢?或者未来的发展建议呢,比如城市选择、技术栈选择等;蟹蟹啦!