自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高性能消息队列Kafka之Java客户端的生产者模块详解(分区,拦截器,发送缓冲)

文章目录生产者Demo消息发送的模式发后既忘同步异步发送生产者整体架构生产者拦截器分区器RecordAccumulator生产者端重要配置参数在Kafka历史变迁中,一共有两大版本的生产者客户端,一个是0.9.x之前的scala客户端;另一个是之后引入的Java客户端。当这并不代表Kafka不具有多语言的支持性。实际上,常用的语言如C/C++,Python,Go等语言都有Kafka的客户端,只不过不由官方进行维护本文主要聊一下Java客户端的生产者模块生产者Demo在说明Kafka生产者相关的内容之

2020-07-04 17:09:18 420

原创 各大微服务注册中心简单对比:ZooKeeper、Eureka、Consul 、Nacos

文章目录为什么需要注册中心?CAP理论ZookeeperEurekaConsulNacos为什么需要注册中心?在RPC服务和微服务诞生的时候,就已经有了注册中心的需求了。在最初的架构体系中,集群的概念还不那么流行,且机器数量也比较少,此时直接使用DNS+Nginx就可以满足几乎所有RESTful服务的发现。相关的注册信息直接配置在Nginx。但是随着微服务的流行与流量的激增,机器规模逐渐变大,并且机器会有频繁的上下线行为,这种时候需要运维手动地去维护这个配置信息是一个很麻烦的操作。所以开发者们开始希望

2020-07-01 16:48:25 4344 2

原创 服务注册发现:Eureka快速搭建以及相关组件与配置说明

文章目录Eureka简介Eureka服务角色Eureka架构Eureka简单使用Eureka相关参数和流程第一次注册心跳检测ProviderConsumer自我保护机制Eureka简介Eureka是Netflix开源的一个服务注册发现工具,基于REST协议提供服务。也加入到Spring Cloud子项目中。本文介绍一下基于SpringBoot的Eureka快速使用,以及Eureka各个组件和相关配置的说明。Eureka服务角色每一个Eureka服务都是一个实例(instance)。而一个实例在Eur

2020-06-29 18:35:16 291

原创 微服务容错框架:Hystrix实现服务熔断、降级、限流

文章目录业务背景什么是HystrixHystrix简单实现Hystrix容错资源隔离资源隔离-线程池信号量隔离熔断降级Hystrix执行调用的几个方法executequeueobservetoObservable业务背景在微服务架构体系下,服务间不可避免地会发生依赖关系,一般来说会通过REST Api来进行通信,这里先盗一个图来举例说明一个具体的业务场景(逃):比如一个商城系统的微服务化结构,订单、商品、库存这三个服务是紧密依赖的,在理想情况下,什么问题都不发生当然是最好的。但服务运行期间难免会出现

2020-06-26 23:25:25 678

原创 聊聊Zookeeper之会话机制Session

文章目录什么是Zookeeper的会话机制Session相关的基本概念分桶机制Session激活(续约)什么是Zookeeper的会话机制我们在服务器启动Zookeeper的时候能得知,ZK服务端对外默认端口是2181。而客户端连接到服务端上,其本质其实就是一个TCP连接(长连接) ,当连接正式建立起来的时候,就开起来该次会话的生命周期了。有了会话之后,后续的请求发送,回应,心跳检测等机制都是基于会话来实现的。那对于ZK的服务端来说,如何维护管理这些会话,就是本文要聊的内容啦~Session相关的基本

2020-06-21 18:22:13 908

原创 Zookeeper中的Watcher机制到底是啥?

文章目录啥是watcher机制通知状态(KeeperState)事件类型(EventType)EventType注册与通知之客户端实现EventType注册与通知之服务端实现EventType注册与通知流程简单代码示例啥是watcher机制Zookeeper的watcher机制是其一个非常核心的机制,zookeeper提供的发布/订阅,监听节点变化(如节点的删除,内容的变化,或者子节点状态的变化)等核心功能都是基于watcher机制来是是实现的而watcher机制的实现其实说白了就是一个观察者模式,只

2020-06-18 15:18:55 1502 1

原创 浅谈Zookeeper之分布式一致性协议:ZAB协议

文章目录啥是ZAB协议?消息广播崩溃恢复选举发现同步啥是ZAB协议?ZAB其实就是Zookeeper Atomic Broadcast,也就是zookeeper原子广播,是zookeeper用来保持分布式事务一致性的一种协议ZAB其实就是定义了zookeeper集群在运行过程中的一些通信准则,包括像信息同步,选举,故障转移等机制的一些实现。ZAB协议的内容其实主要包括两个模块:消息广播和崩溃恢复消息广播当zookeeper集群在正常进行的时候,各个结点之间需要保持最终一致性,此时就需要消息广播机

2020-06-18 00:10:16 326

原创 SpringBoot整合RabbitMQ之交换机,确认与通知,持久化

梗概RabbitMQ作为一款高性能的消息队列中间件,主要的作用有业务解耦,削峰,限流等作用。本文主要围绕SpringBoot整合RabbitMQ后的基础使用,介绍一下RabbitMQ中交换机,消息确认,持久化等机制引入RabbitMQ第一步,就是需要在pom.xml中引入相关的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri

2020-06-10 00:09:32 1785 1

原创 海量数据问题总结

文章目录海量数字里,找出topK海量数据里,返回出现频率最高的topK两个文件的数据,找出相同的部分在海量数据中快速定位一个数字是不是在里面海量数据中找到所有出现次数大于2次的海量数字里,找出topK找出topK,这个很明显想到可以用最大堆去做;而数据量过大的话,可以分而治之,就是把这些数据划分到多个文件里面,对每个文件找出topK,最后再合并到一起,找出总的topK至于怎么划分,可以使用一...

2020-03-31 20:52:02 237

原创 Tomcat的几个知识点总结

文章目录Tomcat为什么要破坏双亲委派模型Tomcat的IO模型Tomcat如何生成Servlet有几种在Tomcat中部署Web应用的方法?Tomcat为什么要破坏双亲委派模型这一点其实是Servlet规范里面有提到,建议Servlet容器优先加载Web应用下的类。而实际上Tomcat也这么做了,并且是通过破坏双亲委派模型去实现的。主要目的为了实现各个Web应用的隔离性。因为各个Web应用...

2020-03-31 17:36:56 355

原创 Tomcat总体架构:连接器与容器

文章目录连接器与容器连接器EndPointProcessorAdapter容器连接器与容器Tomcat其实总得来说就分成两个部分:连接器:用来接受请求,并将请求转化为Request对象容器:接收连接器传来的request对象,并调用相关的Servlet进行处理其实就是这两个,一个负责对外,一个负责对内连接器连接器中有三个核心组件:EndPoint,Processor,Adapte...

2020-03-30 01:24:47 356

原创 MongoDB相关

文章目录覆盖索引稀疏索引MongoDB索引类型覆盖索引MongoDB的覆盖索引就是:如果查询请求的字段全部包含在索引里面,那么直接从索引上返回结果集,而不需要再去查询具体的文档。覆盖索引可以提高查询效率,但是有一个需要注意的是,记得要去除_id字段,因为_id字段默认是会被查询出来的,这样的话覆盖索引就不起作用了。稀疏索引稀疏索引,如果文档中对应字段是null的话,那么这个文档就不会进到索...

2020-03-29 17:11:27 152

原创 MongoDB的备份恢复以及关系建模

MongoDB执行mongodump指令,就可以再对应的目录下生成一些列json和bson文件,这些文件可以用来恢复:后续调用mongorestore命令,加上对应的路径参数,就可以进行数据的恢复,需要注意的是,它会先把库中所有的数据进行删除,然后再根据json文件进行恢复,所以生成文件到现在这段时间的数据会丢失MongoDB中的一对多关系,有三种表示方法:嵌入关系:就是直接在一个文档里...

2020-03-29 02:06:55 128

原创 synchorinzed作用域反编译出来的一点东西

synchronized可以作用在方法上,也可以作用在代码块上,而从编译角度来说,这两者是有所区别的。如果作用在方法上,对对应的class文件使用javap进行反编译是这样的:对应方法的标记位上有ACC_SYNCHRONIZED的标记,JVM是通过这个标记来识别这是一个synchronized方法而如果作用在代码块上,反编译后发现,有一个monitorenter指令来控制线程进入同步代码块...

2020-03-18 19:21:16 269

原创 Redis线程模型

Redis它是基于Reactor模式来实现事件处理器。那Redis线程模型包括四个部分:客户端SocketIO多路复用模型。可以实现一个线程监听多个Socket的事件事件分派器。根据Socket中不同的事件来选择不同的事件处理器来执行事件处理器。用来解析相应的事件,并调用方法去处理事件那它的一个执行流程是这样的,客户端通过Socket连上Redis服务器,然后服务端就使用IO多路复用...

2020-03-18 17:51:16 284

原创 OutOfMemory排查

Java程序在运行的时候,因为一些代码问题,可能会出现OOM错误,那此时如何排查呢?可以分为几步第一步,就是找到Tomcat对应的一个进程号,可以使用ps-ef来找到对应的PID第二步,就是可以使用jmap-heap指令,跟上刚才查到的PID,来查看JVM堆内存的使用情况,主要是看survivor区和老年代的空间,如果survivor区和老年代一直是比较满的状态,可能就会有问题第三步,使用j...

2020-03-18 16:07:00 421

原创 单点登陆简介

因为现在的服务器基本都不是单机类型的嘛,基本都会做成一个服务器集群,那么此时会话状态的同步就是一个问题了,就是说对于一个网页,我在一个服务器上登陆了,访问集群别的服务器的时候总不能再登陆一次吧?单点登陆解决的就是这样的问题,就是说我在一个服务器上登陆了,那么其他服务器也应该能得知这个客户端的连接状态才对一个方法就是可以使用Cookie去做。就是客户端持有这个储存着登陆信息的cookie,然后每次...

2020-03-18 01:05:32 135

原创 final关键字内存语义

文章目录写final读final对于final修饰的变量,其实有两个与指重排相关的规则如果final变量在构造函数中赋值,那么就禁止这个赋值操作与构造函数的返回操作进行指令重排序如果一个对象中包含final变量,并且先访问这个对象,然后访问这个final变量,这两个操作不允许发生指令重排序我们所书写的代码顺序和JVM执行的指令顺序不一定是相同的,JVM会在不影响执行正确性的前提下对指令...

2020-03-12 00:09:45 282

原创 计算机网络基础+HTTP知识点总结

文章目录1.什么是DHCP?执行流程?2.说一下TCP的三次握手?为什么是三次?二次不行嘛?3.说一下TCP的四次挥手?最后为什么要等待一个超时时间?4.TCP协议如何保证传输的可靠性?5.说一下TCP的流量控制?6.说一下TCP的拥塞控制?7.什么是DDos攻击?如何预防?8.如果三次握手中的第三次握手失败了,会怎么样?9.GET和POST的区别?10.TCP和UDP的区别?11.从浏览器输入一...

2020-03-11 01:02:50 344

原创 HTTP缓存机制与原理解析

文章目录HTTP报文HTTP缓存强缓存协商缓存HTTP报文HTTP报文分为两个部分Header:报头,填写着相关一些字段属性,与HTTP缓存相关的规则就保存在Header中Body:用来存放HTTP传输的真正数据HTTP缓存HTTP缓存涉及到三个主主体:客户端浏览器,缓存数据库和服务端。而HTTP缓存又分为两种:强缓存协商缓存强缓存其基本思想就是:当数据不存在于缓存数据...

2020-03-10 22:24:41 279

原创 查漏补缺1:快速失败与安全失败

快速失败与安全失败都是在集合遍历中的概念快速失败快速失败的核心思想是维护一个modCount字段。其实就是相当于一个版本号的功能,每当有线程对集合进行修改时,都会修改modCount的值。那在对集合进行遍历的时候,每次调用hasNext之前,都会查看这个modCount字段,如果和预期值不一样,说明遍历期间有其他线程并发访问了。此时会抛出一个Concurrent ModificationExc...

2020-03-08 21:31:33 135

原创 PV操作简介

PV操作就是荷兰语Passeren(通过),Vrijgeven(释放)的简称。对应的就是wait等待,signal释放操作。P操作就是,将进程从运行态转化为阻塞态,直到它被另一个进程唤醒V操作就是,将一个处于阻塞态的进程唤醒。这两个操作是CPU原语,所以从操作系统层面能保证这两个操作是原子操作。PV操作一般都和信号量所关联,来实现一些互斥或者同步的逻辑。比如说将信号量设为0,此时表示一个互...

2020-03-07 17:10:45 5367 1

原创 Spring的7种事务传播行为

文章目录七种事务传播行为事务传播行为指的是一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。比如说,有一个A方法,里面调用了B方法,当执行到B方法时,是应该在当前事务里执行,还是重新打开一个事务来执行,这是由B方法的事务传播行为决定的七种事务传播行为PROPAGATION_REQUIRED表明当前方法一定要在事务中执行,如果有事务存在,就在当前事务中执行;如果没有,则...

2020-03-05 15:17:45 357

原创 MVCC如何实现数据库读已提交和可重复读这两种隔离级别?

文章目录隐藏列undo logReadView读已提交和可重复读的实现我们都知道Mysql有四种事务隔离级别:读未提交读已提交可重复读串行化这四个隔离级别的特点就不多赘述了,这次主要聊一下MVCC(多版本并发控制)是如何实现“读已提交”和“可重复读”这两种隔离级别的。在以往的实现中,MySql要使用读锁+写锁实现隔离级别,而使用MVCC就可以免去读操作,读操作直接基于MVCC实现...

2020-03-04 14:47:57 6699 3

原创 JDK动态代理和Cglib动态代理的区别

这两个动态代理都是在程序运行期间动态修改字节码,然后通过反射创建出代理对象JDKJDK动态代理是基于接口实现的,也就是说,只有实现了接口的类,才能被JDK进行动态代理。JDK会通过一个工厂类,生成代理类的二进制字节码流,这个代理类呢,是Proxy的子类,并且实现了被代理类中实现的所有接口,同时实现了接口中的所有方法,这些方法的实现很简单,直接调用了回调函数,也就是InvocationHand...

2020-03-03 19:24:48 178

原创 Spring bean的生命周期详解

文章目录生命周期流程图代码实现生命周期流程图图已经描述得比较详细了代码实现纸上得来终觉浅,绝知此事要躬行。那就写代码来看看,执行结果是不是符合我们得预期:StudentBean:package com.jay.service;import org.springframework.beans.BeansException;import org.springframework.b...

2020-03-02 16:50:42 148

原创 从源码上看Spring IOC如何解决bean之间循环依赖的问题

文章目录什么是循环依赖三级缓存流程我们来探讨一下Spring是如何解决循环依赖问题的。什么是循环依赖先看一个示例图吧:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0X6MSDp9-1583067580877)(C:\Users\2019.10\Desktop\QQ图片20200301165854.png)]好像很抽象的样子,没事,直接看代码就很清晰了:...

2020-03-01 21:00:49 485

原创 Spring IOC执行流程简单解析

文章目录IOC的基本使用BeanFactory初始化ApplicationContextrefresh方法obtainFreshBeanFactory方法createBeanFactory方法customizeBeanFactory方法loadBeanDefinitions方法parseBeanDefinitions(root, this.delegate)方法finishBeanFactoryI...

2020-02-29 01:49:02 2384

原创 Mybatis执行流程,源码解析

文章目录简单使用Mybatis源码解析获取配置文件的输入流获取SqlSessionFactory对象创建SqlSession获取Mapper接口对象接口方法的调用简单使用Mybatis在看Mybatis的内部执行原理之前,先简单看一下我们要怎么样配置好然后进行使用:先看一下整个结构:mybatis.xml:StudentMapper2.xml:StudentDao2:基本的配...

2020-02-27 00:26:54 245

原创 如何增强Redis主从一致

之前一篇文章讨论了Redis原生如何保证主从一致。链接: Redis主从一致性(2.8版本前后的差别).这是Redis为我们提供的方法,但是初次之外我们还可以使用一些工具来增强一致性半同步复制不一致性的根本原因是主从同步需要一定的时间,如果此时有读操作落在从服务器上就会造成不一致的情况。那解决这个问题最简单的思路就是使用半同步复制。半同步复制就是,如果有一个写操作落在主服务器上,那么这个...

2020-02-25 15:55:09 708

原创 保证数据库与缓存一致性的几种策略

文章目录先更新缓存,再更新数据库先更新数据库,再更新缓存先淘汰缓存,再更新数据库先更新数据库,再淘汰缓存分布式系统下,数据库和缓存本来就无法保证强一致性,因为数据库+缓存的操作并不是原子操作,所以在服务过程中,我们可以忍受一段时间内的数据不一致,但是一定要保证最终一致性。而一般来说,有三种更新策略:先更新数据库,再更新缓存先更新缓存,再更新数据库先更新数据库,再淘汰缓存先淘汰缓存,再...

2020-02-25 15:28:29 447

原创 Redis的6种淘汰策略和3种删除过期键策略

文章目录6种淘汰策略volatile-lruvolatile-ramdomvolatile-ttlallkeys-lruallkeys-randomnoeviction(默认使用)3种删除过期键策略定时删除惰性删除定期删除Redis中通过maxmemory参数来设定内存的使用上限,当Redis使用内存达到阈值时,会根据配置文件中的设置选取要删除的key来删除,从而给新的键值留出空间。Redis...

2020-02-25 00:20:25 1771

原创 Redis之缓存雪崩,穿透,击穿

文章目录缓存雪崩缓存穿透缓存击穿缓存降级缓存预热缓存雪崩缓存雪崩,是指:系统刚上限时,数据还没有加载到缓存中;或者在某一个时间点,缓存中的数据大面积失效了,此时大量的查询请求落在数据库服务器上,造成数据库CPU和内存压力过大,甚至宕机解决方案:使用分布式锁或者分布式队列来限制数据库请求数量,这样可以一定程度上保护数据库服务器。但是加锁所导致吞吐量下降。使缓存的过期时间尽可能分散,比如...

2020-02-24 22:47:04 260

原创 Redis主从一致性(2.8版本前后的差别)

文章目录背景Redis2.8之前全量同步初次同步断线重连同步增量同步Redis2.8之前同步策略的缺点Redis2.8之后复制偏移量复制积压缓存区服务器运行ID背景在Redis中,用户可以执行slaveof指令,或者修改SLAVEOF设置,使得一个服务器B成为另一个服务器A的slave。那么服务器A叫做主服务器,服务器B叫做从服务器。在实际的工程中,主服务器一般只接受客户端的写请求,而从服务器...

2020-02-24 17:34:56 666

原创 Redis之PipeLine

文章目录背景性能对比适用场景注意事项背景Redis是使用请求/响应协议的TCP服务器,所以说通常的执行流程如下:客户端发送请求,同时监听对应的socket,等待服务端响应,一般是一个阻塞的状态服务端将结果发送给客户端,客户端获取到结果整个流程如图:由官方提供的数据来看,Redis每秒可以进行100000+次查询,但是这只是查询的性能,在实际操作中,还需要进行TCP报文的打包和发送...

2020-02-24 14:54:19 320

原创 Redis持久化-RDB与AOF

文章目录简介RDB触发时机手动触发savebgsave被动触发redis.conf参数优缺点AOF触发时机参数重写机制优缺点:简介Redis是一种内存数据库,也就是说,在进程期间,所有对数据库的读写操作都是基于内存来进行的。这样的机制在把Redis当作缓存的场景来说是没啥问题。但是更多的情况是,希望Redis中的数据能够持久化,也就是说下次重启时也可以访问到上次留下来的数据,于是Redis持久...

2020-02-23 23:50:33 209

原创 Redis实现异步队列

使用Redis实现任务队列首先想到的就应该是Redis的列表类型List,这是因为Redis中的列表类型是由双向链表实现的,符合队列的功能。实现其实很简单:非阻塞实现:生产者使用LPUSH 将任务加入队列,消费者使用RPOP将任务移除队列,一个先入先出的队列就实现了://生产者只需将数据LPUSH到队列中127.0.0.1:6379> LPUSH queue task(int...

2020-02-23 18:17:08 241

原创 Redis实现分布式锁

文章目录使用setnx expire del实现使用set实现如果大量key同时过期怎么办?分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,往往需要互斥来防止共享资源的并发访问,从而保证数据一致性。分布式锁需要具备的特性:互斥性:任意时刻都只有一个客户端获得锁,其他申请锁的客户端必须等待安全性:锁只能被持有的客户端删除,其他客户端不能删除避免死锁:获取锁的客户...

2020-02-23 16:37:24 142

原创 JVM(三):l类加载与双亲委派模型

文章目录类加载加载验证1.文件格式验证2.元数据验证3.字节码验证4.符号引用检验准备解析1.类或者接口的解析2.字段解析3.类方法解析4.接口方法解析初始化类加载器启动类加载器(Bootstrap ClassLoader)扩展类加载器(Extension ClassLoader)应用程序类加载库(Application ClassLoader)双亲委派模型工作原理好处类加载类加载的过程包括...

2020-02-20 22:30:13 220

原创 JVM(二):垃圾收集器,内存分配策略

文章目录确定对象是否存活引用计数法可达性分析算法引用强引用软引用弱引用虚引用回收方法区废弃常量无用的类垃圾收集算法标记清除法(mark-swap)复制算法(copy)标记整理法(mark-compact)分代收集算法GC触发的时机安全点抢先式中断主动式中断安全区域垃圾收集器新生代SerialParNewParallel Scavenge老年代Serial OldParallel OldCMS收集器...

2020-02-20 16:00:31 252

空空如也

空空如也

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

TA关注的人

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