自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA多线程问题 — 如何正确使用异步线程和线程执行器?

JAVA多线程问题 — 如何正确使用异步线程和线程执行器?

2024-01-19 13:29:43 1104 1

原创 mysql — 生产环境发布DDL之避坑操作onlineDDL

Online DDL 的方式是可以考虑在业务低峰期使用的,而 MySQL 5.5 及之前的版本,这个命令是会阻塞 DML 的,需要特别小心。Online DDL 使用的是INPLACE算法,有rebuild table 和 no-rebuild table两种方式,INPLACE的rebuild table方式和COPY的rebuild table方式类似,都会扫描原表数据和构建临时文件。对于很大的表来说,这个操作是很消耗 IO 和 CPU 资源的。因此,如果是线上服务,要很小心地控制操作时间。

2024-01-17 16:00:01 1697

原创 redis — redis cluster集群模式下如何实现批量可重入锁?

以上是使用redis cluster集群版所遇到的问题以及解决方案,主要在业务实现过程中,需要注意redis cluster key会被划分到不同的槽中的问题,以及redis可重入锁是否会有死锁的问题等。在redis集群环境下还有什么样的问题欢迎补充!

2024-01-12 16:58:04 1203

原创 Kubernetes — 了解k8s中的deployment部署单元

一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。Kubernetes中的Deployment是一种资源对象,用于定义和管理Pod的副本集。它提供了一种声明式的方式来创建、更新和删除Pod副本。Deployment可以确保指定数量的Pod副本在集群中运行,并且可以自动处理Pod的扩容和缩容。Deployment通过使用ReplicaSet(RS)来实现Pod的副本控制。RS是一个控制器,它确保指定数量的Pod副本在集群中运行,并且可以根据需要进行扩展或缩减。

2023-12-20 08:30:00 1209

原创 JDK 21 — JDK 21发布及多项新特性!

通过有效地调用外部函数(即 JVM 外部的代码),并通过安全地访问外部内存(即不受 JVM 管理的内存),API 使 Java 程序能够调用本机库并处理本机数据,而不会出现 JNI 的脆弱性和危险性。虚拟线程可以运行平台线程可以运行的任何代码。学生们不用使用单独的 Java 方言,就可以为单类程序编写精简的声明,然后随着技能的发展,无缝地扩展程序,使用更高级的功能。该 JEP 提议引入 “一个新的接口族,用于表示集合的概念,这些集合的元素按照预定义的序列或顺序排列,它们是作为集合的结构属性。

2023-09-25 08:00:00 2047

原创 OIDC协议 — 理解OIDC身份认证授权

本篇博客介绍了OIDC的发现服务,OAuth2的扩展规范。OIDC其本身是一个完全开放的标准,而且兼容众多的已有的IDP(身份提供商),比如基于SAML的、基于WS-Federation的等等已有的身份认证系统,都可以作为OIDC的OP存在。OIDC使得身份认证可以作为一个服务存在。OIDC可以很方便的实现SSO(跨顶级域)。OIDC兼容OAuth2,可以使用Access Token控制受保护的API资源。OIDC可以兼容众多的IDP作为OIDC的OP来使用。

2023-09-13 07:30:00 1085

原创 redis — 基于Spring Boot实现redis延迟队列

将以redis的zset来实现延时队列,本文借助SpringBoot来搭建一个演示工程。

2023-08-14 11:15:49 2439 3

原创 Spring — Spring Security 5.7与6.0差异性对比

Spring Security 默认处理登录数据的过滤器是,在这个过滤器中,系统会通过 request.getParameter(this.passwordParameter) 的方式将用户名和密码读取出来,很明显这就要求前端传递参数的形式是 key-value。首先我们获取请求头,根据请求头的类型来判断请求参数的格式。如果是 JSON 格式的参数,就在 if 中进行处理,否则说明是 key-value 形式的参数,那么我们就调用父类的方法进行处理即可。

2023-08-03 17:41:17 2971

原创 JVM — JDK11垃圾回收器 ZGC

ZGC(The Z Garbage Collector)是 JDK 11 中推出的一款低延迟垃圾回收器,为实现以下几个目标而诞生的垃圾回收器,停顿时间不超过 10ms,停顿时间不会因堆变大而变长,支持 8MB~4TB 级别的堆(未来支持 16TB)ZGC 作为下一代垃圾回收器,性能非常优秀。ZGC 垃圾回收过程几乎全部是并发,实际 STW 停顿时间极短,不到 10ms。这得益于其采用的着色指针和读屏障技术。

2023-07-06 23:43:09 2920

原创 SAML协议 — 理解SAML2 协议和联合身份验证流程

SAML 2.0 是许多身份验证提供商(Identity Provider, IdP)使用的一种开放标准。使用身份提供商可实现联合单点登录(Federated Single Sign-on, SSO)

2023-05-18 18:00:51 5662

原创 TCP优化二:TCP 四次挥手性能优化

先了解四次挥手状态变迁的过程:可以看到,四次挥手过程只涉及了两种报文,分别是 FIN 和 ACK:四次挥手的过程:你可以看到,每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手。主动关闭方和被动关闭方优化的思路也不同,接下来分别说说如何优化他们。关闭连接的方式通常有两种,分别是 RST 报文关闭和 FIN 报文关闭。如果进程异常退出了,内核就会发送 RST 报文来关闭,它可以不走四次挥手流程,是一个暴力关闭连接的方式。安全关闭连接的方式必须通过四次挥手,它由进程调用 close 和 shut

2022-06-29 10:51:51 1198

原创 TCP优化一:TCP 三次握手的优化

TCP 是面向连接的、可靠的、双向传输的传输层通信协议,所以在传输数据之前需要经过三次握手才能建立连接。那么,三次握手的过程在一个 HTTP 请求的平均时间占比 10% 以上,在网络状态不佳、高并发或者遭遇 SYN 攻击等场景中,如果不能有效正确的调节三次握手中的参数,就会对性能产生很多的影响。如何正确有效的使用这些参数,来提高 TCP 三次握手的性能,这就需要理解「三次握手的状态变迁」:客户端和服务端都可以针对三次握手优化性能。主动发起连接的客户端优化相对简单些,而服务端需要监听端口,属于被动连接方,

2022-06-28 22:15:53 1821

原创 go语法 — 多路选择操作符 select的用法

在golang语言中,select语句 就是用来监听和channel有关的IO操作,当IO操作发生时,触发相应的case动作。有了 select语句,可以实现 main主线程 与 goroutine线程 之间的互动。select 使用时类似 switch-case 的用法,适用于处理多通道的场景,会通过类似 are-you-ready-polling 的机制来工作。2、阻塞与非阻塞 selectselect 默认是阻塞的,当没有 case 处于激活状态时,会一直阻塞住,极端的甚至可以这样用:通过增加

2022-06-05 16:03:00 1938

原创 go语法 — channel的基础用法

Channel 是 go 语言内置的一个非常重要的特性,也是 go 并发编程的两大基石之一(另一个是 go ,也就是 goroutine ),Go内建channel实现了go协程之间数据的读写相关操作。在 go 语言中,channel 就是 goroutine 之间通过通信来共享内存的手段。 channel 也作为一个队列,会保证数据收发顺序总是按照先入先出的原则进行,可以看作 go 程序内部的一个 FIFO 队列,一些 goroutine 向其中生产数据,另外一些消费数据,同时也会保证同一时刻有且仅有一个

2022-06-05 13:43:05 3775

原创 go语法 — var && make && new 的用法和区别

go语法 — var && make && new 的用法和区别

2022-06-02 00:00:16 471

原创 go语法 — interface接口值的使用规则和用法

1. interface 的比较interface 不是单纯的值,而是分为类型和值,一个是 type,一个是 data,所以传统认知的此 nil 并非彼 nil,必须得类型和值同时都为 nil 的情况下,interface 的 nil 判断才会为 true。例如:对于这样一个变量var age interface{} = 25其实内部结构是因此两个 interface 比较,势必与这两个字段有所关系。经过验证,只有下面两种情况,两个 interface 才会相等。1.1 第一种情况ty

2022-05-22 10:56:49 914

原创 go语法 — defer的用法

1、什么是defer?defer是Go语言中的延迟执行语句,用来添加函数结束时执行的代码,常用于释放某些已分配的资源、关闭数据库连接、断开socket连接、解锁一个加锁的资源。Go语言机制担保一定会执行defer语句中的代码。其它语言中也有类似的机制,比如Java、C#语言里的finally语句。defer没有嵌套,defer的机制是要取代try except finally2、defer的使用规则规则一:当defer被声明时候,其参数就会被实时解析func a() { i := 0 defer

2022-05-20 21:44:38 893

原创 go语法 — 如何使用指针*和取址&

如何区分指针*和取址&指针类似于变量和常量,在使用指针前你需要声明指针。指针声明格式如下:var name *Type指针是指向一个值的内存地址,也就是说指针变量存放的是某个值或者对象的内存地址,即指针变量占用字节的大小与所指向的值的大小无关。当一个指针被定义后没有分配到任何变量时,它的默认值为nil。指针变量存放的是一个值的内存地址,那如何获取一个变量的内存地址呢?那就需要使用取址符号&。将一个值的内存地址通过&赋值给了指针,那又应该如何通过指针来读取对应的值?需要

2022-05-15 01:16:13 2058

原创 Kubernetes — 了解k8s创建pod基本流程

1、Kubernetes 介绍Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。Kubernetes 服务、支持和工具广泛可用。2、Kubernetes的能力Kubernetes 为提供了一个框架来弹性地运行分布式系统。它负责应用程序的扩展和故障转移,提供部署模式等等。服务发现和负载平衡 :Kubernetes 可以使用 DNS 名称或使用自己的 IP 地址公开容器。如果容器的流量很高,Kubernetes

2022-04-28 17:33:31 4039 1

原创 Linux — 服务器使用LVM制作分区

一、LVM原理传统文件系统,比如这个盘只有300G,那么建立在这个300G上面的文件系统最多只能用到300G,但是有了LVM这个功能后,我们建立文件系统的盘就不是建立在物理盘上,而是建立在一个叫LV逻辑卷上面,这个卷是一个逻辑概念不是物理盘,空间可能大于一个物理盘,也可能小于一个物理盘。而且这个LV逻辑卷的空间可以扩展和缩小,这样就给上层的文件系统提供了更好的支持。需要理解的几个概念:PV(Physical Volume):物理空间的意思,其实就是指一个分区(如/dev/sdb1 )或者是一个盘(如

2022-03-08 14:53:21 2534

原创 netty — netty框架之reactor模式(一)

一、Reactor模式1、Reactor模式概述在多线程并发模式,最简单的就是与“线程”捆绑,1个线程处理1个连接的全部生命周期。优点:这个模型足够简单,它可以实现复杂的业务场景,同时,线程个数是可以远大于CPU个数的。然而,线程个数又不是可以无限增大的,因为线程什么时候执行是由操作系统内核调度算法决定的,调度算法并不会考虑某个线程可能只是为了一个连接服务的,它会做大一统的玩法:时间片到了就执行一下,哪怕这个线程一执行就会不得不继续睡眠。这样来回的唤醒、睡眠线程在次数不多的情况下,是廉价的,但如果操作系

2021-09-13 17:20:40 728

原创 Aexlor — 快速构建java OA业务应用框架

1、Aexlor概述Axelor Open Suite 一款 法国开源的OA 项目框架 : Axelor Open Suite 关注业务流程,减少了开发的复杂度,帮助我们快速构建应用。它是一款 MVC 框架,需要我们写很少量的 java 代码,因为它的 models,views, actions 都是在 xml 文件中定义的,框架会自动帮我们生成各部分的代码,大大提高了开发效率,只有少量的业务代码需要我们开发。功能已 “app” 的形式存在,支持安装和卸载操作。框架的文档特别丰富,并且讲的特别详细,是个

2021-07-17 16:39:07 1411

原创 springboot — springboot与netty整合

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-07-05 01:08:59 13257

原创 springcloud — 注册中心Nacos组件原理解析

Nacos介绍Nacos中文官方文档:https://nacos.io/zh-cn/docs/quick-start.htmlNacos是什么?Nacos是一个注册中心组件,Nacos也是一个配置中心,比如SpringCloud中的Config,将配置文件版本化管理。那么Nacos到底是什么呢, 总结为官网一句话就是:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos功能1. 服务注册发

2021-05-27 00:42:27 1050 1

原创 Redis — 主从集群切换数据丢失问题

一、数据丢失的情况异步复制同步丢失集群产生脑裂数据丢失1.异步复制丢失对于Redis主节点与从节点之间的数据复制,是异步复制的,当客户端发送写请求给master节点的时候,客户端会返回OK,然后同步到各个slave节点中。如果此时master还没来得及同步给slave节点时发生宕机,那么master内存中的数据会丢失;要是master中开启持久化设置数据可不可以保证不丢失呢?答案是否定的。在master 发生宕机后,sentinel集群检测到master发生故障,重新选举新的master,如

2021-04-26 17:24:17 1092

原创 springcloud — 微服务链路追踪sleuth组件

随着分布式服务架构的流行,特别是微服务等设计理念在系统中的应用,系统规模也会变得越来越大,各微服务间的调用关系也变得越来越复杂。通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果。在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路。那么就带来一系列问题,在业务规模不断增大、服务不断增多以及频繁变更的情况下,如何快速发现问题?如何判断故障影响范围?如何梳理服务依赖以及依赖的合理性?如何分析链路性能问题以及实时容量规划?面对上面这些问题,Sp

2021-03-26 00:05:27 404

原创 spring — 解析spring中的ThreadPoolTaskExecutor 与 ListenableFuture 对象

Futures在Java 5(2004)中引入。它们是承诺在操作完成后保留操作结果的对象。调用者可以使用future对象来检查操作isDone(),或者等待它完成使用get()。Future模式一个最大的问题是何时调用问题(过早地阻塞Future.get(),这消除了异步执行的好处)。spring的 ListenableFuture给出了相应的解决方案,本文将就此展开对比。1、概述以 jdk1.8 和 Spring Framework 4.3.4.RELEASE 为基准本文详细分析 Spring

2021-03-23 15:22:58 3175 1

原创 常用拦截器HandlerInterceptor+ClientHttpRequestInterceptor+RequestInterceptor+AsyncClientRequestIntercep介绍

引言:在日常开发中,我们常用拦截器如HandlerInterceptor,ClientHttpRequestInterceptor,RequestInterceptor,以及spring 5.0提供的AsyncClientHttpRequestInterceptor;这几种拦截器,都是http拦截器,在处理业务逻辑之前对http请求信息进行处理,比如获取请求头,请求参数,设置请求头,请求参数等;1、常用拦截器介绍1.1 HandlerInterceptor拦截器HandlerInterceptor是

2021-03-11 11:50:02 1873 1

原创 springcloud — 微服务鉴权管理Spring Security OAuth2原理解析(五)

回顾之前文章:1. 微服务鉴权管理之OAuth2原理解析(一)2. 微服务鉴权管理Spring Security原理解析(二)3. 微服务鉴权管理Spring Security OAuth2原理解析(三)4. 微服务鉴权管理Spring Security OAuth2原理解析(四)上一篇文章中我们介绍了获取token的流程,这一篇重点分析一下,携带token访问受限资源时,内部的工作流程。1、ResourceServerConfigurerAdapter上一篇文章重点介绍的其实是与身份认证相关

2021-01-28 00:50:04 771

原创 springcloud — 微服务鉴权管理Spring Security OAuth2原理解析(四)

回顾之前文章:1. 微服务鉴权管理之OAuth2原理解析(一)2. 微服务鉴权管理Spring Security原理解析(二)3. 微服务鉴权管理Spring Security OAuth2原理解析(三)本文开始从源码的层面,讲解一些Spring Security Oauth2的认证流程。1、AuthorizationServerConfigurerAdapter上一篇博客中我们尝试使用了password模式和client模式,有一个比较关键的endpoint:/oauth/token。从这个入

2021-01-27 15:12:10 898

原创 springcloud — 微服务鉴权管理Spring Security OAuth2原理解析(三)

回顾之前文章:1. 微服务鉴权管理之OAuth2原理解析(一),2. 微服务鉴权管理Spring Security原理解析(二)前面的部分,我们关注了Spring Security是如何完成认证工作的,接下来将继续讲解接口对接中常使用的密码模式(以下简称password模式)和客户端模式(以下简称client模式)。授权码模式使用到了回调地址,是最为复杂的方式,通常网站中经常出现的微博,qq第三方登录,都会采用这个形式。简化模式不常用。1、概述使用oauth2保护你的应用,可以分为简易的分为三个步

2021-01-26 10:45:39 1446 1

原创 springcloud — 微服务鉴权管理Spring Security原理解析(二)

回顾之前介绍的OAuth2简单分析与介绍,微服务鉴权管理之OAuth2原理解析(一),本文将进一步对OAuth2的原理和使用做进一步的分析;

2021-01-24 13:38:20 863

原创 springcloud — 微服务注册与发现之consul组件原理解析(二)

回顾之前文章:1. 微服务注册与发现之consul组件治理能力(一)其中介绍了consul的概念和基于springcloud进行集成的操作步骤,本文将从consul组件原理细讲相关的原理;consul整体架构图如下:1、自动配置在spring-cloud-consul-config.jar!/META-INF/spring.factories中,有如下配置:# Auto Configurationorg.springframework.boot.autoconfigure.EnableAuto

2021-01-15 22:25:10 1004 1

原创 springcloud — 微服务熔断处理之断路器Resilience4j-circuitbreaker组件(三)

回顾之前文章:1. 微服务熔断处理之断路器Resilience4j(一)2. 微服务熔断处理之断路器Resilience4j-circuitbreaker组件(二)两篇文章中介绍了 Resilience4j 的一些基本功能,详解Resilience4j-circuitbreaker组件源码流程,本文将继续梳理circuitbreaker组件中的熔断器度量指标以及熔断器事件发布;1、CircuitBreakerMetrics(熔断器度量指标)熔断器度量指标,熔断器在工作中,熔断相关实际数据,均存储在

2021-01-11 17:16:34 734 1

原创 springcloud — 微服务熔断处理之断路器Resilience4j-circuitbreaker组件(二)

回顾之前文章:微服务熔断处理之断路器Resilience4j(一)中介绍了 Resilience4j 的一些基本功能,这些基本功能涵盖了请求熔断、限流、以及重试等功能,以及Resilience4j 的一些基本用法。本文将详解Resilience4j-circuitbreaker组件;1、CiruitBreaker(熔断器)模块概述Resilience4j的CircuitBreaker主要由6个部分组成:管理熔断器实例的注册容器、熔断器的相关配置、熔断器的各种状态、触发熔断器状态变化的指标、熔断器行为变化

2021-01-10 15:07:12 1418 3

原创 springcloud — 微服务负载均衡组件Ribbon之PredicateBasedRule解析(二)

回顾之前Ribbon组件的文章:springcloud — 微服务负载均衡组件Ribbon解析(一)1、PredicateBasedRule依赖图分析:2、PredicateBasedRule源码解读//抽象策略,继承自ClientConfigEnabledRoundRobinRule//基于Predicate的策略//Predicateshi Google Guava Collection工具对集合进行过滤的条件接口public abstract class PredicateBasedR

2020-12-19 16:01:53 874 1

原创 springcloud — 微服务熔断治理之断路器Hystrix状态之HystrixCircuitBreaker解析(三)

回顾之前SpringCloud Hystrix断路器相关文章:一、微服务熔断治理之断路器Hystrix解析(一)二、微服务熔断治理之断路器Hystrix解析(二)1、断路器相关知识点首先我们需要搞清楚的一个问题就是,断路器断的是什么?断路器断的其实就是我们对依赖服务的调用,而我们对依赖服务的调用其实被包装在HystrixCommand里面,断路器断的就是HystrixCommand是否需要对依赖服务发起请求,更直白的一点说,就是断HystrixCommand。关于什么是断路器这个问题,应该不用再做更

2020-12-13 23:57:44 842 1

原创 springboot — SpringApplication的生命周期和事件机制解析

本文将以SpringApplication的启动流程以及生命周期各时期发出的Event事件为主线,结合每个生命周期内完成的事件介绍,真正实现一文让你总览Spring Boot的全貌,这对读者深入理解Spring Boot,以及整合进Spring Cloud都将非常重要。接下来我们先看下SpringApplication生命周期事件流程图,然后再讲解各个事件的详情:1、SpringApplicationEvent它是和SpringApplication生命周期有关的所有事件的父类,@since 1.0

2020-12-02 01:58:05 1797

原创 系统设计 — CQRS应用架构模式解析

1、CQRS架构上面图中包含有很多的概念,先列举一下所涉及的概念:Command Bus(命令总线):在 Command Handler 之前,可以看作是 Command 发布者。Command Handler(命令处理器):处理来自 Command Bus 分发的请求,可以看作是 Command 订阅者、处理者。Event Bus(事件总线):一般在 Command Handler 完成之后,可以看作是 Event 发布者。Event Handler(事件处理器):处理来自 Event Bu

2020-11-25 00:17:11 706 1

原创 spring — spring中事件监听机制源码解析(五)

关于spring相关文章回顾:一、spring中Bean的初始化过程二、spring中bean的生命周期三、spring中AOP技术解析四、spring中的事件驱动机制解析一、Spring中事件驱动三大对象spring事件ApplicationEvent继承自EventObject,Spring提供了ApplicationEventPublisher接口作为事件发布者(ApplicationContext接口继承了该接口,担当着事件发布者的角色)。Spring提供了ApplicationEv

2020-11-23 13:05:58 357 1

MySQL+DBA工具库+SQL性能分析工具

对于任何SQL执行计划的变更,都需要仔细的评估和测试,以确保它不会对数据库和应用程序的性能和稳定性产生负面影响。那么我们通过Statement Outline,Statement Outline是通过支持MySQL8.0官方的所有Hint,结合Statement Outline表来完成执行计划的稳定。

2024-01-18

空空如也

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

TA关注的人

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