- 博客(92)
- 资源 (1)
- 问答 (3)
- 收藏
- 关注

原创 大白话详解G1垃圾回收器
通俗语言讲解G1垃圾回收器通过分代管理和Region划分优化堆内存管理,采用三色标记法进行垃圾回收,支持动态调整内存和设置停顿时间。
2024-08-23 14:12:58
2670
1

原创 大白话Spring循环依赖详解
本文深入解析了Spring框架中三级缓存机制及其在解决循环依赖中的关键作用。三级缓存分为一级缓存(已初始化的单例Bean)、二级缓存(尚未完成初始化的Bean)、以及三级缓存(提前暴露的单例工厂)。通过具体实例,文章详细介绍了对象从实例化到初始化的全过程,并重点探讨了为什么Spring要将BeanFactory放入三级缓存,以及如何通过回调函数提前生成代理对象,从而有效解决循环依赖问题。这一机制确保了Spring在处理复杂依赖关系时的灵活性和高效性。
2024-08-21 14:15:48
559

原创 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
23149
1

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

原创 一台阿里云主机,实现docker集群和外网通讯,如何搭建完全分布式Hadoop集群
实现原理:一台阿里云主机+docker+iptables网络拓扑图操作步驟如下:安裝docker,详情请自行百度安装好之后你可以在云主机上键入ifconfig查看,会发现多了一个docker0的虚拟网卡,这是安装docker之后默认创建的,当然我们也可以自己创建一个虚拟网络创建自己的虚拟网络,在阿里云主机上键入:docker network create dockerNetBridge再次在阿里云主机上键入:ifconfig发现多了一个新的虚拟网卡,这个新网卡就是我们创建的虚拟网络docke
2020-12-30 16:23:48
20056
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
20402
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
20992
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
20614

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

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

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

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

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

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

原创 从Servlet到SpringMVC演变过程详解(ServletContext 和WebApplicationContext, ApplicationContext给你安排上了)
无图言屌:以前我们用servlet进行编程:所有的配置都会在配置在web.xml里面,其实类似于现在的任务编排我们会把我们的Filter和Servlet还有Listener,初始化的一些参数都写到web.xml中,然后相信大家也都看到了上面的这张图,里面有两个Context,这两个都是servletcontext,对应的是两个web应用,一个servletcontext对应的是...
2019-06-06 17:13:55
20655
1
原创 【大白话讲解ES的查询语句从SQL角度理解】
我们先看外层的filter,filter其实相当于SQL中的where的意思,对结果进行过滤,should节点里面的子节点,意味着满足任一即可,所以should也就是SQL中的or的意思,我们剖析should里面的子节点,我们可以看到should里面是两个bool的子节点,然后单个bool子节点分析,单个bool节点下面是must节点,must对应的是个数组,就意味着这个数组里面的条件都要满足,也就是must相当于SQL里面的and的意思,must_not相当于SQL里面的!代表非的意思。
2025-02-19 18:39:35
272
原创 大白话分布式事务-SEATA事务四种模式(内含demo)
本文主要讨论了分布式事务的概念及其在现代开发中的重要性,强调事务已从仅涉及数据库扩展到需要保持数据一致性的多种场景。文章解释了事务基于数据库连接而非数据库本身,并介绍了如何在Spring框架下使用@Transactional注解管理事务。进一步探讨了分布式事务,包括阿里的SEATA框架及其四种模式:AT、TCC、Saga和XA,每种模式在一致性、适用场景、性能和开发复杂度方面的特点。最后,通过示例展示了如何在Spring Boot中集成Seata处理分布式事务。
2024-10-28 18:22:07
1881
原创 大白话Spring对数据源和事务管理以及多数据源配置
本文讲解了在Spring Boot中配置多数据源、连接池和事务管理器的方法,包括使用JdbcTemplate和MyBatis。介绍了配置数据源、连接池属性、创建DataSource Bean、JdbcTemplate实例、SqlSessionFactory以及事务管理器的步骤,并强调了配置完成后的优化和检查工作。
2024-10-28 18:20:44
472
原创 【自动生成接口文档】Sofaboot集成Swagger3并通过Yapi做接口管理
Sofaboot集成Swagger3并通过Yapi做接口管理
2022-08-31 14:37:36
23416
原创 【自动生成接口文档】Springboot集成springFox-Swagger3并通过Yapi做接口管理
Springboot集成springFox-Swagger3并通过Yapi做接口管理
2022-08-30 19:02:40
23182
原创 【自动生成接口文档】Springboot集成OpenAPI-Swagger3并通过Yapi做接口管理
Springboot集成OpenAPI-Swagger3并通过Yapi做接口管理
2022-08-30 18:14:03
23805
4
原创 【自动生成接口文档】Springboot集成Swagger2并通过Yapi做接口管理
Springboot集成Swagger2并通过Yapi做接口管理
2022-08-30 16:18:26
22850
原创 条件式注解@ConfigurationOnXXX原理详解
springboot条件注入原理详解,相关注解@Condition, @Conditional,@ConfigurationPhase,@ConditionalOnBean,@ConditionalOnClass等
2022-08-16 11:24:20
22835
原创 【图解】redis主从同步流程——全量同步、部分同步、命令传播
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、全量同步二、增量同步三、命令传播总结前言本文主要介绍Redis高可用下的主从同步问题,包括全量同步、部分同步、命令传播。注意一点:Redis同步是异步同步,因为redis在处理了客户端的命令之后,会立刻返回给客户端结果,而后才会进行主从同步,所以redis主从同步和客户端请求不是同步的。一、全量同步PSYNC <runid> <offset> 命令:PSYNC: redis2.8以.
2022-03-31 02:15:32
27731
2
原创 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
24525
原创 【图解】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
22443
原创 集群模式下RedisTemplate使用Scan命令全节点模糊匹配key
为什么需要模糊匹配key?因为有时候,缓存的key设计的不合理,比如商品信息的缓存设计成:门店编码+商品id,当我们需要查询一个门店下的所有商品缓存的时候,可能就需要获取这个门店编码下的所有商品信息的key然后遍历获取门店下的所有商品。为什么使用Scan?因为Keys是阻塞的,严重影响性能,官方不建议生产环境使用,取而代之的是Scan命令。Scan命令怎么使用呢?语法:scan cursor [MATCH pattern] [COUNT count]语法说明:[]里面的代表.
2021-08-20 17:35:58
29669
4
原创 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
23233
原创 RedisSet缓存List数据并设置过期时间——Lua实现
RedisSet缓存List数据操作并设置过期时间—Lua脚本实现工作中自己开发需要,现有的工具不能满足,于是自己定制了一套批量缓存List内容数据,而不是将整个List作为一个value缓存,并且删除原有的数据,同时设置过期时间,定义方法内容 /** * @description 批量缓存List数据,并且删除原有的数据,同时设置过期时间 * @param clazz List的数据泛型 * @param duration 过期时间 单位/秒 * @a
2021-04-22 17:06:39
26381
原创 大白话讲解分库分表框架ShardingJDBC-含DEMO
分库分表 — Shardingjdbc分库分表:分库分表为什么分表? 肯定是因为需要怎么进行分表?垂直分表和水平分表什么是垂直分表?如果表过大,垂直分表就是按照业务角度将大列分为几个表,划分的原则一般是频繁变化的分为一个表,不频繁变化的,尤其大字段,如text和blob字段这种影响io性能的划分为另外一个表中,这样就实现了垂直分表。如下图:什么是水平分表?就是将数据根据策略分到不同的表中,从而使数据均匀的分布在不同的数据库和表中,也是最常见的分表方式。如下就是将一个表分为四个表:将ds库中的o
2021-04-19 15:54:53
23381
2
原创 SpringCloudGateWay
SpringCloudGateWay进行服务化:我们需要将我们的springCloudGatewa项目当作一个服务注册到EurekaServer中,配置如下server:port: 8888spring:application:name: cloud-gateway-eurekacloud:gateway:discovery:locator:enabled: trueeur...
2021-03-22 10:37:27
20432
原创 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
25683
原创 ES-聚合查询
ES-聚合查询聚合查询aggregations—聚合,可以简写为aggs,提供了一种基于查询条件来对数据进行分桶、计算的方法。类似于 SQL 中的 group by 再加一些函数方法的操作。聚合可以嵌套,由此可以组成复杂的操作。聚合查询:大致可以分为三类:Bucketing Aggregations(分桶聚合): 聚合对象是文档,将满足条件的文档分到一个桶(组)里,这样就达到分桶的目的。// 根据年龄进行分组,小于40, 40-60, 大于60。{ "aggs": {
2021-03-16 10:49:13
24247
原创 SpringBoot入参字段校验-分组和自定义校验注解
SpringBoot入参字段校验-分组背景: 有一个请求实体bean,里面的属性在有些接口里面用,有些是在另外一个接口用;public class FantasyProductUpDownRequest { // 批量接口参数用 private Set<Long> skuStoreIdSet; // 单个接口用 private Long skuStoreId;}因为是相同功能的参数,所以就写在一个实体bean里面了,之所以要分组,是因为无论是批量接口还是单个
2021-03-09 17:29:13
20867
Shiro鉴权登陆成功后 authc网页还是没法访问
2018-07-31
response设置跨域请求头 无效
2018-07-16
通过解析http协议 不用控件 解决WEB图片上传问题
2016-11-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人