- 博客(33)
- 问答 (1)
- 收藏
- 关注
原创 Netty分布式聊天室 - 语音视频聊天
基于Netty的分布式聊天室的项目到此结束,这只是一个示例项目,还需要丰富一下细节, 但正常的使用已经没有问题了dftdla/NettyChatCloud - 码云 - 开源中国 (gitee.com)
2023-12-05 18:05:50 718
原创 Netty分布式聊天室 - 群聊功能
群聊功能如下:创建群聊、加入群聊、退出群聊、获取群聊成员、在群聊中发送消息基于我们之前对于私聊的完善,实际上群聊功能对于我们目前的系统而言只是crud的重复操作。
2023-12-03 18:07:59 536
原创 Netty分布式聊天室 - 单聊缓存消息优化
前文提到我们的单聊只缓存了一条数据,这只是测试整个流程用的中间状态对于实际的聊天室,这显然是不合理的我们只需要把redis缓存的数据类型改为List,如此一来,不论是什么类型的消息,只需添加到缓存List里就可以,当用户登录上线或消息队列处理数据时,抢夺分布式锁成功后,将缓存的消息返回给用户端即可。
2023-12-02 19:10:30 259
原创 Netty分布式聊天室 - 私聊功能实现
如果直接渲染,实际上为了匹配到数据,我们还需要添加对聊天数据添加一个由前端来生成的唯一值(针对同一个用户即可,可以使用userId + 时间戳的形式),sql数据库中不需要保存,只用于ws服务端和客户端的交互即可,这里可以在message中新增一个tempId,然后在ChatMsg实体类中新增一个同类型tempId即可。如果有一个服务器寻到了,并且数据发送成功,这时候其他服务器不用再执行,那么我们就需要用到redis进行服务间通信,如果服务器发现数据不在redis中,则直接跳出操作。
2023-12-02 16:18:33 555
原创 Netty分布式聊天室 - 登录功能实现
如此一来,后续handler接收到的请求都是合法请求,不需要验证权限,但指令数据是否合法还需判断,如果不嫌麻烦可以对Message添加一个自检方法,在WebSocketHandler这里运行一次自检也可以,我们后续默认指令数据合法。这里有一个登录时拉取消息的问题:对于离线消息,我们存储在Redis中,如果Redis执行淘汰策略,把数据清空了,我们该如何判断离线消息?这里我的思路是:在数据发送时存储数据,缓存离线消息,如果离线消息被删除,则用户通过漫游查询消息(类似微信太久没登陆会导致消息丢失)
2023-12-02 15:28:00 203
原创 Netty与SpringBoot的初步整合
当运行启动类时,我们要异步加载ChatServer.run(),这里使用之前文章提过的初始化接口的方式:CommandLineRunner,重写它的run方法,然后运行ChatServer.run即可,这里将运行方式写为一个接口,方便我们调用接口检查是否执行。以上就是对项目的初步改造,目前已经写完了私聊,剩下的就是业务完善,把思路构思地差不多才来开始做记录,难免会有些细节没有提到,需要了解的同学可以留言或者私信我。右键选择MybatisX-Generator。对于指令处理延用原本的方式,不得不说很巧妙。
2023-12-02 15:03:00 192
原创 监听邮件转发飞书机器人(webhook)
定时执行邮件列表过滤流程,当检测到是未读的告警日志邮件时,将邮件富文本转为普通文本,经过post json方式推送至webhook地址(这里使用飞书机器人)
2023-08-22 16:52:43 1289 1
原创 SpringBoot重启后首次接口请求慢的问题
我们可以配置一个Bean,在服务创建之后请求服务的某个接口,来完成服务的预热。首次请求接口时 响应时间经常会达到 1-2秒。项目上线后影响不大,但解决了总不是坏事。
2023-04-25 22:28:17 1362 1
原创 简单整理SpringCloudAlibaba+SpringSecurity+JWT
各部分的使用请直接按照REDME文档的介绍,League-core中配置的yml文件只作为使用各组件时的配置参考,是不生效的。耗时两星期整理出了这个十分简易的微服务使用项目。
2023-04-01 14:56:52 409
原创 idea半天搭建属于自己的个人博客,支持二次开发,springboot+vue+mysql
一文教你部署一个轻量级博客项目,本项目针对初学者,支持二次开发
2022-11-07 18:09:03 1358
原创 Mysql连接报错1045 springboot yml create connection SQLException errorCode 1045, state 28000
idea打包问题是网上常见的,阿新一直用package打包,对于多模块项目是可行的,但是本博客项目只有一个模块,打包出现了一些问题,换成install就行了,本地正常运行,部署到服务器之后却出现了问题,数据库一直连不上。阿新搜了大半天,各种解决方案五花八门,还是没有解决问题,最后在一篇文章的配置下,大胆尝试了给密码加个引号的重大解决方案,没想到就这么解决了。你永远也不知道bug在哪儿,它或许在你脸上,淦。
2022-11-07 09:07:20 464
原创 博客进入尾声
博客的设计已进入尾声,阿新接下来将优化一下文章显示,添加评论区,丰富一下管理后台,然后项目开源,再深入到后续的学习中,目前用到的还是SpringBoot+MybatisPlus+Vue+Element-Plus+V-md-editor,整理了一下他们的使用方法后,很多地方受益匪浅,有些解决方案可以直接用在开发中充实自己,大步向前。
2022-11-04 14:45:44 285
原创 v-md-editor插入本地图片
v-md-editor并没有给我们实现在editor中插入本地图片,这需要我们自己手动实现,最近两天考虑多种情况,还是决定采取很经典的解决方案:在数据库存储图片的从属关系以及其保存路径和图片名称,然后通过访问后端服务器来获取图片,这两天都在折腾其他事情,今天才来得及解决,下面是具体实施:首先我们结合官方文档说明来思考方案。
2022-10-28 15:30:15 1943
原创 关于引入MD编辑器的前后端方案
这里需要注意的是pojo文件对应的Article的time数据类型应是LocalDateTime,否则在更改数据时会报错,其次label的使用方式应为“多个标签集中”如:"标签1 标签2",以某种符号连接起来(这里使用空格)到此为止,有关个人博客的比较棘手的问题已经解决一半了,在前端的布局与路由调整之后,下面的重点就是评论区、后台管理,主题与背景图等需要审美的东西,就在本项目开源后留给各位小伙伴了。早上看了很多不同的编辑器,最后选择了这个比较简单便捷的。使用方法很简单,具体请看我的这篇博客。
2022-10-25 16:44:46 920
原创 前端全局方式与后端SQL冲突
自定义的错误处理可以像下面被注释掉的代码一样,我们可以通过getMessage获取错误信息的字符串,以此判断错误类型并做出反馈,错误CODE要遵守result包下的CODE类哈,全局SQL冲突处理设置之后,我们注册用户的代码可以非常简洁。首先解决前端方面的全局方法挂载,这里阿新使用了插件的方式为vue添加了一个全局混入,后端SQL使用了全局SQL错误处理的方式进行解决。public int setByUser(User user) {//service层 返回insert新增数据的id。
2022-10-24 12:15:13 536
原创 个人博客前后端设计
前后端分离项目最核心的问题就是跨域访问以及数据交互问题,因此继博客BGM之后,阿新决定先搭建好后端项目的框架,目前仅使用了SpringBoot和MybatisPlus,导入了redis的坐标,后续需要用到其他jar包会继续在博客中更新。只创建了一个user表,目前先把登录测试成功即可,至于项目的配置文件和坐标就不在此赘述了,下面是部分代码仅供参考。在vue.config.js中添加如下配置,解释:'/api/user'会将地址重写为'host/user'虽然只是我的一小步,但是项目的一大步!
2022-10-23 17:34:37 306
原创 关于博客的音频BGM
在网上找了很久没有找到合适又简单的,逛网易云的时候发现它有个外链播放器,复制一下链接就能用,很方便。不太会用的同学可以访问一下我的博客文章。
2022-10-22 18:00:57 533
原创 No converter for [class XXX] with preset Content-Type ‘null‘
这玩意是真坑,Junit测试的时候要注释掉才能测试service,在Tomcat上部署时得打开才行。在网上找了半天都没解决,最后才发现是springMvc配置类。@EnableWebMvc这个注解被我注释掉了。
2022-08-08 11:52:56 1599
原创 AcWing 4398. 查询字符串
不得不说,本周的周赛都比较简单,第三题和第二题不太符合它的难度定级。这题我们可以用哈希表unordered_map来解决,做法很简单,只需把每个字符串的字串全部遍历一遍,然后给哈希表对应的值增一就行了,需要注意的只有一点,每个字符串的字串可能会有重复,我们需要加一个去重操作,如此一来,一个困难级的问题就解决了。
2022-04-10 19:04:41 203
原创 AcWing 4397. 卡牌
本题相比于其他周赛第二题是简单得多的,就是开个数组存储卡牌正反面的数之差,然后排一下序就行了。我采取的是反面减去正面,如果是负值则说明反面的值可以让总数值变小,反之则变大。在录入正面数值的时候,将正面数值依次加入到res(答案)中,然后再加上上述存储差值数组中的负值即可(同时我们要保证正面的牌数量至少有k张)
2022-04-10 16:30:07 368
原创 蓝桥杯 砝码称重(dp)
每个砝码我们都可以选择取或不取,是放在左边还是右边,首先我第一时间想到的是状态压缩,但是N太大了,数组开不出来,所以就用dp做了开一个布尔类型数组,其所代表的意义是:dp[i]=1,目前输入进来是砝码可以组合成重量i其状态变化为:a为本次输入的砝码重量;dp[a]=1;dp[a+i]=1;dp[a-i]=1;//与下面i-a取一个即可dp[i-a]=1;
2022-04-07 19:55:56 655
原创 AcWing 1904. 奶牛慢跑
题目并不难,我们只需要录入一下每头牛的信息,然后从坐标最大的牛开始操作,后面的牛如果速度比前面的牛快,那就把后面的牛的信息删除掉(因为他们最终会变成一个点),如果和前面的牛的速度一样或速度小于前牛,则保留,最终返回数组大小即可 一开始会想到用pair<int,int>,但是数据比较大,这样写会超时
2022-03-25 16:30:52 117
原创 AcWing 1913. 公平摄影
题目农夫约翰的NN头奶牛站在一维长围栏的不同位置。第ii头牛位于位置xixi,其所属品种为bibi(根西岛牛或荷斯坦牛)。所有奶牛的位置各不相同。约翰想给一段连续区间内的奶牛拍摄一张照片,用来在乡村集市上展览。但是我们希望他所有品种的奶牛都能在照片中得到公平的展示。因此,他希望确保无论照片中出现哪些品种的奶牛,每种品种的奶牛在照片中的数量都必须相等。例如,一张照片中只包含荷斯坦牛是可以的,包含荷斯坦牛和根西岛牛各2727头也没问题,但是包含1010头荷斯坦牛和...
2022-03-25 15:51:39 222
原创 AcWing 1922. 懒惰的牛
x的最大取值是1e6,开数组的话会导致内存过大,那就开个map,省事多了贝茜只能吃到离自己k距离草地中的草,那我们可以把这个范围看做一个滑动窗口,窗口的容量为2*k+1,而窗口中最大的坐标减去最小的坐标值应该小于2*k,即Xmax-Xmin<=2*k,每次只计算窗口内的青草数量,然后跟目前最大青草数做比较,最后即可得出答案AcWing 难度评定为:简单
2022-03-24 19:10:49 144
原创 AcWing 1929. 镜子田地
贝茜可以从任何角度(水平或垂直)发射激光,那我们就对数组的四条边分别搜索一遍,用一个变量储存最大折射次数,AcWing给的难度是中等,但实际上是比较简单,话不多说,直接上代码
2022-03-24 18:04:52 416
原创 ZZNUOJ 1230 : 亚里士多德的麦穗 C++
题目描述径直经过一片麦田,不能回头,选出你认为最大的麦穗,但是当你选择一个麦穗后,就不能选第二次。现在 surfacedust 准备经历一次亚里士多德老师很久以前给出的难题,surfacedust 有一个标准来评判这个麦穗是不是足够好。如果一个麦穗达到这个标准分,就认为这是他要选择的那个。 输入每组实例三行,第一行是surfacedust的标准分,第二行为一个整数N(N < 100000),第三行是N个整数,依次表示了每个麦穗的分数。 输出surfacedust需要
2021-07-14 08:10:37 472
Java 课程设计 高校公寓管理系统
2023-04-26
Java 登录注册案例实例
2023-04-26
Java 学生籍贯信息.txt
2023-04-26
Java小学计算题课程设计.txt
2023-04-26
Java 课程设计 万年历程序设计.zip
2023-04-26
C++ 课程设计 对称黑白棋.zip
2023-04-24
C++实现对称黑白棋.zip
2023-04-24
Java 课设 干洗店管理系统.zip
2023-04-24
C++实现时间显示.zip
2023-04-24
C++实现图形管理.zip
2023-04-24
C++书架书籍管理.zip
2023-04-24
大数运算、单词统计、集合运算、几何运算、矩阵运算、日期运算
2023-04-09
二叉树查关键值.cpp
2023-04-09
ThingsBoard 3.4.4源码部署从零到落地
2023-04-05
素数、二维数组键入、奇数存入二进制、读取文件数据
2023-04-03
C++实现大数运算,以字符形式进行数据运算
2023-04-03
C++实现书籍管理,以file格式存储信息
2023-04-03
Java小白,搞不清楚为什么运行不了😷
2021-04-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人