# rc_learntime **Repository Path**: cyy0424/rc_learntime ## Basic Information - **Project Name**: rc_learntime - **Description**: 江西农业大学软创项目基于协调过滤算法的智能学习平台——《江农学习星》 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-10-16 - **Last Updated**: 2023-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 江西农业大学大学生软件创新设计大赛 参赛作品说明书 ![输入图片说明](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%201.png) ## 1 创意说明 ### 1.1背景介绍 首先,近几年受疫情影响,各个学校开展线上教学,线上资源有限,难以满足学生对自主学习的需求。再针对目前同学们日常使用的学习软件来说,功能大多数都具有一定的局限性。如钉钉和腾讯会议等通讯软件,本质上只是给老师提供了一个直播平台,缺少了以供学生自主学习的学习资源。还有超星学习通之类的学习软件,也只是简单地提供了相关的文档类学习资源,而缺少了视频类教学资源,且没有为学生提供的个性化的推荐服务。所以本团队提出使用协同过滤推荐算法给学生提供优质的个性化的公开学习资源的方案,以满足大部分学生的学习需求。 其次,协同过滤推荐算法及微服务是当今许多互联网公司研究的重点,推荐算法在淘宝、微博以及抖音等平台上发挥着重要作用。在这些诸多网站平台中,类似出现的“你可能喜欢的其他产品”和“你可能喜欢这个”的引导页面,无不体现出网站平台的个性化推荐服务。随着这些网站平台的快速发展,这种个性化的推荐服务得到了更加广泛的应用。而微服务的发展,是在企业发现单一架构的作品已经无法满足产品开发的需求时开始的。企业引入了微服务架构的理念,将应用程序逻辑分解为具有明确定义了职责范围的细粒度组件,减少作品组件的耦合度,降低作品开发难度。如今,微服务架构已经逐渐替代了单一架构成为互联网公司作品开发的主流架构。 本作品符合第八届中国国际“互联网+”大学生创新创业大赛高教主赛道方案中的“互联网+”社会服务方案要求。故作品的设计方案得到了一定的社会认可和具有一定的可行性。 ### 1.2市场定位 本作品为了满足学生学习需求,本作品拟通过收集学习资源,使用协同过滤推荐算法进行个性化智能推荐,设计开发基于微服务架构的学习软件给学生提供个性化的学习资源以及便捷的学习方式未来发展方向在于优化协同过滤算法,调整作品架构,高并发调优,创新出自己的微服务中间件。 ### 1.3作品创新特色概述 ①本作品将协同推荐过滤算法改进,投入自主学习平台中。进一步扩展了协同推荐算法的服务范围。 ②本作品基于微服务设计理念,提出符合用户需求的微服务作品设计方案。 ## 2 作品整体架构介绍 本作品整体架构如图1: ![图 1作品微服务整体架构](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%202.png) ### 2.1特色服务:资源服务 资源服务采用协同过滤推荐算法这一热门算法,给用户提供个性化推荐。本项目的资源的获取来源为本项目团队中学习资源的共享和互联网中公开的优质学习资源。至于本项目的资源库的存储则放置云端存储库中。云存储能帮我们对数据进行及时存储和下载、共享,而且不占用计算机空间,不用浪费资源去购买其他存储设备,为学生用户节省资金和电脑空间,更加经济实惠而且便捷,优势明显。 ### 2.2特色服务:题库服务 题目来源于互联网公开资源中相关题目和项目组自出题目,并且提供错题本和题组来帮助用户更加舒适的体验题库服务。用户在可以从推荐的题组列表或者题库中挑选一个题组进行练习,题目的种类分为单选题和多选题,用户可以通过题目来检验课程中的学习成果。提交自己的答案后,系统自动阅卷给出分数以及作答情况。用户在第一时间可以查看错题解析,纠正自己的想法,同时也可以把错题加入错题本,便于日后回顾。题库服务可以帮助用户巩固自己当日的学习成果,也可检验现阶段的学习情况。 ### 2.3特色服务:讨论区服务 为了方便学生用户相互讨论,本项目给用户提供了讨论区服务,用户可以在各个讨论区中畅所欲言,也可以通过WebSocket协议建立的长链接来进行实时交谈。 ## 3 技术实现 ### 3.1 协同过滤推荐算法 ### 3.1.1 算法简介 协同过滤技术使用用户或者项目的历史信息进行预测。利用推荐算法可以找到与目标用户具有相同或相似兴趣的近邻用户,作为预测目标用户项目的基础。一旦近邻用户在用户项目评分矩阵中有过评分,算法就会使用这些评分结合用户的兴趣来作出新的预测。主要算法如图 2所示。 ![图 2算法主要方向](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%203.png) ### 3.1.2 算法实现 ![图 3基于用户的协同过滤算](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%204.png) 如图 3 所示,基于用户的协同过滤推荐算法通过分析历史评分信息来确定用户间的相似度,使用相似度和预测评分来评估目标用户对未评分项目的喜好程度。并根据用户对未评分项目的预测值降序产生推荐。基本实现过程可以分为如下几个阶段: ①构建用户评分矩阵,如表1: | | 资源一 | 资源二 | .... | 资源n | | ------ | ------ | ------ | ---- | ----- | | 用户一 | 1 | 0 | .... | 1 | | 用户二 | 1 | 1 | .... | 0 | | .... | .... | .... | .... | | | 用户n | 1 | 1 | .... | 1 | 表 1用户评分矩阵 ②选择合适的相似度计算公式,计算用户间的相似度。 余弦相似度和皮尔逊相似度是当前协同过滤算法常用的两种度量用户关系和项目关系的方法。本作品选择余弦相似度来计算用户间的相似度。将用户对项目的 所有评分表示为一组向量。因此,衡量任意用户之间的相似度,即转换成衡量任意向量之间的角度夹 角的问题,向量之间的角度越小相似度越高。同理,基于项目的推荐算法,计算的是任意两个项目之间的相似度。 ③对近邻用户评分过的项目且目标用户尚未评分的项目,利用评分预测公式,进行结果预测。 式中,y 为用户 m 对项目 x 的预测值,s 为用户间的近邻。目标用户的近邻集合为 。根据评分预测集合中的结果,降序排列。 ### 3.1.3算法优化 虽然协同过滤推荐算法是当前最流行的推荐算法之一,但是仍然具有一些局限性,主要表现在冷启动、可扩展性以及稀疏性三个方面。 1. **冷启动** 冷启动出现于系统中添加了“新的用户”。当一个新项目进入系统时,就会出现冷启动的问题。 新用户的问题:新用户在协同过滤推荐系统中是一个重大挑战,因为在用户的历史数据中,并不包含用户对任何资源的评分。推荐算法完全不知道用户最感兴趣的项目是什么,无法为用户提供他们喜好的项目。因此,系统无法向用户提出可靠的推荐。 针对冷启动现象,可以利用用户或项目的基础信息作为辅助条件,在用户没有进行任何评分的前提下,根据学生用户年龄或者职业等条件进行相关推荐。利用辅助条件为推荐算法产生推荐提供了一个新的思路。 1. **可拓展性** 随着互联网的高速发展和用户数量的急剧增加,信息过载日益严重。协同过滤算法每天需要处理海量的数据来向用户提供可靠的推荐。这需要大量的计算资源。随着信息数据呈指数级增长,时间复杂度高,且存储困难。处理数据的成本将变得非常大。而这个大数据挑战可能会导致推荐过程实现困难,所以这对本作品可拓展性也提出了一个严峻的挑战。 针对可拓展性的优化,目前一些协同过滤推荐算法都是在单机条件下执行的。随着信息过载,待处理数据规模的急剧扩增,对硬件设备要求高,同时空间复杂度高。针对这种问题,本项目考虑采用搭建集群的方式,实现算法推荐。。 1. **稀疏性** 协同过滤算法是在历史评分数据中进行处理的。然而,随着用户数量和项目数量的不断增加,用户项目评分矩阵具有高度的稀疏性。这种稀疏性使得推荐系统很难对目标用户进行准确推荐。面对当前算法的稀疏性问题,可以考虑对稀疏评分矩阵进行预填充的方式来进行相关改进。 本项目综合上面的改良方法,对冷启动问题,通过学生提供的学习方向和相关个人信息来进行辅助条件的预填充解决;对增大可拓展性,采取搭建分布式集群计算平台解决;对于稀疏性过高问题采取,通过结合高斯函数的计算模型对用户历史评分矩阵的空白区域 进行填补解决。其高斯表达式为: ### 3.2云端点播功能及云存储服务 资源库资源来自本项目团队分享和互联网公开优质学习资源。其存储技术运用了云存储技术。云存储提供的是存储服务,存储服务通过网络将本地数据存放在存储服务提供商(SSP)提供的在线存储空间。需要存储服务的学生不再需要建立自己的数据中心,只需向 SSP申请存储服务,从而避免了存储平台的重复建设,节约了昂贵的软硬件基础设施投资。 云存储系统与传统存储系统相比具有如下不同: ①从功能需求来看,云存储系统面向多种类型的网络在线存储服务,而传统存储系统则面向如高性能计算、事务处理等应用; ②从性能需求来看,云存储服务首先需要考虑的是数据的安全、可靠、效率等指标,而且由于用户规模大、服务范围广、网络环境复杂多变等特点,实现高质量的云存储服务必将面临更大的技术挑战; ③从数据管理来看,云存储系统不仅要提供类似于POSIX的传统文件访问,还要能够支持海量数据管理并提供公共服务支撑功能,以方便云存储系统后台数据的维护。基于上述特点,云存储平台整体架构可划分为4个层次,自底向上依次是:数据存储层、数据管理层、数据服务层以及用户访问层。云存储平台整体架构如图 4 所示。 ![图 4云存储平台整体架构](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%205.png) 云存储服务一般都具有文件同步、文件备份和文件共享功能,只要安装客户端之后,电脑、手机、平板、网站之间都能够直接跨平台互通互联,彻底抛弃U盘、移动硬盘和数据线,随时随地轻松访问用户的个人文件。可实现在教室、寝室电脑和家里电脑自动同步文件。调查显示 95%以上的学生仍在使用 U 盘存储教学资源,但U盘容易丢失、容易中毒、而且容量有限、安全系数低等问题一直困扰着学生。如图5所示,通过云存储服务,学生可以轻松实现数据“云端”备份,保证各类学习资源的安全。 ![图 5基于云存储服务在学习资源的共享结构](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%206.png) 本项目使用阿里云提供的OSS服务和视频点播服务,对资源进行储存和利用如图6和图7。 ![图 6视频点播](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%207.png) ![图 7 OSS对象储存服务](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%208.png) ### 3.3 微服务架构搭建 微服务架构在继承SAO体系架构松耦合理念的基础上,强调“业务的彻底组件化和服务化”。微服务架构与 ESB最大的区别是省去了连接中枢,微服务架构中的不同服务通过“服务接口契约”来完成网络调用通信。因此,与传统单体架构模型相比,微服务架构模型具有“高内聚低耦合”特点,具体为以下四点: ①是微服务架构中的单体结构可以独立开发,服务与服务之间耦合相对较弱,对某个服务进行开发、测试等操作,不会对其他服务产生影响; ②是在微服务架构下的技术选型是去中心化的,每个服务内容简单,如果需要升级或转型面临的难度相对于传统架构大大减少; ③是微服务架构下的单体结构具有很强的容错性,由于各模块之间相互独立,当架构中某些模块产生故障时,其他模块仍可通过一系列技术手段运行; ④是微服务架构的松耦合大大降低了服务扩展的成本,不同类型的服务在个性化底层资源需求和波峰波谷访问周期条件下,可快速、灵活个性化地进行弹性伸缩从而降低服务扩展成本。 ![输入图片说明](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%209.png) 图 8服务拆分组件和组件的组合 微服务架构模型的设计一般采用面向服务开发(SOD)理念。微服务架构的设计理念是将传统的单一应用程序转变成为一套小型的服务组合,根据业务逻辑将单体架构拆分成多个服务,每一个微小的服务都具有单一职责且可以单独部署和运行,如图8。“微”,顾名思义为“小”,是将原有单体架构中冗杂的子系统拆分出来的微型服务,然而业界对“微”没有一个确切的定义.一般来说,只要符合领域驱动设计,可完成一件不可再分割的完整业务操作功能就可以被认为是符合微服务架构的“单一职责原则(SRP)”。针对微服务架构来说,适合独立成为一个微服务的原则包括:能维持业务持久性、有业务生命力的领域对象;调用频率非常高的功能单元;所处理的数据量大且增速快的功能单元等。 随着需要管理的服务的增多,服务的高效编排与治理成了需要迫切考虑的问题,本项目主要使用了如图9架构中的微服务编排与组装设计模式——API网关模式(API gateway pattern)。 API网关模式可以看作是一种简单的接口聚合或者拆分的方式.一项全局业务发起时,先到达网关,网关统一集中调用各微服务,并最终聚合或者拆分需反馈的结果。优势:接口统一集中化管理,且对外接口相对稳定,可以利用LAN的带宽,弥补因特网的不足。劣势:只适合业务逻辑较为简单的场景或短流程,业务逻辑过于复杂时,网关接口耦合度及复杂度会急剧升高,使得各微服务的统一集中调用变得繁杂和臃肿,同时在整体微服务资源调度与任务运行中容易形成单点,造成一定的性能与可靠性影响。 在微服务架构中,还需要保障各服务间的数据与信息处理层面的数据一致性与有效性,因此在数据操作与交换过程中应遵循ACID特性原则。分布式集群的所有单分片实例都需保证自身数据的持久性,保证已完成提交的分布式事务的所有变更都持久化,从而不会因故障导致丢失部分提交的数据.各分片数据持久性由分片数据库保证,分服务间可采用分布式数据库自身实现操作的原子性,结合分片内的数据持久性,以满足分布式数据持久性的需求。 ![图 9微服务项目架构](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%2010.png) ### 3.4 小程序前端 项目为微信小程序,使用uni-app(vue2)框架+vuex+uview-ui,scss作为css预处理语言,并部分采用了iconfont多色图标库。后台管理系统采用Vue3+vuex+vue-router+element-plus+scss技术栈。多人协作采用git,远程仓库使用gitee。 ### 3.4.1首页 首页整个页面主体制作双层Tab,借助swiper组件来实现全屏选项卡,有三个文章、视频、资源三个模块,均已实现分页按需加载,即下拉加载更多。子tab分为最热和最新,可以根据推荐算法推荐文章。顶部为搜索框,可以跳转历史搜索页面,右下角有写文章的按钮,可跳转至发布文章页面。 ①文章模块 文章已实现的功能有:文章浏览量、文章点赞、取消点赞、评论、点赞评论(取消点赞)、评论回复发布文章页面可为用户提供发表文章的功能,一篇文章包括标题、内容、图片(可上传多张图片,最多上传三张,默认第一张图片为文章封面)、标签(为推荐算法提供支持,最少一个,最多三个)。用户提交后要经过后台管理员的审核才能正式上线至首页。 历史搜索页提供用户搜索文章的功能,上方拥有历史搜索功能(采用持久化存储到Storage,可一键清除所有历史记录),下方有十条热门文章推荐,可以跳转到对应的文章详情页。在搜索框输入关键字即可跳转到搜索页搜索出相关文章。 ②视频模块 视频模块提供给用户观看视频的功能,目前暂时不支持用户上传视频。用户获取到视频列表后,将会自动播放第一条视频,视频默认静音播放。 ③资源模块 资源模块提供下载文件并打开的功能。从后台获取到文件资源列表后,用户可以下载文件至本地,实现的功能:支持下载进度条显示,下载过程中已经做了节流处理,防止用户重复点击。在后台与本地Storage和本地已保存的文件做了一层联系,可以做到用户下载文件后,以后不用二次下载便可以打开之前已下载的文件,即使是关闭小程序后再打开也无需再次下载。如果文件被删除或损坏,将能捕获到异常,提示用户重新下载文件。 ### 3.4.2题库 整个页面上方分别有三个模块,对题目难度从简单、中等、困难进行了分类,下方为题目推荐列表,均已实现分页按需加载,其中下方题目推荐列表采用scroll-view中的自定义下拉刷新功能来实现下拉刷新。其中每一项为一个题组,题数不定,分为单选题和多选题。 ①答题 点击进入答题页面,其中的亮点功能有:支持答题进度条显示,动画切屏,节流(防止用户切换题目过快越界)。支持单选题和多选题两种提醒,根据题目类型切换用户可执行的操作。采用map数据结构类型去收集用户答案,用户可以进行上一题和上一题进行切换更改,不会丢失用户之前已作答的数据。强制用户答完所有题目(否则无法提交),用户如有遗漏题目,可以提示用户哪些题目未完成。 ②答题报告 用户答完所有题目后,提交答题卡至后端,后台生成答题报告返回至前端,前端拿到数据进行页面传参跳转至答题报告页。答题报告页展示的数据:用户的正确率、总题数、答对的题数、答错的题数、所有正确答案。 ③查看解析 点击查看解析,可获取到全部题目的解析,其中解析页面的功能亮点有:对用户做答情况进行区分(正确为绿色,错误为红色),增强用户体验。点击可切换到对应的题目,节流、动画切屏。添加错题本、取消添加。 ### 3.4.3登录、注册 用户体系采用toekn身份认证模式,初次使用小程序,将在onLanch生命周期检查本地存储是否有token,没有将会被强制跳转到登录页面。如果有token,将无需登录直接进入主页。如果在使用过程中,token过期或token无效将会被响应拦截器捕获并强制跳转登录页。 表单都做了严格的校验,并且做了节流,防止用户多次重复提交表单,用户信息将会被存储在vuex中统一管理。登录、注册使用reLaunch跳转,防止用户回到登录、注册页面。 ①登录 支持三种登录方式。微信一键登录、手机号验证码登录、账号密码登录。如果手机号未注册,将会被注册并一键登录。 ②注册 支持用户名密码注册,用户名和密码都做了正则表达式校验,其中用户名:4-16位字母,数字,汉字,下划线 汉字可以两个。密码:最短6位,最长12位 {6,12},[a-z] [A-Z] [0-9] [-_] 不符合规范将不能被提交注册。如果用户名已存在,将会提示用户更换。 ### 3.4.4社区模块 社区模块主要包括:系统通知,收到的赞,回复,私信以及各大学习社区。 1. 系统通知:由系统发送通知给各个用户,了解最新动态。 2. 收到的赞:包括用户的评论,贴子,文章收到的点赞。 3. 回复:包括作者的文章评论和贴子评论的回复。 4. 社区:社区的种类较多,用户可以自己选择进入或加入某社区,进入之后可以查看当前社区中的所有贴子的内容。 5. 私信:其他用户像当前用户联系的方式,在私信中查看消息列表即可了解所有的私信内容,点击一条私信即可进入一个聊天页面,在websocket连接成功之后即可发送消息进行联络。 ### 3.4.5个人中心 个人中心主要功能是查询和完善用户信息,统计学习时长,查看浏览记录,查看,创建和删除收藏夹,查看自己创作的博客文章和贴子,还可以使用错题本进行复习。 1. 完善个人信息:点击头像旁边的“详细信息”选项,进入信息选项页,用户可以根据需要修改自己的信息。 2. 统计学习时长:个人中心会显示记录的在线学习时长,包括单日和每周的学习时间。 3. 浏览记录:主要查看用户浏览过的贴子。 4. 收藏夹:用户可以根据需要创建收藏夹和删除收藏夹。 5. 我的博客:用户可以在此查看自己发表过的所有博客文章。 6. 我的贴子:与“我的博客”模块类似,用户可以在此处查看自己发表过的所有的贴子。 7. 错题本:用户之前练习的过程中添加的错题可以在此查看,若用户已经掌握则可以选择从错题本中移除指定的题目。 8. 设置:主要为用户提供了退出登录的功能。 ### 3.5后台管理系统 ![图 8管理系统](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%2011.png) ### 3.5.1文章管理 后台管理文章管理,对应小程序的文章模块,可以审核文章和查看所有文章,其中实现的功能点:按需分页加载、可自行选择每页的条数、点击切换某一页,上一页,下一页,跳转至某一页。 ①文章审核 用来接收用户提交的文章,管理员将对文章进行审核通过,通过的文章将正式上线江农学习星首页,如图9 ![图 9文章审核](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%2012.png) ②全部文章 可以查看所有已通过的文章,并且可以删除某一篇文章。 ![图 10全部文章](image/%E3%80%8A%E6%B1%9F%E5%86%9C%E5%AD%A6%E4%B9%A0%E6%98%9F%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%E3%80%8B/%E5%9B%BE%E7%89%87%2013.png)