自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Kafka ,LEO和HW更新时机

我们假设有一个topic,单分区,副本因子是2,即一个leader副本和一个follower副本。我们看下当producer发送一条消息时,broker端的副本到底会发生什么事情以及分区HW是如何被更新的。下图是初始状态,我们稍微解释一下:初始时leader和follower的HW和LEO都是0(严格来说源代码会初始化LEO为-1,不过这不影响之后的讨论)。leader中的remote LEO指的就是leader端保存的follower LEO,也被初始化成0。此时,producer没有发送任何消息给le

2021-09-14 10:47:34 371 1

原创 SpringCloud Hystrix

Hystrix实现了 超时机制和断路器模式。Hystrix是Netflix开源的一个类库,用于隔离远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。主要有以下几点功能:为系统提供保护机制。在依赖的服务出现高延迟或失败时,为系统提供保护和控制。防止雪崩。包裹请求:使用HystrixCommand(或HystrixObservableCommand)包裹对依赖的调用逻辑,每个命令在独立线程中运行。跳闸机制:当某服务失败率达到一定的阈值时,Hystrix可以自动跳闸,停止请求该服

2021-05-28 17:19:59 222 2

原创 二叉树的序列化和反序列化

下面代码是先序序列化和反序列化反序列化没有中序,无法确认head的位置序列化如果中序和后序,只是队列加入放在递归的顺序有变化 pres(head.left, queue); queue.add(String.valueOf(head.value)); pres(head.right, queue); pres(head.left, queue); pres(head.right, q

2021-05-28 14:26:36 86

转载 mysql的锁机制

mysql的锁机制1、MySQL锁的基本介绍​ **锁是计算机协调多个进程或线程并发访问某一资源的机制。**在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。​ 相对其他数据库而言,MySQL的锁机制比较简单,其最 显著的特点是不同的存储引擎支持不同的锁机制。比如,MyI

2021-05-28 14:26:19 74

转载 SpringCloud feign

FeignOpenFeign是Netflix 开发的声明式、模板化的HTTP请求客户端。可以更加便捷、优雅地调用http api。OpenFeign会根据带有注解的函数信息构建出网络请求的模板,在发送网络请求之前,OpenFeign会将函数的参数值设置到这些请求模板中。feign主要是构建微服务消费端。只要使用OpenFeign提供的注解修饰定义网络请求的接口类,就可以使用该接口的实例发送RESTful的网络请求。还可以集成Ribbon和Hystrix,提供负载均衡和断路器。英文表意为“假装,伪装,

2021-05-28 14:26:06 114

转载 SpringCloud ribbon

负载均衡两种负载均衡​ 当系统面临大量的用户访问,负载过高的时候,通常会增加服务器数量来进行横向扩展(集群),多个服务器的负载需要均衡,以免出现服务器负载不均衡,部分服务器负载较大,部分服务器负载较小的情况。通过负载均衡,使得集群中服务器的负载保持在稳定高效的状态,从而提高整个系统的处理能力。软件负载均衡:nginx,lvs硬件负载均衡:F5我们只关注软件负载均衡,第一层可以用DNS,配置多个A记录,让DNS做第一层分发。第二层用比较流行的是反向代理,核心原理:代理根据一定规则,将http

2021-05-27 14:51:22 52

原创 SpringCloud RestTemplate

服务间调用微服务中,很多服务系统都在独立的进程中运行,通过各个服务系统之间的协作来实现一个大项目的所有业务功能。服务系统间 使用多种跨进程的方式进行通信协作,而RESTful风格的网络请求是最为常见的交互方式之一。spring cloud提供的方式:RestTemplateFeignRestTemplate依赖注入 @Bean // 开启负载均衡 @LoadBalanced RestTemplate restTemplate() { return new RestTemplate

2021-05-27 14:45:10 453

转载 Eureka单节点搭建

Eureka 单节点搭建pom.xml<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>application.yamleureka: client: #是否将自己注册到Eur

2021-05-27 14:35:51 223

原创 Eureka

Eureka简介Eureka使用

2021-05-27 14:31:45 104

原创 Actuator

Actuator简介Actuator使用

2021-05-27 14:15:15 134

转载 SpringCloud

Spring CloudSpring Cloud 自 2016 年 1 月发布第一个 Angel.SR5 版本,到目前 2020 年 3 月发布 Hoxton.SR3 版本,已经历经了 4 年时间。这 4 年时间里,Spring Cloud 一共发布了 46 个版本,支持的组件数从 5 个增加到 21 个。Spring Cloud 在 2019 年 12 月对外宣布后续 RoadMap:下一个版本 Ilford 版本是一个大版本。这个版本基于 Spring Framework 5.3 & Sp

2021-05-27 13:54:49 64

原创 Code15 荷兰国旗问题

解决该问题,只需先设定三个用于指定元素的下标指针(PS:在Java中没有指针,此处方便描述):一个前指针begin,一个中指针current,一个后指针end。Current指针遍历整个数组序列:(1)当current指针所指元素为0时,与begin指针所指的元素交换,而后current++,begin++;(2)当current指针所指元素为1时,不做任何交换,而后current++;(3)当current指针所指元素为2时,与end指针所指的元素交换,而后current指针不动,end–.荷.

2021-05-25 22:35:34 144

原创 Code13 数组中左边大于2倍右边数的总对数

数组[6,4,2,1]其中(6,2)(6,1)(4,1)这3个组合是满足左边大于右边数的两倍核心代码块,建立在归并排序的基础上 int ans = 0; int windowR = M+1; for (int j = L;j<=M;j++){ while (windowR <= R && arr[j] > (arr[windowR]*2)){ windowR ++;

2021-05-25 21:32:34 128

原创 Code12 数组逆序对

求数组逆序对左边数和任一右边数组成降序,就是一组逆序对[3,1,0,4,3,1]0:(3,1)(3,0)(3,1)1:(1,0)2:无3:(4,3)(3,1)4:(3,1)最终有7对。自己理解后琢磨的方法public static void main(String[] args) { int [] arr = new int[]{3,1,0,4,3,1}; System.out.println(minSum(arr)); } public

2021-05-24 22:29:16 179

原创 Code11 求数组小和问题

数组小和问题:int[] arr = new int[]{4,1,2,3,6};每个位置的前面比自己小的数的累加和问题。0:没有比自己小1:没有比自己小2:1比自己小,累加 13:1,2位置比自己小,累加 34:1,2,3位置比自己小,累加6;总共:10;归并排序变种处理时间复杂度:O(N*logN)和归并排序也就是下面一句代码的区别 ans += arr[p1] < arr[p2]?arr[p1] * (R - p2 +1):0;public static int min

2021-05-24 21:48:57 76

原创 Code10 归并排序

时间复杂度:O(N*logN)用空间换时间的做法:递归版public static void mergeSort1(int[]arr){ if(arr!=null && arr.length<2){ return ; } process(arr,0,arr.length-1); } public static void process(int[] arr,int L,int R){

2021-05-24 21:17:58 316

原创 Redis集群方式

单机、单节点、单实例1,单点故障2,容量有限3,压力为了解决上面的问题,才有了集群方案AKF拆分原则X 轴:直接水平复制扩展。(全量)Y 轴:将功能拆分出来扩展。Z 轴:基于用户逻辑扩展。主从模式(Master-Slave)1 全量同步Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:1)从服务器连接主服务器,发送SYNC命令;2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区

2021-05-22 15:11:02 74

原创 Redis击穿,穿透,雪崩

击穿指的是单个key在缓存中查不到,去数据库查询,注意: 这里指的是单个key发生高并发!!!1.使用DCL机制,synchronized+双重检查机制某个key只让一个线程查询,阻塞其它线程在,同步块中,继续判断检查,保证不存在,才去查DB。缺点: 会阻塞其它线程2.redis设置key永不过期这种方式可以说是最可靠的,最安全的但是占空间,内存消耗大3.使用SETNXSETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果:缺

2021-05-21 17:55:18 62

原创 Redis数据持久化

实现方式有两种:RDB(快照/副本)AOF(日志)RDB1.时点性数据有两种方式,阻塞(save)redis对外不提供服务(使用场景,明确知道服务停止使用,关机维护)非阻塞(bgsave)redis可以继续对外提供服务,然后将数据落地如果说8点需要bgsave,保存数据需要半个小时,那么RDB后的数据是保存的8点时内存的数据状态。而不是在保存中间数据发生变化后的,也进行保存。1.fork出来一个子进程,export的环境变量,子进程可以看到父进程的数据。子进程的修改不会破坏父进程,父进

2021-05-21 17:29:45 50

原创 redis布隆过滤器和布谷鸟过滤器

过滤器使用场景:比如有如下几个需求:1.原本有10亿个号码,现在又来了10万个号码,要快速准确判断这10万个号码是否在10亿个号码库中?  解决办法一:将10亿个号码存入数据库中,进行数据库查询,准确性有了,但是速度会比较慢。  解决办法二:将10亿号码放入内存中,比如Redis缓存中,这里我们算一下占用内存大小:10亿*8字节=8GB,通过内存查询,准确性和速度都有了,但是大约8gb的内存空间,挺浪费内存空间的。2.接触过爬虫的,应该有这么一个需求,需要爬虫的网站千千万万,对于一个新的网站url

2021-05-21 16:57:13 802

原创 redis sorted_set跳跃表(skiplist)

Sortedset底层存储结构两种数据结构支持 ziplist和 skiplist只有同时满足如下条件是,使用的是ziplist1.有序集合保存的元素数量小于128个2.有序集合保存的所有元素的长度小于64字节当ziplist作为存储结构时候,每个集合元素使用两个紧挨在一起的压缩列表结点来保存,第一个节点保存元素的成员,第二个元素保存元素的分值.跳跃表(skiplist)跳跃表是一种基于有序链表的扩展,简称跳表.跳表会维护多个索引链表和原链表.(不断得提升新的关键节点形成新的有序链表,通过空

2021-05-21 16:29:17 452

原创 Redis list 可以实现的数据结构

栈(stack)同向命令队列(queue)反向命令,1.先lpush,后rpop2.先rpush,后lpop阻塞,单播队列(FIFO)blpop A 60A列表有值的话,从左边移除一个数据,如果没有值的话,则等待A中插入数据为止,等待时间为60秒,如果时间设置为0表示阻塞时间无限延长brpop B 60A列表有值的话,从左边移除一个数据,如果没有值的话,则等待A中插入数据为止,等待时间为60秒,如果时间设置为0表示阻塞时间无限延长brpoplpush A B 60将A列表的尾元

2021-05-21 16:18:20 85

原创 Redis bitmap可以使用到的场景

日活统计应用场景中bitmap使用点赞(登录)去重应用场景中bitmap使用统计用户登录天数,统计周期随机(随便7天)活跃用户统计,随机天数统计,要去重命令bitmap主要就三个操作命令, setbit , getbit 以及 bitcountsetbit主要是指将某个索引,设置为1(设置0表示抹去标记),基本语法如下# 请注意这个index必须是数字,后面的value必须是0/1setbit key index 0/1getbit如果返回1,表示存在否则不存在getbit key

2021-05-21 16:07:20 314

原创 Redis数据结构

数据类型字符串(Strings)字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据你可以用Redis字符串做许多有趣的事,例如你可以:1.利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用。2.使用APPEND命令在字符串后添加内容。3.将字符串作为GETRANGE 和 SETRANGE的随机访问向量。4.在小空间里编码大量数据,或者使用 GETBIT 和 SETBIT创建一个Redis支持

2021-05-21 15:43:08 39

转载 Redis优点

Redis 是当前互联网世界最为流行的 NOSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。对于那些结构化、多范式规则的数据库系统而言,它更具性能优势。作为缓存,它可以支持数据存入内存中,只要命中率高,它就能快速响应,因为在内存中的数据读/写比数据库

2021-05-21 15:09:44 119

原创 磁盘和内存优劣

内存和磁盘的区别存储方式内存利用电流来实现存储磁盘利用磁效应来实现存储的存储容量内存是高速高价,而磁盘则是低速廉价程序,内存和磁盘的交互关系存储在磁盘中的程序需要读入到内存后才能运行分页式虚拟内存定义:在不考虑程序构造的情况下,把运行的程序按照一定大小的页(page)进行分割,并以页为单位在内存和磁盘间进行置换实现方式:1、在磁盘上提供了虚拟内存用的文件(page file,页文件)。该文件由 os自动做成和管理。文件的大小也就是虚拟内存的大小,通常是实际内存的相同程度至两倍程度2

2021-05-21 15:02:50 252

转载 LVS负载均衡

一、LVS简介LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发

2021-05-15 09:31:41 73

原创 JUC,自己实现简单的控制线程数

遇到的一个笔试,做个记录,(让你只实现handle方法内容,来控制访问doHandle方法最多只有3个线程数),如果不是定好只能在handle方法实现,可以用线程池,或者Semaphore(信号量)来控制执行的线程数/**初始化一个信号量为3,默认是false 非公平锁, 模拟3个停车位*///这个要全局,题目没有给,所以没法用这个方法Semaphore semaphore = new Semaphore(3, false);//下面是handle里面的方法semaphore.acqu

2021-04-28 18:17:15 98

原创 二叉树 任一节点的后继节点,前驱节点

在这个里面,Node是有一个指向父节点的指针。后继节点是 二叉树中序 (左头右)之后,当前节点的下一个节点。//给出任意一个节点,找出后继节点,后继节点是 中序之后,这个节点的下一个节点public class Code01_GetSuccessorNode { public static Node getSuccessorNode(Node node){ if(node == null){ return null; }

2021-04-22 21:18:52 314

原创 二叉树 打印出来一个整体树

打印出来的结果是一个正常格式二叉树的左转90°的结果代码如下public class TestPrintBT { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); Node no

2021-04-22 20:47:33 44

原创 二叉树 找出最大宽度数

用了两种不同的方式,一个是基于队列加Map,一个是单独队列queue+mappublic static int maxWidthWithMap(Node head){ if(head == null){ return 0; } //这里是放Node入队列的 Queue<Node> queue = new LinkedList<>(); //这里主要是为了保存Node的层级的

2021-04-22 17:47:54 93

原创 二叉树的先序,中序,后序遍历有递归和无递归

Node结构public static class Node{ private int value; private Node left; private Node right; public int getValue() { return value; } public void setValue(int value) { this.value = valu

2021-04-22 17:45:03 88

原创 Springboot部署出现Input length = 1 或者Input length =2问题,导致maven install不成功

org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputExcep部署服务器出现这个的时候是因为编码的问题,那么在idea中打开settings–Editor-File Econdings,设置yml为UTF-8,如果还是不行,那么就将yml内容复制,把application.yml删除,再重新创建改文件,将内容放进去。properties文件同理...

2021-04-15 19:02:25 1877 1

原创 java线程池

JUC包 java util concurrentExecutors,可以创建线程池1.ThreadPoolExecutor1.1 newCachedThreadPool创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时提供的ThreadFactory创建新线程,特征:1.线程池中数量没有固定,可达到最大值 Integer.MAX_VALUE2.线程池中的线程可进行缓存重复利用和回收,回收默认时间1分钟3当线程池中,没有可用线程,会重新创建一个线程1.2

2021-04-01 11:00:15 52

原创 java数据结构

CollectionListarraylistvectorsethashsettreesetMaphashmaptreeMap

2021-03-31 09:24:13 33

原创 Comparable和Comparator接口的区别

Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。接口中通过x.compareTo(y)来比较x和y的大小。若返回负数,意味着x比y小;返回零,意味着x等于y;返回正数,意味着x大于y。Comparator 简介Comparator 是比较器接口。我们若需要控制某个类的

2021-03-30 17:26:03 350

原创 链表(两个有序链表,合并成一个有序链表)

//两个有序链表,合并成一个链表public class Code01_MergeTwoSortedLinkedList { public static class ListNode { public int val; public ListNode next; } public static ListNode MergeTwoSortedLinkedList(ListNode head1,ListNode head2){ if(h

2021-03-28 20:39:44 99

原创 链表(两数相加)

两个链表,里面是数字,然后做相加,返回https://leetcode-cn.com/problems/add-two-numbers///两个链表里面数字加上//public class Code01_AddTwoNumber { public static class ListNode { public int val; public ListNode next; public ListNode(int val) {

2021-03-28 20:39:32 97

原创 链表(K个一组反转链表返回)

leetcode中的一个题目:https://leetcode.com/problems/reverse-nodes-in-k-group///k个一组反转链表//https://leetcode.com/problems/reverse-nodes-in-k-group/public class Code01_ReverseNodesInKGroup { public static class ListNode { public int val; publi

2021-03-27 15:16:10 67

原创 code04-双向链表实现队列

//使用双向链表实现队列public class Code01_DoubleLinkedListToQueue { public static class Node<V>{ public V value; public Node<V> next; public Node<V> last; public Node(V v){ value = v; ne

2021-03-27 14:41:26 257

空空如也

空空如也

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

TA关注的人

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