创新实训(33)——有关前后端交互的优化以及后端错误的处理

前言

今天下午克隆了一个前端项目,然后在本地运行了一下,与本地的后端接口进行了一系列的测试,发现了一些体验不好的问题,有的地方还有一些报错,所以集中来处理一下,提高一下用户的体验。
在这里插入图片描述

使用协同过滤算法,进行文章推荐的问题

(1)在为用户进行基于协同过滤的推荐时,由于要获取用户的数据,才能进行个性化推荐,而对于没有登陆的游客来说,或者一个没有进行浏览的用户来说,这个部分的显示却是空的。
如下图,猜你喜欢部分,显示为空:
在这里插入图片描述
对应后端报错:显示获取不到用户的登陆信息,有关token的获取出错,由于用户没有登陆,所以没有token,而这个接口是需要有token的用户才能获取的。
在这里插入图片描述
解决方案:
所以对于未登陆的用户,由于没有token,

在这里插入图片描述
由于@RequestAttribute注解的参数,默认是不能为空的,否则系统会抛出异常,它也有一个required配置项,只需要设置它为false,参数就可以为空了:
在这里插入图片描述
这样就可以在未登陆得时候随即返回参数了。
(2)协同过滤的推荐算法,速度太慢,获取一个列表,20条博客,往往需要5s左右,体验太差。
查看后端源代码,由于我对协同过滤算法使用到的数据已经进行了定时的物化,每20分钟就会物化一次用户的浏览记录到本地的csv中
在这里插入图片描述
但是发现,在进行协同过滤时,每个用户获取列表,都需要读取这两个csv文件,并且调用相应的相似度计算方法,计算皮尔逊相似度。
在这里插入图片描述
这里面存在着大量的重复性的工作。所以想着使用缓存机制,在定时抽取到csv文件后,都将模型加载到内存中,并且计算出相似度矩阵,等到协同过滤推荐的使用

这里我试用了以下的方法
在这里插入图片描述
参考与:https://www.jianshu.com/p/08973c447c55

这个注解会在项目初始化时,执行下面的方法。
实现:


    //定时的初始化
    @PostConstruct
    public void postConstruct() throws IOException, TasteException {
        userCategoryDataModel = new FileDataModel(new File(USER_CATEGORY_MODEL_FILE_NAME));
        userTagDataModel = new FileDataModel(new File(USER_TAG_MODEL_FILE_NAME));
        userCategoryUserSimilarity = new PearsonCorrelationSimilarity(userCategoryDataModel);
        userCategoryItemSimilarity = new PearsonCorrelationSimilarity(userCategoryDataModel);
        userTagUserSimilarity =new PearsonCorrelationSimilarity(userTagDataModel);
        userTagItemSimilarity = new PearsonCorrelationSimilarity(userTagDataModel);
        System.out.println("模型初始化完成");
    }

在这里插入图片描述
这样处理以后,推荐的效率快了许多。

访问时下流行界面的问题

热榜出现问题
在这里插入图片描述
在这里插入图片描述
未解决,不知道哪里的问题

协同过滤推荐模块Mahout,回因为新注册用户,没有用户的浏览记录而出错

在这里插入图片描述
在这里插入图片描述
解决方案:
在后端加入try catch ,捕获这个错误,如果有这个错误就随机返回文章
在这里插入图片描述

获取订阅列表时,服务器出错

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
应该是sql出错了,检查一下
在这里插入图片描述
发现是,传入的tagIdList如果为空,则sql会执行报错,所以加一层判断,如果tagIdList为空,则返回空
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值