自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xzh_blog

哦~ 慢慢清晰

  • 博客(316)
  • 资源 (6)
  • 收藏
  • 关注

原创 Java CAS和AQS的实现原理

CAS(Compare And Swap)是一种并发控制机制,用于解决多线程并发访问共享资源时的数据一致性问题。在Java中,CAS操作通常使用Atomic类来实现。例如,可以使用java.util.concurrent.atomic.AtomicInteger类来实现对整数类型的原子操作。Atomic类提供了一系列的原子操作方法,例如getAndAdd、getAndSet、compareAndSet等,可以用于实现CAS操作。/***/

2023-05-24 14:05:58 321

原创 idea插件 Bito – GPT-4 & ChatGPT AI写代码 分析代码 生成测试用例

Bito官网 https://bito.ai/Bito AI是一款通用的人工智能辅助工具,基于最新的ChatGPT实现,开发者可以提出任何技术问题,根据自然语言提示生成代码。Bito AI可以用于编写代码、理解语法、编写测试用例、分析解释代码、注释代码、检查安全性,甚至解释高级概念。

2023-04-26 09:50:29 589 2

原创 MySQL InnoDB 为什么使用B+树作为索引结构

使用B+树作为索引结构可以提高查询效率和覆盖度,减少回表操作,支持高效的范围查询。

2023-04-25 14:13:47 27

原创 MySQL索引合并Index Merge 一条SQL使用多个索引情况分析,以及索引合并失效情况

MySQL在5.0版本加入了索引合并优化(Index Merge),索引合并可以同时查询多个索引的范围扫描,并将其结果合并为一个。索引合并只可以合并来自单个表的索引扫描,而不支持跨多个表的扫描。合并可以生成其基础扫描的并集(unions)、交集(intersections)或交集的并集(unions-of-intersections)。

2023-04-23 14:47:16 373

原创 swagger文件上传接口没有选择文件按钮问题解决 使用@RequestPart注解

@RequestPart注解用在multipart/form-data表单提交请求的方法上,用于修饰MultipartFile类型的参数。当请求类型为multipart/form-data时,@RequestParam只能接收String类型的name-value值。

2023-04-18 18:07:35 227

原创 MySQL 查询表中重复数据

SELECT user_mobile FROM `t_user` GROUP BY user_mobile HAVING COUNT( user_mobile ) > 1;

2023-03-06 10:09:40 194

原创 更新 TKK 失败,请检查网络连接。谷歌翻译 translation插件不能用解决办法 亲测有效

​修改hosts文件,将谷歌翻译网址域名指向可用IP地址。在hosts文件加入两行配置:172.217.194.90 translate.google.com172.217.194.90 translate.googleapis.com​

2023-03-02 10:21:22 558 1

原创 系统CPU飙升 三步快速定位问题

找到最耗CPU的进程top -c找到最耗CPU的线程top -Hp 查看堆栈jstack | grep '' -C100 --color

2023-02-27 15:36:37 80

原创 数据压缩方案之高性能集合 IntObjectHashMap

IntObjectHashMap没有和JDK的HashMap一样,使用链表法来解决hash冲突,而是使用了线性探测策略的开放寻址法,由于使用开放寻址,在hash碰撞较为严重的场合,其查询性能比HashMap会更好,但是其扩缩容的代价会比HashMap更大,性能更糟。IntObjectHashMap的value就是真实的value,不像HashMap内部维护的Node,也会更节约内存。以及其他包下的集合,org.antlr.v4.runtime.misc.IntSet 也可以压缩数据。经测算,存入1万数据,

2023-02-22 13:43:40 99

原创 MySQL查询表的所有字段名

MySQL查询表的所有字段名。SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '表名';

2023-02-21 11:23:40 212

原创 Spring SpringBoot启动时 @ComponentScan 排除指定Bean初始化

Spring SpringBoot启动时 @ComponentScan 排除指定Bean初始化。@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {OrderService.class, ProductService.class}))

2023-02-21 09:17:16 230

原创 分布式一致性Session方案

Session一般译作会话,用户访问web应用时,服务端会给每一个用户(浏览器)创建一个Session对象。缺点:每次http请求都携带Session占外网带宽,Session存储的数据大小受Cookie限制。缺点:Session同步需要占用内网带宽,如果服务比较多性能直线下降,也无法水平扩展。方案三 服务端同步Session,使用Tomcat同步复制保存Session。缺点:服务端重启后Session丢失,服务端水平扩展需要rehash。缺点:需要修改服务端代码。

2023-02-20 13:53:42 41

原创 在桌面点击html文档跳转到指定网站

在windows桌面新建一个html文档,然后文档内容如下: location.replace("https://www.baidu.com");然后点击百度.html,就会打开浏览器并跳转到百度。

2023-02-17 11:08:43 268

原创 update inner join set、update set where如何使用一个表中的字段更新另一个表中字段,MySQL

update inner join set 和 update set from ,如何使用一个表中的字段更新另一个表中字段,MySQL和SqlServer不一样。

2023-02-09 11:17:35 217

原创 使用线程池时,多线程之间上下文参数传递失效解决办法

问题描述在执行业务代码时,有时候需要异步处理一些业务,在异步线程中获取当前登录的用户信息失败。因为用户信息是在过滤器或拦截器中解析出来并设置到ThreadLocal中的,子线程是无法获取到ThreadLocal中的值的。虽然可以使用InheritableThreadLocal替代ThreadLocal,但是只能在新创建的线程中使用。对于线程池也会失效,因为线程池中的线程是由线程池创建好并可重复利用,这时InheritableThreadLocal的值传递就失去意义了。解决办法自定义线程池和线程池执

2023-01-12 14:52:49 456

原创 Thread.sleep(0) 有什么用

Thread.sleep()是native方法。一个线程在运行native方法后,返回到Java线程时,必须进行一次safepoint检查。程序只有达到safepoint才会STW,从而进行GC。Thread.sleep(0)可以让线程进入safepoint检查,从而触发GC。

2023-01-09 10:48:55 145

原创 什么是Cherry-Pick IDEA中怎么使用Cherry-Pick

Cherry-Pick可以将一个分支的某些commit,合并到另一个分支。在不需要merge整个分支的时候适合使用。

2023-01-06 11:12:06 763

原创 Java 使用CountDownLatch实现网络同步请求,异步同时获取商品信息组装

CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。

2023-01-04 14:23:45 147

原创 fastjson 将字符串转Java对象 日期序列化异常 日期格式报错解决

com.alibaba.fastjson.JSONException: For input string: "2022-12" at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:693) at com.alibaba.fastjson.JSON.parseObject(JSON.java:395) at com.alibaba.fastjson.JSON.parseObject(JSO

2022-12-15 10:10:02 1127

原创 Java 集合多条件多规则排序 升序 降序 空值处理

List orderShopList = list.stream().sorted(Comparator // 先按数量降序(由于是降序,nullsFirst()方法会将null值放在后面) .comparing(Shop::getCount, Comparator.nullsFirst(Integer::compareTo).reversed()) // 然后按价格升序(由于是升序,

2022-12-02 09:56:43 1040

原创 一张技术架构图

技术架构图

2022-11-24 15:18:51 217

原创 基于Spring Validation自定义校验注解

自定义一个校验注解,针对字符串参数校验,校验逻辑是字符串必须是"xzh"。String message() default "必须是xzh";Class

2022-11-23 17:19:55 950

原创 分布式场景下接口的限流、幂等、防止重复提交

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Limiter { /** * 限制时间(秒) * * @return */ long limitTime() default 2L; /** * 限制后的返回内容 * * @return */ String

2022-11-22 16:26:33 426

原创 Java 日志中找不到自定义线程的原因,线程名显示不全

原因是日志中使用固定长度格式展示线程名,长度固定为15位字符,在[]里面。当线程名超过15位时会截取,删除最前面的字符直到线程名等于15位字符。eg:线程名为xzhThreadExecutor-0,会变为[hreadExecutor-0]当线程名不足15位时会补全,自动填充空字符直到达到15位字符。eg:线程名为xzhThread-0,会变为[ xzhThread-0]

2022-11-14 09:57:40 255

原创 Redis单线程为什么还能这么快

1.命令执行基于内存操作,一条命令在内存里操作的时间是几十纳秒。2.命令执行是单线程操作,没有线程切换开销。3.基于IO多路复用机制提升Redis的I/O利用率。4.高效的数据结构,比如:SDS的空间预分配;Hash的渐进式扩容机制;ZSet的跳跃表结构。5.合理的数据编码,比如:String存储数字采用int的编码,存储非数字采用raw编码。

2022-10-27 17:02:30 592

原创 如何解决高并发下的库存争抢问题?

原子操作单库修改,几乎无锁竞争,性能好,但性能有上限,可能数据库单点故障。拆分key可以将数据量比较大的key-value,拆分为多个key-value,分拆单次操作的压力,将操作压力平摊到多个redis实例中,降低对单个redis的IO影响。令牌队列类似于令牌限流,将对库存的竞争转换为对令牌的竞争,拿到令牌才可拿库存。自旋互斥超时锁可以对多线程进行互斥,实现同个类型的数据只有一个线程在运行。CAS乐观锁无锁竞争的原子操作,事务执行期间相关的缓存没有修改才会提交成功。Redis

2022-10-27 10:52:10 434

原创 Pulsar订阅模式类型SubscriptionType

独占模式(Exclusive)只允许有一个Consumer加入Subscription ,有其他Consumer试图订阅都会报错,如果该Consumer出现故障了就会停止消费。Pulsar默认是独占模式(Exclusive)。共享模式(Shared)允许多个Consumer加入同一个Subscription,如果Consumer连接异常,就由其他Consumer来接受消息。灾备模式(Failover)当存在多个Consumer时,按字典顺序排序,第一个Consumer被初始化为唯一接受消息的

2022-10-24 15:29:03 622

原创 长轮询和长连接

长轮询客户端向服务端发送请求,服务器端不会直接响应,而是先将这个请求挂起,然后判断服务器端数据是否有更新。如果有更新,则响应,如果一直没有数据,则达到等待超时时间才返回。案例:消息队列、配置中心等长连接长连接即HTML5 SSE,客户端和服务端建立连接后不进行断开,后续的交互一直复用这条连接通道,连接不会主动关闭。案例:视频播放

2022-10-17 16:18:30 110

原创 Spring Boot整合Pulsar生产和消费消息 简单示例代码

@PostConstruct public void initPulsarProducer() throws PulsarClientException { // 构造Pulsar client PulsarClient client = PulsarClient.builder() .serviceUrl(url) .build(); // 创建生产者producer

2022-10-11 15:18:43 886 1

原创 Java List Map 遍历通过条件删除元素

Java List Map 遍历通过条件删除元素

2022-09-28 18:49:40 493

原创 Java获取HTTP请求参数 包括form表单、json格式、xml格式

Java获取HTTP请求参数 包括form表单、json格式、xml格式,并将参数转为map或json等格式

2022-08-23 11:15:21 1658

原创 微服务注册中心的注册表如何更好的防止读写并发冲突

Eureka通过注册表的多级缓存结构防止读写并发冲突;Nacos通过CopyOnWrite机制解决读写并发冲突;Zookeeper使用分布式共享锁实现分布式协调服务解决读写并发冲突:

2022-08-19 11:33:42 463

原创 RocketMQ NameServer如何保证数据最终一致

NameServer是RocketMQ的命名服务(路由中心、注册中心),提供更新和发现Broker服务的功能,是几乎无状态节点,可集群部署。NameServer节点之间互不通信,路由变化也不会马上通知客户端(生产者和消费者)。既然NameServer的节点之间互不通信,变更也不发送通知,那又是如何保证数据最终一致的呢?.........

2022-08-18 16:26:37 691

原创 Nacos 概念介绍 配置模型

命名空间用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之⼀是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如数据库配置、限流阈值、降级开关)隔离等。如果在没有指定 Namespace 的情况下,默认使用 public 命名空间。...

2022-08-17 17:22:47 211

原创 MySQL热点行更新

首先限制打到MySQL的流量前端加验证码、移动图像、回答问题等,限制同一用户的点击频率。后端添加缓存,读写都采用缓存操作,每隔一定时间将结果更新到数据库,对前端请求限流和降级。将请求放入消息队列,顺序将更新请求发送到数据库执行。MySQL层面将热点数据拆分,分在不同的库不同的表中,分散热点数据。将update转为insert,在一次db交互中完成。MySQL参数调优,innodb_flush_log_at_trx_commit = 0,innodb_thread_concurrency = 2

2022-08-17 13:37:22 694

原创 订单超时未支付自动取消8种实现方案

定时轮询、惰性取消、JDK延迟队列、时间轮、Redis过期回调、Redis有序集合、任务调度、消息队列

2022-08-16 18:12:57 5209 1

原创 Spring Cloud Gateway 使用 HystrixGatewayFilterFactory 熔断降级

{ "timestamp": "2022-08-16T01:23:11.939+0000", "path": "/user-server/open/a", "status": 504, "error": "Gateway Timeout", "message": "Response took longer than configured timeout"}

2022-08-16 09:31:13 554

原创 无锁缓存方案

缓存通常使用key-value的map数据结构来实现,并发读写缓存时可能会出现数据不一致问题,此时就需要引入读写锁。当吞吐量很高时(每秒20w写,1k读),锁会成为潜在瓶颈,导致Map访问效率极低。这时可以将map水平拆分(类似于数据库里的分库,把一个库锁变成多个库锁,来提高并发,降低锁冲突。)key%n → 多个map。极致做法是map → array,一条数据一把锁,但这样内存装不下。...

2022-08-15 10:50:34 229

转载 Spring AOP 源码解析

代理模式很简单,接口 + 真实实现类 + 代理类,其中 真实实现类 和 代理类 都要实现接口,实例化的时候要使用代理类。所以,Spring AOP 需要做的是生成这么一个代理类,然后替换掉真实实现类来对外提供服务。...

2022-08-12 11:14:25 96

转载 Spring IOC 容器源码分析

Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。...

2022-08-12 10:51:01 87

SublimeText4下载

Sublime Text – 性感的代码编辑器、程序员之必备神器!Sublime Text 是个功能强大的代码编辑器,也是HTML和散文先进的文本编辑器。

2021-04-07

MySQL5.7下载 64位 mysql-5.7.20-winx64 免安装

MySQL数据库服务是一种完全托管的数据库服务,用于部署云原生应用程序

2021-04-07

Git下载 64位 官方正式版 windows Git-2.31.1-64-bit.exe

Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。

2021-04-07

JDK11下载 64位 官方正式版 jdk-11.0.10_windows-x64_bin.exe

感谢您下载此版本的Java™平台标准版开发套件(JDK™)。 JDK是用于使用Java编程语言构建应用程序和组件的开发环境。

2021-04-07

JDK1.8下载 64位 官方正式版 jdk-8u191-windows-x64.exe

感谢您下载此版本的Java™平台标准版开发套件(JDK™)。 JDK是用于使用Java编程语言构建应用程序和组件的开发环境。

2021-04-07

空空如也

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

TA关注的人

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