自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 apollo 原理浅析

下图简要描述了Apollo客户端的实现原理:客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。(通过Http Long Polling实现)客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。这是一个fallback机制,为了防止推送机制失效导致配置不更新客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apoll

2021-02-09 12:02:33 684

原创 ConcurrentHashMap 实现原理

ConcurrentHashMap 是如何实现即保证线程安全,又能有良好的性能。结合源码进行分析数据结构:取消了Segment分段锁的数据结构,取而代之的是数组+链表+红黑树的结构。保证线程安全机制:JDK1.7采用segment的分段锁机制实现线程安全,其中segment继承自ReentrantLock。JDK1.8采用CAS(代码在哪里,待考证)+Synchronized保证线程安全。锁的粒度:原来是对需要进行数据操作的Segment加锁,现调整为对每个数组元素加锁(Node)。

2020-09-15 02:02:10 164 1

原创 Eureka原理(图待完善)

注册。EurekaClient 在启动的时候,将配置信息(serviceId , IP地址,端口)发送给Eureka Server. Eureka Server 将其添加到服务列表CurrentHashMap中。服务续约:Eureka Client 每30秒发送心跳到eureka server续约,EurekaServer将EurekaClient心跳中的时间戳参数与已有服务列表中对应的该服务的时间戳进行比较,不相等就更新对应的服务列表;如果EurekaServer 90秒都没收到某个EurekaC.

2020-09-14 02:32:46 275

原创 spring是怎么解决循环依赖的(待完善)

首先了解一点:spring单例对象的初始化大略分为三步只要理解两点:1.Spring是通过递归的方式获取目标bean及其所依赖的bean的;2.Spring实例化一个bean的时候,是分两步进行的,首先实例化目标bean,然后为其注入属性。结合这两点,也就是说,Spring在实例化一个bean的时候,是首先递归的实例化其所依赖的所有bean,直到某个bean没有依赖其他bean,此时就会将该实例返回,然后反递归的将获取到的bean设置为各个上层bean的属性的。...

2020-09-10 03:02:28 126

原创 kafka为什么快

Kafka会把收到的消息都写入到硬盘中,为了优化写入速度Kafka采用了两个技术, 顺序写入 和 MMFile、批量压缩。(1)顺序写入:因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是最耗时的。所以硬盘最讨厌随机I/O,最喜欢顺序I/O。为了提高读写硬盘的速度,Kafka就是使用分片(partition)写入,顺序I/O的做法。而如果在内存中操作,随着堆内存数的增多,jvm进行GC的时间就会变得很长。如下图(2)memory mapped file (MMAP)

2020-09-05 00:42:30 195

原创 hystrix线程池隔离原理

1. 首先hystrix会把每个业务请求封装成对应的命令模式(Command),每个类型的Command会对于一个线程池,创建好的线程池会被放入ConcurrentHashMap中,这样,当下一次同样类型的请求过来的时候,就会直接从ConcurrentHashMap中取出对于的线程池,具体过程如下图: 2. 然后hystrix会检查对应类型的请求,是否已经在缓冲中,如果存在,则直接接结果返回,如果不存在,则进入熔断器检查阶段;3.hystrix会检查熔断器(cirruite brea...

2020-08-21 03:41:00 1143

原创 Java设计原则

1、依赖倒转原则基本介绍:(1)高层模块不应依赖底层模块(2)抽象不应该依赖细节,细节应该依赖抽象(3)依赖倒转原则的中心思想是面向接口编程(4)相对于细节的多变形,抽象的东西要更稳定。以抽象为基础搭建的架构要比以细节为基础搭建的架构要更稳定(5)使用接口或者抽象类来制定规范,而不涉及任何具体操作,把实现具体细节的任务交给实现类去完成。具体案例代码:...

2020-06-25 00:40:23 128

原创 区块链基本概念

算力:也称哈希率。衡量一个挖矿机(或者CPU)每秒钟能做多少次hash碰撞的指 标。单位写成hash/s (1P=1024T,1T=1024G,1G=1024M,1M=1024k,1 kH / s =每秒1,000哈希)...

2019-11-08 16:25:32 515

原创 docker 常用命令

启动某个镜像:docker run -d -p 8001:8080 dockertest8004dockertest8004 是镜像名称 -d表示后在台运行-p前面表示docker对外暴露的接口,后面表示应 用启动的接口...

2019-09-24 15:25:27 95

原创 记一次InnoDB 产生死锁的过程

InnoDB通过给索引项加锁来实现行锁,如果没有索引,则通过隐藏的聚簇索引来对记录加锁。如果操作不通过索引条件检索数据,InnoDB 则对表中的所有记录加锁,实际效果就和表锁一样由于InnoDB特殊的索引机制: 操作使用主键索引时,InnoDB会锁住主键索引;使用非主键索引时,InnoDB会先锁住非主键索引,再锁定主键索引。  会话一的语句使用了b上的索引,因为它是非主键索引,所以会先在b索...

2019-09-15 23:40:41 150

原创 聚集索引(Clustered Index)与普通索引(Secondary Index)浅析

InnoDB 的索引有哪些类型:InnoDB中一共有两种类型的索引:聚集索引(Clustered Index)、普通索引(Secondary Index)。聚集索引是怎么样生成的:InnoDB 的每一个表都会有聚集索引。如果你没手动创建,InnoDB 也会默认的帮你创建聚集索引。(1)如果表定义了 PK,则 PK 就是聚集索引;(2)如果表没有定义 PK,则第一个非空 unique...

2019-09-15 23:15:10 551

原创 API接口安全方案

概述:API数据交互采用非对称加密。由服务端生成公钥和私钥,前端通过接口获取到生成的公钥,私钥由服务端保存。一般在比较大的版本升级的时候,才会获取一次公钥和私钥。接口通讯的数据安全主要由以下几个参数保证:token:在前端点击登录的时候,前端首先将用户名(username),密码(公钥加密后),deviceId,loginTime发送给server. server校验登录成功只会根据user...

2019-08-29 19:28:30 641

原创 脏读,不可重复读,以及幻读的定义

脏读:即一个事务读取到了另外一个事务还没提交的数据。不可重复读:即一个事务中,两次读取得到的结果不一样。例如:session1 第一次读取id为1 的user的age为1,此时session1还没结束;session2讲id为1的user的age更新为2了,并以及成功提交了事务,session1因为还没结束,再次去读取id为1的用户是,age却变为2 了。幻读:并不是指某一次数据库操作的...

2019-08-28 00:47:35 243

原创 什么叫MVCC

MVCC:Multi-Version Concurrency Control,多版本并发控制。MVCC 是一种并发控制的方法.MVCC 提供了时点(point in time)一致性视图。MVCC 并发控制下的读事务一般使用时间戳或者事务 ID去标记当前读的数据库的状态(版本),读取这个版本的数据。读、写事务相互隔离,不需要加锁。读写并存的时候,写操作会根据目前数据库的状态,创建一个新版本,并发...

2019-08-28 00:37:02 148

原创 jdk的ExecutorService中几种常用线程的特点以及使用场景

1.ExecutorService.newFixedThreadPool(nThreads):(1)总是维护固定数量的核心线程数(即活动线程数总是和最大线程数一致),哪怕都没有任务需要执行。(2)没有所谓的非空闲时间,即keepAliveTime为0。即线程一闲下来就会被马上回收(3)阻塞队列为无界队列LinkedBlockingQueue。使用场景:FixedThreadPool 应该...

2019-08-27 23:16:42 277

原创 简述一下springcloud中ribbon组建如何实现负载均衡。

ribbon整体流程图:(1)首先获取所有标识@LoadBalanced注解的RestTemplate(可以理解成获取那些开启了Ribbon负载均衡功能的RestTemplate),然后将Ribbon默认的拦截器LoadBalancerInterceptor添加到RestTemplate中;(2)当有请求发起时,ribbon默认的拦截器首先会创建ILoadBalancer(里面)。 创建IL...

2019-08-27 18:45:56 172

原创 threadPoolExecutor 中三种方法的区别(shutdown,shutdownNow,awaitTermination)

(1)shutdown:停止接受submit提交的任务,等待线程池中已经在运行的线程执行完毕后,关闭线程池。(2)shutdownNow: 试图停止当前正执行的task,并返回尚未执行的task的list(3)awaitTermination方法:接收timeout和TimeUnit两个参数。当等待超过设定时间时,会监测ExecutorService是否已经关闭,若关闭则返回true,否则返...

2019-08-10 23:51:31 1677

原创 jvm调优

1

2019-07-21 14:37:42 86

原创 分布式事务的几种处理模式

1. LCN事务模式一、原理介绍:LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。二、模式特点:该模式对代码的嵌入性为低。该模式仅限于本地存在连接对象且可通过连接对象控制事务的模块。该模式下的事务提交与回滚是由本地事务方控制,对于数据一致性上...

2019-07-18 12:32:22 479

原创 分布式事务的2pc方式以及3pc方式

2PC:即2 phase committee,包括准备阶段和提交阶段。这种方法把分布式事务设置为事务参与方(业务方),和事务管理方(协调方)。(1)准备阶段: 事务协调者(事务管理器)给每个参与者(资源管理器)发送Prepare消息,每个参与者要么直接返回失败(如权限验证失败),要么在本地执行事务,写本地的redo和undo日志,但不提交。(2)提交阶段:如果协调者收到了参与者的失败消息,或者...

2019-07-18 12:12:25 503

原创 mysql 存储引擎

mysql 存储引擎。MyIsam 和InnerDB存储结构不同。myisam存储在独立的文件中.MYD (MYData),索引文件的扩展名是.MYI (MYIndex),.frm文件存储表定义。而innerdb所有的表都存储在同一个文件中。存储空间不同。MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。...

2019-05-28 12:17:39 61

原创 java分代垃圾收集机制

如何分代如图所示:虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。年轻代:所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收...

2019-05-23 23:38:16 102

原创 JVM内存结构

JVM内存结构1.JVM 内存结构如下图所示:

2019-05-23 23:06:30 122

空空如也

空空如也

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

TA关注的人

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