自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 64 3

原创 Seata使用AT模式及源码解析(一)

一.分布式事务问题在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?以工单操作为例:正常情况下:页面发起一个工单相关操作,假设流程中对工单操作的同时,还需要调用客户,备件服务进行操做,那么这里对于备件及客户的操作都是在自己的服务中进行的,那么事务也就是在自己的服务中控制的,一切都没问题的时候,工单,客户,备件完成自己本地的事务操作后提交,数据没有问题。异常情况:假设:子流程客户出现事务回滚,而主流程及子流程备件均已提交事务,那么就出现事务不一致问题了。解决方案:两.

2020-11-01 12:45:00 41

原创 WebService详解及CXF的使用

1.WebService简介Webservice是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Serv...

2020-09-13 15:50:24 137

原创 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 9

原创 知识总结:面试重要知识点

0:Java基础1.自动装箱与拆箱https://www.cnblogs.com/dolphin0520/p/3780005.html一:javaWeb部分1.Servlet何时创建:默认第一次访问servlet时创建该对象2.Servlet何时销毁:服务器关闭servlet就销毁了3.每次访问必然执行的方法:service(ServletRequest req, Ser...

2019-06-10 15:42:15 98

原创 Docker使用指南

一:虚拟化1.什么是虚拟化在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。在实际的生产环境...

2019-05-26 23:05:02 655

原创 MyBatis源码解析

一:运行原理1.SqlSessionFactory的创建及配置文件的解析首先通过配置文件的文件流创建SqlSessionFactoryBuilder对象调用build方法,传入文件流之后通过解析器解析xml配置文件通过XPathParse解析configuration节点,获取根节点,之后再parseConfiguration()方法中根据根节点解析根节点中的每...

2019-05-26 15:03:06 91

原创 Hystrix实现微服务高可用架构

一:什么是Hystrix在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提供故障时...

2019-05-24 17:20:46 324

原创 高频数据库分库分表面试题解析

一.为啥要分库分表?假如我们现在是一个小创业公司(或者是一个 BAT 公司刚兴起的一个新部门),现在注册用户就 20 万,每天活跃用户就 1 万,每天单表数据量就 1000,然后高峰期每秒钟并发请求最多就 10。天,就这种系统,随便找一个有几年工作经验的,然后带几个刚培训出来的,随便干干都可以。结果没想到我们运气居然这么好,碰上个 CEO 带着我们走上了康庄大道,业务发展迅猛,过了几个月,...

2019-05-23 17:29:38 1164

原创 高频分布式面试题解析

一:为啥进行系统拆分?如何进行系统拆分?为啥要使用dubbo?1.为啥进行系统拆分要是不拆分,一个大系统几十万行代码,20 个人维护一份代码,简直是悲剧啊。代码经常改着改着就冲突了,各种代码冲突和合并要处理,非常耗费时间;经常我改动了我的代码,你调用了我的,导致你的代码也得重新测试,麻烦的要死;然后每次发布都是几十万行代码的系统一起发布,大家得一起提心吊胆准备上线,几十万行代码的上线,可能...

2019-05-23 10:39:07 355

原创 高频缓存面试题解析(二)

八:如何应对缓存雪崩及缓存穿透?1.缓存雪崩缓存雪崩现象:缓存服务器宕机导致大量请求直接到数据库,数据库无法抗住这么大的并发量,导致数据库宕机,从而导致整个程序宕机。之后可能就无法启动数据库,起一次,死一次。解决办法:事前:尽量保证整个 Redis 集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策略。 事中:本地 Ehcache 缓存 + Hystrix 限流&am...

2019-05-22 11:35:38 326 1

原创 高频缓存面试题解析(一)

一:项目中缓存如何使用?缓存使用不当会造成什么后果?1.项目中如何使用:结合自己的项目总体概括一下即可2.为啥在项目里要用缓存呢:高性能:假设这么个场景,你有个操作,一个请求过来,各种乱七八糟操作mysql,半天查出来一个结果,耗时600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办?使用缓存,折腾600ms查出来的结果,扔缓存里,一...

2019-05-21 21:02:17 553

原创 高频分布式搜索引擎面试题解析

一:ES分布式架构的基本原理(ES如何实现分布式)?ElasticSearch 设计的理念就是分布式搜索引擎,底层其实还是基于 lucene 的。核心思想就是在多台机器上启动多个 es 进程实例,组成了一个 es 集群。es 中存储数据的基本单位是索引,比如说你现在要在 es 中存储一些订单数据,你就应该在 es 中创建一个索引order_idx,所有的订单数据就都写到这个索引里面去,一个索...

2019-05-20 22:29:08 247

原创 高频消息中间件面试题解析

一:消息队列的主要作用是什么?1.消息队列的特性:业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所定义的规范进行通信。FIFO,先投递先到达的保证是一个消息队列和一个buffer的本质区别。容灾,对于普适的消息队列组件来说,节点的动态增删和消息的持久化,都是支持其容灾能力的重要基本特性。性能,这个不必多说了...

2019-05-20 09:25:13 881

原创 设计模式详解(三)

十六:解释器模式(interpreter)1.介绍:用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的 编译器和解释器设计。当我们需要开发一种新的语言时,可以考虑使用解释器模式。尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中,可以使用 Jruby,Groovy、java的js引擎来替代解释器的作用,弥补java语言的不足。2.使用场景:EL表达式式的处理 正...

2019-05-17 16:13:31 60

原创 设计模式详解(二)

七:桥接模式(bridge)1.问题引出:商城系统中很多商品分类,以电脑为例:台式机,笔记本,平板电脑等,我们可以通过下图描述其关系通过上面的图会发现很多问题:如果要增加一个新的电脑类型需要再增加各个品牌对应的类 如果要增加一个新的品牌,也要增加各个电脑类型的类 违反单一职责原则:一个类即表示品牌又表示是那种类型的电脑2.场景分析商城系统中常见的商品分类,以电脑为类,如何...

2019-05-17 11:38:07 78

原创 设计模式详解(一)

一:单例模式1.作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。2.常用应用场景:Windows的Task Manager(任务管理器)就是很典型的单例模式 windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。 项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,每次n...

2019-05-16 15:17:38 50

原创 消息中间件之ActiveMQ

一:JMSJMS的全称是Java Message Service,即Java消息服务。用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。对于消息的传递有两种...

2019-05-15 16:02:59 110

原创 Dubbo使用及原理简介

一:RPCRPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。 RPC两个核心模块:通讯,序列化,这两个模块决定RPC的性能好坏...

2019-05-13 22:34:05 170

原创 JDK1.7&1.8中ConcurrentHashMap解析

一.总体概述HashMap在开发中很常用,但HashMap存在一个弊端就是线程不安全,解决办法就是使用Hashtable代替或使用Collections.synchronizedMap(m);将HashMap转换为线程安全的,但这两种方法虽说实现了线程安全,但是并发性能比较差,因为是全表加锁,那么并发界的大牛Doug Lea就为我们提供了ConcurrentHashMap解决这个问题,不仅实现...

2019-05-12 15:22:29 429

原创 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 167

原创 JVM面试题总结

1.JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots?什么垃圾:内存中不在被使用到的空间就是垃圾判断对象时垃圾的方法:引用计数法:一个对象被引用其引用值就+1,取消引用就-1,很难解决循环引用的问题 可达性分析法:根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chai...

2019-05-09 14:07:12 3316

原创 Redis持久化,事务,主从复制

一:Redis配置文件介绍1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定 pidfile /var/run/redis.pid3. 指定Redis监听端口,默认端口为6379,为...

2019-05-04 14:50:47 78

原创 MySql高级(二)

四:MySql锁机制1.mysql锁定义锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。2.锁的分类从对...

2019-05-03 12:28:05 126

原创 MySql高级(一)

一:MySql的架构介绍1.mysql的逻辑架构和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。1)连接层最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端...

2019-05-02 13:05:04 69

原创 技能提升:java容器详解

一:List特点:有序,不唯一1.ArrayList线性表中的顺序表在内存中分配连续的空间,实现长度可变的数组 优点:遍历元素和随机访问元素的效率比较高 缺点:添加删除需要大量移动元素效率低,按照内容查找效率低2.LinkedList线性表中的双向链表采用双向链表的存储方式 优点:插入删除元素效率高 缺点:遍历随机访问元素效率低3.ArrayList源码分析Ar...

2019-04-29 13:44:41 114

原创 Git&GitHub使用指南

一:实用指令1.初始化本地git仓库(git init)在某个文件夹下使用git init初始化git仓库,会生成一个隐藏文件夹.git 注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。2.设置签名(git config [--global]user.name / git config [--global]user.email)...

2019-04-26 22:05:33 82

原创 技能提升:并发编程(五)

3.BlockingQueue(阻塞队列)//通过阻塞队列实现生产者消费者模式public class Tmall3 { private int count=10;//队列的最大大小 private BlockingQueue<Integer> blockingQueue=new ArrayBlockingQueue<>(count); public void...

2019-04-23 09:08:35 45

原创 技能提升:并发编程(四)

十六:ThradLoacl1.简单使用public class Demo2 { private ThreadLocal<Integer> threadLocal=new ThreadLocal<Integer>() { protected Integer initialValue() {//初始化值 Integer integer = new Inte...

2019-04-13 17:44:29 53

原创 技能提升:并发编程(三)

十三:读写锁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 74

原创 技能提升:并发编程(二)

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 62

原创 技能提升:并发编程(一)

一:线程状态1、新创建了一个线程对象。2、就绪状态:线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。3、运行状态:就绪状态的线程获取了CPU,执行程序代码。4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,...

2019-03-26 09:06:00 76

原创 技能提升:Linux加强(五)

十三:Shell编程1.为什么要学习Shell编程1) Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。2) 对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本 进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。3) 对于大数据程序员来说,需要编写Shell程序来管理集群。2.Shell是...

2019-02-19 22:53:11 105

原创 技能提升:Linux加强(四)

九:网络配置1.Linux网络配置原理图(虚拟机版)2.linux网络环境配置1)配置ip地址(自动获取)特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样。2)配置ip地址(指定固定的ip)直接修改配置文件来指定IP,并可以连接到外网(程序员推荐),编辑 vi /etc/sysconfig/network-scripts/ifcfg-et...

2019-02-17 18:49:38 89

原创 技能提升:Linux加强(三)

3.权限的基本介绍ls -l 中显示的内容如下:-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc0-9位说明1) 第0位确定文件类型(d, - , l , c , b)2) 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。---User3) 第4-6位确定所属组(同用户组的)拥有该文件的权限,---Group4) 第7-9位...

2019-02-12 22:18:22 94

原创 技能提升:Linux加强(二)

touch (功能描述:创建空文件)一次创建多个文件cp(功能描述:拷贝文件)基本语法cp [选项] source dest常用选项-r :递归复制整个文件夹拷贝a.txt文件到bb目录下将bb目录拷贝到aa目录\cp -r xx.txt aa/ 强制覆盖已有文件或文件夹rm(功能描述:移除文件或目录)基本语法rm [选项] 要删...

2019-02-01 22:22:32 75

原创 技能提升:Linux加强(一)

一:Vi及Vim编辑器1.基本介绍:所有的 Linux 系统都会内建 vi 文本编辑器,Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别 语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别 丰富,在程序员中被广泛使用。2.三种模式正常模式:以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用 『上...

2019-01-24 22:39:36 150

原创 知识储备:SpringBoot启动运行流程原理解析

SpringBoot项目通过SpringApplication.run()运行,分为两步首先new了一个SpringApplication,之后再调用run()方法,下面我们就看看这两步1.创建SpringApplication通过debug进入到SpringApplication的创建中首先判断当前项目是否是web项目,再在所有jar包的META-INF/spring....

2018-11-17 13:53:20 395

原创 知识储备:基于SpringBoot 2.0.5解析Servlet容器自动配置及容器启动原理

1.Servlet容器自动配置原理1.知道SpringBoot自动配置原理的都知道(有不了解的可以查看https://blog.csdn.net/qq_36625757/article/details/83929287这篇博客),SpringBoot在启应用动时都会加载各个jar包下的META-INF/spring.factories文件,读取其中的org.springframework.bo...

2018-11-14 22:11:26 1177

原创 SpringBoot下注册Servlet三大组件(Servlet,Filter,Listener)

由于SpringBoot是通过jar包的形式运行,其内部嵌入了Servlet容器,项目中不存在web.xml文件,所以注册三大组件就不能通过web.xml文件注册。1.注册servlet创建servletimport java.io.IOException;import javax.servlet.ServletException;import javax.servlet.ht...

2018-11-12 21:22:31 735

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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