- 博客(46)
- 资源 (6)
- 问答 (1)
- 收藏
- 关注

原创 基于Raft协议 + gRPC长连接实现集群间的服务发现、服务注册、元数据共享、元数据持久化
Leader会先将用户请求打包成LogEntry写入磁盘,通过一个个Replicator(复制器)将所有打包好的LogEntry复制到Follower节点,每复制成功一个LogEntry,都会向计票器(BallotBox)增加一次计票,直到某一时间点超过半数的Follower成功复制LogEntry(index,term),这时候BallotBox会通知Leader将这些LogEntry打包成Task任务交给自己的状态机(StateMachine)处理。避免客户端RPC请求和长连接指向无效的Raft节点。
2025-04-08 09:00:00
2483
9

原创 OHara Gateway SPI动态加载机制图解
本文介绍 OHara Gateway 中的 SPI 扩展机制,参自考 Dubbo SPI 实现原理。OHara Gateway 中很多核心模块都依赖 SPI 机制去动态加载对应的扩展实现类。例如:操作符匹配策略(MatchStrategy)、多种缓存插件加载(ICacheBuilder)、多种负载均衡策略加载(LoadBalancer) 等等。
2025-03-06 00:23:31
3280
4

原创 Spring Bean加载耗时采集工具
针对启动慢的 Spring 应用,找出 IOC 容器启动过程中,加载耗时较长的 Bean 对象进行治理。
2024-08-30 14:16:57
6350
4
原创 Java并发基石CAS原理以及ABA问题
在学习CAS之前,先从一个简单的案例入手,进而引出CAS的基本使用:1、基于CAS的网站计数器需求:我们开发一个网站,需要对访问量进行统计,用户每发送一次请求,访问量+1,如何实现?我们模拟有100个人同时访问,并且每个人对咱们的网站发起10次请求,最后总访问次数应该是1000次。1.1 网站访客统计Demo代码如下:public class Demo { // 网站总访问量 static int count = 0; // 模拟用户访问的方法 publi
2025-05-10 20:14:45
7420
7
原创 ThreadLocal源码分析_02 内核(ThreadLocalMap)
本篇文章是接着上一篇:ThreadLocal源码分析_01 入门案例以及表层源码分析,继续分析!本篇主要介绍ThreadLocal的内核ThreadLocalMap(ThreadLocal的静态内部类),在学习ThreadLocalMap内核前,再来复习一下ThreadLocal的执行流程图:下面就正式分析一下ThreadLocalMap的原理:1、成员属性/** * 初始化当前map内部散列表数组的初始长度 16 */private static final int INITIAL_.
2025-05-10 20:14:20
6325
11
原创 ThreadLocal源码分析_01 入门案例以及表层源码分析
1、ThreadLocal简介ThreadLocal是一个全局对象,ThreadLocal是线程范围内变量共享的解决方案;ThreadLocal可以看作是一个map集合,key就是当前线程,value就是要存放的变量。eg如下:// 声明一个ThreadLocal实例ThreadLocal threadLocal = new ThreadLocal();// 随机获取一个数字nint n = new Random().nextInt();// 存放数据n给threadLocal:threa
2025-05-10 20:14:08
7911
18
原创 ThreadLocal源码夺命12问,你能坚持到第几问?
总结的面试题也挺费时间的,文章会不定时更新,有时候一天多更新几篇,如果帮助您复习巩固了知识点,还请三连支持一下,后续会亿点点的更新!,展开后有一张办公桌大小,也可以折叠成一本书的尺寸,有兴趣的小伙伴可以了解一下,当然,不管怎样博主的文章一直都是免费的~为了帮助更多小白从零进阶 Java 工程师,从CSDN官方那边搞来了一套 《Java 工程师学习成长知识图谱》,尺寸。此外,在线性的向前、向后遍历数组寻找目标元素所在的桶位时,如果发现数据过期了(,桶的位置是(数组索引),不同位置上,不发生。
2025-05-10 19:54:38
7843
61
原创 ConcurrentHashMap源码夺命15问,你能坚持到第几问?
临近秋招,备战暑期实习,祝大家每天进步亿点点!Day11本篇总结的是 ConcurrentHashMap 相关的面试题,后续会每日更新~对 ConcurrentHashMap 源码不熟悉的可以参考我的往期博客:ConcurrentHashMap源码解析文章总目录卷吗?卷就对了,Java 就是这么卷卷单单!1、请你描述一下ConcurrentHashMap存储数据结构是什么样子呢?ConcurrentHashMap 内部的 map 结构和 HashMap 是一致的,都是由:数组 + 链表.
2025-05-10 19:53:57
7367
38
原创 Linux环境下Kafka的安装与使用(SpringBoot整合云服务器上的Kafka)
0. 前言本文我们主要讲 Kafka 的安装和使用,对于 Kafka 的简介和功能作用就不再详细介绍,给大家推荐一篇文章,可以自行了解:https://blog.csdn.net/weixin_42238150/article/details/1074497871. 下载kafkaKafka 官网:http://kafka.apache.org/下载地址:http://archive.apache.org/dist/kafka/2.3.1/因为国外网址,下载速度很慢,建议大家使用镜像地址下载
2025-05-07 19:25:47
4830
2
原创 Springboot整合Redis作为Mybatis的二级缓存
文章转载声明:转载请附带原文链接0. 环境准备以下是我本机的环境:SpringBoot2.3.xMybatis3.xRedis5.x本机或者服务器中搭建好redis环境,并启动成功!这里我用的是阿里云学生机上部署的redis5.xIDEA2020.x ,Eclipse2020也是可以的,编辑器选择无所谓!1. 新版本springboot和IDEA编辑器踩坑(可以直接跳过该章节,遇到类似的错误再回头看)如果您在实操过程中,使用的是IDEA2020 和springboot2.3.x 版.
2025-05-07 19:25:34
4844
1
原创 MySQL索引分析以及相关面试题
可以在我的个人博客阅读文章,排版会美观一些:文章地址1. 什么是索引一种能帮助mysql提高查询效率的数据结构:索引数据结构索引优点:大大提高数据查询速度索引缺点:维护索引需要耗费数据库资源索引要占用磁盘空间当对表的数据进行增删改的时候,因为要维护索引,所以速度收到影响结合索引的优缺点,得出结论:数据库表并不是索引加的越多越好,而是仅为那些常用的搜索字段建立索引效果才是最佳的!2. 索引的分类主键索引:PRIMARY KEY设定为逐渐后,数据库自动建立索引,i.
2025-05-07 19:25:20
11794
21
转载 MySQL锁相关问题学习
参考文章链接:MySQL常见的七种锁详细介绍参考文章链接:MySQL的锁与事务隔离级别详解MySQL中有几种锁?常见的是7种锁,还有一种不常见的预测锁行锁(Record Locks)属于行级锁,悲观锁间隙锁(Gap Locks)属于行级锁,悲观锁临键锁(Next-key Locks)属于行级锁,悲观锁(读)共享锁/(写)排他锁(Shared Locks/Exclusive Locks)属于行级锁,悲观锁意向共享锁/意向排他锁(Intention Shared L.
2025-05-07 19:25:08
4858
1
原创 小滴课堂MySQL相关面试题总结
1. Mybatis中 # 和 $的区别# 可以防止SQL 注入,它会将所有传入的参数作为一个字符串来处理。# 防止SQL注入底层相当于是在操作JDBC时,使用PreparedStatement预编译SQL语句来防止SQL注入$ 则将传入的参数拼接到SQL上去执行,一般用于表名和字段名参数,$ 所对应的参数应该由服务器端提供。JDBC中的SQL注入案例:https://blog.csdn.net/ashleyjun/article/details/100558518SQL 注入案例:SELEC
2025-05-07 19:24:59
6787
4
转载 MySQL中联表查询条件WHERE和ON的区别?
先来看一个关联查询的DEMO:select * from student s left join class c on s.classId=c.id order by s.id查询结果如下:下面在ON 条件中拼接一个条件:s.name="张三"select * from student s left join class c on s.classId=c.id and s.name="张三" order by s.id查询结果如下:在ON 条件中拼接一个条件:c.name="三年级三班"
2025-05-07 19:24:17
6362
4
原创 MySQL如何解决幻读和不可重复度?
文章参考:https://juejin.im/post/5b8577c26fb9a01a143fe04ehttps://joonwhee.blog.csdn.net/article/details/106893197http://blog.51cto.com/14344203/2402076注意:探讨MySQL如何防止不可重复度和幻读问题之前,默认大家已经理解脏读、幻读、不可重复读的区别,以及数据库事务的3种隔离级别!1. MySQL中的3种锁算法首先了解下MySQL中的3种锁算法:.
2025-05-07 19:23:49
9739
5
原创 MySQL主从复制与表拆分相关问题总结
文章参考:https://joonwhee.blog.csdn.net/article/details/106893197问题:如何做慢 SQL 优化?首先要搞明白慢的原因是什么:是查询条件没有命中索引?还是 load 了不需要的数据列?还是数据量太大?所以优化也是针对这三个方向来的:首先用 explain 分析语句的执行计划,查看使用索引的情况,是不是查询没走索引,如果可以加索引解决,优先采用加索引解决。分析语句,看看是否存在一些导致索引失效的用法,是否 load 了额外的数据,是否
2025-05-07 19:23:41
9498
9
原创 MySQL面试题合集!
临近秋招,备战暑期实习,祝大家每天进步亿点点!Day13本篇总结的是 MySQL 相关的面试题,后续会每日更新~一、MySQL索引分析以及相关面试题参考文章:MySQL索引分析以及相关面试题二、MySQL主从复制与表拆分相关问题总结参考文章: MySQL主从复制与表拆分相关问题总结三、MySQL如何解决幻读和不可重复度?参考文章:MySQL如何解决幻读和不可重复度?四、MySQL中联表查询条件WHERE和ON的区别?参考文章:MySQL中联表查询条件WHERE和O.
2025-05-07 19:22:59
26517
60
原创 一小时学会使用springboot操作阿里云OSS实现文件上传,下载,删除(附源码)
参考资料:Java操作阿里云OSS操作官方文档学会看文档,并实际运用也是一种习惯和技能下面就来简单入门一下,用当下比较热门的Springboot 去操作阿里云OSS文件存储。1.需求(没踩过下面的坑的小伙伴可以直接跳过这一章节)问题简述首先,我在之前自己做一些开源小项目案例中遇到一些文件上传下载的问题,比如在本机文件上传和下载都可以正常使用,通过将文件上传到Springboot项目的根目录下,按日期分文件夹,文件访问也很方便,可以直接返回文件相对路径地址,并直接可以访问。问题然而
2025-05-07 19:22:37
23052
63
原创 一小时学会使用Springboot整合沙箱环境支付宝支付(附源码)
支付宝支付沙箱测试demo(附源码)声明: 转载请附原文链接0.前言文章需求:对于学生来说,目前网上确实没有比较统一而且质量好的支付教程。因为支付对个人开发者尤其是学生来说不太友好。因此,自己折腾两天,算是整理了一篇关于支付宝沙箱支付的文章。那么为什么不用微信沙箱支付呢?微信支付我在另一篇文章中写过,用的是别人的公众号和开放平台账号,而微信的沙箱测试我自己也搞了好几天了也没弄好,确实没有支付宝沙箱测试容易。因为支付宝提供了一套pc客户端和手机端的测试软件(比如沙箱版支付宝)!微信和
2025-05-07 19:22:23
12067
10
原创 JDK集合源码之HashMap解析(上)
声明:转载请附带原文链接!1.HashMap继承体系从继承体系可以看出:HashMap 实现了Cloneable接口,可以被克隆。HashMap 实现了Serializable接口,可以序列化。HashMap 继承了AbstractMap,实现了Map接口,具有Map的所有功能。存储结构在Java中,HashMap的实现采用了(数组 + 链表 + 红黑树)的复杂结构,数组的一个元素又称作桶。在添加元素时,会根据hash值算出元素在数组中的位置,如果该位置没有元素,则直接把元素放置.
2025-05-07 11:53:19
8078
22
原创 JDK集合源码之HashMap解析(下)
由于上篇文章JDK集合源码之HashMap解析(上)篇幅较长,为阅读方便,分成两篇博客来分析HashMap!5.HashMap的成员方法5.1put(K key, V value)方法put方法是比较复杂的,实现步骤大致如下:先通过 hash 值计算出 key 映射到哪个桶;如果桶上没有碰撞冲突,则直接插入;如果出现碰撞冲突了,则需要处理冲突:a 如果该桶使用红黑树处理冲突,则调用红黑树的方法插入数据;b 否则采用传统的链式方法插入。如果链的长度达到临界值,则把链转变为红黑树;
2025-05-07 11:53:12
5282
5
原创 HashMap底层红黑树实现(自己实现一个简单的红黑树)
文章整理于小刘老师讲源码视频学习链接:小刘老师讲解红黑树1.树结构入门|—树 |—树结构常用语 |—二叉搜索树 |—查找节点 |—插入节点 |—遍历 |—查找最大值,最小值算法 |—删除节点 |—①删除没有子节点的节点 |—②删除有一个子节点的节点 |—③删除有两个子节点的节点 |—④删.
2025-05-07 11:53:05
10576
8
原创 IDEA中配置阅读并编辑jdk8源码的环境
前言JDK官方下载地址:https://www.oracle.com/java/technologies/javase-downloads.html版本要求:openJDK8开发工具:IDEA2020导入jdk 源码压缩包将source path 进行重新指定,这样可以对源码进行修改:注意:将jdk源码src.zip 解压,拷贝到项目所在的某个目录,不要放在src下,否则会被当做项目的一部分,进行整体编译,造成卡顿。JDK 源码阅读与编辑第一步:IDEA关联sour.
2025-04-17 08:30:12
8256
2
原创 Linux环境下ElasticSearch的安装与使用(SpringBoot整合云服务器上的ElasticSearch)
0. Elaticsearch 简介Elaticsearch,简称为ES,ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别(大数据时代)的数据。ES由 Java 语言开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTFULL API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。据国际权威的数据库产品评测机构 DB Engines 的统计,在2016 年1月,Ela
2025-04-17 08:29:51
5074
1
原创 JDK集合源码之LinkedHashMap解析
LinkedHashMap简介LinkedHashMap内部维护了一个双向链表,能保证元素按插入的顺序访问,也能以访问顺序访问。LinkedHashMap可以看成是 LinkedList + HashMap。LinkedHashMap继承HashMap,拥有HashMap(参考链接:JDK集合源码之HashMap解析)的所有特性,并且额外增加了按一定顺序访问的特性,LinkedHashMap 默认存储顺序为插入顺序,也可按照访问顺序存储元素。案例@Testpublic void test
2025-04-17 08:29:15
4400
1
原创 踩坑:M1芯片Mac Book使用IDEA旗舰版卡顿问题
新开封的Mac Book安装IDEA开发工具出现操作卡顿,UI拖动迟缓问题解决方案:1、先查看自己的Mac使用的是Intel处理器还是M1处理器我的是M1处理器,如下图:2、官网下载IDEA时,选择正确的版本官网下载地址:https://www.jetbrains.com/idea/download/#section=mac要选择Apple Silicon版本,不要下载Intel的版本,如下图:如果本机是M1芯片,而安装了Intel的版本,则会出现使用卡顿,UI拖动迟缓问题,卸载
2025-04-17 08:27:55
35103
19
原创 String StringBuilder StringBuffer区别以及源码分析
1. Spring/SpringBuilder/SpringBuffer 区别1.1 StringString 对象一旦创建之后就是不可变的,不可变的!问题:既然String 对象是不可变的,那么其包含的常用修改值的方法是如何实现的呢?Demosubstring(int,int) 字符串截取 split(String,int) 字符串分割 toLowerCase() 字符串所有字母小写 ...其实,这些方法底层都是通过重新创建一个String 对象来接收变动后的字
2025-04-17 08:27:28
9290
2
原创 JDK集合源码之LinkedList解析
声明:尊重他人劳动成果,转载请附带原文链接!1.LinkedList继承体系LinkedList:LinkedList是一个以双向链表实现的List,它除了作为List使用,还可以作为队列或者栈来使用。从继承体系可以看出,LinkedList实现了Cloneable和Serializable接口,说明其可以被克隆,也可以被序列化!同样的,LinkedList被克隆的时候,和ArrayList一样二者均是浅拷贝。对于如何实现集合的浅拷贝和序列化,我在上一篇文章JDK集合源码之ArrayList解.
2025-04-17 08:27:03
3637
6
原创 JDK集合源码之ArrayList解析(附带面试题举例)
ArrayList 继承体系ArrayList 又称动态数组,底层是基于数组实现的List,与数组的区别在于,其具备动态扩展能力。从继承体系图中可看出ArrayList:实现了List, RandomAccess, Cloneable, java.io.Serializable等接口实现了List,具备基础的添加、删除、遍历等操作实现了RandomAccess,具备随机访问的能力实现了Cloneable,可以被克隆实现了Serializable,可以被序列化ArrayList 属性.
2025-04-17 08:26:48
4655
5
原创 Java中的128陷阱和new String(“xxx“)创建了几个对象问题
String s = new String("abc") 创建了几个字符串对象?// 答案:1个或者2个Ⅰ 如果字符串常量池中已经有"abc"存在,这种情况只需要新建1个对象,否则就需要新建2个对象。Ⅱ 当字符串常量池没有 "abc",此时会创建如下两个对象: * 一个是字符串字变量 "abc" 所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,此时该实例也是在堆中,字符串常量池只存放引用。 * 另一个是通过 new String() 创建并初始化的,内容与"abc"相同的实.
2024-09-03 11:06:00
11625
原创 Java中的深拷贝与浅拷贝
深拷贝和浅拷贝区别是什么?数据分为基本数据类型和引用数据类型。基本数据类型:数据直接存储在栈中;引用数据类型:存储在栈中的是对象的引用地址,真实的对象数据存放在堆内存里。浅拷贝:对于基础数据类型:直接复制数据值;对于引用数据类型:只是复制了对象的引用地址,新旧对象指向同一个内存地址,修改其中一个对象的值,另一个对象的值随之改变。深拷贝:对于基础数据类型:直接复制数据值;对于引用数据类型:开辟新的内存空间,在新的内存空间里复制一个一模一样的对象,新老对象不共享内存,修改其中一个对象的值,不会影响另.
2024-09-03 11:05:34
11290
9
原创 notepad++查看二进制.class文件——HexEditor插件(64/32位)安装教程
notepad++查看二进制.class文件——HexEditor插件(64/32位)安装教程
2024-09-03 11:03:39
13816
3
原创 Spring静态变量/构造函数注入失败(注入为null)问题的解决方案
Spring静态变量/构造函数注入失败(注入为null)问题的解决方案
2024-09-03 11:03:02
23416
9
IO、通信中间件Netty入门
2020-11-06
MySQL有自己的缓存机制 ,为什么还要用Redis?
2021-06-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人