
小知识点
文章平均质量分 53
胡尚
只要学不死就往死里学
展开
-
Seata 隔离级别问题
注解的作用是开启一个全局事务,并把XID一直往下游服务传递,XID会保存在RootContext对象中,在执行sql 本地提交之前,ConnectionProxy对象会去判断RootContext对象中存不存在XID,如果有那么就会去往TC端进行全局锁insert操作。需要注意的是,如果我们使用了全局事务相关的数据表,那么对该数据表的操作都需要有校验全局锁的过程。如果你查询的接口在事务链路上外层有@GlobalTransactional 注解,那么你查询的语句只要加 for update 就行。原创 2024-07-19 08:35:51 · 530 阅读 · 0 评论 -
集群环境下,调用半数以上节点进行数据同步的实现
核心实现是使用CountDownLatch来实现的,先取集群节点总数一半以上数量的CountDownLatch。再发送请求调用其他节点,在这个过程中对于正常响应的节点进行。最后再统计数量是否为0再决定是否抛异常。原创 2024-07-06 15:30:38 · 236 阅读 · 0 评论 -
StringUtils工具类
copy nacos源码中的StringUtils。原创 2024-07-05 10:05:45 · 192 阅读 · 0 评论 -
redis cluster集群节点的扩缩容、重新分配槽位
至此,我们已经成功的把8007主节点的数据迁移到8001上去了,我们可以看一下现在的集群状态如下图,你会发现8007下面已经没有任何hash槽了,证明迁移成功!主节点的里面是有分配了hash槽的,所以我们这里必须先把8007里的hash槽放入到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题。(ps:输入all为从所有主节点(8001,8002,8003)中分别抽取相应的槽数指定到新节点中,抽取的总槽数为600个)(ps:需要多少个槽移动到新的节点上,自己设置,比如600个hash槽)原创 2023-03-23 08:42:29 · 2358 阅读 · 0 评论 -
MQ如何保证消息不丢失
就比如Producer生产一个消费发送到了A节点,这个时间集群中各个节点是不同步消息的,Consumer却在B节点上消费这条消息,这个时候才会把A节点的消息同步到B节点来 再进行消费。会造成消费时消息丢失才场景是:Consumer消费消息变为异步的方式,刚开始收到需要消费的消息就往MQ发送一个消息,然后再去执行本地事务,这个时候如果本地事务执行失败,可是发送给MQ的确认消息却已经发送成功了,这就造成了消费端消息丢失。MQ再判断本地事务的执行结果,如果还是未知就继续重复执行5~7步,默认会重复执行15次。原创 2023-02-01 20:48:18 · 2239 阅读 · 0 评论 -
shell脚本通过进程号停止服务
【代码】shell脚本通过进程号停止服务。原创 2022-12-08 17:22:32 · 687 阅读 · 0 评论 -
java生成csv文件工具类
【代码】java生成csv文件工具类。原创 2022-10-28 09:25:50 · 1423 阅读 · 1 评论 -
java简单的文件下载,字节流操作浏览器下载文件
java文件下载原创 2022-08-12 16:47:23 · 1434 阅读 · 0 评论 -
HashMap底层原理put()与resize()扩容
遍历整个红黑树,将所有元素key的hash与老数组长度进行逻辑与运算,得到两条链表,判断这两条链表的长度是否原创 2022-08-10 15:39:42 · 382 阅读 · 0 评论 -
Spring三级缓存解决循环依赖
在BService创建中依赖出入时,如果在单例池中没有找到需要的bean,那就去createSet集合中判断有没有我们需要的Bean,如果有就表示当前需要的Bean对象它自己正在创建中,这也就是循环依赖。Spring里面还是会用到一个map,我们可以暂时理解为前面说的hushangMap,先推断构造函数创建好AService的普通对象后,存入Map中去,key是bean的名字,value中存创建好的bean的名字、普通对象以及beanDefinition,这里有三个对象,value里面如何存放三个对象嘞?.原创 2022-08-09 17:43:08 · 9750 阅读 · 5 评论 -
redis分布式锁
解决方法是:value之前是随便写的一个值,现在不随便写了,先生成一个uuid作为锁的值存入redis,删除锁之前先查询判断redis中存储的uuid和自己生成的uuid相同后才去删除锁。问题:可能先从redis中进行查询,得到uuid后,redis中的锁过期了,然后别人又加锁了,我这里进行if判断两个uuid相等,然后又把别人的锁删除了。难点是锁的自动续期,业务方法还没有执行完,锁就过期了,最简单的方法就是把锁的过期时间设置很长,现在的java代码如下。就比较符合我们的实现习惯。...原创 2022-08-09 17:30:33 · 1275 阅读 · 0 评论 -
三级分类/菜单的查询——树形结构
三级分类、三级菜单的tree树形结构查询原创 2022-07-21 14:21:54 · 902 阅读 · 0 评论 -
java读取properties配置文件中的内容
java读取properties配置文件原创 2022-05-24 10:04:33 · 176 阅读 · 0 评论 -
搭建redis集群,一主二从三哨兵
如何安装redis本文就不做记录了redis配置文件主要是修改以下几个点port 6379(每个节点的端口号)daemonize yesbind 0.0.0.0logfile "/home/redis/redis-sentinel/11001/redis-11001.log"dir /home/redis/redis-sentinel/11001/data/(数据文件存放位置)然后将配置文件复制三份,只是端口不同,在两个从机的结尾添加一句话#表示当前节点为10.10.0.14 6379主节原创 2022-03-16 20:25:49 · 1627 阅读 · 0 评论 -
linux 上定时任务执行shell脚本
首先service crond status 查看crontab服务状态,是正在运行的状态将我们的脚本授予可执行的权限chmod 777 /home/hs/shell/test.shvim /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root# For details see man 4 crontabs# Example of job definition:# .--------------原创 2022-02-22 14:47:46 · 2098 阅读 · 0 评论 -
查看linux目录使用磁盘容器
df -h命令查看整体磁盘使用情况du -sh: 查看当前目录总共所占的磁盘容量du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。原创 2022-02-18 09:50:01 · 654 阅读 · 0 评论 -
微信 获取signature签名
本文是使用java语言调用微信提供的接口,获取签名的详细过程,大致步骤如下:在官网生成appId 与 appSecret,然后通过appId 与 appSecret调用接口获取到Access token通过Access token调用微信提供的接口获取到jsapi_ticket最后使用jsapi_ticket、随机字符串、时间戳、url拼接字符串,在使用sha1进行加密得到签名将appid、时间戳、随机字符串、签名返回给前端原创 2022-01-11 14:16:25 · 4667 阅读 · 1 评论 -
解决消息丢失问题,保证消息可靠传输
解决消息丢失问题,保证消息可靠传输原创 2021-12-15 20:12:39 · 1475 阅读 · 0 评论 -
解决消息重复消费问题——幂等性问题
重复消费问题其实也就是消息的幂等性问题。正常情况下,消费者在消费消息时候,消费完毕后,会发送一个确认信息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除。那造成重复消费的原因?,就是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将该消息分发给其他的消费者。如何解决?这个问题针对业务场景来答分以下几点比如,你拿到这个消息做数据库的insert操作。那就容易了,给这个消息做一个唯一主键,那么就算出现重复消费的情况,就会导致主键冲突.原创 2021-12-15 20:09:07 · 1445 阅读 · 0 评论 -
搭建RabbitMQ集群
集群首先需要在我们的服务器上检查rabbitMQ运行是否有问题systemctl status rabbitmq-server检查没问题后就停止该服务,因为集群不需要我们使用这种传统的方式启动服务,有专门的启动RabbitMQ集群的命令systemctl stop rabbitmq-server接下来开始部署集群,首先安装第一个节点rabbitmq-1sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit-1 rabbitmq-serve原创 2021-12-15 11:58:29 · 1000 阅读 · 0 评论 -
RabbitMQ 死信队列的使用
死信队列DLX 死信队列。有以下几种情况,消息会进入到死信队列中:消息过期消息被拒绝队列达到最大长度实现的逻辑就是:也是创建一个交换机,就暂时叫它死信交换机,然后再创建一个死信队列,死信交换机和死信队列进行绑定。当设置了ttl的队列中消息过期后就会把消息发送至我们的死信交换机,死信交换机再存入死信队列中,以后肯定还会有一个死信消费者来处理死信队列中的消息的。其实这还是一个提供者–>交换机—>队列---->消费者的过程。问题是我们怎么让ttl队列过期后的消息发送至死信交换机原创 2021-12-15 11:55:46 · 1432 阅读 · 0 评论 -
RabbitMQ 设置消息过期时间TTL机制
过期时间TTL过期时间TTL表示可以对消息设置预期时间,消息超过这个时间就会被自动删除,有两种方式可以设置TTL第一种是 我们创建一个队列的时候可以设置消息过期时间,单位是毫秒,每条进入该队列的消息过期时间都一样。第二种是 直接对消息进行单独设置,每条消息的TTL可以不一样接下来使用的是第一种方式编写配置类package com.hs.rabbitmq.config;import org.springframework.amqp.core.Binding;import org.spring原创 2021-12-15 11:54:13 · 3631 阅读 · 1 评论 -
Springboot集成RabbitMQ
SpringBoot集成RabbitMQ原创 2021-12-15 11:52:24 · 1612 阅读 · 0 评论 -
java解析excel表格文件
文章目录maven坐标java代码maven坐标<!-- poi --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version></dependency><!-- poi-ooxml --><depende原创 2021-09-24 13:20:55 · 344 阅读 · 0 评论 -
文件上传中转的实现
有这样一个场景,前端上传的文件传到一个controller中,但是不进行保存文件,而是将文件再传到另一个服务。下面会有三块代码:前端代码中转站,用来传输文件至真正的后端保存真正的后端maven依赖如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId原创 2021-07-10 16:48:51 · 965 阅读 · 0 评论 -
不会单例模式的程序员不是一个合格的程序员
饿汉式public class SingletonPattern01 { private static SingletonPattern01 singletonPattern01 = new SingletonPattern01(); private SingletonPattern01(){ } public static SingletonPattern01 getInstance(){ return singletonPattern01;原创 2021-06-23 10:18:10 · 101 阅读 · 0 评论 -
mybatis 你应该知道的执行流程
因为要准备面试了,最近看了关于ssm的一些理论知识,本文就是关于mybatis的执行流程以及mybatis缓存的了解,主要是上一个面试问了我mybatis的缓存,然后我一脸懵逼,现在知道了,原来就这。。。。好了话不多说,进入正文。首先问大家一个问题,你理解的mybatis是怎么执行的?是不是就先创建SqlSessionFactoryBuilder–> builder一下–> 得到SqlSessionFactory–> 再open一下 --> 得到SqlSession -->原创 2021-05-05 01:06:42 · 288 阅读 · 0 评论 -
spring小知识点的理解
文章目录spring中的Bean的作用域Ioc和DI自动装配BeanFactory和ApplicationContextIOC的原理@Autowired与@ResourceAOP的理解spring中的Bean的作用域在spring1.X的版本时只有两个作用域:singleton和protetype。singleton作用域是每一次取出的Bean都是同一个,是单例的。而prototype每一次取出的Bean都是一个新的实例,是原型的。在spring2.X的版本中由新增了三个作用域:request、ses原创 2021-05-03 21:13:20 · 97 阅读 · 0 评论 -
jvm:内加载+垃圾回收
文章目录类加载本文主要是讲解我对JVM的类加载、垃圾回收这两方面的理解类加载我们都知道咱们编写一个java类后经过编译会生成一个class文件,然后再由JVM来执行,那么JVM是怎么加载这个class文件的嘞?其实这都是由ClassLoader 和它的子类来完成的,它其实就是一个类,它是java运行时的一个组件...原创 2021-05-01 22:06:13 · 181 阅读 · 0 评论 -
ArrayList集合、HashSet集合、HashMap、Hashtable、ConcurrentHashMap的原理
本文是我个人对ArrayList集合、HashSet集合、HashMap、Hashtable、ConcurrentHashMap这几个集合的理解,也希望能够帮助到看了此文章的你,如有不当之处,还望不吝赐教。文章目录ArrayList:HashSetHashMapHashtableConcurrentHashMapArrayList:成员变量:private static final long serialVersionUID = 8683452581122892189L;private sta原创 2021-04-27 10:55:15 · 559 阅读 · 0 评论 -
内存可见性问题 volatile关键字
前言public class TestVolatile { public static void main(String[] args){ //这个线程是用来读取flag的值的 ThreadDemo threadDemo = new ThreadDemo(); Thread thread = new Thread(threadDemo); // 启动线程 thread.start(); // 这里是主线程。原创 2021-02-24 23:51:58 · 120 阅读 · 0 评论 -
java抽象类abstract与接口interface
以下内容只是俺的理解,如果有不对的地方欢迎指正抽象类接口抽象类抽象类是拥有抽象方法的类,关键字是abstract。 它是用来抽象类的某些基本行为的类。一个子类只能继承一个抽象父类,但能实现多个接口,接口之间可以多继承。 抽象类可以有普通的成员变量,修饰符都可以使用抽象类可以定义构造函数,但是即使有构造函数也不能实例化抽象类抽闲类中定义成员方法相比普通类来说基本上没什么区别,啥都能定义,抽象类中也可以没有抽象方法,但如果一个普通类有抽象方法就必须将类的声明位置加上abstract哦。子类继承抽象原创 2021-04-26 12:47:20 · 229 阅读 · 0 评论