java
文章平均质量分 87
彭大坤
java软件工程师
展开
-
Seata使用AT模式及源码解析(二)
五.源码启动seata服务1.修改registry.conf配置修改registry.conf,配置registry和config都使用nacos形式2.启动seata服务3.无法启动解决seata在1.3.0版本中,maven版本需要在3.6.0及以上 项目构建无法找到io.seata.serializer.protobuf.generated下的包:idea需要安装ProtobufSupport插件,安装时可能会搜索不到,需要通过zip包安装在seata父pom.x.原创 2020-11-01 14:16:32 · 1119 阅读 · 3 评论 -
Seata使用AT模式及源码解析(一)
一.分布式事务问题在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?以工单操作为例:正常情况下:页面发起一个工单相关操作,假设流程中对工单操作的同时,还需要调用客户,备件服务进行操做,那么这里对于备件及客户的操作都是在自己的服务中进行的,那么事务也就是在自己的服务中控制的,一切都没问题的时候,工单,客户,备件完成自己本地的事务操作后提交,数据没有问题。异常情况:假设:子流程客户出现事务回滚,而主流程及子流程备件均已提交事务,那么就出现事务不一致问题了。解决方案:两.原创 2020-11-01 12:45:00 · 1581 阅读 · 0 评论 -
RocketMQ高级
一:高级特性消息生成者发送消息MQ收到消息,将消息进行持久化,在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者,然后等待消费者返回ACK如果消息消费者在指定时间内成功返回ack,那么MQ认为消息消费成功,在存储中删除消息,即执行第6步;如果MQ在指定时间内没有收到ACK,则认为消息消费失败,会尝试重新push消息,重复执行4、5、6步骤MQ删除消息1.1 存储介质关系型数据库DBApache下开源的另外一款MQ—ActiveMQ(默认采用的KahaDB做消原创 2020-09-13 15:46:35 · 802 阅读 · 0 评论 -
设计模式详解(三)
十六:解释器模式(interpreter)1.介绍:用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的 编译器和解释器设计。当我们需要开发一种新的语言时,可以考虑使用解释器模式。尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中,可以使用 Jruby,Groovy、java的js引擎来替代解释器的作用,弥补java语言的不足。2.使用场景:EL表达式式的处理 正...原创 2019-05-17 16:13:31 · 197 阅读 · 0 评论 -
设计模式详解(二)
七:桥接模式(bridge)1.问题引出:商城系统中很多商品分类,以电脑为例:台式机,笔记本,平板电脑等,我们可以通过下图描述其关系通过上面的图会发现很多问题:如果要增加一个新的电脑类型需要再增加各个品牌对应的类 如果要增加一个新的品牌,也要增加各个电脑类型的类 违反单一职责原则:一个类即表示品牌又表示是那种类型的电脑2.场景分析商城系统中常见的商品分类,以电脑为类,如何...原创 2019-05-17 11:38:07 · 224 阅读 · 0 评论 -
JDK1.7&1.8中ConcurrentHashMap解析
一.总体概述HashMap在开发中很常用,但HashMap存在一个弊端就是线程不安全,解决办法就是使用Hashtable代替或使用Collections.synchronizedMap(m);将HashMap转换为线程安全的,但这两种方法虽说实现了线程安全,但是并发性能比较差,因为是全表加锁,那么并发界的大牛Doug Lea就为我们提供了ConcurrentHashMap解决这个问题,不仅实现...原创 2019-05-12 15:22:29 · 955 阅读 · 0 评论 -
设计模式详解(一)
一:单例模式1.作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。2.常用应用场景:Windows的Task Manager(任务管理器)就是很典型的单例模式 windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。 项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,每次n...原创 2019-05-16 15:17:38 · 199 阅读 · 0 评论 -
JDK1.8中HashMap解析
一:概述JDK 1.8对HashMap进行了比较大的优化,底层实现由之前的“数组+链表”改为“数组+链表+红黑树”相对于JDK7中的HashMap,JDK8中HashMap的实现主要有一下几点不同:在JDK8中new HashMap()的时候,底层没有创建一个默认长度为16的Entry[]数组 在JDK8中Entry[]数组变为Node[]数组 在JDK8中首次调用put()方...原创 2019-05-10 15:38:50 · 542 阅读 · 0 评论 -
技能提升:java容器详解
一:List特点:有序,不唯一1.ArrayList线性表中的顺序表在内存中分配连续的空间,实现长度可变的数组 优点:遍历元素和随机访问元素的效率比较高 缺点:添加删除需要大量移动元素效率低,按照内容查找效率低2.LinkedList线性表中的双向链表采用双向链表的存储方式 优点:插入删除元素效率高 缺点:遍历随机访问元素效率低3.ArrayList源码分析Ar...原创 2019-04-29 13:44:41 · 327 阅读 · 0 评论 -
技能提升:并发编程(五)
3.BlockingQueue(阻塞队列)//通过阻塞队列实现生产者消费者模式public class Tmall3 { private int count=10;//队列的最大大小 private BlockingQueue<Integer> blockingQueue=new ArrayBlockingQueue<>(count); public void...原创 2019-04-23 09:08:35 · 186 阅读 · 0 评论 -
技能提升:并发编程(四)
十六:ThradLoacl1.简单使用public class Demo2 { private ThreadLocal<Integer> threadLocal=new ThreadLocal<Integer>() { protected Integer initialValue() {//初始化值 Integer integer = new Inte...原创 2019-04-13 17:44:29 · 212 阅读 · 0 评论 -
技能提升:并发编程(二)
3.自定义的lock(可重入)public class MyLock implements Lock { private boolean isLock=false; //用于实现可重入锁 private Thread lockBy=null; private int lockCount=0;//线程计数 @Override public synchronized vo...原创 2019-04-06 14:23:30 · 187 阅读 · 0 评论 -
技能提升:并发编程(三)
十三:读写锁1.读写锁初步认识public class Demo1 { private Map<String, Object> map=new HashMap<>(); private ReentrantReadWriteLock readWriteLock=new ReentrantReadWriteLock(); private ReadLock r...原创 2019-04-09 21:30:12 · 187 阅读 · 0 评论 -
技能提升:并发编程(一)
一:线程状态1、新创建了一个线程对象。2、就绪状态:线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。3、运行状态:就绪状态的线程获取了CPU,执行程序代码。4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,...原创 2019-03-26 09:06:00 · 312 阅读 · 0 评论
分享