自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(181)
  • 资源 (1)
  • 收藏
  • 关注

原创 dubbo3-01.helloworld

Dubbo hello world

2024-04-22 16:28:12 356

原创 Java-12a.Spring 中通过 TaskDecorator 配置默认异步线程池

在Spring框架中,TaskDecorator 是一个接口,它可以用来自定义由 ThreadPoolTaskExecutor 或其他任务执行器管理的任务的装饰行为。这通常用于在执行任务之前和之后添加某些上下文相关的行为,比如设置线程上下文或者清理资源。例如,在执行异步操作时,你可能需要将主线程的一些上下文信息(比如用户身份验证令牌或请求上下文信息)传递给执行异步操作的线程。TaskDecorator 就可以在这种场景下发挥作用。

2024-01-29 16:03:59 654 1

原创 Java-12.Spring 中通过 ThreadPoolTaskExecutor 和 AsyncConfigurerSupport 配置默认异步线程池

虽然在 SpringBoot 2.7.x 中已经有关于异步线程池的默认配置,但如果还是要自定义的需求,仍然值得学习了解一下。例如:想要在多线程池中添加 traceId;使用来代替默认的。

2024-01-29 16:03:20 503

原创 Jvm-08a.类加载器

如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。[[双亲委派模型.png]]通俗的讲就是比较两个类是否"

2023-05-17 15:22:09 572 1

转载 java-06.Spring Boot 使用 MDC 进行日志追踪

MDC(Mapped Diagnostic Context)是一个可以追踪程序上下文日志的东西,是springboot项目自带的org.slf4j包下的类,无需引入额外依赖即可使用。

2023-03-14 10:34:10 1590 2

原创 elk-01d.logstash将mysql经纬度数据转为geo_point

目标:通过logstash同步,将mysql 中的经纬度字符串转为 es 中的geo_point类型这种

2022-12-14 16:16:14 531

原创 powerdesigner 使用excel 批量导入创建表

因为公司要从 oracle 迁移到 mysql,同时也没有关于数据库的文档,同时数据库表太多了,一个一个手动建模,太没有效率了,所以网上查了一下,powerdesigner 使用的 visual basic 语言,可以使用脚本批量导入创建。

2022-10-10 14:30:02 1353

原创 Oracle 查询表结构

Oracle 查询表结构。

2022-10-08 10:11:02 4553

原创 Netty如何解决粘包半包问题

何为粘包 / 半包?为什么会出现粘包 / 半包?粘包/半包的原因?本质原因?怎么解决粘包 / 半包?Netty 是如何支持的?

2022-08-26 16:18:34 1181

原创 Unsafe类的使用

Unsafe可用来直接访问系统内存资源并自主管理,在提升Java运行效率、增强Java语言底层操作能力方面起了很大的作用——可以认为,Unsafe类是Java中留下的后门,提供了一些低层次操作,如直接内存访问、线程调度等。...

2022-06-30 16:32:41 821 1

原创 JDK 11统一日志管理

可使用-Xlog选项,启用统一日志管理。Xlog选项支持的参数如下:-Xlog:使用info级别启用JVM日志-Xlog:help:打印Xlog帮助文档-Xlog:disable:关闭所有日志记录并清除日志记录框架的所有配置,包括警告和错误的默认配置-Xlog[:option]:按照命令行上出现的顺序应用多个参数。同一输出的多个参数按其给定顺序覆盖。option的格式为:其中:what:指定level和tag的组合,格式: 。除非用 指定了通配符,否则只有匹配了指定tag的日志消息才会被匹配。outpu

2022-06-24 14:35:44 1192

原创 服务调用链路追踪

概述服务调用链追踪是干什么的?Sleuth 核心功能和体系结构?调用链路数据模型 - Trace,Span,Annotation链路追踪原理介绍Zipkin 简介:搭建Zipkin服务端、Sleuth 集成 ZipkinSleuth 集成 ELK 实现日志搜索链路追踪的基本功能分布式环境下链路追踪Timing 信息定位链路信息收集和展示SleuthSleuth 的功能Sleuth 的最核心功能就是提供链路追踪,在一个用户请求发起到结束的整个过程中,这个

2022-05-11 17:22:48 2354

原创 网关 Gateway

1 Spring Cloud Gateway 能做什么?路由寻址(主要功能)负载均衡限流鉴权2 Gateway VS ZuulGatewayZuul 1.xZuul 2.x靠谱性官方支持曾经靠谱过专业放鸽子性能Netty同步阻塞、性能慢NettyRPS> 3200020000 左右25000 左右Spring Cloud已整合已整合暂无整合计划长连接支持不支持支持编程体验略难简单易上手略难

2022-05-05 15:54:54 786

原创 MySQL事务的4种隔离级别

1 简介事务的4种隔离级别分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、 可重复读(Repeatable Read)和串行化(Serializable)。首先,在了解这4种隔离级别前就必须先要了解其前提,也就是事务,本文简单介绍一下关于事务。之后,我们也要理解这4种隔离级别产生的原因和场景展现以及4种隔离级别是如何解决问题的。最后,再简单介绍一下这4种隔离级别的实现机制。2 什么是数据库事务?事务由一个有限的数据库操作序列组成,这些操作要么全部执行

2022-04-15 15:59:08 14232 1

原创 RocketMQ事务消息示例

title: “RocketMQ事务消息示例”date: 2022-04-07T17:14:16+08:00draft: true引言分布式事务是一个复杂的问题,本文就基于 RocketMQ 来实现最终一种性方案的分布式事务的示例与测试。概念整体的流程如上所示。RocketMQ 事务消息的原理是基于两阶段提交和事务状态回查。半消息:是指暂时不能被消费的消息,半消息实际上被放在主题名为 RMQ_SYS_TRANS_HALF_TOPIC下,当 producer 对半消息进行二次确认后,.

2022-04-08 16:53:27 3632

原创 自定义脚本启动搭建的RocketMQ伪集群

title: “自定义脚本启动搭建的RocketMQ伪集群”date: 2022-04-02T10:47:11+08:00draft: true引言工欲善其事,必先利其器。因为只有一台电脑,只能搭建伪集群来学习了,但是,本身又是个偷懒的人,启动伪集群 RocketMQ 的命令有点多,不想敲那么多的命令,顺便将搭建 RocketMQ 集群的部署方式记录一下。RocketMQ 的部署方式有3种:2m-noslave:多 Master 模式,无 Slave。[双主模式]优点:配置简单,性能最.

2022-04-02 16:43:29 648

原创 MySQL索引失效的原因记录总结【更新中】

title: “MySQL索引失效的原因记录总结”date: 2022-03-22T14:55:56+08:00draft: false0 引言好记性不如烂笔头,把常见的一些 MySQL 索引失效的问题记录下来,在工作中可以时时检查对比。主要分为两个部分,explain 介绍和各种索引失效场景的模拟。建表语句CREATE TABLE `people` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) CH.

2022-03-22 17:41:11 754

原创 JVM参数选项

title: “JVM JDK8的JVM参数”date: 2022-03-16T17:08:55+08:00draft: true本文参数基于JDK 8整理收集器参数及默认值备注Serial-XX:+UseSerialGC虚拟机在Client模式下的默认值,开启后,使用 Serial + Serial Old 的组合ParNew-XX:+UseParNewGC开启后,使用ParNew + Serial Old的组合-XX:ParallelGCThre.

2022-03-16 17:21:17 843

原创 JVM 垃圾收集器

title: “JVM 垃圾收集器”date: 2022-03-11T16:45:21+08:00draft: false文章目录引言术语垃圾收集器介绍Serial 收集器(新生代)ParNew收集器(新生代)Parallel Scavenge收集器(新生代)Serial Old 收集器(老年代)Parallel Old 收集器(老年代)CMS 收集器(老年代)G1 收集器G1 收集器 VS CMS收集器链接引言下面这张图是 Java 中比较主流的基于分代收集理论的垃圾收集器,以及它们能够作用.

2022-03-16 16:14:43 1077

原创 JVM 垃圾回收算法

title: “JVM 垃圾回收算法”date: 2022-03-01T17:19:01+08:00draft: true0 概述基础垃圾算法:标记-清除、标记-整理、复制综合垃圾回收算法:分代收集算法、增量算法1 标记-清除(Mark-Sweep)标记需要回收的对象清理掉要回收的对象缺点:垃圾回收之后会存在内存碎片2 标记-整理(Mark-Compact)标记需要回收的对象把所有的存活对象压缩的内存的一端清理掉边界外的所有空间这个算法可以避免.

2022-03-11 16:41:43 932

原创 什么是MySQL的回表?

文章目录引言聚簇索引和非聚簇索引是什么?主键索引和非主键索引有什么区别?B-Tree 和 B+Tree 的简单理解如何避免回表?引言简单来说,回表就是 MySQL 要先查询到主键索引,然后再用主键索引定位到数据。下面,对一些问题进行分析与回答:什么是聚簇索引?什么是非聚簇索引?为什么回表要先查到主键索引?主键索引和非主键索引有什么区别?如何避免回表?聚簇索引和非聚簇索引是什么?MySQL 的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分。其中,按物理存储分

2022-03-10 13:38:35 15847 3

原创 JVM 垃圾回收算法

0 概述基础垃圾算法:标记-清除、标记-整理、复制综合垃圾回收算法:分代收集算法、增量算法1 标记-清除(Mark-Sweep)标记需要回收的对象清理掉要回收的对象缺点:垃圾回收之后会存在内存碎片2 标记-整理(Mark-Compact)标记需要回收的对象把所有的存活对象压缩的内存的一端清理掉边界外的所有空间这个算法可以避免标记-清除算法会产生的内存碎片3 复制(Copy)把内存分为两块,每次只使用一块把当前使用的内存中的存活对象复制到未

2022-03-03 22:55:59 207

原创 JVM 垃圾回收

概述什么场景下该使用什么垃圾回收策略?垃圾回收发生在哪些区域?对象在什么时候能够被回收?什么场景下该使用什么垃圾回收策略?场景一:在对内存要求苛刻的场景:想办法提高对象的回收效率,多回收掉一些对象,腾出更多内存;场景二:在CPU 使用率高的场景下:降低高并发垃圾回收的频率,让 CPU 更多地去执行你的业务而不是垃圾回收;TODO 垃圾回收策略垃圾回收发生在哪些区域?JVM 内存结构如下图所示:虚拟机栈、本地方法栈、程序计数器是线程隔离的,这 3 个区域与线程的生命

2022-03-01 16:55:56 238

原创 SQL语句在MySQL中的执行流程

title: “SQL语句在MySQL中的执行流程”date: 2022-02-25T15:28:58+08:00draft: false文章目录1 基本架构概述2 组件介绍2.1 连接器2.2 查询缓存2.3 分析器2.4 优化器2.5 执行器1 基本架构概述MySQL 分为两层,Server 层和存储引擎层:Server层:主要包括连接器、查询缓存、分析器、优化器和执行器等,还有一些跨存储引擎的功能也在这里,如:存储过程、视图、函数和通用日志模块binglog等。.

2022-02-25 16:40:16 666

原创 JVM 编译器优化

文章目录1 编译器优化1.1 字节码是如何运行的?1.2 Hotspot 的即时编译器 C11.3 Htospot 的即时编译器 C21.4 分层编译1.5 分层编译- JVM参数配置示例1.6 如何找到热点代码?思路?1.7 Hotspot 内置的两类计数器1.8 方法调用计数器流程1.9 回边计数器流程1.10 方法内联1.10.1 什么是方法内联?示例?1.10.2 发生方法内联的条件1.10.3 使用方法内联的注意点:1.10.4 方法内联可能带来的问题1.10.5 内联相关JVM参数1.10.6

2022-02-15 16:34:59 689

原创 JVM 分代收集理论

title: “JVM 分代收集理论”date: 2022-01-20T11:58:09+08:00draft: false分代收集理论当前大多数的虚拟机都遵循了“分代收集”的理论进行设计,分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,它建立在两个分代假说之上:1)弱分代假说:绝大多数对象都是朝生夕灭的。2)强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡。这两个假说共同奠定了多款常用垃圾收集器的设计原则:收集器应该将Java堆划分出不同的区域,然后将回收对象依.

2022-01-20 15:59:55 326

原创 分布式限流

title: “分布式限流”date: 2021-12-14T10:53:59+08:00draft: falsetoc: true分布式限流介绍限流的目的是通过对并发访问/请求进行限速或者在一个时间窗口内的请求进行限速来保护系统,一旦请求到达限制速率则可以拒绝服务、排队或等待、降级。主要是通过压测时找出每个系统的处理峰值,然后通过处理设定峰值阈值来防止系统过载时,通过拒绝处理过载的请求来保障系统可用性。分布式限流的几种维度时间: 限流基于某段时间范围或者某个时间点,也就是我们常说的“.

2021-12-28 17:05:55 349

原创 如何保证接口幂等性

title: 接口幂等性date: 2021-12-06 14:22:46tags:什么是幂等性?幂等性:f(f(x)) = f(x)幂等元素运行多次,还等于它原来的运算结果在系统中,一个接口运行多次,与运行一次的效果是一致的什么情况下需要把接口设计为幂等性?重复提交、接口重试、前段操作抖动等业务场景:用户多次点击提交订单,后台应只生成一个订单业务场景:支付时,由于网络问题重发,应该只扣一次钱并不是所有的接口都要求幂等性,要根据业务而定保证幂等性的策略有.

2021-12-06 15:38:05 748

原创 Spring Cloud Ribbon 的负载均衡

负载均衡介绍将请求或者说流量,以期望的规则分摊到多个操作单元上进行执行。通过它可以实现横向扩展(scale out),将冗余的作用发挥为高可用。另外,还可以物尽其用,提升资源使用率。概念客户端负载均衡基于客户端做负载均衡,有一个前提是需要在客户端本地维护一个服务的机器列表,同时在本地指定一个LB策略,然后输出一个服务。服务列表并不是一成不变的,机器列表需要通过注册中心动态更新机器列表。服务端负载均衡大型应用通常是客户端+服务端负载均衡搭配使用技术选型红色框表示客户端模式,灰色框

2021-09-28 11:28:04 331

原创 Mycat 分片规则

title: Mycat 分片规则date: 2021-09-27 15:05:21tags:mycat在数据切分处理中,特别是水平切分中,中间件最终要的两个处理过程就是数据的切分、数据的聚合。选择合适的切分规则,至关重要,因为它决定了后续数据聚合的难易程度,甚至可以避免跨库的数据聚合处理。1. 分片枚举通过在配置文件中配置可能的枚举 id,自己配置分片。该分片规则适合于特定的场景,比如有些业务需要安装省份或区县来做保存,而全国省份区县是固定的,这类业务可以采用本规则。配置如下:.

2021-09-27 16:44:23 289

原创 MySQL事务相关

title: MySQL事务相关date: 2021-09-14 14:34:47tags:mysql1. 概述本文重新梳理一些关于 MySQL 事务相关的概念,主要包括:事务隔离引发的问题和事务隔离的级别。2 什么是数据库事务?我觉得首先在讨论事务隔离之前,首先复习一下事务的基本概念。数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作.

2021-09-14 15:59:28 98

原创 内置故障排查工具-jinfo

title: 内置故障排查工具-jinfodate: 2021-08-10 11:20:40tags:JVMJava监控工具jinfo作用jinfo全称Java Configuration Info,主要用来查看与调整JVM参数。TIPS此命令是实验性的,不受支持,对于JDK 9及更高版本,部分功能可使用 jhsdb jinfo 代替,也可用jcmd代替。部分JDK版本的jinfo命令对Windows支持比较有限,参数较少。本文为了更加接近生产环境,都是基于类Unix操作系.

2021-08-10 11:23:32 246

原创 编译器优化

上一篇文章文章目录1.3 编译器优化1.3.1 字节码是如何运行的?1.3.2 Hotspot 的即时编译器 C11.3.3 Htospot 的即时编译器 C21.3.4 分层编译1.3.5 分层编译- JVM参数配置示例1.3.6 如何找到热点代码?思路?1.3.7 Hotspot 内置的两类计数器1.3.8 方法调用计数器流程1.3.9 回边计数器流程1.3 编译器优化1.3.1 字节码是如何运行的?解释执行:由解释器一行一行翻译执行优势在于没有编译的等待时间性能相对差一些编译

2021-08-09 23:53:11 266

原创 内置监控工具 - jstat

title: 内置监控工具 - jstatdate: 2021-08-05 09:52:54tags:JVMJava监控工具内置监控工具 - jstat作用jstat全称JVM Statistics Monitoring Tool,用于监控JVM的各种运行状态。TIPS此命令是实验性的,不受支持。参考文档:Java 8:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.htmlJava 1.

2021-08-05 09:54:57 214

原创 线程池ThreadPoolExecutor

title: 线程池ThreadPoolExecutordate: 2021-08-04 22:01:38tags:Java线程池多线程前言线程就是一个放线程的池子。使用线程池的好处:重用已存在的线程,从而减少对象创建和销毁的开销。控制并发,从而提高资源利用率,有效避免过多的资源竞争,提升性能功能强大,有定时执行、定期执行、单线程执行、并发控制等等从某种意义上讲,线程池是特殊的对象池。这篇文章commons-pool对象池(2)—实现一个线程池就介绍了怎么用 comm.

2021-08-04 23:26:50 101

原创 对象池 commons-pool2

title: 对象池 commons-pool2date: 2021-08-01 13:48:21tags:Java池化技术1 前言池化技术是性能调优的重要措施,池化的思想是把对象放到池子里面,当要使用的时候从池子里面拿对象,用完之后在放回池子里面。这样可以降低资源分配和释放资源的开销,从而提升性能。在实际的项目中,我们每天都会接触到池化技术,例如:对象池:通过复用对象,减少对象创建、垃圾回收的开销线程池:通过复用线程来提升性能连接池:如数据库连接池、Redis连接池、HTT.

2021-08-01 16:46:55 2233

原创 分布式事务

title: 分布式事务date: 2021-07-24 16:38:011 概述CAP原理ACID原理与BASE原理基于XA协议的两阶段提交事务补偿机制基于本地消息表的最终一致方案基于MQ消息队列的最终一致方案2 CAP原理2.1 简介在分布式系统中,我们经常听到CAP原理这个词,它是什么意思呢?其实和C、A、P这3个字母有关,C、A、P分别是这3个词的首字母。下面我们就看一下这3个词分别是什么意思?C - Consistent ,一致性。具体是指,.

2021-08-01 13:36:40 121

原创 分布式全局ID

title: 分布式全局IDdate: 2021-07-18 17:22:17tags:分布式分布式全局ID1 前言在分库分表的过程中,因为拆分的实体表的ID有可能是重复的,正式由于这个问题才会有分布式全局ID这个方案的出现。2 概要分库分表的系统中,由于id引发的问题它是由于什么原因导致的?它会对业务系统引发什么问题?分布式ID的解决方案使用UUID作为id实现主键全局ID唯一性保证通过统一ID序列表,实现全局ID雪花算法作为全局ID多种方案的比较3.

2021-07-24 16:35:23 149

原创 Feign Client的超时时间

如何配置好 feign、ribbon、hystrix 的超时设置?其实是有套路的,因为Feign的请求:其实是Hystrix+Ribbon。Hystrix在最外层,然后再到Ribbon,最后里面的是http请求。所以说。Hystrix的熔断时间必须大于Ribbon的 ( ConnectTimeout + ReadTimeout )。而如果Ribbon开启了重试机制,还需要乘以对应的重试次数,保证在Ribbon里的请求还没结束时,Hystrix的熔断时间不会超时。Feign Client Configu

2021-07-21 18:57:37 2536

原创 JVM之对象的创建过程

title: JVM之对象的创建过程date: 2021-07-09 17:11:23tags: JVM1 前言Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?常量池中定位类的符号引用检查符号引用所代表的类是否已被加载,解析和初始化过。如果没有,那必须先执行.

2021-07-10 12:14:26 524 1

Intellij IDEA和GitHub版本控制使用说明

通过Intellij IDEA图形化的使用Git工具; 关联Intellij IDEA和Github账号; 上传项目至Github; 解决代码冲突; 分支创建,合并,删除

2018-12-20

空空如也

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

TA关注的人

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