自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (1)
  • 问答 (3)
  • 收藏
  • 关注

原创 JAVA8特性之函数式接口-@FunctionalInterface注解

JAVA8的新特性函数式接口的介绍和使用

2022-08-08 09:23:04 22352

原创 ES和SQL查询对比 多字段组合条件查询

SQL:select * from tableName where (province = '河南' and age = 25) or (province = '河北' and age = 26)ES:{ "from": 0, "size": 10, "query": { "bool": { "filter": [ { "bool": { "should": [ { "bool": { "m

2021-08-19 11:38:55 22528

原创 ES—查询语法架构详解

ElasticSearch查询语句归类背景:初学者面对ES的DSL(domain specific language)查询显得一脸懵逼,看着各种嵌套的语句不知道有什么规律,下面就给大家总结一下,方便学习理解记忆。官方的文档版本好像是2.X,ES更新很快现在都7.X,现在的很多语法和关键字都和2.x的版本不同了,甚至删除了不少关键字,随着版本越高,相应的查询语法和关键字等方方面面也逐渐稳定起来了。这里我是按照7.X版本总结的。...

2021-03-11 16:07:29 23020 1

原创 一台阿里云主机,实现docker集群和外网通讯,如何搭建完全分布式Hadoop集群

实现原理:一台阿里云主机+docker+iptables网络拓扑图操作步驟如下:安裝docker,详情请自行百度安装好之后你可以在云主机上键入ifconfig查看,会发现多了一个docker0的虚拟网卡,这是安装docker之后默认创建的,当然我们也可以自己创建一个虚拟网络创建自己的虚拟网络,在阿里云主机上键入:docker network create dockerNetBridge再次在阿里云主机上键入:ifconfig发现多了一个新的虚拟网卡,这个新网卡就是我们创建的虚拟网络docke

2020-12-30 16:23:48 19785 1

原创 位图—BitMap和BitSet,布隆过滤器,Roaring Bitmap

位图简单来说就是为了压缩节省空间,才出现的。举个例子:你要是存储三个数字 2,5,10。这三个数字用java中的short类型来存储,也要6个Byte(short类型的内存空间是2Byte)。一个Byte是8bit,一共占用是64bit。我们知道bit的取值非0即1.如果我用bit来表示这三个数字呢?0010010000100000从0开始,对应的位置上放1,这样16个bit就能表示这三个数字了,一共占用内存2byte。比起上面的6Byte,用bit这样表示2byte可节省了不少空间。

2020-12-11 14:14:55 19866 1

原创 RocketMQ—高级使用场景原理

Producer生产消息的过程 Producer投送消息的过程简单来说,是首先找到这个Topic对应的所有Broker的Queue,并按照投放策略, 把消息投放到对应的broker上的Queue上。Consumer消费消息的过程 同一个消费者组,里面的消费者,在进行消费的时候,比如消费的Topic一共有5个Queue,q1,q2,q3,q4,q5 这个消费者组里面有3个消费者c1,c2,c3,负载均衡下五个消费者会分轮训分配给这3个消费者, c1会监听消费q1,q4;c2监听消费q2,q5;.

2020-09-30 18:15:49 20586 3

原创 SpringBoot配置文件详解

spring.profiles配置文件激活详解spring.profilesspring.profiles.activespring.profiles.include正常使用场景我们正常的开发时,对应不同的环境我们会有不同的配置文件:application.yaml = application-defaultyamlapplication-dev.yamlapplication-test.yamlapplication-prod.yaml常规配置文件如上,一般是按照applicat

2020-08-27 16:16:49 20315

原创 线程控制—优雅的结束线程

线程结束的几种方式:执行完正常的逻辑,正常结束。提前结束的方式有以下几种:先了解几个比较常见的方法 //中断线程(实例方法)public void Thread.interrupt();//判断线程是否被中断(实例方法)public boolean Thread.isInterrupted();//判断是否被中断并清除当前中断状态(静态方法)public static boolean Thread.interrupted();这里中断线程的场景大致可以分为两类:线程阻塞时中

2020-06-01 16:37:46 19516

原创 Redis数据结构和集群

RedisRedis不是简单得Key-Value存储,它实际上是一个数据结构服务器,支持不同类型的值,Redis的Key是二进制安全的,也就是说你可以用任何的二进制序列作为Key值,比如一个图片的二进制,甚至空字符串都是可以作为Key值。Redis常规数据类型介绍:常规得数据类型支持5种String:List:按照插入顺序排序的字符串元素集合,他们基本上都是链表Hash:由Field和...

2020-01-08 18:04:45 19559

原创 分布式锁的实现—Redis(条理清晰)

实现分布式锁的必要条件:互斥性和不会发生死锁互斥性的保证:就是同时只能有一个线程注册成功获取到锁 比如 jedis.setNX(key,value):如果不存在就设置避免发生死锁:就是获得锁以后 无论这个加锁的客户端怎么样,都要最终能释放出来锁;比如 jedis.expire(key,expiretime)redis的分布式锁的实现机制就是:获得锁:多线程竞争注册相同的key并存储va...

2019-12-25 17:42:24 20022 1

原创 Eurake和Zookeeper作为服务注册中心的区别 以及CAP原则如何理解

CAP原则C: Consistency 一致性A: Available 可用性P: Partition Tolerance 分区容错性怎么理解CAP原则如果我们的系统是分布式部署,节点之间组成的网络应该是连通的,然而可能额因为一些问题导致网路无法连通,这样整个网络就分成了几块区域,这时候就形成了分区,如果你的一些数据在一个节点中保存,因为网络导致分区,没办法和其他的分区的实例进...

2019-12-20 17:53:08 19891

原创 关于数字证书,数字签名,CA证书,Https都在这里了

Http协议大家都不陌生了,但是http的请求内容都是明文的内容,如果被拦截了请求,就能看到你的请求内容,比如账号密码之类的,这样的话就是不安全的,然后就有了http+SSL/TLS =https ,在http的基础之上对内容进行加密,这样就能保证内容的安全性,但是如何加密呢?加密大致可分为两种对称加密和非对称加密:对称加密:加密的时候用密钥A,解密的时候还是需要密钥A非对...

2019-07-08 20:28:59 24247

原创 SpringSecurity你想知道的都在这里了

写在前面: SpringSecurity顾名思义,就是Spring的安全模块,主要作用就是对资源的安全访问控制,安全控制分为两个方面:认证和授权,认证:就是对资源调用者的身份进行核实,比如你想访问某个接口或者某个方法,可能需要你登陆,输入你的账号密码,然后后台验证这个账号是否具有访问这个资源的权力。授权:就是你的身份拥有访问的权限就给你权力去访问资源,宏观流程:用户登录时输入...

2019-06-18 00:59:26 19806

原创 从Servlet到SpringMVC演变过程详解(ServletContext 和WebApplicationContext, ApplicationContext给你安排上了)

无图言屌:以前我们用servlet进行编程:所有的配置都会在配置在web.xml里面,其实类似于现在的任务编排我们会把我们的Filter和Servlet还有Listener,初始化的一些参数都写到web.xml中,然后相信大家也都看到了上面的这张图,里面有两个Context,这两个都是servletcontext,对应的是两个web应用,一个servletcontext对应的是...

2019-06-06 17:13:55 20123

原创 Sofaboot集成Swagger3并通过Yapi做接口管理

Sofaboot集成Swagger3并通过Yapi做接口管理

2022-08-31 14:37:36 22214

原创 Springboot集成springFox-Swagger3并通过Yapi做接口管理

Springboot集成springFox-Swagger3并通过Yapi做接口管理

2022-08-30 19:02:40 22173

原创 Springboot集成OpenAPI-Swagger3并通过Yapi做接口管理

Springboot集成OpenAPI-Swagger3并通过Yapi做接口管理

2022-08-30 18:14:03 22094 3

原创 Springboot集成Swagger2并通过Yapi做接口管理

Springboot集成Swagger2并通过Yapi做接口管理

2022-08-30 16:18:26 22004

原创 OpenApi和Swagger2 Swagger3的关系

OpenApi Swagger2 Swagger3的关系

2022-08-30 15:59:42 22292

原创 日志配置文件详解-logback,log4j

常见的日志配置文件详解

2022-08-19 16:49:57 22044

原创 条件式注解@ConfigurationOnXXX原理详解

springboot条件注入原理详解,相关注解@Condition, @Conditional,@ConfigurationPhase,@ConditionalOnBean,@ConditionalOnClass等

2022-08-16 11:24:20 22043

原创 【图解】redis主从同步流程——全量同步、部分同步、命令传播

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、全量同步二、增量同步三、命令传播总结前言本文主要介绍Redis高可用下的主从同步问题,包括全量同步、部分同步、命令传播。注意一点:Redis同步是异步同步,因为redis在处理了客户端的命令之后,会立刻返回给客户端结果,而后才会进行主从同步,所以redis主从同步和客户端请求不是同步的。一、全量同步PSYNC <runid> <offset> 命令:PSYNC: redis2.8以.

2022-03-31 02:15:32 24622

原创 Wrk压测工具详解

Wrk压测工具安装使用官方源码:https://github.com/wg/wrk安装步骤:wrk只支持linux环境不支持windows环境,安装git,并配置git环境变量,克隆源码git clone https://github.com/wg/wrk进入到源码的路径下执行make进行编译然后会在当前路径下生成一个可执行文件wrk如果想全局都可以执行,将wrk文件加入到环境变...

2022-03-30 10:17:37 23803

原创 【图解】Redis的持久化方案—RDB持久化、AOF持久化、AOF重写

Redis的持久化方案(冷备):RDB和AOFRDB:Redis Dump Binary,把当前进程数据生成快照保存到硬盘的过程,触发RDB分为自动和手动两种方式。手动触发:手动触发的命令:save和bgsave,两个命令都可以触发生成快照生成RDB文件,但是有区别:save:阻塞Redis的服务器进程直至RDB文件创建完成bgsave:会由Redis主进程fork出来一个子进程,子进程会把数据集先写入临时文件,写入成功之后,再替换之前的RDB文件,用二进制压缩存储,保证RDB文件始终存储的

2022-03-28 18:01:50 22211

原创 集群模式下RedisTemplate使用Scan命令全节点模糊匹配key

为什么需要模糊匹配key?因为有时候,缓存的key设计的不合理,比如商品信息的缓存设计成:门店编码+商品id,当我们需要查询一个门店下的所有商品缓存的时候,可能就需要获取这个门店编码下的所有商品信息的key然后遍历获取门店下的所有商品。为什么使用Scan?因为Keys是阻塞的,严重影响性能,官方不建议生产环境使用,取而代之的是Scan命令。Scan命令怎么使用呢?语法:scan cursor [MATCH pattern] [COUNT count]语法说明:[]里面的代表.

2021-08-20 17:35:58 25318 4

原创 NIO实现聊天场景

Server端代码

2021-06-07 11:26:09 21694

原创 Redis Scan模糊搜索key并批量删除key

脚本如下:eval "redis.replicate_commands(); local resp = redis.call('SCAN', 0, 'MATCH', 'md:v2:prdGp*', 'COUNT', 1000000); local datalist = resp[2]; for i=1, #datalist do redis.call('DEL',datalist[i]) end" 0命令解释:md:v2:prdGp* 就是要模糊匹配的key, 如果需要替换即可使用方式:.

2021-04-25 17:42:55 22647

原创 RedisSet缓存List数据并设置过期时间——Lua实现

RedisSet缓存List数据操作并设置过期时间—Lua脚本实现工作中自己开发需要,现有的工具不能满足,于是自己定制了一套批量缓存List内容数据,而不是将整个List作为一个value缓存,并且删除原有的数据,同时设置过期时间,定义方法内容 /** * @description 批量缓存List数据,并且删除原有的数据,同时设置过期时间 * @param clazz List的数据泛型 * @param duration 过期时间 单位/秒 * @a

2021-04-22 17:06:39 24833

原创 最详细的分库分表Demo—springboot_shardingjdbc_mybatis

分库分表 — Shardingjdbc分库分表:分库分表为什么分表? 肯定是因为需要怎么进行分表?垂直分表和水平分表什么是垂直分表?如果表过大,垂直分表就是按照业务角度将大列分为几个表,划分的原则一般是频繁变化的分为一个表,不频繁变化的,尤其大字段,如text和blob字段这种影响io性能的划分为另外一个表中,这样就实现了垂直分表。如下图:什么是水平分表?就是将数据根据策略分到不同的表中,从而使数据均匀的分布在不同的数据库和表中,也是最常见的分表方式。如下就是将一个表分为四个表:将ds库中的o

2021-04-19 15:54:53 22124 2

原创 SpringCloudGateWay

SpringCloudGateWay进行服务化:我们需要将我们的springCloudGatewa项目当作一个服务注册到EurekaServer中,配置如下server:port: 8888spring:application:name: cloud-gateway-eurekacloud:gateway:discovery:locator:enabled: trueeur...

2021-03-22 10:37:27 19676

原创 ES—集群架构详解

ES集群节点介绍master node:整个集群的管理者,索引管理,分片管理,以及整个集群的状态的管理,master节点是从master候选节点中选出的,成为master候选节点的方式:node.master:true 默认(true)data node:数据节点,存储主要数据,负责索引的数据的检索和聚合等操作,成为data node的方式:node.data:true 默认(true)coordinating node:协调节点,所有节点都可以接受来自客户端的请求进行转发,因为每个节点都知道

2021-03-19 16:39:12 24536

原创 ES-聚合查询

ES-聚合查询聚合查询aggregations—聚合,可以简写为aggs,提供了一种基于查询条件来对数据进行分桶、计算的方法。类似于 SQL 中的 group by 再加一些函数方法的操作。聚合可以嵌套,由此可以组成复杂的操作。聚合查询:大致可以分为三类:Bucketing Aggregations(分桶聚合): 聚合对象是文档,将满足条件的文档分到一个桶(组)里,这样就达到分桶的目的。// 根据年龄进行分组,小于40, 40-60, 大于60。{ "aggs": {

2021-03-16 10:49:13 23425

原创 SpringBoot入参字段校验-分组和自定义校验注解

SpringBoot入参字段校验-分组背景: 有一个请求实体bean,里面的属性在有些接口里面用,有些是在另外一个接口用;public class FantasyProductUpDownRequest { // 批量接口参数用 private Set<Long> skuStoreIdSet; // 单个接口用 private Long skuStoreId;}因为是相同功能的参数,所以就写在一个实体bean里面了,之所以要分组,是因为无论是批量接口还是单个

2021-03-09 17:29:13 20296

原创 Spring循环依赖-出现的原因,发现机制和解决方法

SpringBean依赖注入——循环依赖Spring循环依赖出现的原因循环依赖的现象就是Spring的容器在创建Bean的生命周期中,出现了相互依赖的场景,A->B->A,比如上面A的实例属性值是B的实例,B的实例属性值也是A的实例,这样A在进行初始化并且属性赋值的时候发现依赖B,就去实例化B,发现在给B初始化进行属性赋值的时候,也依赖A,这样就出现了最简单的循环依赖。针对上面的问题:首先我们要知道循环依赖只发生在作用域是单例的场景里面,即scope=“singleton”,如

2021-02-26 16:41:06 20840

原创 Hadoop BUG和采坑集锦—阿里云ECS配置Hadoop, datanode一直显示localhost, 下载文件失败

问题描述 我个人的阿里云主机,在上面搭建Hadoop,主要配置如下:/etc/hosts文件内容:~etc/hadoop/hdfs-site.xml文件内容为了方便大家复制粘贴下面是源码<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!-- Licensed under the Apache License,

2020-12-24 14:00:19 20052 1

原创 Springboot 单元测试怎么使用解读

SpringBoot单元测试// 注解部分 @RunWith(SpringRunner.class) @SpringBootTest public class ApplicationTest { @Autowired private WebApplicationContext context; private MockMvc mvc; @MockBean private AuthInterceptor authInterceptor;

2020-09-30 15:08:43 19588

原创 RocketMQ-名词和架构

RocketMQrocketMQ是做什么的我就不用解释了吧,以及他的背景。本文主要是为了让大家明白RocketMQ的工作原理。主要名词解释ProducerGroup由一组Producer组成TopicBrokerQueueConsumerGroup

2020-09-29 17:29:39 19816

原创 永久代,方法区 和 元空间之间的关系

永久区(PGS)JVM内存结构分为 堆,方法区,栈,程序计数器,本地方法区。 这些都是逻辑内存区域划分,实际上不同的虚拟机的实现方式是不同的,我们常用的也是普及率最高 的虚拟机HotSpot,只有他有永久代这个概念。PGS算是方法区实现,他和堆的内存是连续的一个整体,但是逻辑上是隔离的,所以在垃圾回收的时候,常常说新生代,老年代时,也会说到永久代。PGS主要存储,对象的Class实例和Meta信息,在运行时,不会对PGS进行垃圾回收。当第一次使用类的静态方法(包括构造方法)时,JVM会将对应的

2020-07-23 17:21:02 23308

原创 【看图说话】SpringCloud常用组件使之间的关系——Gateway Feign Hystrix Ribbon 使用详解

简单看图上图显示了SpringCloud常见组件在日常开发中的使用情况,下面按照流程介绍:gateway在接到来自外部的请求的时候,会首先进行处理,gateway能做的事情很多,权限管理,负载均衡(通过rubbion),动态路由等。0.gateway将请求转发给对应的服务A,1.服务A中要调用服务B的服务,Feign依赖Ribbon做负载均衡.2.Ribbon通过EurakeClient去EurakeServer获取服务列表3.EurakeClient去EurakeServer获取服务列表

2020-07-03 11:57:22 19930

原创 JWT(Java Web Token)详解

JWT(JSON Web Token)的基本信息 作用可以用鉴权(Authorization)可以用来信息交换 信息主要负载在PayLoad 段(Information Exchange)数据格式为: Header.Payload.Signature 例如:xxxxxxx.yyyyyy.zzzzzz Header部分由两部分组成:token的类型(“JWT”)和算法名称例如:...

2020-06-30 17:30:24 19812

单点登录系统Cas时序图.drawio

单点登录系统时序图

2019-07-30

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

TA关注的人

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