用户模块、题目模块、题目提交、判题模块、代码沙箱、定时数据同步、定时爬虫、接口调用统计
web框架gin
jwt身份认证
orm框架gorm
持久化存储mysql
数据缓存redis:缓存题目信息和用户提交信息。使用更改数据时删除缓存,查询时再同步缓存
消息队列rabbitmq:用户提交题目后通过rabbitmq传输提交的id信息给判题模块,判题模块通过id查询数据库获取提交信息和题目信息。
代码执行沙箱docker:负责编译和执行用户提交的代码,判题模块通过执行结果进行判断是否答题正确。
搜索功能elasticsearch:提供使用关键字搜索题目信息和提交信息。
爬虫功能chromedp:爬取某一个网站的图片作为头像,用于提供给用户生成头像的数据来源,仅测试用。
ai建议科大讯飞星火大模型:判题通过后,会将用户代码交给ai进行时间和空间复杂度分析以及提供代码优化建议。
定时任务cron: 定时爬虫和定时同步mysql数据到redis和elasticsearch,同步方式:增量同步。
管理员:管理用户(查询用户,更新用户,禁用用户,删除用户)、管理题目(创建题目、更新题目、删除题目)、管理提交(删除提交)、查看接口调用情况。
普通用户:登录注册、获取题目列表、搜索题目列表、创建提交、获取提交列表、搜索提交列表、获取随机头像。
管理员创建题目并发布,普通用户注册登录后通过搜索或查询获取到题目列表,做完题后提交后会返回给用户提交id,通过判题模块进行判题,判题成功则会交给ai进行时间复杂度和空间复杂度分析并给出代码优化建议,用户可以通过提交id查询到判题结果。