自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

奋斗吧_-小青年

所谓专家,就是在极小领域内犯过所能犯的全部错误的人

  • 博客(300)
  • 资源 (3)
  • 收藏
  • 关注

转载 面试必问的 MySQL,你懂了吗?

前言今天不整那些花里胡哨、虚头巴脑的前言了,直接进入正题怼起来。正文二狗:不多BB,先怼几道常问的大题目。MySQL 的事务隔离级别有哪些?分别用于解决什么问题?主要用于解决脏读、不可重复读、幻读。脏读:一个事务读取到另一个事务还未提交的数据。不可重复读:在一个事务中多次读取同一个数据时,结果出现不一致。幻读:在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。不可重复读注重于数据的修改,而幻读注重于数据的插入。二狗:MySQL 的

2021-09-29 10:41:40 474

转载 如何优化缓存中百万级并发的KEY

引言这个问题实际上就是热点key问题,其实热点key问题说来也很简单,就是瞬间有几十万上百万,甚至更大的请求去访问redis上某个固定的key,从而压垮缓存服务的情情况。其实生活中也是有不少这样的例子,比如XX明星结婚。那么关于XX明星的Key就会瞬间增大,就会出现热点数据问题。PS:hot key和big key问题,大家一定要有所了解,非常重要。本文预计分为如下几个部分: 热点key问题 如何发现 业内方案 正文热点Key问题上面提到,所谓热点key问题

2021-09-17 09:57:12 694

转载 阿里 RocketMQ 如何解决消息的顺序&重复两大硬伤?

分布式消息系统作为实现分布式系统可扩展、可伸缩性的关键组件,需要具有高吞吐量、高可用等特点。而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题 消息的重复问题 RocketMQ 作为阿里开源的一款高性能、高吞吐量的消息中间件。 它是怎样来解决这两个问题的? RocketMQ 有哪些关键特性? 其实现原理是怎样的? 关键特性以及其实现原理一、顺序消息消息有序指的是可以按照消息的发送顺序来消费。例如:一笔订单产生了 3 条消息,分别是订单创

2021-08-25 10:17:59 613

转载 再谈mysql锁机制及原理—锁的诠释

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。什么是锁?锁是计算机协调多个进程或线程并发访问某一资源的机制。 锁保证数据并发访问的一致性、有效性; 锁冲突也是影响数据库并发访问性能的一个重要因素。 锁是Mysql在服务器层和存储引擎层的的并发控制。 为什么要加锁数据库是一个多用户使用的共享资源。当多个用

2021-08-18 22:50:15 363

转载 面试题:Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?

前言 bean生命周期 三级缓存解决循环依赖 总结 前言在使用spring框架的日常开发中,bean之间的循环依赖太频繁了,spring已经帮我们去解决循环依赖问题,对我们开发者来说是无感知的,下面具体分析一下spring是如何解决bean之间循环依赖,为什么要使用到三级缓存,而不是二级缓存bean生命周期首先大家需要了解一下bean在spring中的生命周期,bean在spring的加载流程,才能够更加清晰知道spring是如何解决循环依赖的我们在sp..

2021-08-18 22:12:06 179

转载 Ribbon原理解析

一. 核心接口ILoadBalancerRibbon通过ILoadBalancer接口对外提供统一的选择服务器(Server)的功能,此接口会根据不同的负载均衡策略(IRule)选择合适的Server返回给使用者。其核心方法如下:public interface ILoadBalancer { public void addServers(List<Server> newServers); public Server chooseServer(Object key);

2021-08-16 16:49:22 2277

转载 @FeignClient的代理创建和调用过程

1、动态代理的创建过程前面分析过@EnablefeignClient会引入FeignClientsRegistrar,将@FeignClient注解的类以FeignClientFactoryBean的形式往BeanFactory注入BeanDefinition。Spring refresh生命周期的最后一步会将所有单例非懒加载的BeanDefinition执行getBean操作。所以我们需要关注FeignClientFactoryBean#getObejct方法,返回的对象。为了方便分析,以下面的F

2021-08-16 15:33:02 1201

转载 一致性Hash算法背景

一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。  但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知道,memcached服务器端本身不提供分布式cache的一致性,而是由客户端来提供,具体在计算一致性hash时采用如下步骤:首先求出

2021-08-14 09:56:03 144

转载 MySQL死锁解决之道

转载自知乎 云之飞舞 真大佬一、 了解常见的锁类型在讨论传统的隔离级别实现的时候,我们就提到:通过对锁的类型(读锁还是写锁),锁的粒度(行锁还是表锁),持有锁的时间(临时锁还是持续锁)合理的进行组合,就可以实现四种不同的隔离级别;但是上一篇博客中并没有对锁做更深入的介绍,我们这一篇就来仔细的学习下 MySQL 中常见的锁类型。1、表锁 vs. 行锁在 MySQL 中锁的种类有很多,但是最基本的还是表锁和行锁:表锁指的是对一整张表加锁,一般是 DDL 处理时使用,也可以自己在 SQL 中指定;而

2021-08-13 09:41:07 740

转载 hystrix中RequestContextHolder取值为空的问题

我们知道,Hystrix有隔离策略:THREAD以及SEMAPHORE。如果你不知道Hystrix的隔离策略,可以阅读我的书籍《Spring Cloud与Docker微服务架构实战》,或者参考文档:https://github.com/Netflix/Hystrix/wiki/Configuration#executionisolationstrategy引子当隔离策略为THREAD时,是没办法拿到ThreadLocal中的值的。举个例子,使用Feign调用某个远程API,这个远...

2021-08-06 10:19:55 838 1

转载 深入理解synchronized底层原理,一篇文章就够了!

深入理解synchronized底层原理,一篇文章就够了!前言一、synchronized的特性1.1 原子性1.2 可见性1.3 有序性1.4 可重入性二、synchronized的用法三、synchronized锁的实现3.1 同步方法3.2 同步代码块四、synchronized锁的底层实现五、JVM对synchronized的优化5.1 锁膨胀5.1.1 偏向锁5.1.2 轻量级锁5.1.3 重量级锁5.2 锁消除5.3 锁粗化5.4 自旋

2021-07-14 17:02:22 425

转载 sentinel 基本概念

开发的原因,需要对吞吐量(TPS)、QPS、并发数、响应时间(RT)几个概念做下了解,查自百度百科,记录如下:响应时间(RT)   响应时间是指系统对请求作出响应的时间。直观上看,这个指标与人对软件性能的主观感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间。由于一个系统通常会提供许多功能,而不同功能的处理逻辑也千差万别,因而不同功能的响应时间也不尽相同,甚至同一功能在不同输入数据的情况下响应时间也不相同。所以,在讨论一个系统的响应时间时,人们通常是指该系统所有功能的平均时间或者所有功能

2021-06-08 10:53:28 634

转载 Http连接池PoolingHttpClientConnectionManager的应用

前言 Http连接需要的三次握手开销很大, 传统的HttpURLConnection并不支持连接池, HTTP1.1以上默认开启keepalive, 对于现在springcloud横行的社会, feign可以配置好http连接池, 不过总会有某些个别的接口不在服务中, 还有一些非springboot的老旧项目也要加入cloud大家族中, 对于内部频繁访问的url地址, 这就需要一款量身定做的工具类了.讲解先来看看测试效果, 两种工具类的时间消耗对比.这个是测试用的方法, 前后分别调用了某一接..

2021-05-21 16:48:24 2515 1

转载 Zookeeper启动流程分析

前言上篇我们通过了解Paoxs算法开始,到Zab协议的两大特性:崩溃恢复和消息广播,学习了Zookeeper是如何通过Zab协议实现高可用,本篇开始我们来学习Zookeeper的启动流程单机模式启动流程我们知道,Zookeeper使用中分为单机和集群两种,而这两种最大的不同则是,集群启动下需要进行Leader选举以及Leader和Follower之间的数据同步操作,而单机启动则不需要此操作,Zookeeper单机启动大概分为三个部分,分别为预处理、初始化和注册,接下来我们分别来看看三个流程的步骤

2021-05-04 17:35:20 2047

转载 ZK请求处理链概述

摘要从这一节开始,讲解请求处理链相关内容,在集群版启动中,所处的位置如下图所示使用责任链来处理每个客户端的请求时Zookeeper的特色本节主要讲解接口RequestProcessor 以及实现类不同角色的请求处理链Leader下的请求处理链路,以及各个处理器的意义Follower下的请求处理链路,以及各个处理器的意义Observer下的请求处理链路,以及各个处理器的意义接口RequestProcessor 以及实现类RequestProcessor是所有处理器的父接口,其定义了处

2021-05-04 17:25:26 305

转载 排序算法——归并排序与快速排序

首先,二者都运用了递归和分治的两种重要思想。在这里递归就不做详细介绍。分治:顾名思义,分而治之,这是在排序中我们非常常见的一种思想,同时也是在其他场景乃至日常生活的优秀解题方法。当我们遇到一个大的难题无从下手时,我们往往都会将其分成几个小块,当我们处理好每个小模块问题后,将其合并,大的问题便能够的以解决。同样,在我们处理排序问题时,也能充分利用分治思想来提高性能。那么我们先来总结归并排序归并排序归并排序的思想其实很简单,总共分为两步,分与治。当我们面对一个很大的数组时,用以往学过的冒泡,插入,选

2021-04-25 00:06:45 541

转载 树的深度和广度优先遍历

深度优先遍历深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。如下树的深度优先遍历结果为:A B D E C F G * A * /

2021-04-15 15:39:51 141

转载 volatile底层原理详解

volatile关键字是Java虚拟机提供的最轻量级的同步机制。在多线程编程中volatile和synchronized都起着举足轻重的作用,没有这两者,也就没有那么多JUC供我们使用。本文会介绍volatile的作用,着重讲解volatile的底层实现原理。由于volatile的出现和CPU缓存有关,也会介绍CPU缓存的相关内容,让我们更清晰的理解volatile原理的来龙去脉。一、volatile的作用并发编程中有3大重要特性,了解一下:原子性一个操作或者多个操作,要么全部执行成功,要

2021-04-08 10:26:33 569

转载 Redis ==> 集群的三种模式

一、主从同步/复制  通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。  为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此,Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将..

2021-02-23 15:42:19 174

转载 MySQL中的多版本并发控制(MVCC)

概述 笔者在初次看到多版本并发控制(Multi-Version Concurrency Control, MVCC,后文统一用MVCC代替)时,看的一头雾水,尤其是《高性能MySQL》一书中对于MVCC的讲解,言语过于简略,遂通过查阅多方资料,才算大致搞懂MVCC。本文就笔者个人对于MVCC的理解进行一下比较白话文的介绍,意在用更容易理解的方式让大家明白MVCC到底是个什么东西。如有笔者理解有误的地方,恳请各位大佬指正!本文从事务的隔离性(Isolation)出发,引出并发环境下易出现的问题..

2020-07-27 10:55:49 227

转载 HTTP协议篇(一):多路复用、数据流

管道机制、多路复用管道机制(Pipelining)HTTP 1.1 引入了管道机制(Pipelining),即客户端可通过同一个TCP连接同时发送多个请求。如果客户端需要请求两个资源,以前的做法是在同一个TCP连接里面,先发送A请求,然后等待服务器做出回应,收到后再发出B请求;而管道机制则允许浏览器同时发出A请求和B请求,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求。多路复用(Multiplexing)虽然 HTTP 1.1 默认启用长TCP连接,但所有的请求-响应都是按序进行.

2020-07-23 14:41:57 717

转载

何为堆?堆是一种特殊的树,只要满足下面两个条件,它就是一个堆:(1)堆是一颗完全二叉树;(2)堆中某个节点的值总是不大于(或不小于)其父节点的值。其中,我们把根节点最大的堆叫做大顶堆,根节点最小的堆叫做小顶堆。堆详解满二叉树满二叉树是指所有层都达到最大节点数的二叉树。比如,下面这颗树:完全二叉树完全二叉树是指除了最后一层其它层都达到最大节点数,且最后一层节点都靠左排列。比如,下面这颗树:可见,其实满二叉树是一种特殊的完全二叉树。那么,使用什么结构存储完全二

2020-07-23 09:43:12 142

转载 跳表

何为跳表?跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。跳表详解有序链表考虑一个有序链表,我们要查找3、7、17这几个元素,我们只能从头开始遍历链表,直到查找到元素为止。上述这个链表是有序的,但是不能使用二分查找,是不是很捉急?(P.S.数组可以实现二分查找)那么,有没有什么方法可以实现有序链表的二分查找呢?答案是肯定的,那

2020-07-23 09:29:37 94

转载 详解Eureka 缓存机制

引言Eureka是Netflix开源的、用于实现服务注册和发现的服务。Spring Cloud Eureka基于Eureka进行二次封装,增加了更人性化的UI,使用更为方便。但是由于Eureka本身存在较多缓存,服务状态更新滞后,最常见的状况是:服务下线后状态没有及时更新,服务消费者调用到已下线的服务导致请求失败。本文基于Spring Cloud Eureka 1.4.4.RELEASE,在默认region和zone的前提下,介绍Eureka的缓存机制。一、AP特性从CAP理论看,Eureka是

2020-07-15 18:42:49 1017

转载 Eureka工作原理

Eureka 工作原理上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。Eureka 核心概念回到上节的服务注册调用示意图,服务提供者和服务的消费者,本质上也是 Eureka Client 角色。整体上可以分为两个主体:Eureka Serv

2020-07-15 11:52:38 108

转载 那些惊艳的算法们(三)—— 时间轮

从定时任务说起自然界中定时任务无处不在,太阳每天东升西落,候鸟的迁徙,树木的年轮,人们每天按时上班,每个月按时发工资、交房租,四季轮换,潮涨潮落,等等,从某种意义上说,都可以认为是定时任务。大概很少有人想过,这些“定时”是怎样做到的。当然,计算机领域的同学们可能对此比较熟悉,毕竟工作中的定时任务也是无处不在的:每天凌晨更新一波数据库,每天9点发一波邮件,每隔10秒钟抢一次火车票。。。至于怎么实现的?很简单啊,操作系统的crontab,spring框架的quartz,实在不行Java自带的Schedul

2020-07-13 16:40:44 308

转载 HashMap 夺命二十一问

1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node<K,V>\[\] table;2:HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get 方法存储和获取。存储对象时,将 K/V 键值传给 put() 方法:

2020-06-27 22:42:02 233

转载 深入SpringBoot注解原理及使用

SpringBoot的主配置类@SpringBootApplicationpublic class StartEurekaApplication{ public static void main(String[] args) { SpringApplication.run(StartEurekaApplication.class, args); }}点进@SpringBootApplication来看,发现@SpringBootApplication是一个

2020-06-16 14:27:59 369

转载 Transactional失效场景介绍

Transactional失效场景介绍第一种 非public方法Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用。例如以下代码。定义一个错误的@Transactional标注实现,修饰一个默认访问符的方法/** * @author zhoujy * @date 2018年12月06日 **/@Componentpublic class TestServiceImpl { @Resource TestMapper

2020-06-11 20:35:56 493

转载 Ribbon过滤器

前言本文将描述Ribbon在进行Server过滤的一个重要基础组件:AbstractServerPredicate,它的作用就是在众多Server的列表中,通过一定的过滤策略,T除不合格的Server,留下来合格的Server列表,进而供以选择。负载均衡策略的核心之一就是对已知的服务列表进行过滤,留下一堆合格的Server进而按照一定规则进行choose选择,因此本文内容非常重要,内容非常重要,非常重要。正文PredicateKey一个POJO,还有两个属性:Object loadBalan

2020-05-11 19:34:48 502

转载 HystrixRequestContext实现Request级别的上下文

一、简介在微服务架构中,我们会有这样的需求,A服务调用B服务,B服务调用C服务,ABC服务都需要用到当前用户上下文信息(userId、orgId等),那么如何实现呢?方案一:拦截器加上ThreadLocal实现,但是如果在这次请求中创建了一个新的线程就拿不到了,也就是无法跨线程传递数据。方案二:使用拦截器加上HystrixRequestContext这个 request level 的 context实现,即保存到HystrixRequestContext中的数据在整个请求中都能访问。二...

2020-05-11 14:34:28 424

转载 Spring Cloud各组件超时总结

Ribbon的超时全局设置:ribbon: ReadTimeout: 60000 ConnectTimeout: 60000局部设置:service-id: ribbon: ReadTimeout: 1000 ConnectTimeout: 1000其中,service-id是Ribbon所使用的虚拟主机名,一般和Eureka Serv...

2020-03-30 12:09:08 154

转载 Spring Cloud各组件重试总结

Spring Cloud中的重试机制应该说是比较混乱的,不同的版本有一定区别,实现也不大一样,好在Spring Cloud Camden之后已经基本稳定下来,Dalston中又进行了一些改进,详情暂且不表。下面我们来详细探讨。笔者使用的版本是Spring Cloud Dalston SR4,同样适应于Edgware以及更高版本,对于Dalston此前的版本,本文不做讨论,大家可自行...

2020-03-30 11:54:29 130

转载 一步步分析为什么B+树适合作为索引的结构 以及索引原理 (阿里面试)

mysql的B+树索引 查找使用了二分查找,redis 跳表也使用了二分查找法,kafka查询消息日志也使用了二分查找法,二分查找法时间复杂度O(logn);参考:redis的索引底层的 跳表原理 实现聊聊Mysql索引和redis跳表 ---redis的跳表原理 时间复杂度O(logn)(阿里)参考:kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里)参考:二分查找法:...

2019-12-13 14:53:04 229

原创 Springboot配置监听器、过滤器和拦截器

​ 三大器在springboot中使用时,首先实现相应的接口定义类,然后通过配置类将其加入到spring容器中,从而实现相应的功能。监听器​ listener是servlet规范中定义的一种特殊类。用于监听servletContext、HttpSession和servletRequest等域对象的创建和销毁事件。监听域对象的属性发生修改的事件。用于在事件发生前、发生后做一些必要的处理。其主...

2019-11-08 17:07:33 594

转载 KAFKA OFFSET的存储问题

注意:从kafka-0.9版本及以后,kafka的消费者组和offset信息就不存zookeeper了,而是存到broker服务器上,所以,如果你为某个消费者指定了一个消费者组名称(group.id),那么,一旦这个消费者启动,这个消费者组名和它要消费的那个topic的offset信息就会被记录在broker服务器上1.概述Kafka版本[0.10.1.1],已默认将消费的 offse...

2019-08-28 21:19:17 278

转载 深入了解JVW

Java内存组成介绍:堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就...

2019-08-07 15:14:44 269

原创 多线程

线程生命周期NEW:使用 new 操作符创建的新的线程对象的初始状态RUNNABLE:可运行状态,又分为两种 READY:RUNNING状态的线程 被调度/yield ,线程变为READY RUNNING:READY的线程被调度,变成变为RUNNAINGTERMINATED:RUNNABLE的线程执行完毕,一般是run方法中的逻辑执行完毕BLOCKED:RUNNABLE状态的线程调用同...

2019-05-11 17:57:18 151

转载 快速掌握和使用Flyway

什么是Flyway?Flyway is an open-source database migration tool. It strongly favors simplicity and convention over configuration.Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本...

2019-04-23 15:57:36 395

转载 Innodb锁机制和锁算法

数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性。InnoDB是一个支持行锁的存储引擎,锁的类型有:共享锁(S)、排他锁(X)、意向共享(IS)、意向排他(IX)。为了提供更好的并发,InnoDB提供了非锁定读:不需要等待访问行上的锁释放,读取行的一个快照。该方法是通过InnoDB的一个特性:MVCC来实现的。InnoDB有三种行锁的算法:1,Record Lock:单个行记录上的锁...

2019-03-26 17:54:01 1023

JVisualVM进行性能分析中,jconsole需要的jtop插件

JVisualVM进行性能分析中,jconsole需要的jtop插件,jdk1.8可用

2018-05-08

hadoop2.7.3的eclipse插件及环境

hadoop2.7.3的eclipse插件及winutils.exe等所有的需要的环境文件,亲测可用

2017-04-08

chkconfig.deb

在ubuntu上安装chkconfig命令

2017-01-17

空空如也

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

TA关注的人

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