5 F_Hello_World

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 12w+

Java中J.U.C包下锁的基础-AQS分析

对于锁的作用,简单保证临界区(多个线程,进程同时访问的区域,最终我们希望只有一个线程进去执行操作的区域)中数据的一致性,不会因为在并发的时候出现脏数据,错乱数据。对于java中存在的锁有两种,第一个以Synchronized关键字,第二也是今天重要说明的以AQS(AbstractQueuedSynchronizer)为核心的基于此框架衍生的各种锁。在java中我们可以从不同的纬度来看待锁,如下脑图所示:我们可以看到除了Automi各实现,以及Synchronized关键字,基本上java中的

2020-07-30 13:01:48

Kafka副本剖析

序言:副本机制是分布式系统中最常见的概念,在常见的分布式系统中,为了对外提供高可用的服务,一般都对数据和服务进行副本构建。Kafka对于Topic进行了物理上进行数据切片(Partition分区),而对于每一个分区都为了其高可用,在0.8之后采用了多副本的概念,即一个Partition对应多个副本,其中一个副本为leader, 其它的为follower,典型的主从结构,而与其它分布式系统中主从结构的不同,Kafka中只有leader对外提供服务,而follower只会同步leader数据,而不提供服务,至于

2020-07-26 22:13:13

XxlJob添加Sleuth链路追踪

XxlJob是是一个轻量级分布式任务调度平台。对于此可以通过官网进行学习使用。我们在拥有Sleuth的环境下使用xxjob的时候,就会发现一个问题就是通过xxjob中调用的代码中并不存在链路,当我在XxlJob中出现异常时,需要跨系统查询日志等操作后,得到结论,该操作耗时耗力。所以我们不如向feign,rpc调用一样在xxjob中添加链路。为了不变更xxjob的源码结构,这里我通过spring aop的方式对@XxlJob注解进行切面编程,而注解@Xxljob就是一个切点。代码如下所示:将Tr.

2020-07-22 21:19:34

springclou中Sleuth异步中trace传递

在工作中同步转异步处理的场景非常多,例如日志记录,图片异步上传等。sleuth中trace链路+ELK收集,可以让我们很直观看到整个完整的链路,我们知道sleuth中在同一线程的链路的传递是通过ThreadLocal来做到的,而http或rpc调用这种方式的链路一般通过添加header头来进行传递的(这个需要我们去自己实现对http请求的拦截处理-当然我们不需要重复造轮子,spring已经帮我们把这些都实现了,我们只需要进行调用正常调用即可),那么如果我们创建一个线程pool,并异步执行数据,那么原线程中的

2020-07-22 15:18:15

Kafka吞吐量为啥那么大

序言:Kafka是一个依赖磁盘来存储和缓存消息,一般对于磁盘的读写我们认为它的速度很慢的(实际上对于磁盘的读写速度也是根据我们的使用方式来决定它的快慢,例如如果我们进行顺序读写那么它的速度和内存相差无几,但若我们进行随机读写时),关于服务器中各存储介质的读写速度可参考以下图。从上述我们可以看出磁盘处于一个底层的位置,而缓存(内存)处于金字塔位置。那么Kafka为何不向Rabbitmq那样采用内存作为默认的存储介质,使用磁盘作为备用(使用磁盘作为消息的持久化,避免内存丢失)来以此实现高吞吐和低延.

2020-07-22 00:18:04

Kafka中的选举机制

序言:Kafka作为一个分布式消息中间件(存储消息).既然是一个分布式存储系统(message是分区进行存储),那么肯定需要考虑到数据一致性算法的实现。对于现在较多的开源分布式系统基本会采用两种思路:第一基于paxos算法(衍生出来其它算法例如Fast Paxos,zookeeper的ZAB原子广播协议),第二种基于leader与follower多副本机制(对于数据的写入,同一由leader进行管理写入,follower基本与leader进行同步,例如Raft算法-Nacos实现,Bully霸道选举算法

2020-07-20 23:32:56

springboot2.x +rabbitmq使用和源码分析四(消费者-Listener使用)

序言:当数据通过生产者产生到发送到exchange交换器,再通过设定的路由规则,经过routingKey,最终会落地到queue 中。这个时候引出了Listener消费者了。在第一章中有对RabbitAnnotationDrivenConfiguration该类中源码做过基本分析,该类最大的作用就是通过配置文件的设定用于构建RabbitListenerContainerFactory(该接口的实现,工厂设计模式用以创建核心的MessageListenerContainer容器类,而该类Message

2020-07-17 00:20:33

springboot2.x +rabbitmq使用和源码分析三(消息转换器)

序言:在第一篇和第二篇中,描述了自动装配的过程以及如何发送消息到mq。这里会涉及到将数据转化的工作,也就是如何将我们string或者java对象转化到二进制数据,传输到rabbitmq服务器中(在网络中只能传输二进制数据),而又是如何将到rabbitmq服务器传输的二进制数据转化为监听者需要的实体类型,这里就用到了消息转换器(也就是MessageConverter接口,在RabbitAnnotationDrivenConfiguration我们可以看到有该类的定义并将该类与监听工厂类绑定,在Rabbit

2020-07-13 22:52:08

springboot2.x +rabbitmq使用和源码分析二(生产者配置)

1:手动构建RabbitmqQueueExchangeAutoConfiguration该类用于初始化 queue exchange 并进行Binding绑定package com.fc.rabbitmq_demo.config;import org.springframework.amqp.core.*;import org.springframework.context.annotation.Bean;import org.springframework.context.annotat

2020-07-13 00:10:11

springboot2.x +rabbitmq使用和源码分析一(自动装配)

序言:之前描述过springboot对kafka对支持,这里主要描述springboot对于rabbitmq的支持。这里建立在对rabbitmq有一定了解,若是一个新手建议参考官网结合一些博客来自我学习。springboot对于rabbitmq各核心组件初始化都在:autoconfigure包下 (这里用的springboot版本较新2.3.1)上面描述的这些类中,主要例举一个核心类并对其介绍:1: RabbitProperties该类从命名上也知道它是一个属性配置文件类,映..

2020-07-12 13:41:01

Springcloud-注册中心-Eureka源码分析

springCloud对于注册中心提供了很多的选择,例如实现CAP中AP的Eureka,实现了CP的zookeeper等,这里主要介绍使用的是给予Netflix的Eureka。首先我们基于的springcloud的最新版本-Hoxton来介绍,这里使用的是springboot2.2.5,关于springboot与springCloud的版本对应关系可以参考下表:SpirngCloud Ve...

2020-07-07 23:54:20

分布式一致性算法与开源分布式应用具体实现

Paxos算法:Paxos是目前最广泛流行的分布式一致性算法之一,也是目前被各大开源分布式框架使用较多的算法之一(例如zookeeper的核心算法就是基于Paxos算法优化实现的),它的核心思想就是少数服从多数原则,即对于任意的value的产生都需要进行半数以上通过。在Paxos算法中存在3个角色:Proposer (提案者-用于生成各提案-其中提案由-提案编号(一般为全局唯一且递增的)+...

2020-07-03 00:29:24

Nacos注册中心客户端与服务端源码分析

Nacos作为SpringCloud Alibaba (SCA)中注册中心以及配置中心的组件。这里主要分析Nacos客户端与服务端之间注册,下线,心跳续约源码以及对Ribbon负载均衡的Nacos的具体实现。核心对外提供API接口类:对于客户端的使用其实很简单,只要引入spring-cloud-starter-alibaba-nacos-discovery包即可。这个包是一个springboot start项目,所以查看它的源码在上述的每一个AutoConfiguration都有自.

2020-07-03 00:25:34

Mysql数据数据库引擎InnoDB与MyISAM

序:什么是数据引擎?它的作用是什么?mysql的数据存储在磁盘与内存(内存中数据也是来源与磁盘,放在内存中为了加快查询效率)中,这些数据被mysql使用了不同的技术形成了不同的数据文本结构放入了磁盘中,在我们使用时这些技术通过不同的索引技巧,不同的锁定水平使得我们可以放心,便捷快速的使用这些数据。这些对应的技术就是数据引擎,数据引擎在mysql是一个核心组建,在每一张表的创建时,都会指定先对应...

2020-03-07 02:24:49

Synchronized原理和jdk1.8后的优化

Synchronized关键字使用较多的形式如下所示:1:以synchronized同步代码块的形式synchronized(Object){ //代码}2:对一个方法进行synchronized声明,进而对一个方法进行加锁来实现同步。如下面代码public synchornized void test(){ //代码}上述中其实都是对对象加锁,对于第...

2020-03-06 15:45:40

算法数据结构-树(1)

此文包含树,二叉树,满二叉树,完全二叉树,二叉查找树(BST Binary Search Tree,也可以成为排序二叉树,有序二叉树),平衡二叉树(BBT),红黑树,B-树,B+树,B*树。这里暂时不包含各树的java实现。1:树2:二叉树每个节点最大只存在左右两个节点3:满二叉树对于一个深度为h的二叉树中,若节点的个数为2^h-1,则代表该树为一个满二叉树4:完全二叉树...

2020-03-03 11:31:14

​​​​​​​​​​​​​Redis中核心数据结构源码分析-redisObject结构体

序言:了解Redis中核心的数据结构有助于我们了解Redis的底层存储,快速写入,快速寻址原因。以及通过源码可快速的明白各种核心功能(RDB,AOF,LazyFree,内存回收策略,过期键回收策略等)的实现。注意:以下源码都基于redis最新版本(redis5.0系列描述),想要了解redis源码需要对c语言有一定的了解,建议先了解下c的语法以及核心——指针的使用。1:redisObj...

2020-02-26 15:11:10

算法数据结构-Trie树

Trie树,又称为前缀树(因为某节点的后代存在共同的前缀,比如pan是panda的前缀),字典树,顾名思义它本事也是属于树这个数据结构体系中的一员,当然它也有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree等等。我们通常使用Trie来处理字符串匹配的,使用它可以解决在一组字符串集合中快速查找某个字符串的问题。它为...

2020-02-26 14:54:44

Redis中expire类型的已过期键删除策略和数据淘汰策略

序言:Redis服务中的内存是宝贵的。redis通常作为缓存数据用于存储一些热点数据(这些数据可能过一段时间就会失效),也可能存在某些数据被少量访问,也存在类似与字典这些不经常变动但被访问频率较高的数据,redis的内存是宝贵的,redis需要在内存不足的时候进行注意:先参考:Redis中核心数据结构 了解Redis中数据结构有助于下述中源码的了解1:expired类型的已过期Ke...

2020-01-12 21:14:27

Java实现LRU算法

LRU算法LRU(Least recentlyused)—最近最少被使用算法。在一些内存算法表现中若在一个内存有限的环境中,出现内存不足时为了保证程序的正常运行,会将一些价值较低的对象(如何来评定一个对象的价值的高低,对于LRU算法来说:如果数据最近被访问过,那么将来被访问的几率也更高,那么对应的价值就越高)进行清除,空出内存空间。计算机操作系统基础理论中有一个经典理论:最近使用的页面数...

2020-01-10 19:30:14

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。