- 博客(62)
- 资源 (2)
- 收藏
- 关注

原创 ConcurrentHashMap原理详解(太细了)
和HashMap一样,是一个存放键值对的容器。使用hash算法来获取值的地址,因此时间复杂度是O(1)。查询非常快。同时,是线程安全的HashMap。专门用于多线程环境。做插入操作时,首先进入乐观锁,然后,在乐观锁中判断容器是否初始化,如果没初始化则初始化容器,如果已经初始化,则判断该hash位置的节点是否为空,如果为空,则通过CAS操作进行插入。如果该节点不为空,再判断容器是否在扩容中,如果在扩容,则帮助其扩容。如果没有扩容,则进行最后一步,先加锁,然后找到hash。......
2022-07-31 23:43:35
72208
38

原创 字符集详解(学习,看一篇就够了)
本文致力于一篇文章就可以让初学者对字符集编码有一个全面的认识,为将来开发项目充实其理论基础,为解决BUG提供思路。
2018-11-11 17:25:14
41137
31
原创 MySQL数据库中的行锁
最近在阅读《MySQL技术内幕 InnoDB存储引擎》一文,发现文中对InnoDB中锁的描述和网上大多数博客相差甚远,因此查阅了大量资料,结合实际测试后,写下了这篇文章。如有不同看法,欢迎在评论区留言讨论。
2025-03-16 15:59:52
727
原创 MySQL中的B+树索引经验总结
B+树是一种二叉树,由二叉查找树,平衡二叉树,B树演化而来。请看上图B+树的特点:1)非叶子节点不存放数据,只存放键值,数据都存放在叶子节点中。2)叶子节点都在同一层,且数据都是从左到右顺序存储的。左叶子节点的索引键值一定小于其根节点的键值,右叶子节点索引键值一定大于其根节点的键值。3)叶子节点之间通过链表指针关联,使得范围查找更加快速,因为可以从一个叶子节点直接遍历到另一个叶子节点。
2025-03-13 20:25:38
233
原创 MySQL数据库CPU使用率接近100%问题排查经验总结
当数据库CPU使用率靠近100%时,会导致数据库无法迅速处理客户端发起的请求,导致请求超时,业务无法正常进行等问题,因此当数据库发生告警时,需要及时排查和解决问题。本文记录发生该问题的一些排查经验。
2025-03-02 14:58:39
427
原创 云服务器安装RocketMQ教程
有两个下载链接,一种是source,一种是二进制文件。选二进制文件就可以了。都是zip文件,下载后发送到linux上,使用unzip命令解压。一个Group下的所有消费者的消费逻辑必须一致,就是说,一个Group下消费的Tag属性必须一样,否则会导致消费失败。依赖于jdk1.8以上,因此,需要先安装jdk。启动前需要去更改配置文件,因为RocketMQ默认分配的内存过大,会导致启动失败。使用以下代码下载并安装jdk1.8,无需配置,下载完成后可直接使用。nohup启动,sh管理员权限,&后台运行。
2025-01-12 11:08:52
907
原创 Seata 报错 can not get cluster name in registry config ‘service.vgroupMapping.default_tx_group‘
Seata1.4.2之后,支持从一个 Nacos dataId 中获取所有配置信息。只需要配置一个dataId =Seata客户端的yml中配置了注册中心和配置中心,也在配置中心里添加了配置,但依旧提示。因此需要在Seata客户端的yml里配置Nacos的dataId。Seata版本:1.6.1(该解决方案适用1.4.2以上版本)但Seata客户端却不会默认读取这个dataId =在官方文档中也找到了相同的说明。重新启动客户端,不再提示。
2024-06-24 11:11:09
1856
原创 使用ElasticJob时报错:OperationTimeoutException: KeeperErrorCode = OperationTimeout
最近在搭建ElasticJob使用环境时发现一个报错,提示zookeeper连接失败。明明yml里配置的zookeeper地址是正确的,但就是连不上。查阅相关文档和各种尝试后终于找到了问题原因。原来是因为默认连接zookeeper的时间太短了,zookeeper还没响应这边就提示报错。加上重试的间隔时间配置后,重启项目就可以正常启动了。以下是本例使用的依赖版本。
2024-04-27 11:14:02
849
5
原创 最新版阿里云Linux CentOS7 ecs-user用户安装Mysql8详细教程(超简单)
经过两天的踩坑后,终于成功安装mysql,并找到了最快捷的安装方式。接下来就由我来给大家介绍不踩坑安装大法!
2024-02-28 10:29:51
935
原创 MybatisPlusAutoGenerator代码自动生成器详解(新)
本文给大家介绍新版MybatisPlusAutoGenerator代码自动生成器的使用方式。
2024-01-28 21:14:12
4073
1
原创 逻辑删除和唯一索引冲突的解决方案
最近碰到这个问题,需要加一个唯一约束保证数据库数据的唯一性,但突然发现逻辑删除会和唯一约束发生冲突。查阅相关资料后,也得到了一些解决方案。这里就给出我认为的标准答案吧。
2023-04-07 16:12:43
1378
2
原创 Idea中配置的settings.xml文件未生效
文件一直不生效,一直去我没有配置过的maven仓库里下载依赖。Idea中多次更新配置也未生效。文件的话,Maven会无视Idea中的配置,去使用默认。所以多配置文件的情况下,记得不要有名字叫。因此新的项目更新了配置文件的名称,叫。3.最后才是idea界面里开发手动指定的。最近做项目开发时,Maven配置的。最后查了不少资料,才找到问题所在。Maven读取配置文件的顺序是。Maven的配置文件的优先级。我因为有多个项目,用不同的。
2023-04-05 14:07:02
1567
原创 Java生成二维码的两种方法
自定义工具包就是借助google生成二维码的依赖包,然后自己写工具类。-- 生成二维码核心组件 --> < dependency > < groupId > com.google.zxing < artifactId > core < version > 3.4.1
2023-04-02 17:17:21
7292
原创 Linux系统安装jdk1.8
使用该命令的话,无需下载任何安装包,就可以将Windows上的文件上传到指定地址的系统里,当然包括Linux系统,非常好用。文件只是单纯将文件压缩打包,相当于一个压缩文件,具有通用性,解压完就是一个文件夹。回车后会让你输入该用户名对应的密码。,是由Redhat公司开发的一种软件包管理机制。因为下载需要注册账号,这里提供一个百度云链接。scp [参数] [原路径] [目标路径]进入你上传的路径,找到你的压缩文件。进入编辑状态,在文件末尾加上如下配置。命令来完成安装包的安装和卸载。跳转到/usr/local。
2023-04-01 12:53:27
2610
1
原创 Mybatis使用拦截器添加参数
Mybatis拦截器是mybatis提供的一套接口,用于拦截mabatis访问数据库时的行为,并允许我们在拦截中,添加自己需要的自定义操作。
2022-08-18 10:24:23
9657
2
原创 ThreadPoolExecutor线程池原理(太细了)
ThreadPoolExecutor是一个线程池,最多可使用7个参数来控制线程池的生成。使用线程池可以避免创建和销毁线程的资源损耗,提高响应速度,并且可以管理线程池中线程的数量和状态等等。阿里巴巴手册中也推荐使用该线程池,因为Executors创建缓存线程池时,最大线程数是,可能导致堆栈溢出。而且使用ThreadPoolExecutor创建线程池可以让开发者更好理解线程池原理。...
2022-07-30 12:52:15
655
原创 如何保证Redis和数据库的一致性
在使用Redis中,我们都会遇到同样的问题,当一个请求要更新数据库时,Redis缓存显然也要被更新。我们必须要保证两者的一致性。而数据库和Redis是两个不同的进程,很难保证两个进程更新都一定能完成,一旦其中一个失败,或延时过长,就可能导致两者数据不一致,因而导致程序出错。因此保证两者一致性变了值得讨论的话题。首先数据库和缓存显然都是要更新的,那么无非就是顺序问题,那么就是一下两种情况。关于两者更新的顺序,显然只能选A不能选B。为什么呢?数据库和缓存其实是类似主从的概念,我们要明白,缓存是跟着数据库变
2022-07-10 14:30:26
2418
原创 Redis的持久化详解
Redis的持久化1、RDB持久化RDB持久化是Redis默认使用的持久化功能,该功能可以创建出一个经过压缩的二进制文件,其中包含了服务器在各个数据库中存储的键值对数据等信息。RDB持久化产生的文件都以.rdb后缀结尾,其中rdb代表Redis DataBaseSAVESAVE阻塞服务器并创建RDB文件BGSAVEBGSAVE以非阻塞方式创建RDB文件SAVE用户除了可以使用SAVE命令和BGSAVE命令手动创建RDB文件之外,还可以通过设置save选项,让Redis服务器在满足指定条件
2022-07-04 18:28:19
745
原创 为什么和线程有关的方法会被封装在Object类中
回答这个问题之前,首先我们要知道哪些和线程有关的方法被封装在类中。唤醒一个在此对象监视器上等待的线程。被唤醒的线程是随机的,不确定的。唤醒在该对象上等待的所有线程。之后这些线程会重新获取该对象的锁,最终只有一个对象能获取锁。让当前线程进入等待状态。直到其他线程调用此对象的 方法或 方法。让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 方法或 方法,或者超过参数 设置的超时时间。果 参数为 0,则不会超时,会一直进行等待,类似于 方法。与 方法类似,多了一个 参数,这个参数表示
2022-07-04 17:34:30
326
原创 WPF TextBox的剪切功能失效,但可以粘贴
最近碰到用户反映一个问题,说程序里的TextBox的剪切功能不好使了。按下Ctrl+X后,程序会卡顿一会,然后内容没有被删除,但确实被复制到剪贴板中,可以粘贴。这个问题不常见,找了很多地方终于找到有人也遇到类似的问题。先说结论吧,这是WPF自身的bug。TextBox有可能受其他程序的剪贴板影响,执行剪切功能失败,导致WPF跳过了删除的逻辑。那么其他程序指的是什么呢?这一点无法确认具体类别,只能给出部分可以再现的情景。比如我使用向日葵软件远程连接电脑时,可以再现这个bug。然后看了其他人的经历,开
2022-07-04 16:30:53
681
原创 CopyOnWriteArrayList原理详解(太细了)
从原理,源码,说明,优缺点,应用场景等多方面介绍了CopyOnWriteArrayList
2022-06-12 15:41:54
3894
2
原创 数据库层面解决高并发时获取最大主键重复问题
一、问题在高并发下,因没有加锁处理,没有将获取最大主键值+1,然后将新数据插入到数据库这一流程加锁。导致两个用户的数据获取相同主键,并插入到数据库。此时其中一条数据将发生主键重复异常。二、解决方案当然,我们可以通过加锁将这两步合并起来处理。但本文将探讨另一种可能性。有一种方法可以使从数据库获取的主键永不重复答案呼之欲出:使用数据库序列!三、数据库序列(SEQUENCE)什么是序列序列是一种特殊的单行表,顾名思义,他只有一行,用来存储和维护一个序列值。序列是基于bigint算法的,因此范围
2022-04-30 23:11:55
3387
1
原创 Linux 查看端口是否被占用
查看端口是否被占用lsof -i:端口号比如,查看8080被哪个进程占用lsof -i:8080如图所示,端口8080被PID 1463的进程占用。好家伙,那我肯定要杀了它。杀死进程kill PID使用kill命令结束进程用的是PID来指定进程。比如这里要杀死PID为1463的进程kill 1463然后再次查看端口号。发现已经不显示进程了,说明进程已经被结束。补充kill -1 PID 重新加载进程kill -9 PID 强制结束进程kill -15 PID正常结束进程
2022-04-18 22:39:31
826
原创 Nginx常用命令(不收藏后天就忘)
重新加载配置文件nginx -s reload可以在不重启nginx的情况下,重新读取配置文件。使用频率:一天20次!正常关闭Nginxnginx -s quit正常关闭Nginx。使用频率:一年1次。快速关闭Nginxnginx -s stop快速关闭Nginx。 使用频率:一年1次重新打开日志文件nginx -s reopen重新打开日志文件。 使用频率:一年1次写在最后送你一份官方文档,不谢。Nginx官方文档对你有帮助的话,点个赞吧~...
2022-04-18 22:22:49
2752
原创 Failed to bind NettyServer on /192.168.xxx.xxx:20880, cause: Failed to bind to:/0.0.0.0:20880
Failed to bind NettyServer on /192.168.xxx.xxx:20880, cause: Failed to bind to:/0.0.0.0:20880 Dubbo服务提供者启动失败原因服务提供者启动失败的原因是,端口号被占用。前往Dubbo监控中心查看可以发现20880端口已有服务提供者。解决方案修改服务提供者的协议端口号springboot下yml版dubbo: protocol: name: dubbo#将端口号从20880改成其他端口号
2022-04-10 11:43:41
6937
原创 Redis的数据结构之Set
集合Setset和list的区别就在于set是不可重复的,list是可以重复的。而且set是无序的,list是有序的。将一个重复的元素添加到set中将会被忽略。set的查询速度比list快。命令SADDSADD set element [element...]通过使用SADD命令,用户可以将一个或多个元素添加到集合中这个命令会返回成功添加的新元素数量作为返回值。因为集合不存储相同的元素,所以用户在使用SADD命令向集合中添加元素的时候,SADD命令会自动忽略已存在的元素,只将不存在于集合
2022-02-25 18:38:11
1072
原创 Redis的数据结构之List
Redis的数据结构之 列表(List)命令LPUSHLPUSH list item [item...]用户可以通过LPUSH命令,将一个或多个元素推入给定列表的左端如果列表不存在则创建列表在推入操作执行完毕之后,LPUSH命令会返回列表当前包含的元素数量作为返回值。RPUSHRPUSH list item [item...]RPUSH命令和LPUSH命令类似,这两个命令执行的都是元素推入操作,唯一区别就在于LPUSH命令会将元素推入列表左端,而RPUSH命令会将元素推入列表右端。如果
2022-02-25 18:37:36
1311
原创 C# 中where关键字详解
where用于约束泛型public class MyGenericClass<T> where T:IComparable { }表示类型T只能是IComparable的子类public class MyGenericClass <T> where T: IComparable, new()new()只能出现在末尾new()的意思就是说该类必须有公共的无参构造...
2022-01-25 17:42:02
1588
原创 Navicat访问云服务器postgreSQL数据库
我这里用的是阿里云服务器。正常访问其他电脑主机的数据库只需要输入ip地址然后使用用户密码登录就可以了。但阿里云是需要使用SSH登录的!如图所示1.在主机栏里填上你云服务器的公网IP2.端口默认22就可以3.阿里云默认用户名是root4.密码就是你连接云服务用的密码。到这一步,你就可以连接上你的云服务器了。不过后面还有个大坑!接下来就是连接云服务上的postgreSQL。数据库的主机地址,既不是localhost也不是云服务的公网IP!而是内网IP。先使用SSH进入云服务内网,然后再
2022-01-15 23:00:18
3892
1
原创 RESTful 架构介绍
RESTful介绍REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。RESTful是一个针对URI的架构,使用RESTful风格的URI可以使URI更具可读性。代码更加整洁且富有逻辑性。首先要明白,RESTful架构是面向资源的。每一个URI可以确定一个资源。而用户或程序员使用RUI其实就是在操作资源。因此至始至终都应该围绕资源来设计URI。使用RESTful架构作用1)使URI更具可读性,避免无意义的URI。URI
2022-01-12 18:05:31
4059
原创 WPF FlowDocument中的Block级元素
WPF Block级元素Block属性BorderBrushBorderThickness设置边框BreakColumnBefore获取或设置一个值,该值指示当元素参与使用了分栏的内容呈现时,是否自动在此元素之前插入一个分栏符。BreakPageBefore获取或设置一个值,该值指示是否自动在此元素之前插入一个分页符。ClearFloaters获取或设置某个 Floater 元素所包含的任何 Block 元素的重新定位方向。FlowDirection获取或设置 Block 元素中内
2021-12-21 19:21:43
1258
原创 WPF FlowDocument中的Inline级元素
WPF Inline属性BaselineAlignment获取或设置 Inline 元素的基线对齐方式。FlowDirection获取或设置一个值,该值指定 Inline 元素中内容流的相对方向。NextInline获取与此元素对等的下一个 Inline 元素。PreviousInline获取与此元素对等的上一个 Inline 元素。SiblingInlines获取一个 InlineCollection,它包含与此元素同级(对等)的 Inline 元素。TextDecorations
2021-09-10 11:43:21
981
原创 Redis的初步使用教程
redis服务器启动命令:redis-server.exe redis.windows.confredis客户端启动命令:redis-cli.exe -h 127.0.0.1 -p 6379
2021-07-03 16:37:21
920
原创 SpringBatch初始数据表生成失败
SpringBatch初始数据表生成失败(PostgreSql)查了很多原因没解决,最后使用SpringBatch jar包自带的sql脚本执行,才发现了真正的原因。一个很弱智的原因。没有创建public schema。导致元数据表生成时不知道在哪个schema自动生成。...
2021-05-17 11:38:18
1597
原创 .NetFramework4.7.2安装EF Core5.0以上版本失败
.NetFramework4.7.2安装EF Core5.0以上版本失败.NetFramework4.7.2暂不支持EF Core5.0以上版本。只能使用EF Core2.0和3.0。
2021-05-11 16:31:28
1234
原创 JVM虚拟机内存模型、堆内存结构、垃圾回收机制
分5个区域一、线程共享1,方法区(包括了常量池)2,堆二、线程独立3,程序计数器记录栈帧,一个方法一个栈帧。4,本地方法栈调用native方法时,存入本地方法栈5,Java虚拟机栈调用java方法时,存入虚拟机栈...
2020-12-10 15:41:22
274
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人