自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 事务方法中发送异步消息,且事务方法中和消息处理逻辑都更新同一表导致数据错乱

事务方法内更新了活动场次表,但是事务还没有结束,没有提交。此时消息已经发送出去,消费者查询到场次表活动开始时间未更新,判断为活动场次报名未开始。之后事务方法提交,再之后消费者提交更新把事务方法的更新覆盖掉了。业务场景:活动审核通过后,更新活动状态(更新为报名开始)、活动场次状态(更新为报名开始),然后发送延时异步消息(在活动报名开始、报名结束、活动开始、活动结束各个时间节点投递消息)。审核通过后,活动场次表的活动报名开始时间应该更新为审核通过时间,状态应该更新为报名中;事务提交之后再发送异步消息。

2023-03-14 20:02:19 342

原创 Doom流量回放工具导致的测试环境服务接口无响应的排查过程

doom工具具体导致线程阻塞的原因

2023-02-14 17:45:07 677

原创 单例模式枚举(Enum)结合ThreadLocal,存取线程共享信息

单例模式枚举(Enum)结合ThreadLocal,存取线程共享信息

2022-12-05 20:51:30 291

原创 Cache Aside Pattern(旁路缓存模式)在写数据的过程中,可以先删除 cache ,后更新 db 么?

不可以。以mysql 5.6为例,默认隔离级别为RR(可重复读)。线程1对数据进行更新,如果先删除缓存后更新DB,在两步中间若有线程2进行读数据操作,所读取的数据为更新前的数据,让后把此数据放入缓存。在此之后DB为新数据,缓存为旧数据,造成DB与缓存不一致

2022-09-07 15:14:48 416

原创 本机缓存和redis缓存不一致问题

业务场景:有一张排名表,记录某个活动的前名,每天凌晨24点更新一次数据,此外时间不更新。有两个查询:1:查询前二十名 ,由于此数据比较小,利用caffeineCache做本机缓存(一个小时自动过期)2.查询某个用户排名,由于条数比较多,利用redis做缓存(一个小时自动过期)情况一:当凌晨榜单更新后,一个小时内缓存未过期,总榜单数据在本机的caffeineCache缓存不会更新,如果有人前一个小时内没有查询过,没有他的缓存,此时他查询自己的排名和前20名,数据会不一致(前二十名为服务器的旧缓存数

2022-05-18 19:56:35 704

原创 java使用float或者double 运算,精度丢失问题,IEEE754

public static void main(String[] args) { System.out.println(0.1+0.2); BigDecimal bigDecimal=new BigDecimal(0.1+""); BigDecimal bigDecimal2=new BigDecimal(0.2+""); BigDecimal add = bigDecimal.add(bigDecimal2); double doubleValue = add.do

2022-01-04 09:59:48 496

转载 为什么HashMap的长度是2的整数次幂?

先说答案:为了加快哈希计算以及减少哈希冲突为什么可以加快计算?我们都知道为了找到 KEY 的位置在哈希表的哪个槽里面,需要计算 hash(KEY) % 数组长度但是!% 计算比 & 慢很多所以用 & 代替 %,为了保证 & 的计算结果等于 % 的结果需要把 length 减 1也就是 hash(KEY) & (length - 1)这个 hash(KEY) 没什么可说的,调用 Object 里面的 native 方法完成计算,一般返回的是一个整数,至于是偶数还是

2021-12-01 17:32:48 208

转载 为什么 Java 中只有值传递?

public class Person { private String name; // 省略构造函数、Getter&Setter方法}public static void main(String[] args) { Person xiaoZhang = new Person("小张"); Person xiaoLi = new Person("小李"); swap(xiaoZhang, xiaoLi); System.out.println("

2021-12-01 10:28:10 172

原创 spring事务Transactional 中使用mysql truncate清空表对事务的影响

数据库版本为mysql8springboot 2.5.6。论坛里有别的博客说的truncate 后的sql无法提交的情况,在我使用的版本没有出现,可能他用的是比较老的版本。public class TestTeacherController extends BaseController { @Resource private JdbcTemplate jdbcTemplate; @ApiOperation("删除数据") @PostMapping("delete")

2021-11-26 15:40:06 1631 1

原创 java 基本数据类型int 的默认初始值问题

int类型在Java中,若果作为类成员声明,不初始化值,会被默认初始化为0;如果作为方法的局部变量来声明,不进行初始化的话 会在编译期报错,无法通过编译。

2021-11-24 14:19:43 9380 1

原创 字符串不同初始化方式的差异

2021-09-18 16:33:10 122

原创 深拷贝实现的工具类利用输入输出流

package com.Utils;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class CloneUtils { @SuppressWarnings("unchecked")

2021-08-30 12:00:56 277

原创 关于Integer和int的比较 存储位置 jvm 自动拆装箱

1、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。Integer i = new Integer(100);Integer j = new Integer(100);System.out.print(i == j); //false2、Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动

2021-08-02 11:45:38 1060

原创 自定参数解析器HandlerMethodArgumentResolver实现将用户token中的用户信息自动解析到controller中的方法的参数中

1.创建一个HandlerMethodArgumentResolver。package com.ciih.axj.resolver;import com.ciih.axj.model.UserPlus;import com.ciih.axj.model.User;import com.ciih.axj.myAnnotations.UserIn;import com.ciih.axj.service.UserPlusService;import com.ciih.axj.service.User

2021-07-23 17:32:36 346

原创 当post请求 url参数和body传参存在同名参数,controller如何处理

当post请求 url参数和body传参存在同名参数,controller如何处理?后台会将同名参数两个字符串加在一起

2021-06-23 20:56:25 1238 2

原创 java 上转型对象 编译时类型和运行时类型 多态

用父类声明对象并,用子类对象初始化,例如:Son s=new Son;Father f =s;子类对象赋值给父类对象,被称为上转型。此处对象f被称为对象s的上传型对象。此时对象f的编译时类型为Father 类,运行时类型为Son 类型。这是java多态特性的体现之一。如果子类重写的父类的方法,在编译期间,我们通过f调用Father 类中的方法,而在运行期通过f调用的Son类中的方法。常见的应用场景:我们在MVC架构中的controller注入了一个service,比如 :@Resourcepri

2021-06-23 20:09:36 159

转载 mybatisplus代码生成器

java文件 Generator.javapackage com.ciih.elqz;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.core.toolkit.StringUtils;import com.baomidou.mybat

2021-05-27 11:50:25 205

原创 使用Mybatis-plus内置方法,更新一个字段还是全部字段,三种应对情况下性能效率比较

业务中遇到一种场景,需要从数据表中查询出一条记录,将其中一个字段更新一个值,以下三种方式://Mybatis-plus内置更新方法 @Override public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> { public boolean updateById(T entity) { return retBool(baseMapper.upd

2021-04-09 10:55:31 5823 1

空空如也

空空如也

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

TA关注的人

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