自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 【 基于Netty实现聊天室聊天业务学习】第4节.什么是BIO与NIO

IO在读写的时候是阻塞的,无法做其他操作,并发处理能力的非常低,线程之间访问资源通信时候也是非常耗时久,依赖我们的网速,带宽。我们看一下他的白话原理。我们看一下他的白话原理。

2024-04-19 15:59:31 705

原创 【 基于Netty实现聊天室聊天业务学习】第3节.阻塞和非阻塞、同步和异步的概念

2024-04-19 11:05:34 113

原创 【 基于Netty实现聊天室聊天业务学习】第2节.Netty初次见面

Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients.翻译:Netty是一种异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。

2024-04-19 10:59:57 1095

原创 【 基于Netty实现聊天室聊天业务学习】第1节.本章概述

阻塞和非阻塞、同步和异步的概念BIO\NIO\AIONetty 三种线程模型构建Netty的HTTP服务器Netty的生命周期WebSocket初始化器initialzer与处理器handler聊天会话管理心跳机制同账户多端设备消息同步消息收发 - 文字表情图片视频语音简历面试百度智能AI语音识别面试邀约发送详情数值统计聊天消息异步存储架构聊天消息存储与展示未读消息数字统计显示语音未读已读标记签收

2024-04-19 09:56:22 126

原创 【Mybaties-Plus】如何使用 Wrapper 自定义SQL;返回结果赋值封装VO对象?

需要版本 >=3.0.7param 参数名要么叫ew,要么加上注解使用不支持Wrapper内的entity生成where语句。

2024-04-18 08:56:04 559

原创 【Java业务需求解决方案】三级分类树实现代码

以下代码只是提供思路,仅参考。

2024-04-16 17:56:39 238

原创 【Java异常解决】使用copyProperties()复制时Boolean类型的一直无法复制

原因:使用copyProperties()复制时Boolean类型的一直无法复制分析:对于Boolean类型的数据, @Data给到的get方法名默认为isSex而不是getSex,而copyProperties()Boolea类型的getXxx()可以使用,如果方法是isXxx()就只有boolean可以。属性名不要用isXXX命名了解决办法:手动添加get方法,覆盖掉@Data注解的方法如果is开通,生成的时候is会去掉。

2024-04-16 11:07:16 402

原创 【设计】Mysql 设置boolean类型的操作,MySQL保存Boolean值时,用1代表TRUE,0代表FALSE,boolean类型在MySQL里的类型为tinyint(1)

MySQL保存Boolean值时,用1代表TRUE,0代表FALSE,boolean类型在MySQL里的类型为tinyint(1)。

2024-04-15 16:47:43 1276

原创 【Mybatis-Plus】Mybatis-Plus增删改查示例

这个删除,是我们直接可以把这条记录给放进去,那么这条记录里面如果说有的属性为空的话,它是不会去管的,但是有些属性它不为空的话,那么它就会根据属性。作为一个equal的条件去做一个删除的一个操作。这个表有vlog_id ,user_id ,id。

2024-04-12 15:25:34 563

原创 【Mybatis-Plus】如何整合MybatisPlus与四种主键模式

那么,其次,第二点,如果说我们要去自己去实现我们的一个业务的话,那么在这边它可能就显得不太的灵活,因为往往我们要去继承自己的。一些相应的父类吧,如果说我们要去自己制成自己的,但是这边又已经是继承了I service的话,那么我们的这个可扩展性就比较降低了,甚至说我们可能要去额外的去啊,实现其他的一些接口。如果说项目比较小的话,你使用UIDD没有没有关系,如果说考虑到未来,那么这个UIDD肯定不能够去使用的,所以不同的场景啊,那么肯定是使用不同的一种方式,使用不同的策略。

2024-04-10 08:55:49 1138

原创 【MySql】MySQL中修改自增列的初始值

通过本文的介绍,我们了解到了如何使用ALTER TABLE语句来修改MySQL表的自增列的初始值。修改自增列的初始值可以灵活地调整自增列的起始值,适应不同的需求。但是需要注意的是,修改自增列的初始值只对后续插入的新记录生效,对已存在的记录没有影响,并且要避免与已有数据的自增列值冲突。

2024-04-09 10:55:07 771

原创 【JAVA基础】Java中i++和++i的区别

i++和++i 都是自增运算,本质上都是+1操作,不同点在于赋值和运算的顺序有所不同;如果i++,++i不是一条单独的语句,他们就有区别。++在前先运算,++在后先赋值;++i : 先增1后运算。i++ :先运算后增1。其实只要记住一条铁律。

2024-04-08 09:45:00 382

原创 【Java业务需求解决方案】分布式锁应用详情,多种方案选择,轻松解决,手把手操作(非全数字编码依次加一问题)

这种方案能解决方案一的原子性问题,但是依然会存在很大的问题,如下所示:1、时钟不同步:如果不同的节点的系统时钟不同步,可能导致锁的过期时间计算不准确。解决方案:使用相对时间而非绝对时间,或者使用时钟同步工具确保系统时钟同步。2、死锁:在某些情况下,可能出现死锁,例如由于网络问题导致锁的释放操作未能执行。解决方案:使用带有超时和重试的锁获取和释放机制,确保在一定时间内能够正常操作。

2024-04-07 15:21:36 1476

原创 【设计】枚举的应用

用于提供给返回给前端的,本枚举类中包含了很多的不同的状态码供使用,可以自定义便于更优雅的对状态码进行管理,一目了然。

2024-04-03 14:08:58 324

原创 【Mybatis-Plus】Mybatis-Plus数据库字段更新操作之更新策略

我在yml中并没有配置这一参数,所以我的配置是默认的策略是NOT NULL,也就是说如果参数是空字符串则会进行更新保存。而默认更新策略是NOT NULL:非 NULL;也就是通过接口更新数据时数据为NULL值时将不更新进数据库。测试用户信息修改,你会发现空字段会被覆盖。这是因为mp的更新策略导致的。我们需要进行配置修改。

2024-04-02 17:17:19 923

原创 【设计】6种ID生成策略描述,优点 ,缺点 ,适用场景

全局唯一,绝对不会出现重复的ID,且ID整体趋势递增。高可用,服务完全基于分布式架构,即使MySQL宕机,也能容忍一段时间的数据库不可用。高并发低延时,在CentOS 4C8G的虚拟机上,远程调用QPS可达5W+,TP99在1ms内。接入简单,直接通过公司RPC服务或者HTTP调用即可接入。

2024-04-01 09:09:17 1532

原创 【SpringMVC】关于springmvc开发中出现的问题

Controller 主要用于处理传统的 HTML 表单提交和页面跳转等请求,而 @RestController 则主要用于处理 RESTful 风格的请求,并将数据以 JSON 或 XML 等格式返回给客户端。问题描述:接口使用了@PostMapping,使用aoipost调用接口,走进了接口,相关代码逻辑也都执行完,返回结国报404。解决办法:将@Controller换成@RestController。问题原因:controller层使了使用@Controller。

2024-03-22 14:39:08 430

原创 【Mybatis-Plus】关于使用mybaties-plus出现的问题

我采用的是第四种,将LocalDateTime修改为java.util.Date.刚开始将vo类中的LocalDateTime修改为Date,依然报Error attempting to get column ‘create_time’ from result set. Cause: java.sql.SQLFeatureNotSupported.后来又将与数据库一一对应的实体类中LocalDateTime修改为Date,问题解决了。

2024-03-20 09:17:05 1260

原创 【Hibernate-Validate】常用注解

常用注解:

2024-03-13 16:54:30 383

原创 【java功能大全】1.手机短信验证码一键注册登录流程(redis存储证码+redis锁机制限制ip发短信+拦截器限制60秒短信发送+封装优雅异常+Hibernate-Validate校验)

1.点击按钮(获得验证码)2.设置:60秒内只能获得一次验证码3.设置:验证码有效时间(5分钟/15分钟/30分钟)4.发送验证码到手机。

2024-03-12 13:18:37 2262

原创 【Docker】推送Docker镜像到云仓库

它往往要去使用一些vpn装置才可以,那么对于这样的一种环境来讲的话,我们是比较适用于save。或者export也可以,就是烦一些,那么通过一个tar包,然后呢啊打包,然后再放进去,让它去做一个加载,那么这种方式去安装一些,、中间件、是比较合适.那么这个其实因为很多软件都是从这个外网去下载的那么实在是不方便,那么当我们使用这种方式的话呢,其实我们就可以直接通过插U盘的方式。把这个tar包去进行一个加载就可以了,那么当然我们这节课所讲的这个push呢,其实就是比较适用于一些云环境,而且这也是一个主流的环境啊,

2024-03-06 00:11:47 497

原创 【Docker】提交Docker镜像改变(自定义Redis镜像)

我们平时使用镜像,会做一些自定义,比如配置文件的修改,数据的增删改等等有很多,如果下次还是要部署,那么又得再来一遍。所以我们完全可以保留曾经的配置,把这些已经更改的容器内容作为一个属于自己的全新容器。又或者说,可以把这个作为当时的一个快照,记录下来。你会发现,这里多了一个none,这个none是上一个提交的commit,当前的提交会覆盖上一个镜像。那么上一个镜像就会变成一个无用的镜像了,称之为 游离镜像。假设我又操作了上一个commit操作,这是会发生什么?把容器的的改变,提交创建为一个全新的镜像。

2024-03-05 22:46:33 415

原创 【Redis】Redis持久化模式AOF

如果说用户对redis的写操作不多甚至没有,95%以上都是读操作,那么用rdb也没啥问题,我们有一个项目是采用的缓存预热方式,用户几乎没有写操作,所以直接采用RDB就够用了,因为哪怕redis挂了,甚至RDB没了,数据还是能通过预热重新载入。AOF重写,redis会把当前所有的数据以rdb形式存入到aof中,这都是二进制数据,数据量小,随后新的数据以aof形式追加到这个aof中,那么这个aof中包含两种文件类型数据,一个是rdb,一个是aof,那么恢复的时候redis会同时恢复,这样恢复过程会更快。

2024-03-05 11:12:17 868

原创 【Redis】Redis持久化模式RDB

上图中,Redis会备份RDB到磁盘,那么备份到磁盘的过程是会耗时的,内存中redis的数据越多越大,比如8g内存中有4g都是redis数据,那么在备份到磁盘的时候会有传输过程,有一定的时间损耗,可能几十秒也有可能1分钟多,这个RDB快照并不是瞬间产生的。不论是开发游戏还是普通的项目,肯定会有维护期,那么在维护期的时候,就会用到save,直接阻塞,不让新的数据写入,游戏项目是最常见的,直接停服了,所有玩家等着新版本上线后才能重新进。*由于定时全量备份是重量级操作,所以对于实时备份的业务场景,就不适用了。

2024-03-04 16:46:12 1676 1

原创 【Docker】如何在Docker上安装运行redis?

进入容器内部:docker exec -it redis bash,运行redis-cli,可以再任意目录输入redis-cli进入,补充:ctrl+d 退出容器内控制台,whereis redis-cli cli所在位置。查看镜像 docker images,并启动docker中redis,脚本命令如下。创建redis核心配置文件所在的目录:mkdir redis6/conf -p。拉取镜像:docker pull redis:6.2.7。容器应会随着虚拟机,云服务器重启而重启。

2024-03-01 09:14:31 308

原创 【Docker】5.生成环境不建议Docker部署mysql

(需要注意,这里说的是频繁,而不是少数情况,少数情况做扩容优化是有的,次数不多)3.数据库无法对资源进行独立专享,当使用docker以后,还有其他的容器实 例,比如redis,mq等等,这个时候大家都会一起使用内存,可能发生内存争抢(当然我们也可以通过设置去限定内存使用),所以数据库也有可能不能被分配到更多的内存,无法做到对服务器内存的独占,可能导致一定的性能影响。,直接采购,技术零风险,高可用高并发高性能,也支持动态弹性扩缩容,运维也成本相当低,这是我们目前所采用的方案,当然,唯一的缺点。

2024-02-28 15:31:40 473

原创 【Docker】4.docker进入容器命令(配置MySQL8为例)

exec进入容器内部,-it是进行交互模式,bash是命令行。就可以进行mysql命令窗口进行操作mysql。

2024-02-28 15:01:33 423

原创 【Docker】3.docker操作容器命令(运行mysql8为例)

如果不开启后面会报错。云服务器不需要设置,部分centos需要设置,可以检测一下是否设置,如果没有则修改配置文件并添加 net.ipv4.ip_forward=1添加标红代码。一旦修改的与网络相关的东西,需要重启相关服务,重启依赖于网络的docker。

2024-02-28 14:04:46 594

原创 【Docker】1.容器和镜像的区别

【代码】【Docker】容器和镜像的区别。

2024-02-28 12:56:31 166

原创 【Docker】2.docker操作镜像命令(下载mysql为例)

此网站镜像命令只有一个,默认的最新版本latest,可指定版本tag,想看更多可找代替网址。下载指定版本镜像:docker pull xx:tag,tag为版本号。此版本会下载最新版本的mysql,以下操作会下载指定版本的mysql。镜像mysql最新版本的标识,但不一定mysql是最新版本的。获取镜像的详细信息,包括制作者、适应架构、各层的数字摘要等。命令1|命令2,管道符,左边的结果是右边的输入条件或命令。移除镜像: docker rmi 镜像id。下载镜像:docker pull xx。

2024-02-28 11:44:59 522

原创 【Redis】4.什么是缓存雪崩 ? 怎么解决 ?

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。

2024-02-19 09:44:33 314 1

原创 【Redis】3.什么是缓存击穿 ? 怎么解决 ?

缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。

2024-02-06 10:26:31 489 1

原创 【MySql业务问题解决】批量插入遇到重复数据报错,解决批量插入失效(ON DUPLICATE KEY UPDATE)

表名:items_values表字段:item_id,yijdw,erjdw,sanjdw,item_value,collect_per,update_time唯一索引:item_id,yijdw,erjdw,sanjdw,collect_per。

2024-02-04 17:12:39 857 1

原创 【MyBaties-Plus】mybaties-plus时间比较(大于,小于,大于等于,小于等于)

【代码】【MyBaties-Plus】mybaties-plus时间比较(大于,小于,大于等于,小于等于)

2024-01-30 12:35:33 4170 1

原创 【Redis】2.你能介绍一下布隆过滤器吗?

布隆过滤器能够实现使用较少的空间来高效判断一个指定的元素是否包含在一个集合中布隆过滤器并不保存这些数据,所以只能判断是否存在,而并不能取出该元素使用情景:凡是判断一个元素是否在一个集合中的操作,都可以使用它布隆过滤器常见使用场景idea中编写代码,一个单词是否包含在正确拼写的词库中(拼写不正确划绿线的提示)公安系统,根据身份证号\人脸信息,判断该人是否在追逃名单中爬虫检查一个网址是否被爬取过......

2024-01-29 17:30:26 887

原创 【Linux】Docker安装Redis之布隆过滤器

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker。如果是以上错误,说明SELinux不支持此内核上的overlay2图形驱动程序,将selinux禁用即可。然后再次启动Dcoker即可,如果还是无法启动,可以考虑升级CentOs内核版本。不输入密码会报错误:NOAUTH Authentication required.systemctl start docker启动docker,并验证版本。注意:启动如果报以下错误。

2024-01-29 09:58:27 530

原创 【Redis】1.什么是缓存穿透 ? 怎么解决 ? 什么是布隆过滤器 ?

布隆过滤器能够实现使用较少的空间来高效判断一个指定的元素是否包含在一个集合中布隆过滤器并不保存这些数据,所以只能判断是否存在,而并不能取出该元素使用情景:凡是判断一个元素是否在一个集合中的操作,都可以使用它布隆过滤器常见使用场景idea中编写代码,一个单词是否包含在正确拼写的词库中(拼写不正确划绿线的提示)公安系统,根据身份证号\人脸信息,判断该人是否在追逃名单中爬虫检查一个网址是否被爬取过......

2024-01-26 19:36:23 1039 1

原创 【redis面试题】高频redis面试题

候选人嗯~~,我想一下缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用布隆过滤器来解决它2.面试官候选人嗯,是这样~布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。

2024-01-17 13:53:33 919

原创 【MySQL面试题】myql优化及其他面试题

候选人:嗯,这个比较清楚,ACID,分别指的是: 原子性、一致性、隔离性、持久性:我举个例子A向B转账500,转账成功,A扣除500元,B增加500元,原子操作体现在要么都成功,要么都失败在转账的过程中,数据要一致,A扣除了500,B必须增加500在转账的过程中,隔离性体现在A像B转账,不能受其他事务干扰在转账的过程中,持久性体现在事务提交后,要把数据持久化(可以说是落盘操作)在随后的查询中,第一个事务(T1)就会发现多了些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。

2024-01-16 14:10:39 1555 3

java开发规范华山,泰山,嵩山,黄山;google java 开发规范;Effective Java(中文版

java开发规范华山,泰山,嵩山,黄山;google java 开发规范;Effective Java(中文版

2024-08-08

redisson中lock()源码理解思维导图

redisson中lock()源码理解思维导图

2024-08-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除