自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 跟着ChatGPT学知识之@Retryable和@Recover

Retryable和@Recover是Spring Framework中的注解,用于支持在方法执行期间发生异常时的重试和恢复操作。@Retryable注解用于标记方法,在方法执行期间发生异常时进行重试。重试行为可以使用Spring Retry框架提供的默认策略或自定义策略来定义。您可以指定要重试的异常类型以及最大重试次数和重试间隔等参数。@Recover注解用于标记一个恢复方法,在最终重试失败后执行该方法。恢复方法应具有与原始方法相同的参数和返回类型,并且应在同一类中声明。

2023-04-16 12:07:26 2592 1

原创 跟着ChatGPT学知识之LinkedBlockingQueue

Java中的LinkedBlockingQueue是一种线程安全的队列,底层实现是一个链表,用于多线程并发访问的场景。它的特点是可以存储任意类型的对象,并且长度可以动态变化,另外它还支持阻塞式的读取和写入。

2023-04-15 15:24:19 381

原创 使用@EnableRetry注解后,项目启动失败的问题

如果你要在项目中使用@Retryable,首先要在项目启动类上加上一个@EnableRetry注解,来开启重试机制,但当我使用了@EnableRetry后,我的项目无法启动,当我去掉@EnableRetry,项目又可以正常启动。我想在我的项目中使用重试机制,于是我找到了Spring Retry,其中的@Retryable可以在不同规则下进行重试,这次我们先不讨论它的用法,讨论一下我这次遇到的问题,根据报错信息,可以看出这是一个依赖问题。可以看到的是,错误的创建bean,导致容器启动失败,但是为什么呢?

2023-04-12 10:04:18 755

原创 状态模式+状态机模拟实现钉钉审批流程笔记

【代码】状态模式+状态机模拟实现钉钉审批流程。

2023-04-08 22:57:15 1443

原创 FactoryBean小测试

一般情况下,Spring会通过反射机制利用的class属性指定实现类实例化Bean。在传统方式,需要在中提供大量的配置信息。这种配置方式的灵活性是受限的,这是采用编码的方式有一个简单的方案。Spring为此提供了一个FactoryBean工厂类接口,我们可以通过实现工厂类接口来定制实例化Bean的逻辑。可以帮助我们隐藏一些复杂Bean实例化的细节,为上层应用调用带来便利。闲来无事,研究了一下Spring 的FactoryBean接口,做了一个简单的小Demo。

2023-03-11 18:52:12 114 1

原创 LambdaUtil,Lambda方式运行你的接口

【代码】LambdaUtil,Lambda方式运行你的接口。

2023-02-24 10:23:56 333

原创 比较两个对象的属性值,自定义CompareUtil

个人笔记

2023-02-02 11:15:34 236

原创 Sentinel : Redis集群哨兵机制工作原理

Sentinel是Redis官方提供的一种Redis集群高可用的解决方案。多个Sentinel分别订阅指定频道并分别监控Redis集群中的每个节点,检测他们是否发生故障,若主节点发生故障,Sentinels会进行选举出一个Redis 从节点作为新的主节点,并让其他的从节点指向这个新的主节点。并且会同步这个新地址给client。

2023-01-15 18:01:48 160

原创 Netty-时间轮算法实现延时队列效果

如果有时间跨度较长的定时任务,则可以交给层级时间轮去调度。HashedWheelTimer本质是一种类似延迟任务队列的实现,那么它的特点如上所述,适用于对时效性不高的,可快速执行的,大量这样的“小”任务,能够做到高性能,低消耗。那么我们要延时执行一个任务,就只需要给出任务需要执行的时间,然后通过计算得出执行到我们任务需要的圈数,和具体的刻度。时间轮算法借助时钟的思想,可以将时间轮看作一个时钟,上面有刻度,每个刻度代表多少时间,每个刻度上放着若干个任务。那么我们的任务就会在第二圈的刻度1处执行我们的任务。

2023-01-11 22:06:29 585

原创 实体映射最强工具类:MapStruct 真香

MapStruct是一个代码生成器,它基于约定大于配置的方法,大大简化了Java Bean类型之间的映射的实现。生成的映射代码使用普通的方法调用,因此是快速的、类型安全的、易于理解的。

2022-12-25 16:41:36 587 2

原创 PODAM - Java 对象随机数填充器-属性随机赋值 Mock bean

PODAM - Java 对象随机数填充器-属性随机赋值 Mock bean

2022-12-25 15:20:03 1678 1

原创 在使用 Redis 时,如何持续发挥它的高性能,避免操作延迟的情况发生的建议笔记

所以,对于容器类型(List/Hash/Set/ZSet),在元素数量未知的情况下,一定不要无脑执行 LRANGE key 0 -1 / HGETALL / SMEMBERS / ZRANGE key 0 -1。当开启这个机制后,Redis 在删除一个 bigkey 时,释放内存的耗时操作,将会放到后台线程中去执行,这样可以在最大程度上,避免对主线程的影响。如果申请内存单位变为了 2MB,那么势必会增加内存申请的耗时,如果此时主进程有大量写操作,需要修改原有的数据,那么在此期间,操作延迟就会变大。

2022-12-20 10:05:59 263

原创 static代码块、@PostConstruct、启动类的执行顺序测试

当你的component组件的依赖初始化之后,执行@PostConstruct内的代码。然后来到了@PostConstruct。首先测试下在启动类中编写三部分代码。Debug启动,同时观察控制台信息。当class被加载之后,会执行。先执行到static代码块。spring组件开始加载。第二个断点来到了启动类。

2022-12-02 10:11:20 1321 2

原创 枚举类的特殊用法

【代码】枚举类的特殊用法。

2022-11-23 22:37:06 100

原创 SQL分组查询每组前N条记录

SQL分组查询每组前N条记录。

2022-10-01 20:42:33 406 1

原创 Java虚拟机的双亲委派模型的工作过程以及为什么要使用这种模型?

首先说一下它的工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己确实无法完成这个加载请求(它的搜索范围内没有找到所需的类)的时候,子加载器才会尝试自己去完成加载。...

2022-08-07 16:32:58 260

原创 两个类互转的一种通用方法

大家在日常编写业务代码时,通常会遇到需要两个List互转的情况,这两个类之间,一个类中所有字段在另一个类中可以找到。常用的方法有For循环然后依次新建对象设置值放入新List中,有失美观,可以采用下面这种方式。...

2022-07-29 16:01:44 603

原创 Vagrant中虚拟机centos的/dev/sda1突然爆满问题解决纪录

项目场景:首先项目中使用vagrant 和docker ,docker中有mysql的容器。​问题描述今天在连接数据库时,突然数据库服务挂掉。没有截图,下文会进行文字分析。原因分析:首先想到是不是主机或者vagrant防火墙的问题经过测试后发现,本机和vagrant 的ip都可以互相ping 通,说明不是二者防火墙的问题。然后试着重启vagrant , 首先vagrant up启动虚拟机,此时报了一个内存不足的错,但我没有理会,大意了,没有闪,然后使用vagran

2022-05-01 22:12:43 1730 2

原创 将字符串转换为大驼峰,大写前面补空格,最后去掉左侧空格,如“test_java_code”,会转换为“Test Java Code”.

/** * 将str转换为大驼峰,大写前面补空格,最后去掉左侧空格 * * @param str * @return */public static String toUpperCaseAndSplitWithSpace(String str) { String result = ""; String to = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, str); char[] chars = to.t.

2022-04-25 11:38:35 840

原创 虚拟机新生代复制算法笔记

首先为什么新生代和老年代的区域比不是一比一?首先虚拟机中的对象大部分都是朝生夕灭的,新生代中的对象会有98%熬不过第一轮收集。因此并不需要按照1:1的比例来划分新生代的内存空间。简述一下新生代的内存布局。 新生代的区域会被分为一块较大的Eden空间和两块较小的Survivor空间。每次分配内存只使用Eden和一块Survivor。发生垃圾收集时,会将Eden和一块Survivor中的存活对象复制进另一块Survivor空间上,然后清理掉Eden和用过的Survivor。 ...

2022-04-12 20:31:55 467

原创 虚拟机中垃圾回收算法的分代收集理论

当代的虚拟机的垃圾收集器,大多数都遵循了分代收集理论,分别建立在以下几个假说之上:弱分代假说:绝大多数对象都是朝生夕灭。 强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡。 由上面两个分代假说共同奠定了常用垃圾收集器的一致的设计原则,也就是分代,将堆划分出不同的区域,然后将对象依据年龄(年龄指的是对象熬过垃圾收集过程的次数,年龄为15会进入老年代)分配到不同的区域中存储。这里可以发现,如果一个区域的大多数对象都是朝生夕灭,难以熬过垃圾收集过程的话,那么将它们集中在一起,每次回收时就可...

2022-04-10 22:27:26 665

原创 异或^的性质,以及^为什么可以进行交换?

^ 也叫无进位相加,原理是相同为0不同为1,当我们把两个数进行二进制异或运算时,比方说a = 100011,b = 011010,此时 a^b 如下``` a 100011 b 011010 结果 111001```异或还满足如下几个特性:1. a^0 = a 任何数与0的异或都为它本身2. a^a = 0 任何数与本身的异或都为03. a^b = b^a ,a^b^c = a^(c^b) 异或满足交换律和结合律看如下代码分析为什么异或可以交换...

2022-04-02 10:37:57 698

空空如也

空空如也

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

TA关注的人

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