自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 K8S集群部署解决工作节点couldn‘t get current server API group list问题

Java的异常分为两种异常,一种是检查型异常(checked exception),如IOException等。另一种是非检查型异常(unchecked exception),也叫运行时异常,如IllegalArgumentException等。检查型异常和非检查型异常的区别在于,当一个方法想要抛出非检查型异常时,可以不在方法头抛出;而如果抛出检查型异常,则必须在方法头进行声明。当一个方法调用...

2024-01-07 00:00:33 2248 2

原创 解决Spring Redis Session无法同步问题小记

于是开发同事开发了一个修改的接口,将修改的参数保存到数据库。我查阅了相关资料,发现如果只修改Session中的对象的属性,但是并没有调用setAttribute方法的话,不会触发Spring Data Redis Session的自动同步机制,下一个请求时,Session中的对象又会被原来的对象覆盖掉。开发同事的代码在获取到Session之后,从Session中获取了User对象,并且修改了User对象中的pageSize属性,但是并没有调用Session的setAttribute方法。

2023-01-12 22:22:19 335

原创 Java 19虚拟线程实战与性能分析

可以看出,整个程序运行过程中,比较突出的资源使用是线程数和CPU占用率,线程数达到了将近4000个线程,并持续了程序运行的大部分有效时间(前面为了能让JConsole能先连接上程序再进行监测,程序首先睡了60秒)。不过值得一提的是,从上两图可看出,传统线程内存占用仅150MB左右,而虚拟线程则为300MB左右,有两倍的差异。这是因为虚拟线程是JDK在用户模式实现,所以需要更复杂的数据结构去实现,而传统线程,则依赖于操作系统,所以JVM的内存占用就少了。虚拟线程是没有绑定到特定操作系统线程的线程。

2022-12-16 18:34:32 1224

原创 CountDownLatch学习笔记——常见用法,扩展用法、源码探究及自定义实现

其中共享模式与独占模式的区别在于,共享模式在AQS队列中的节点在获取到锁之后,会通知它的下一个节点,它的下一个节点也会尝试获取。上述代码中,首先初始化了一个状态数为3的CountDownLatch,然后启动了三个子线程,在每个线程中,分别调用CountDownLatch的countDown方法。其中,主要是将调用AQS的共享模式的方法地方,都换成了独占模式的地方,同时修改了一下tryAcquire方法,改之后是。实际上,等待CountDownLatch子线程执行完成的,也可以是多线程。

2022-12-15 12:11:26 376

原创 Java CyclicBarrie学习笔记

parties代表可以有几个线程等待,barrieAction是可选的,代表最后一个线程到达之后,在最后一个线程中运行barrieAction。栅栏的意思是可以把多个线程拦住,先到的线程必须等待后面的线程全都到达,然后所有线程同时往下走。回环的意思是,每次拦截之后,如果你还想拦截下一批线程,无需手动初始化就可以直接使用。可以看出先是朋友之间约好,然后三个朋友依次到达饭店,先到的必须等到最后一个到达的,最后一个到达之后点菜。点完之后三个朋友同时开始吃,但有的吃的快,有的慢,最后都吃完,程序也就运行结束了。

2022-11-24 23:39:01 184

原创 Dubbo融合Web Service教程

Web Service是一种传统的远程过程调用方式,它通过XML来定义服务信息和传输数据。Dubbo是一种分布式服务治理框架,它提供了服务注册与发现,负载均衡,远程调用等。Dubbo在进行服务调用时,默认使用Dubbo 自定义的协议,但也支持各种第三方协议,如rest,grpc,web service等。Dubbo提供了对Web Service的整合能力,主要是指可以将Web Service包装成Dubbo服务,因此提供了服务注册与发现,同时在提供者端可以让开发者像发布Dubbo服务那样,很简便地发布We

2020-07-19 21:02:56 649

原创 图解Dubbo提供者部分重要的类关系

Dubbo的提供者发布服务是一个比较复杂的过程。概括起来说,主要有以下几步:1.解析配置2.导出服务解析服务的过程略过。本文主要分析导出服务的过程,其中有一些比较重要的类,它们之间通过代理模式和装饰器模式,巧妙组合在一起,实现了Dubbo的提供者的功能,本文通过画图来解释它们。导出服务又可以分为以下几步:生成实现类的包裹对象即代理对象假设我们定义了一个远程调用的接口,那么在提供者端就需要一个实现类来实现这个接口。同时为了实现监控,回调等功能,当请求到达时,不能简单根据类名和方法名去通过反射调用实

2020-06-25 23:27:05 377

原创 Spring Cloud Consul外部配置动态刷新源码解析

ConsulConsul是一款中间件,可提供KV存储功能,同时提供了创建、修改、查询KV存储的HTTP API,因此可作为配置中心。Spring Cloud ConsulSpring Cloud Consul是基于Spring Cloud的公共接口,提供了集成Consul配置能力的微服务框架。源码分析ConfigWatch这个类中提供了一个定时任务 @Override pub...

2020-04-09 19:36:11 1723

原创 Spring相关项目master分支Snapshot下载问题解决

Spring相关项目是一个庞大的家族,除了Spring Framework之外,还有Spring Boot,Spring Cloud等。这些项目和其他开源项目有个明显区别,就是他们之间是有相互依赖的。比如Spring Boot依赖Spring Framework,Spring Cloud又依赖Spring Boot等。Spring相关项目的主开发分支是master分支。而master分支依赖的其...

2020-03-20 00:26:48 2392 1

原创 Activemq控制台的独立部署

Apache Activemq是一个高性能的开源消息队列。在启动它的时候,会自动启动一个自带的Web控制台,通过控制台可以查看当前Activemq服务器的情况,包括队列、主题、连接、订阅者等。这个控制台是通过嵌入式的Jetty容器启动的。不过有时候我们可能需要独立部署Web控制台,比如在Tomcat中通过插件形式启动Activemq,此时无法通过嵌入Jetty容器的方式启动Web控制台(因为To...

2019-12-15 19:42:26 268

原创 MySQL8查看和设置隔离级别

MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation。查看当前隔离级别的命令是select @@global.transaction_isolation,@@transaction_isolation;返回结果+--------------------------------+-------------...

2019-09-15 18:22:45 6170

原创 Dubbo服务端服务发布(一)Invoker创建

在Dubbo的服务发布过程中,Invoker链的构造是一个重要的步骤,Invoker代表的是一个可以调用的服务的接口。它的定义如下:public interface Invoker<T> extends Node { /** * get service interface. * * @return service interface. ...

2019-07-16 17:30:57 728

原创 Dubbo中InternalThreadLocal源码分析

在Java中,ThreadLocal是实现线程安全的一种手段,它的作用是对于同一个ThreadLocal变量,在每一个线程中都有一个副本,当修改任何一个线程的变量时,不会影响到其他线程。它通过在每一个Thread中存储一个类似于map的结构,以ThreadLocal变量为key,变量值为value。Dubbo在RPC调用的上下文中,需要借助ThreadLocal保存上下文。它从Netty中借鉴了...

2019-07-10 01:10:40 2625

原创 检查型异常的问题

Java的异常分为两种异常,一种是检查型异常(checked exception),如IOException等。另一种是非检查型异常(unchecked exception),也叫运行时异常,如IllegalArgumentException等。检查型异常和非检查型异常的区别在于,当一个方法想要抛出非检查型异常时,可以不在方法头抛出;而如果抛出检查型异常,则必须在方法头进行声明。当一个方法调用另...

2019-06-15 14:41:59 1486

原创 Dubbo/Netty中时间轮算法的原理

在Dubbo中,为增强系统的容错能力,在很多地方需要用到只需进行一次执行的任务调度。比如RPC调用的超时机制的实现,消费者需要各个RPC调用是否超时,如果超时会将超时结果返回给应用层。在Dubbo最开始的实现中,是采用将所有的返回结果(DefaultFuture)都放入一个集合中,并且通过一个定时任务,每隔一定时间间隔就扫描所有的future,逐个判断是否超时。这样的实现方式实现起来比较简单,但...

2019-06-02 16:59:16 2813

原创 基于有向无环图(DAG)的任务调度Demo

定时任务是软件开发中经常遇到的问题。简单的定时任务只需要在固定时间触发它的执行就可以了。但是对于复杂的定时任务,可能是由多个任务组成一个任务组,它们之间存在依赖关系,一个任务执行的条件,必须是它的前置任务已经执行成功(或者没有前置任务),它才可以执行。例如下面这幅图:图中任务的依赖关系为:任务1:依赖2,5任务2:依赖3,4任务3:无依赖任务4:无依赖任务5:无依赖...

2019-04-05 14:34:00 14089 5

原创 gRPC使用初探

gRPC是谷歌开源的一款RPC框架,基于HTTP/2协议,使用protocol buffer作为接口定义语言(Interface Definition Language)和底层数据交换格式。gRPC最大的优点是能跨语言,因为使用和语言无关的protobuf来定义接口,并且使用标准的http协议来进行传输,能使不同语言的服务端和客户端互相兼容。gRPC-java的github地址是https:/...

2019-03-31 13:26:00 1240

原创 Dubbo使用Apollo作为配置中心实战

一.Dubbo支持Apollo的介绍Apollo是携程开源的一款配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Dubbo目前的最新版本2.7.0将过去单一的注册中心拆分成了注册中心、元数据中心和配置中心。其中配置中心起到的作用之一,就是将配置外部化,也就是将配置从应用内部剥离出去,可以在一...

2019-03-17 15:18:25 8868 4

原创 基于循环数组实现的带滑动窗口的计数器限流算法

当系统面临高并发、大流量的请求时,为保障服务的稳定运行,可采取限流算法。限流,顾名思义就是当请求超过一定数量时,就限制新的流量对系统的访问。目前限流算法主要有计数器法、漏桶算法和令牌桶算法。最简单的计数器限流算法只需要一个int型变量(可使用AtomicInteger变量,保证操作的原子性)count。保存一个初始的时间戳。每当有请求到来时,先判断和时间戳之间的差是否在一个统计周期内,如果在的...

2019-03-02 22:32:26 2347

原创 Java中的线程中断机制

Java的线程用于并发执行任务。之前对线程这一块,一直没搞懂的就是中断这一块,什么interrupt(), interrupted(), isInterrupted()这几个方法,InterruptedException这个异常,一直没搞明白。今天读《Java并发编程实战》里面也说到了InterruptedException,于是又到网上找资料认真读了一下,这次终于搞懂了,于是记录一下。一.J...

2019-02-21 01:24:52 182

原创 Java中的不变集合

java提供了很多集合的接口和类,比如比较常用的List,它就有ArrayList,LinkedList等子类。这些类都是可变的(mutuable)。有时候,我们作为服务的提供方,不希望提供给客户端(此处的服务端和客户端是站在程序依赖的角度,而不是一般常说的基于C/S架构的服务端和客户端)的集合被对方改变内容。此时就需要利用原来内部可变的集合生成一个不可变的集合,提供给客户端。在Java中,生...

2019-02-20 01:06:47 524

原创 LeetCode刷题助手:根据数组生成二叉树

大家在刷LeetCode的二叉树相关的题目的时候,遇到问题需要在本地IDE里调试的时候,题目里给的二叉树的形式是一个数组,类似Integer[] array = new Integer[]{1, null, 2, null, null, null, 3};这种形式,它是以null来做填充,构成一个完全二叉树,具体的图我就不画了,大家自己理解一下。而我们需要自己手动把它转换成二叉树的形式,...

2019-02-18 22:16:52 7976 5

原创 Shardingsphere-JDBC初体验

Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。...

2019-02-17 21:36:11 7114 2

原创 设计JSON序列化类应该注意的一个问题

最近开发中遇到一个问题。公司内部公共的二方库定义了一个RPC的公共返回类:public class Result&lt;T&gt; { private boolean success; private T result; private String errorCode; private String errorMsg; public Result(T...

2019-02-17 01:17:28 571

原创 Dubbo Ops条件路由实战

Dubbo的服务智能容错包括服务目录、服务路由和负载均衡这三个部分。服务目录的作用是存储一个接口的invoker的集合,并且随着配置信息的更新而自动更新。而服务路由则是从服务目录的involer集合中,根据路由规则筛选出一个子集。而负载均衡则是在服务路由筛选出的子集中去做负载均衡。服务路由不是在一个服务的提供者端或者消费者端进行配置的,而是通过在配置中心中写入配置信息,消费者会自动接收到通知。...

2019-02-17 00:55:19 1642

原创 枚举类型name方法的应用

Enum类型是Java语言中一种特殊的类型,它拥有一组固定的值,在开发中用得很多。常见的用法是定义一个枚举之后,给每一个枚举值定义一个code, 或者name的属性,来作为这个枚举值的唯一标识。还有一个字段message,用来保存这个枚举值的描述。例如下面这个动物枚举类:public enum AnimalEnum2 { DOG("dog", "狗"), CAT("cat",...

2019-02-04 01:55:07 17712

原创 UEditor动态设置工具栏

UEditor是百度开发的开源富文本编辑器,可以很方便的实现富含各种格式的文档的编辑。如果我们要在开发的web项目,比如java web项目中使用UEditor,需要如下代码:UE.getEditor('editor'); 这样就可以在jsp页面中,看到完整的UEditor的界面如下图所示。我们可能会觉得工具栏的按钮太多了,有些在我们的项目中并不需要。于是,我们可以采用下面的方

2016-06-01 21:38:28 5818

原创 Tomcat源代码安装与运行

学习Java Web和做相关项目的时候经常要用到Tomcat服务器。过去一直是下载

2014-07-29 19:47:41 930

空空如也

空空如也

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

TA关注的人

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