- 博客(91)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 学习RPC框架设计
代理层:负责对底层调用细节的封装;链路层:负责执行一些自定义的过滤链路,可以供后期二次扩展;路由层:负责在集群目标服务中的调用筛选策略;协议层:负责请求数据的转码封装等作用;注册中心:关注服务的上下线,以及一些权重,配置动态调整等功能;容错层:当服务调用出现失败之后需要有容错层的兜底辅助;另外再附一张业界知名RPC框架Dubbo中各个层依赖关系图作对比:(来自Dubbo官方文档)这次分享就到这里就结束了,欢迎大家交流探讨。
2024-10-24 13:41:19
705
原创 优快云编程竞赛第三期 参赛经历分享
奖品还是挺不错的:比赛嘛,最终重要的还是锻炼自己。不管怎么样,通过参加比赛发现自己的不足,有进步了总归是好的,也别太在乎这成绩,就当练手了。
2022-08-27 21:56:48
1188
原创 推荐17个提升Java开发效率的“轮子”
在java的庞大体系中,其实有很多不错的小工具,也就是我们平常说的:轮子。如果在我们的日常工作当中,能够将这些轮子用户,再配合一下idea的快捷键,可以极大得提升我们的开发效率。
2022-08-21 18:57:37
1596
原创 教你轻松使用Fastjson
Fastjson 是阿里巴巴公司开源的一个 Java 语言编写的高性能功能完善的 JSON 库。它采用一种“假定有序快速匹配”的算法,把 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库,并且它不依赖于其它任何库。......
2022-08-14 23:38:31
2260
原创 超详细总结,带你实现 Linux 命令自由
Linux的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发,接触 `Linux` 机会相对较少,因此往往容易忽视它。但是学好它却是程序员必备修养之一。
2022-08-07 18:42:16
727
原创 终于弄明白了ThreadLocal
一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的(每个线程都只能看到自己线程的值)。写SpringBoot项目的时候,经常用到的一个保存用户信息的类就是Threadlocal。
2022-03-23 11:49:59
7653
33
原创 手写分布式雪花(SnowFlake)算法生成ID
SnowFlake是twitter公司内部分布式项目采用的ID生成算法,开源后广受国内大厂的好评。由这种算法生成的ID,我们就叫做SnowFlakeID。
2022-03-15 19:04:02
2779
38
原创 JVM垃圾收集-ZGC的染色指针
ZGC收集器有一个标志性的设计,就是采用了染色指针技术。染色指针技术 是如何实现的呢?虚拟内存映射了解么?
2022-03-13 13:03:48
2017
27
原创 MySQL中:一条update语句是怎样执行的
上一篇文章说完MySQL的事务和锁了,这次来详细介绍一下在MySQL中一条更新语句的详细执行流程 (本文无特殊说明均是采用Innodb存储引擎)。前期准备首先创建一张表,然后插入三条数据:CREATE TABLE T( ID int(11) NOT NULL AUTO_INCREMENT, c int(11) NOT NULL, PRIMARY KEY (ID)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试表';INSERT INTO T(
2022-03-11 13:28:15
4958
40
原创 MySQL常见的锁分析
本文会给大家介绍共享锁(S锁)、排它锁(X锁)、意向共享锁(IS锁)、意向排他锁(IX锁)。以及加锁的算法行锁、表锁、间隙锁和各种索引都会介绍到。学到就是赚到~
2022-03-10 21:10:48
1090
18
原创 JVM垃圾回收-三色标记
🎈现代大多数跟踪垃圾收集器(如CMS、G1、Shenandoah)都实现三色标记☘抽象的一些变体来对“垃圾”进行标记的。之所以都选择三色标记✨✨✨是因为它能够解决或者降低用户线程的停顿时间🍋。
2022-02-25 19:45:21
902
17
原创 字典树(前缀树)
为什么需要用字典树解决这类问题呢?假如我们有一个储存了近万个单词的字典,即使我们使用哈希,在其中搜索一个单词的实际开销也是非常大的,且无法轻易支持搜索单词前缀。然而由于一个英文单词的长度 n 通常在 10 以内,如果我们使用字典树,则可以在 O(n)——近似 O(1)的时间内完成搜索,且额外开销非常小。
2021-08-04 16:37:19
261
2
原创 链表(单链表)
(单)链表是由节点和指针构成的数据结构,每个节点存有一个值,和一个指向下一个节点的指针,因此很多链表问题可以用递归来处理。不同于数组,链表并不能直接获取任意节点的值,必须要通过指针找到该节点后才能获取其值。同理,在未遍历到链表结尾时,我们也无法知道链表的长度,除非依赖其他数据结构储存长度。
2021-08-02 00:34:32
212
1
原创 搜索(DFS+BFS+回溯法)
一切皆可搜索概述深度优先搜索回溯法广度优先搜索练习:概述深度优先搜索和广度优先搜索是两种最常见的优先搜索方法,它们被广泛地运用在图和树等结构中进行搜索。深度优先搜索深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍历;因此遍历需要用先入后出的栈来实现,也可以通过与栈等价的递归来实现。对于树结构而言,由于总是对新节点调用遍历,因此看起来是向着“深”的方向前进。深度优先搜索也可以用来检测环路:记录每个遍历过的节点的父节点,若一个节点被再次
2021-07-31 20:13:30
624
1
原创 二分查找(折半查找)
二分查找算法二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复杂度为 O(log n)。
2021-07-25 00:57:18
589
1
原创 玩转双指针
双指针概念:双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。Two Sum167.两数之和 II - 输入有序数组题解:因为数组已经排好序,我们可以采用方向相反的双指针来寻找这两个数字,一个初始指向最小的元素,即数组最左边,
2021-07-23 00:58:01
199
原创 八种排序算法与代码实现(java代码实现)
八种排序算法与代码实现堆排序思路:1.将序列构建成大顶堆。2.将根节点与最后一个节点交换,然后断开最后一个节点。3.重复第一、二步,直到所有节点断开。/** * 堆排序 * * @param arr 待排序的数组 */ public void headSort(int[] arr) { int len = arr.length - 1; //利用循环 排成大顶堆 (叶子结点 小于父节点 满足a[i]>a[i
2021-07-15 12:04:54
275
原创 (Rabin-Karp算法)匹配字符串(滚动哈希)
(Rabin-Karp算法)匹配字符串(滚动哈希)Rabin-Karp算法的思路是将字符串的比较转换成数字的比较。比较两个长度为m的字符串是否相等需要O(m)的时间,而比较两个数字是否相等通常可以是O(1)。为了将字符串映射到对应的数字,故此需要用到哈希函数。接下来的问题是,如何快速将字符串映射到对应的数字呢?如果需要在 O(L)的时间内算出编码,这种方法就没有意义了,因为这个直接进行字符串比较需要的时间相同。为了能够快速计算出字符串编码,我们可以将字符串看成一个 26 进制的数(因为字符串中仅
2021-07-14 23:56:42
720
1
原创 Docker常用命令大全
Docker常用命令一、Docker基本操作Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的(如果非要使用CentOS的话建议最好7.x或以上版本)。使用yum命令在线安装: yum -y install docker查看Docker的版本:docker -vDocker的启用和停止:启动docker:systemctl
2021-06-26 13:46:29
570
原创 SSM(spring+springMVC+mybatis)整合 所有配置文件
SSM(spring+springMVC+mybatis)整合 所有配置文件dao层service层web层日志等 所有的配置文件
2021-06-18 11:41:14
116
原创 第十一届蓝桥杯 2020年国赛真题及解析 (Java 大学B组)
第十一届蓝桥杯 2020年国赛真题 Java 大学B组A 美丽的 2B 扩散C 阶乘约数D 本质上升序列E 玩具蛇F 蓝肽子序列G 皮亚诺曲线距离H 画廊I 补给J 质数行者
2021-06-02 14:53:34
2758
1
原创 工厂设计模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式 属于创建型模式 ,它提供了一种创建对象的最佳方式。之前我们创建类对象时, 都是使用new 对象的形式创建, 除new对象方式以外, 工厂模式也可以创建对象.
2021-05-20 00:07:44
160
原创 多例设计模式
多例模式,是一种常用的软件设计模式。通过多例模式可以保证系统中,应用该模式的类有 固定数量的实例 。多例类要自我创建并管理自己的实例,还要向外界提供获取本类实例的方法。
2021-05-20 00:01:34
380
原创 单例设计模式
单例设计模式正常情况下一个类可以创建多个对象,但是有些时候的某些类, 我们希望只能创建单一的一个对象, 这时候我们需要使用到单例设计模式, 下面我们来介绍一下单例设计模式。单例设计模式的作用单例模式,是一种常用的软件设计模式。 通过单例模式可以保证系统中,应用该模式的这个类只有一个实例。 即一个类只有一个对象实例。单例设计模式实现步骤将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。在该类内部产生一个唯一的实例化对象定义一个静态方法返回这个唯一对象。例设计模
2021-05-19 23:56:03
96
原创 epoll底层原理
epoll作为linux下高性能网络服务器的必备技术至关重要,java NIO、nginx、redis、skynet和大部分游戏服务器都使用了这一多路复用技术。epoll是select和poll的增强版本。
2021-05-03 19:16:20
3735
1
原创 java线程池介绍
java高并发应用频繁创建和销毁线程的操作将是非常低效的,而且不被编程规范所允许的。如何降低java线程的创建成本,就必须用到线程池。
2021-05-02 12:28:10
196
原创 java中线程的使用
java中线程的使用java中创建线程的几种方法:创建线程(Thread实例)的方式一:继承Thread类创建线程类,让后创建线程实例创建线程(Thread实例)的方式二:实现Runnable接口创建线程目标类,让后创建线程实例Future接口和FutureTask异步任务类使用Callable和FutureTask创建异步任务,让后创建线程实例通过线程池创建线程
2021-04-30 12:21:28
157
1
原创 start方法和run方法的区别
start方法和run方法的区别start()用start()启动线程,实现了真正意义上的启动线程,此时会出现异步执行的效果start()启动了Thread实例的生命周期run()直接调用Thread实例的run(),相当于当前线程执行一次其业务逻辑,是同步执行的就不是异步执行了,不会达到使用线程的意义run()没有启动线程的生命周期启动生命周期的意思是: 线程的执行状态发生改变(即state的值变了)...
2021-04-30 12:13:12
125
原创 Guava 的异步回调介绍
Guava 的异步回调介绍Guava 对 Java 的异步回调机制,做了以下的增强:(1)引入了一个新的接口 ListenableFuture,继承了 Java 的 Future 接口,使得 Java 的 Future异步任务,在 Guava 中能被监控和获得非阻塞异步执行的结果。(2)引入了一个新的接口 FutureCallback,这是一个独立的新接口。该接口的目的,是在异步任务执行完成后,根据异步结果,完成不同的回调处理,并且可以处理异步结果。
2021-04-23 12:36:21
1108
1
原创 join 异步阻塞介绍
join 异步阻塞介绍join 操作的原理是:阻塞当前的线程,直到准备合并的目标线程的执行完成。线程的 join 合并流程:在 Java 中,线程(Thread)的合并流程是:假设线程 A 调用了线程 B 的 B.join 方法,合并 B线程。那么,线程 A 进入阻塞状态,直到 B 线程执行完成。使用 join 实现异步泡茶喝的实践案例流程图:代码实现:public class JoinDemo { public static final int SLEEP_GAP = 5
2021-04-23 11:14:32
533
原创 FutureTask 异步回调介绍
FutureTask 异步回调介绍FutureTask 方式包含了一系列的 Java 相关的类,在 java.util.concurrent 包中。其中最为重要的是 FutureTask 类和 Callable 接口。
2021-04-23 11:12:23
569
原创 Java NIO 通信基础介绍
高性能的 Java 通信,绝对离不开 Java NIO 技术,现在主流的技术框架或中间件服务器,都使 用了 Java NIO 技术,譬如:Tomcat、Jetty、Netty。
2021-04-22 00:31:13
456
4
服务注册成功 但nacos服务列表不显示
2021-03-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人