- 博客(16)
- 资源 (4)
- 收藏
- 关注
原创 volatile处理指令重排的一个例子
材料来自 《Java高级程序员面试笔试宝典》第6.1.2节1. 正常情况CPU在运行期间会对指令进行优化,没有依赖关系的指令,他们的顺序可以被重排。在单线程执行下,发生重排是没有问题的,CPU保证顺序不一定一致,但结果一定一致。如以下代码:int i = 0; //(1)i++; //(2)boolean f = false; //(3)f = true; //(4)(1) 和 (3) 没有依赖关系,(1) 可能会排到(3)之后;而(1)和(2)有依赖关系,CPU一定会安排(1)早于(.
2022-03-14 08:44:51 372
原创 红黑树相关知识点详解
文章目录1. 二叉查找树2. 平衡二叉树(AVL树)2.1 定义2.2 插入操作2.2.1 结点平衡因子为2,左孩子平衡因子为1,进行LL旋转(单向右旋)。2.2.2 结点平衡因子为-2,右孩子平衡因子为1,则进行RR旋转(单向左旋)。2.2.3 结点平衡因子为2, 左孩子平衡因子为-1,进行LR旋转(先左再右)。2.2.4 结点平衡因子为-2,左孩子平衡因子为1,进行RL旋转(先右再左旋转)。2.3 删除操作2.3.1 如果删除的结点的左右子结点任意一个为空,那么用另一个非空子结点直接替换当前结点,并回溯
2022-02-06 15:18:59 1230
原创 SpringBoot踩坑记录:玩转@Value注解-自定义PropertySourcesPlaceHolderConfigurer
背景开发环境:SpringBoot + IDEA因特殊情况需要,有部分配置项不能直接陪在配置文件properties中,需要从枚举中获取。这部分配置项以前是配在properties文件中的,现在需要改写到枚举中。因此service中无法用@Value注解自动注入这些值,需要用新的方式实现注入,且尽量减少代码改动量。解决方法...
2021-03-17 22:36:32 1658
原创 分布式事务及Seata框架
1. ACID 特性原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)2. 分布式事务问题的理论模型2.1 X/Open 分布式事务模型X/Open DTP(X/Open Distributed Transaction Processing Reference Model)是X/Open这个组织定义的一套分布式事务的标准,提出用两阶段提交(2PC,Two-Phase-Commit)来保证分布式事务的完整性。AP:Appl
2021-03-16 06:50:59 715
原创 JVM总结
1. Java运行时数据区域堆: 线程共享,主要用来存储对象。堆可分为:年轻代和老年代两块区域。使用NewRatio参数来设定比例;年轻代可分为:一个Eden区和两个Suvivor区,使用参数SuvivorRatio来设定大小。虚拟机栈/本地方法栈: 线程私有,主要存放局部变量表,操作数栈,动态链接和方法出口等。程序计数器: 线程私有,记录当前线程的行号指示器,保障线程切换。方法区: 线程共享,主要存储类信息、常量池、静态变量、JIT编译后的代码等数据。方法区理论上来说是堆的逻辑组成部
2021-03-04 01:47:19 184
原创 SpringBoot踩坑记录:IDEA+MAVEN本地 jar 包打包及引入使用
开场白本文主要简单介绍下 IDEA + Spring boot + Maven 环境下的 本地 jar 包打包及使用姿势。涉及的工程代码审核后会在文末附上。我们首先搭一个简单的 Spring boot 工程, 仅有一个方法,给定半径计算圆的面积,代码结构如下:其中Controller层提供一个接口,调用Service层计算圆的面积并返回:@RestController@RequestMapping("/test")public class TestController { @Auto
2020-12-17 17:59:16 1051
原创 重读Java并发编程艺术(8) - Executor框架
1. 简介1.1 两级调度模型应用程序通过Executor框架控制上层的调度,将任务映射为固定数量的线程;下层调度由操作系统内核控制,将线程映射到硬件处理器上,不受应用程序控制。1.2 Executor框架的结构与成员1.2.1 结构三大部分:任务:包括被执行任务需要实现的接口:Runnable接口或Callable接口。任务的执行:包括任务执行机制的核心接口Executor,以及继承自Executor的ExecutorService接口。Executor框架由两个关键类实现了Execu
2020-11-22 03:38:05 191
原创 重读Java并发编程艺术(8) -Java线程池
1.Java的线程池1.1 作用降低资源消耗: 重复利用已创建的线程,降低线程创建和销毁的消耗。提高响应速度: 任务到达时可以不需要等线程创建而是立即就能执行。提高线程的可管理性: 线程是稀缺资源,若无限制创建会消耗系统资源和降低系统稳定性。使用线程池可以进行统一分配、调优和监控。1.2 实现原理1.2.1 任务处理流程当提交一个新任务到线程池,处理流程如下:判断核心线程池里的线程是否都在执行任务。若否,创建一个新的工作线程来执行任务。若是,进入下一流程。判断工作队列是否已满。若否,
2020-11-03 22:27:39 373
原创 重读Java并发编程艺术(7) -Java的并发工具类
1. 计数器 CountDownLatch1.1 介绍1.1.1 构造函数接受一个int类型的参数作为计数器,如果先等待N个任务完成,就传入N。1.1.2 使用CountDownLatch的await方法会阻塞当前线程,直到N变成零;每调用一次 countDown 方法,N就会减1;countDown方法可以用在任何地方,可以是在1个线程里的N个步骤,也可以是N个线程(需将该CountDownLatch对象的引用传入各个线程)。1.1.3 注意计数器必须大于等于0,计数器等于0时,调
2020-10-25 21:40:57 121
原创 重读Java并发编程艺术(6) -Java的13个原子操作类
文章目录1. 原子更新基本类型类1.1 类1.2 方法1.3 实现原理1.4 Unsafe源码2. 原子更新数组2.1 类2.2 方法3. 原子更新引用类型3.1 类4. 原子更新字段类4.1 类4.2 需要注意的点4.3 示例代码JDK1.5 开始提供了 Java.util.concurrent.atomic包,基本上都是使用 Unsafe 实现的包装类。1. 原子更新基本类型类1.1 类AtomicBoolean: 原子更新布尔类型AtomicInteger: 原子更新整型AtomicLo
2020-09-21 00:20:23 106
原创 重读Java并发编程艺术(5) - 并发容器和框架
1. ConcurrentHashMap1.1 优点HashMap代替线程不安全HashTable效率低下(synchronized)ConcurrentHashMap锁分段技术可有效提升并发访问率1.2 结构ConcurrentHashMapSegment (一种可重入锁,类似HashMap的数组和链表结构)HashEntry(链表结构元素)一个ConcurrentHashMap中包含一个Segment数组,每个Segment数组包含一个HashEntry数组,每个HashEnt
2020-08-31 01:08:05 237
原创 重读Java并发编程艺术(4) - Java中的锁
1. Lock接口1.1背景synchronized 隐式获取锁,简化同步的管理,但是缺乏扩展性。锁 手动进行锁获取和释放,还具有以下 synchronized 关键字不具备的主要特性:特性描述尝试非阻塞地获取锁当前线程尝试获取锁,如果这一时刻锁没有被其他线程获取到,这成功获取并持有锁能被中断地获取锁与 synchronized 不同,获取到锁地线程能够响...
2020-04-25 01:11:44 210
原创 重读Java并发编程艺术(3) - Java并发编程基础
1. 线程1.1 进程和线程进程:操作系统资源分配的最小单位。线程:操作系统调度的最小单位。一个进程里可以创建多个线程。1.2 为什么要使用多线程更多的处理器核心更快的响应时间更好的编程模型1.3 线程优先级范围1-10,默认值5,优先级高的线程分配更多的时间片。针对频繁阻塞(休眠或 I/O 操作)的线程需要设置较高优先级针对偏重计算(需要较多 CPU 时间或者偏...
2020-02-16 18:01:40 227 1
原创 重读Java并发编程艺术(1) - Java并发机制底层实现原理
近来为了查漏补缺,重新拿起机械工业出版社的《Java并发编程的艺术》一书,并提取其中要点总结读书笔记记录下来。1. 并发编程的问题1.1 多线程一定快吗?不一定,因为线程有创建和上下文切换的开销。1.2 如何减少上下文切换无锁并发编程: 多线程处理时用一些方法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同线程处理不同段的数据。CAS算法:Java的Atomic包使用CAS...
2020-02-04 22:49:32 222
原创 SpringBoot踩坑记录:@Cacheable报错EL1007E: Property or field 'code' cannot be found on null
背景最近在微服务项目开发中,两个服务的接口使用 @Cacheable 做缓存处理,一个正常运行,另一个接口一直报错,报错信息如下:org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'code' cannot be found on null at org.spring...
2019-12-29 17:26:02 5992 1
示例源码_SpringBoot踩坑记录:IDEA+MAVEN本地 jar 包打包及引入使用_Qc20201223.zip
2020-12-23
示例源码_SpringBoot踩坑记录:IDEA+MAVEN本地 jar 包打包及引入使用_Qc20201217.zip
2020-12-17
测试样例源码springlearn_20191229.zip
2019-12-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人