- 博客(75)
- 资源 (8)
- 收藏
- 关注
原创 java.util.concurrent.Future
Future接口是 Java 并发编程中一个非常重要的组件,它代表了异步计算的结果。你可以把它想象成一个“承诺”或者一个“凭据”,当你发起一个异步任务后,你会得到一个Future对象。检查异步任务是否完成。等待异步任务完成并获取结果。取消异步任务的执行。代表异步计算的结果。允许你非阻塞地提交和管理异步任务。提供了检查任务状态、获取结果、取消任务等功能。理解和熟练使用Future接口对于编写高效、响应迅速的并发程序至关重要。在实际开发中,通常会结合线程池来使用Future。
2025-03-18 16:12:48
857
原创 发现学习与研究的新利器:Highlight,让你的网页阅读事半功倍!
Highlight 是一个功能强大、易于使用的网页高亮工具,它将帮助你更好地学习和研究。无论是学生还是专业人士,Highlight 都能为你提供强大的支持,让你的阅读和学习更加高效。快来试试吧,相信它会成为你学习和工作中得力的助手!
2025-01-07 15:12:30
425
原创 服务端健康检查最常见的方式:TCP 端口探测与 HTTP 接口返回码探测
TCP(传输控制协议)是互联网通信的基础协议之一。TCP 端口探测是通过尝试连接服务的指定端口来判断其是否处于可用状态的方式。当一个服务启动时,它通常会监听一个或多个TCP端口,等待客户端的连接请求。通过检查这些端口的响应情况,我们可以确定服务是否处于正常工作状态。HTTP(超文本传输协议)是Web应用程序最常用的通信协议。HTTP接口返回码探测是通过向服务的健康检查URL发送HTTP请求并分析响应状态码来确定其健康状况的方式。
2024-07-07 21:53:05
1861
原创 Nacos源码:@ExtractorManager.Extractor
阅读Nacos源码时,经常看到Controller中有这么一个注解。那么它的作用是什么?类的主要用途是为不同类型的请求(HTTP 和 gRPC)动态提供合适的参数提取器。通过注解方式,调用者可以灵活地在不同的处理器方法或类上指定不同的提取器(class),增强了代码的可配置性和可扩展性。管理了不同类型的参数提取器 (和) 的实例化和获取。使用了自定义的@Extractor注解来指定类或方法应使用的提取器,支持灵活配置。通过静态初始化块和,它加载并管理所有可用的提取器实现,避免了手动实例化和配置。
2024-06-20 14:14:09
791
原创 6、Nacos服务注册服务端源码分析(五)
上篇文章我们看了统一的事件通知这个类,将客户端注册服务的流程梳理到了事件通知这一步,接下来我们接着看获取到之后的处理逻辑。
2023-09-25 15:57:28
328
原创 SPI : Service Provider Interface
jdk6中引入了一个新特性,使得我们可以根据一个指定的「接口」去找到并加载指定的「实现」。本篇文章会详细介绍下SPI的用法及场景。
2022-08-26 13:45:29
412
原创 SpringAOP之代理模式选择
目标类:ProxyFactoryBean目标方法:public Object getObject() throws BeansException { initializeAdvisorChain(); if (isSingleton()) { return getSingletonInstance(); } else { if (this.targetName == null) { logger.info("Using non-singleton proxies with sing
2022-05-27 10:59:56
383
原创 yarn : 无法加载文件 yarn.ps1,因为在此系统上禁止运行脚本。
yarn : 无法加载文件 D:\devtool\node\node_global\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。npm install --global yarn安装yarn的时候抱这个错。同时还有这么一个提示:有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID
2022-05-06 09:50:44
6471
5
原创 备忘:玩go的时候遇到的问题【持续更新】
标题go get 或者 install一直超时go env---GOPROXY=https://goproxy.cn,direct---更换GOPROXY为国内代理go env -w GOPROXY=https://goproxy.cn,direct
2022-04-29 15:51:01
338
原创 分布式一致性协议之Raft
最近看RocketMQ的时候,了解到v4.5.0之后,broker采用遵循raft协议的复制组来实现数据一致性。虎躯一震,raft协议在现在的脑子里变的熟悉又陌生…问题不大,重新刷一遍raft。先贴官网:The Raft Consensus Algorithm再贴动画演示:Raft: Understandable Distributed Consensusps:里边的动图挺有意思😈简介ps:来自维基百科Raft是一种用于替代Paxos的共识算法。相比于Paxos,Raft的目标是提供更清晰的
2022-03-19 12:09:01
3026
转载 K8S:API设计原则
API设计原则看到了K8S的API设计原则,对日常开发还是很有借鉴意义的,特此留存。对于云计算系统,系统API实际上处于系统设计的统领地位,正如本文前面所说,K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作,理解掌握的API,就好比抓住了K8s系统的牛鼻子。K8s系统API的设计有以下几条原则:所有API应该是声明式的。正如前文所说,声明式的操作,相对于命令式操作,对于重复操作的效果是稳定的,这对于容易出现数据丢失或重复的分布式环境来说是很
2021-09-18 16:44:26
384
原创 git rebase下的git flow
rebase基础介绍git代码合并有两种,git merge 和 git rebase 。两者目的相同,都是把不同分支的提交合并到一起,但是过程有差异。git merge作用:把源分支的提交合并到目标分支。过程中,目标分支改变,源分支不变。优点:简单易上手/保留了提交历史和时间次序/分支结构不变缺点:提交历史被大量的merge操作污染/git bisect调试困难git rebase作用:清除了历史,将一个分支完全转移到了目标分支优点:复杂的历史变成优雅的提交线缺点:分支上下文模糊了/d.
2021-08-10 18:40:02
984
原创 【线程知识点】-- 自旋锁
文章目录前言一、什么是自旋锁?二、为什么要用自旋锁?三、实例讲解AtomicInteger四、自己实现一个可重入的自旋锁五、缺点及适应场景缺点适用场景总结前言自旋锁是个比较基础的知识点了,应该很熟悉的掌握。一、什么是自旋锁?自旋”可以理解为“自我旋转”,这里的“旋转”指“循环”,比如 while 循环或者 for 循环。“自旋”就是自己在这里不停地循环,直到目标达成。而不像普通的锁那样,如果获取不到锁就进入阻塞。自旋锁并不会释放CPU的时间片,而是通过自旋的方式不断地去尝试获取锁,如果尝试获
2020-12-25 11:26:07
1216
原创 『怎么用』代理模式
阐述为一个对象提供一个占位符或者是替身,用以控制对这个对象的访问;使用代理模式创建代理对象,代理对象用以访问被代理的对象。被代理对象可以远程对象、创建时开销大的对象、需要安全控制的对象。远程代理远程代理作为另一个JVM上对象的本地代表。调用代理上方法时,远程代理通过网络将请求传输到远程,并将结果再通过网络传输到本地,后返回给调用方。虚拟代理虚拟代理作为创建时开销大的对象的代表。虚拟代理经常直到我们真正需要一个对象的时候,才会去创建这个对象。在对象创建前、创建中的时候,这个对象的访问都
2020-08-15 17:14:27
241
原创 『怎么用』装饰者模式
消除恐惧的最好办法是直面恐惧,奥利给:)阐述原理实现总结Q&A阐述利用继承设计子类的行为,是在编译时静态决定的,且所有的子类都会继承到这个行为。如果用组合的做法扩展对象的行为,就可以在运行时动态的进行扩展。装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。OO原则:对扩展开放,对修改关闭。原理Component是被装饰对象的爸爸,是个接口,定义被装饰者的行为Decorator是装饰者的爸爸,它继承了Component,保证了装饰者
2020-07-01 21:45:29
264
原创 『每日一问』LockSupport怎么实现线程等待、唤醒
wait/notify实现线程通信实现线程通信呢,比较传统的办法就是使用synchronized关键字获取对象锁之后,结合Object自带的wait/notify方法来实现。一个简单例子如下: public static void main(String[] args) throws InterruptedException { ObjectTar objectTar = new ObjectTar(); new WaitThread("WaitThread", obj
2020-06-30 22:34:56
505
原创 『怎么用』观察者模式
主题【发布者】import java.util.Observable;@Datapublic class SubjectData extends Observable { /** * 观察者订阅的主题数据 */ private String lookData; /** * 主题数据发生变化时调用此方法,同时时间订阅发布 * @param changeData :主题变化的数据 */ public void look
2020-06-29 17:22:47
889
原创 『每日一问』ReentrantLock加锁解锁
Lock接口中有六个方法void lock();void lockInterruptibly() throws InterruptedException;Condition newCondition();boolean tryLock();boolean tryLock(long time, TimeUnit unit) throws InterruptedException;void unlock();加锁ReentrantLock.lockpublic void lock() .
2020-06-29 14:44:42
286
原创 『每日一问』怎么实现一个正确的双重检查锁定
缘由我们程序里,有时候一些开销比较大的对象创建,往往不会提前创建,而是只有在实际要用到的时候才会去创建。也就是基本下边这个写法:public class UnsafeLazyInitialization { private static Instance instance; public static Instance getInstance() { if (instance == null) // 1:A线程执行 instance = new Instance();
2020-05-30 22:27:23
439
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人