ribbon源码分析

对于ribbon的使用我们只需要在RestTemplate的申明上面加上 @LoadBalanced 注解之后那么这个RestTemplate就具有了负载均衡的功能 ribbon是怎么实现这一功能的? ribbon会把所有的LoadBalanced 注解的RestTemplate收集起来,基于Sma ... »

nacos注册中心源码流程分析

作为一个注册中心,和eureka类似,核心的功能点: 1.服务注册:nacos客户端携带自身信息向nacos服务端进行注册。 2.服务心跳:客户端定时向服务端发送心跳,告知服务端自己处于可用状态 3.服务健康检查:服务端定时检查客户端是否有发送心跳,如果超过15s没有收到心跳,那么就会将该客户端实例 ... »

Zookeeper(4)---ZK集群部署和选举

一、集群部署 1.准备三台机器,安装好ZK。强烈建议奇数台机器,因为zookeeper 通过判断大多数节点的存活来判断整个服务是否可用。3个节点,挂掉了2个表示整个集群挂掉,而用偶数4个,挂掉了2个也表示其并不是大部分存活,因此也会挂掉,这样反而觉得多浪费了一台机器资源。 2.修改配置文件 固定语法 ... »

Zookeeper(2)---节点属性、监听和权限

之前通过客户端连接之后我们已经知道了zk相关的很多命令(Zookeeper(1) 初识)。 节点属性: 现在我们就通过stat指令来看看节点都有哪些属性,或者使用get 指令和-s参数来查看节点数据以及属性 abc 节点数据 cZxid = 0x5 创建节点的事务ID ctime = Sat Oct ... »

Zookeeper(1)---初识

一.ZK简述 Zookeeper,它是一个分布式程序的协调服务,它主要是用来解决分布式应用中的一些数据管理问题,比如集群管理,分布式应用配置,分布式锁,服务注册/发现等等。 它是一个类似于文件系统的树状结构。每个目录被称为znode,可以删除目录,添加子目录这些操作,不同的是每个znode上面都是存 ... »

RocketMQ(1)---架构原理及环境搭建

一、架构简述 RocketMQ阿里开源的一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性, 万亿级容量和灵活的可伸缩性。跟其它中间件相比,RocketMQ的特点是纯JAVA实现,在发生宕机和其它故障时消息丢失率更低。 它由四个部分组成:nameserver,broker,生产者和消费者。它 ... »

RabbitMQ(2)---高级使用

1.ack和限流 ack也就是消息确认签收,分为自动签收和手动签收。之前的交换机demo中:channel.basicConsume(queueName,true, consumer); 第二个参数就是自动签收,如果我们要手动签收则需要改成false,再去消息处理中手动签收即可 当我们消息队列中已经 ... »

面试问题---JAVA程序CPU占用过高怎么定位

今天一个电话面试问了这个问题。回来查了下答案,自己也顺带操作一遍,做个记录。之前知道jstack工具可以查看线状态这些。比如死锁这些,主要是之前不知道top -H -p pid这个命令的使用,这命令可以看到进程下面线程信息,拿到线程ID,然后再结合jstack命令使用就可以解决这个问题了。下面记录一 ... »

RabbitMQ(1)---基本概念

一、安装RabbitMQ 安装直接用docker安装,如果手动安装的话比较繁琐,还要安装erlang语言的环境。在安装有docker机器上执行官网提供的指令(https://www.rabbitmq.com/download.html):docker run -it --rm --name rabb ... »

JUC(4)---java线程池原理及源码分析

线程池,既然是个池子里面肯定就装很多线程。 如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁 线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线 程上花费的时间和消耗的系统资源要比处理实际的用户请求的时间和资源更多。因此Java中提供线程池对 ... »

JUC(3)---CountDownLatch、CyclicBarrier和AQS

CountDownLatch可以让一个线程等待其他线程完成了各自的工作之后再执行。比如说一个切菜,一个人切肉,都准备完毕之后才能炒肉。 构造方法: public CountDownLatch(int count) count等待的线程数量 关键API: countDown() 分线程执行完减少计数 ... »

Semaphore和AQS

Semaphore意思的信号量,它的作用是控制访问特定资源的线程数量 构造方法: public Semaphore(int permits) public Semaphore(int permits, boolean fair) permits:允许同时访问的线程数量 fair:是否公平,若true ... »

ReentrantLock和AQS

Synchronized是jvm内置的锁;而java.util.concurrent包下面的Lock锁是大佬(Doug Lea)用java代码实现的显示锁。 Juc包下面锁相比jvm内置的锁更加灵活。围绕着AQS(AbstractQueuedSynchronizer)实现了一系列性质的锁,比如共享/ ... »

Synchronized加锁、锁升级和java对象内存结构

首先了解一下JMM中定义的内存操作: 一个线程操作数据时候都是从主内存(堆内存)读取到自己工作内存(线程私有的数据区域)中再进行操作。对于硬件内存来说,并没有工作内存和主内存的区分,这都是java内存模型划分出来的,它只是一种抽象的概念,是一组规则,并不是实际存在的。Java内存模型中定义了八种同步 ... »

算法---BitMap

问题: 假设有3亿个整数(范围0-2亿),如何判断某一个树是否存在。局限条件一台机器,内存500m。 常规的思路:我们可以将数据存到一个集合中,然后判断某个数是否存在;或者用一个等长的数组来表示,每个数对应的索引位置,存在就标记为1,不存在0。当然如果设备条件允许,上面的这方案是可行的。 但是现在我 ... »

高级数据结构---堆树和堆排序

堆树介绍: 之前在二叉树的时候说到过一种特殊的二叉树 完全二叉树(除了最后一层,其他层的每个结点都是满的,且最后一层结点全部靠左排列,这样就可以很方便的用数组来表示,下标从0开始如果父结点索引是i那么它两个子结点的索引就是2i+1和2i+2,具体的图解见二叉树)。而堆树又是一种特殊的完全二叉树。它的 ... »

高级数据结构---赫(哈)夫曼树及java代码实现

我们经常会用到文件压缩,压缩之后文件会变小,便于传输,使用的时候又将其解压出来。为什么压缩之后会变小,而且压缩和解压也不会出错。赫夫曼编码和赫夫曼树了解一下。 赫夫曼树: 它是一种的叶子结点带有权重的特殊二叉树,也叫最优二叉树。既然出现最优两个字肯定就不是随便一个叶子结点带有权重的二叉树都叫做赫夫曼 ... »

域名和服务器绑定及https协议更换

服务器是之前已经购买了的 1.腾讯云产品中搜索域名注册(产品太多了懒得找,直接搜索来得快些) 2.进去之后可以选择各种后缀的域名,输入自己喜欢的,看看哪些后缀是没有被注册的。自己挑选一个就可以,按照指导给付钱就行了。看见有个xyz后缀的,刚好是三维坐标系,就随手搜了下三维时代,然后就注册了这个。 3 ... »

高级数据结构---红黑树及其插入左旋右旋代码java实现

前面我们说到的二叉查找树,可以看到根结点是初始化之后就是固定了的,后续插入的数如果都比它大,或者都比它小,那么这个时候它就退化成了链表了,查询的时间复杂度就变成了O(n),而不是理想中O(logn),就像这个样子 如果我们有一个平衡机制,让这棵树可以动起来,比如将4变成根结点,是不是查询效率又可以提 ... »

高级数据结构---二叉查找树及其增删改查实现

二叉树查找树: 二叉查找树也叫二叉搜索树,二叉排序树。它也是一种特殊的二叉树, 它具有以下特点 1.如果它的左子树不为空,则左子树上结点的值都小于根结点。 2.如果它的右子树不为空,则右子树上结点的值都大于根结点。 3.子树的子树同样也要遵循以上两点 为什么又叫做二叉排序树,因为具有这种特殊特点的二 ... »