6 山楂树男孩

尚未进行身份认证

专注于Java、SpringBoot、SpringCloud、微服务、Docker、Kubernetes、持续集成等领域

等级
TA的排名 4k+

Java中的SPI机制

本文通过探析JDK提供的,在开源项目中比较常用的JavaSPI机制,希望给大家在实际开发实践、学习开源项目提供参考。1SPI是什么SPI全称ServiceProviderInterface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:JavaSPI实际上是“基于接口的编程+策略模式+配置文件”组合实现...

2019-09-12 17:28:36

分布式事务(3)实现TCC的基础技术

概述通过前面的文章介绍,我们已经知道了分布式事务的几种常见的解决方案,从我的从业经历来看,大部分的企业采用TCC或者基于消息队列中间件的最终一致性这两种解决方案。本专栏也将重点剖析这两种方案的具体实现,下面我们先来了解一下分布式环境下微服务实现分布式事务TCC方案的一些基础支持技术。我们知道TCC是Try、Confirm和Cancel三个阶段的简称,通过下图我们可以看到TCC方案的具体结构图(...

2019-09-06 16:09:50

分布式事务(2)基础理论

这篇文章将介绍什么是分布式事务,分布式事务解决什么问题,对分布式事务实现的难点,解决思路,不同场景下方案的选择,通过图解的方式进行梳理、总结和比较。相信耐心看完这篇文章,谈到分布式事务,不再只是有“2PC”、“3PC”、“MQ的消息事务”、“最终一致性”、“TCC”等这些知识碎片,而是能够将知识连成一片,形成知识体系。1什么是事务介绍分布式事务之前,先介绍什么是事务。事务的具体定...

2019-09-05 09:29:08

java多线程之并发框架Disruptor

java多线程之并发框架Disruptor什么是DisruptorDisruptor的特性Disruptor入门例子例子结果参考什么是DisruptorDisruptor是一个高性能的无锁线程间通讯框架,作者英国LMAX公司,其用于自己一种新型零售金融交易平台,它能够以很低的延迟产生大量交易,这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻...

2019-08-30 15:51:55

分布式事务(1)四种解决方案

简述分布式事务指事务的操作位于不同的节点上,需要保证事务的AICD特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。解决方案在分布式系统中,要实现分布式事务,无外乎那几种解决方案。一、两阶段提交(2PC)两阶段提交(Two-phaseCommit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真...

2019-08-27 11:44:50

HashMap原理

HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入...

2019-05-13 15:37:30

java多线程之wait和notify

1.使用注意事项1、永远在synchronized的函数或对象里使用wait、notify和notifyAll,不然Java虚拟机会生成IllegalMonitorStateException。2、永远在while循环里而不是if语句下使用wait。这样,循环会在线程睡眠前后都检查wait的条件,并在条件实际上并未改变的情况下处理唤醒通知。3、永远在多线程间共享的对象上使用wait。4...

2019-05-13 15:05:59

java8特性之集合stream式操作

一、测试类publicclassStudent{publicStudent(Stringcity){this.city=city;}privateStringcity;publicStringgetCity(){returncity;}publicvoids...

2019-05-05 17:20:45

java8特性之lambda表达式

一、概述只要是只有一个方法的接口就可以使用lambda表达式,这样的接口被称为“函数式接口”。二、例子publicinterfaceTestInter{voidtest();}publicinterfaceTestInter2{voidtest(intparam);}publicinterfaceTestInt...

2019-05-05 17:00:46

java设计模式之策略模式

一、定义算法族和实现publicinterfaceIAttack{publicvoidattack();}publicinterfaceIDisplay{publicvoiddisplay();}publicinterfaceIRun{publicvoidrun();}publicclass...

2019-05-05 10:20:16

logback最佳实践

一、logback介绍Logback是由log4j创始人设计的一个开源日志组件。LogBack被分为3个组件,logback-core,logback-classic和logback-access。1.logback-core:提供了LogBack的核心功能,是另外两个组件的基础。2.logback-classic:实现了Slf4j的API,所以当想配合Slf4j使用时,需要...

2019-04-25 16:06:58

深入理解SimpleChannelInboundHandler

因项目需要,需要了解Netty这款号称"高性能Java网络编程"框架。拿起一本《NettyInAction》开始研究,在第2章的例子中,发现Echo服务端使用的ChannelHandler是ChannelInboundHandlerAdapter,而Echo客户端使用的却是SimpleChannelInboundHandler。一脸茫然,不知所措,只能点进去看各自...

2019-04-24 16:30:28

java多线程之ConcurrentLinkedQueue

一、简介一个基于链接节点的无界线程安全队列。此队列按照FIFO(先进先出)原则对元素进行排序。队列的头部是队列中时间最长的元素。队列的尾部是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共collection时,ConcurrentLinkedQueue是一个恰当的选择。此队列不允许使用null元素。二、例子...

2019-04-23 10:30:54

java多线程之ThreadLocal

一、ThreadLocal概念ThreadLocal的实例代表了一个线程局部的变量,每条线程都只能看到自己的值,并不会意识到其它的线程中也存在该变量。二、ThreadLocal例子/***使用ThreadLocal是为了使得代码看起来更加优雅*其实可以通过在每个线程里面new对象分别计算,*但是因为这些操作是重复的,而且因为是各自线程内部变量(new对象进行...

2019-04-22 18:05:48

Java多线程之原子操作类

一、原子操作类原子操作类有三大类:(1)基本类型,有AtomicInteger、AtomicLong、AtomicBoolean,(2)数组类型,AtomcixxxArray,(3)引用类型,AtomicReference二、例子importjava.util.concurrent.atomic.AtomicIntegerArray;importjava.util.con...

2019-04-22 15:00:07

springcloud之三步实现eureka服务端

一、maven依赖<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.comp...

2019-04-15 09:56:34

RabbitMQ之topic模式

概述消息发送到topic类型的exchange上时不能随意指定routing_key(一定是指由一系列由点号连接单词的字符串,单词可以是任意的,但一般都会与消息或多或少的有些关联)。Routingkey的长度不能超过255个字节。Bindingkey也一定要是同样的方式。Topic类型的exchange就像一个直接的交换:一个由生产者指定了确定routingkey的消息将会被推送给所...

2019-03-12 11:26:39

Redis缓存击穿,穿透,雪崩等问题,及解决方案

缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈...

2019-02-18 16:32:49

java支持的四种I/O模型

同步、异步、阻塞、非阻塞都是和I/O(输入输出)有关的概念,最简单的文件读取就是I/O操作。而在文件读取这件事儿上,可以有多种方式。本篇会先介绍一下I/O的基本概念,通过一个生活例子来分别解释下这几种I/O模型,以及Java支持的I/O模型。基本概念在解释I/O模型之前,我先说明一下几个操作系统的概念文件描述符fd文件描述符(filedescriptor)是计算机科学中的一个...

2018-12-29 15:21:52

RabbitMQ之基础知识

一、背景    RabbitMQ是一个由erlang开发的AMQP(AdvancedMessageQueue)的开源实现。AMQP的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如COBAR的IIOP,或者是SOAP等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的MSMQ,IBM的WebsphereMQ...

2018-12-28 15:55:28

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。