zzh

zzh

cover
cover
cover
cover
cover
cover

关于java中volatile可见性适用范围的一些个人见解

1、volatile 保证了变量值修改的可见性 对于这一点,我们需要了解到在 java 中什么是变量值。对于基本类型变量,变量值就是赋予它的数值,比如 int a=1,那么 1 就是基本类型变量 a 的变量值。而对于引用变量类型,变量值就是堆栈中的地址,比如 Object a…
通过hash值计算下标的方式
1. 取余 idx = hash % length; 2. 位运算 (length 最好为 2 的 n 次幂) idx = hash & (length-1);
cover
cover

伪填充问题

发生场景 多核 cpu 下多个线程之间改写连续不同资源。 发生机制 因为 cpu 往往使用高速缓冲来加快对变量的读取,而 mesi 协议会导致不同 cpu 上的线程修改对应的高速缓存时,会使其它 cpu 上的相应的高速缓存行失效(如果存在),那么另一个 cpu…
volatile保证可见性理解
目前的 cpu 架构中,主要通过在 volatile 修饰的变量进行读写时加入屏障来实现可见性。 invalidQueue、storeBuffer 与可见性 底层上 cpu 主要通过 mesi 协议来实现多核 cpu 之间的缓存一致性(具体可查询相关内容),而 mesi…
cover
cover
cover
cover

InheritableThreadLocal获取父线程的threadLocal值

1、get () 与 set () 方法 get() set() 其中我们可以看到两个方法均使用了 getMap 方法来获取 ThreadLocalMap 对象。因此,我们可以推测大概是这个方法导致了 InheritableThreadLocal…
cover
cover

Docker 链接spring项目与redis

代码实现 Copy @RestController public class HelloWorldTest { @Autowired private RedisTemplate redisTemplate; @GetMapping…
cover
cover
cover
cover

Docker使用自定义镜像开启一个java web服务

web 程序 Controller 类: xml 配置文件: 自定义 Dockerfile (注意暴露的端口必须与 xml 配置文件中开放的端口一致) 构建并开启镜像
cover
cover

Executors.newCachedThreadPool部分解析

基本组成 上图可以看出 newCachedThreadPool 是由 0 核心线程数 + Integer.MAX_VALUE 最大线程数 + SynchronousQueue 阻塞队列组成(其中每个线程存活时间不超过 60s)。 运行流程 其中对于…
cover
cover
cover
cover
cover
cover
cover
cover

ThreadPoolExector回调函数Future

本文只要探究 ThreadPoolExector 中 submit 任务以后,future 回调函数生成发生的事情。 如上图所示,submit 以后首先进入该代码段,在代码段中主要执行两个任务:一个是创建一个 RunnableFuture 对象,一个是开启线程执行…
cover
cover
cover

MQ分布式事务与远程调用的个人理解

系统整体如下所示: 当前存在一个分布式事务(即,事务 1 和事务 2),系统 A 是该分布式事务的发起方。 对于 MQ 分布式事务 对于远程调用 对比以上两种方式,可以发现都可以在一定程度上完成分布式事务,那么为什么我们还需要 MQ 分布式事务呢?这是因为 MQ…
cover
cover
cover
cover

Java深拷贝与浅拷贝

假设我们有一个类 我们下面用两张图来表示深拷贝和浅拷贝的区别。 浅拷贝 深拷贝 注意事项: 假设我们有一个类,然后我们进行浅拷贝 这时候输出结果为 也就是说,这里并没有像之前图示一样进行浅拷贝,因为对象 x 中的值与对象 y 中的值不一样,这是因为 String…
java new一个对象的过程
1. 第一次加载该类时,java 使用双亲委派机制加载对应类的字节码到 jvm 的元空间中。 2. 为 class 中的静态变量分配内存空间,并赋值。 3. 为对象在 jvm 堆中分配一块内存区域 4. 为对象中的实例变量赋初值 5. 执行类的初始化方法(构造方法、init…
idea异常:The bean 'gateway-server.FeignClientSpecification' could not be registered. A bean with that name has already been defined and overriding is disabled.
本人出现该异常主要是因为在一个 module 中使用了多个 @EnableFeignClients 注解导致的,删除完以后即可。
mapstruct无法获取实现类
导入依赖: Copy <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> </dependency> <dependency…
RocketMq异常:service not available now. It may be caused by one of the following reasons: the broker's disk is full [CL: 0.31 CQ: 0.31 INDEX: 0.31], messages are put to the slave, message store has been shut down, etc.
出现这个异常主要是因为消息存储磁盘空间不足导致的,这时候主要可以进行以下两个操作: 修改磁盘空间警告比例 runbroker.cmd文件添加set "JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512m -Xmn128m…
cover
cover
cover

类加载场景题:父类和子类的静态代码块、构造方法、成员变量加载顺序

父类 Person 子类 Student 执行结果 加载顺序(大概) 父类静态代码块 -> 子类静态代码块 -> 父类成员变量 -> 子类成员变量 -> 父类构造函数 -> 子类构造函数(成员变量在构造函数之前的判断是因为构造函数输出的成员变量值不是默认值而是赋值后的值)
cover
cover
cover
cover
cover
cover
cover
cover

Spring oauth2资源服务器修改request踩的坑

首先我们配置了一个资源服务器 其次,我们配置了一个 WebSecurityConfigurerAdapter 运行资源服务器后会进入以下代码端 对应的 configurers 的值为 可以看到 configurers 会包含两个值分别调用资源服务器配置以及自定义的…
cover
cover
cover

Jdk8 static变量是否可以序列化

先上结论,static 变量无法序列化。 验证: 实体类: Copy @Data public class SysRole implements Serializable { // 角色id private BigInteger id; // 角色名词…
Ownership of this blog data is guaranteed by blockchain and smart contracts to the creator alone.