自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用spring-ai快速对接ChatGpt

在ai-openai-helloworld基础上进行了一些修改,完善可一些配置文件,增加了代理的配置。国内可以通过配置代理访问openAI。

2024-04-14 16:25:21 1141

原创 dubbo线程池为什么耗尽

大家可能都遇到过DUBBO线程池打满这个问题,报错如下,本文我们就一起分析DUBBO线程池打满这个问题。错误。

2023-12-23 16:35:31 1229

原创 ES查询流程

在ES中查询分为两类:1.基于文档ID查询,2.按照非文档ID查询。

2023-12-17 16:41:16 1120

原创 rabbitMq确认机制之ConfirmType

1. none(默认):关闭发布确认模式。2. correlated:消息从生产者发送到交换机后触发回调方法。3. simple:会触发回调方法,相当于单个确认(发一条确认一条)。在发布消息成功后使用

2023-11-25 16:18:43 1308 1

原创 通过设置响应头解决跨域问题

网上很多文章都是告诉你直接Nginx添加这几个响应头信息就能解决跨域,当然大部分情况是能解决,但是我相信还是有很多情况,明明配置上了,也同样会报跨域问题。这大概率是因为,服务端没有正确处理预检请求也就是OPTIONS请求

2023-11-12 15:00:39 3669

原创 spring-cloud-starter-dubbo不设置心跳间隔导致生产者重启no Provider问题记录

dubbo在建立连接后会起一个任务,检查连接的是否有效,如果已经时间,会重新连接。问题出在时间间隔上面。从元数据读取heartbeat这个key,如果没有,那么使用默认的60秒,我们项目没有设置这个心跳时间,那么默认就是60秒。

2023-11-05 16:30:07 624

原创 tomcat线程模型

I/O模型是为了解决内存和外部设备速度差异。所谓阻塞或非阻塞是指应用程序在发起I/O操作时,是立即返回还是等待同步和异步,是指应用程序在与内核通信时,数据从内核空间到应用空间的拷贝,是由内核主动发起还是由应用程序来触发。Tomcat#Endpoint组件的主要工作就是处理I/O,而NioEndpoint利用Java NIO API实现了多路复用I/O模型。读写数据的线程自己不会阻塞在I/O等待上,而是把这个工作交给Selector。

2023-09-24 17:39:26 145

原创 Java实现HTTP的上传与下载

相信很多人对于java文件下载的过程都存在一些疑惑,比如下载上传文件会不会占用vm内存,上传/下载大文件会不会导致oom。下面从字节流的角度看下载/上传的实现,可以更加深入理解文件的上传和下载功能。

2023-09-03 16:58:51 1738

原创 更改mysql表结构会锁表吗

举一个简单的例子,如果你在查询一个表的过程中,另外一个session对该表删除了一个列,那前面的查询到底该显示什么呢?如果在RR隔离级别下,事物中再次执行相同的语句还会和之前结果一致吗?答案是否定的,RR隔离级别下,会话A在2次查询期间,会话B对表结构做了修改,两次查询结果就会不一致,无法满足可重复读的要求。为了防止这种情况,所以在5.5.3版本引入了MDL锁(表查询开始MySQL会在表上加一个锁,来防止被别的session修改了表定义,)。

2023-08-20 16:29:08 1068

原创 RabbitMq Consumer thread error, thread abort.异常导致服务关闭问题

在使用rabbitMq消费者使用simple模式进行监听时,服务突然自动关闭,事前没有任何的cpu或者内存的报警。查看关闭服务前的日志发现OOM异常但是一个异常为什么会导致服务关闭呢?开始看到OOM,我就想着启动参数上加了当发生OOM时生成堆的dump文件,然而查看文件目录,发现并没有看到生成的堆dump文件,这就十分奇怪。

2023-08-12 17:42:08 1931 1

原创 记一次堆外内存泄漏排查过程

最近把A,B两个服务合并成了一个服务。合并后上线两天后服务器开始报警,内存满了到服务器上使用top命令查看,jvm进程已经占了11g的内存(指的rss)。其中RSS( Resident Set Size )常驻内存集合大小,表示相应进程在RAM中占用了多少内存,并不包含在SWAP中占用的虚拟内存。即使是在内存中的使用了共享库的内存大小也一并计算在内,包含了完整的在stack和heap中的内存。

2023-07-30 14:16:23 928

原创 @Async注解导致偶发循环依赖问题产生原因

通过实现BeanDefinitionRegistryPostProcessor接口,在postProcessBeanDefinitionRegistry方法中通过BeanDefinitionRegistry获取到所有bean的注册信息,将bean保存到LinkedHashMap中,并从BeanDefinitionRegistry中删除,然后将保存的bean定义排序后,重新再注册到BeanDefinitionRegistry中,即可实现bean加载顺序的控制。

2023-07-15 17:51:10 438

原创 RabbitMq监听器simple和direct

首先明确,这里的consumer不是一台消费者机器,而是rabbitMq的最小消费单位,一台机器可以开启多个消费者,一个消费者总是对应一个channel。

2023-07-07 22:57:19 2891 1

原创 Dubbo实战-自定义拦截器

调用逻辑为挨个执行filter的invoke方法,如果filter还继承了Listener接口,那么还会执行结果是否有异常分别调用onResponse或者onError方法

2023-06-22 15:13:44 1275

原创 项目中FastJSON 设置PropertyNamingStrategy不生效

对javaBean转换为字符串写法全局设置可是实际在项目中使用发现,有时并不生效看一个例子两次输出中间进行PropertyNamingStrategy的配置,

2023-06-17 13:15:20 1682

原创 Server-Sent Events (SSE) 技术分析

一般来说HTTP协议是要客户端先请求服务器,服务器才能响应给客户端,无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(event-streaming)。也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。SSE 就是利用这种机制,使用流信息向客户端推送信息。

2023-06-06 16:22:11 4974

原创 使用lombok注解导致mybatis-plus TypeHandler失效

建立实体其中一个字段为枚举类希望数据库存的时对应的数字为了和数据库进行转换,使用了typeHandler测试发现我们知道,在不开启autoResultMap时,会导致TableField对于查询返回的结果不生效。(对于更新无影响)因此首先检查在实体类注解上(mybatisPlus会根据我们的实体类的类型,为我们自动注入resultMap,注入的resultMap也会自动推断出需要使用的类型转换器当然我们也可以指定)

2023-06-03 10:51:53 1447

原创 RabbitMq确认机制

confirm机制主要包含的三个属性分别是,mandatory、publisher-confirms、publisher-returnrabbitmq客户端发送消息首先发送的交换器exchange,然后通过路由键routingKey和bindingKey比较判定需要将消息发送到那个队列queue上;在这个过程有两个地方消息可能丢失,第一消息发送到交换器exchange的过程,第二消息从交换器exchange发送到队列queue的过程;

2023-05-28 16:01:59 1197

原创 ES负载均衡及容错

在查询的时候,通常会涉及到从多个node服务器上查询数据,并请求分发到多个指定的node服务器,并对各个node服务器返回的结果进行一个汇总处理, 最终返回给客户端。容错第三步,重启故障node,新master会感知到新节点加入,将缺失的副本分片copy一份到新的node上面,copy的是被提升为主分片的分片。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。如10台1T的服务器1万,单个10T服务器可能20万。

2023-05-21 15:56:47 1035

原创 ES分片和副本

通过该图, 记住下面的几个定义:集群(cluster):由一个或多个节点组成, 并通过集群名称与其他集群进行区分es集群一般有几个master“ • 一个正常es集群中只有一个主节点(Master),主节点负责管理整个集群。节点(node):单个ElasticSearch实例. 通常一个节点运行在一个隔离的容器或虚拟机中索引(index):在ES中, 索引是一组文档的集合。

2023-05-21 15:54:55 3719

原创 Redission作为分布式锁使用与原理

比如:如果上锁成功了,还没释放呢,服务宕机了,这把锁将永驻,服务起来后再去抢占锁的时候发现已经有锁了,无法抢占,但是这把锁又永远得不到释放,死锁了。所以记得要用setnx设置过期时间,或者set+expire放到lua里进行设置。为什么需要续期?假设锁设置了3s,但是业务代码执行了4s还没执行完,那锁过期了,其他线程在请求接口的时候又加上了锁(redis里又setnx值了),这时候不就并发执行了吗?相当于还是线程不安全!

2023-05-13 14:24:49 1620

原创 Redisson看门狗原理

redission锁原理scheduleExpirationRenewal 中会调用renewExpiration。这里我们可以看到是启用一个timeout定时,去执行延期动作,

2023-05-13 14:18:21 2371

原创 什么是Redisson

Redis支持多种语言客户端,支持的客户端可以从官网查看,这里列举一系列常见的客户端:Redis采用单线程方式处理多个客户端连接,作为程序开发者应该了解 Redis 服务端和客户端的通信协议,以及主流编程语言的 Redis 客户端使用方法,同时还需要了解客户端管理的相应 API 以及开发运维中可能遇到的问题。

2023-05-07 16:43:53 580

原创 HDFS集群启动报错/usr/bin/env: bash: 没有那个文件或目录

执行start-dfs.sh时报错。

2023-05-05 17:42:22 1080

原创 HDFS集群搭建

在已经启动单机版hdfs的基础上进行1.准备三台虚拟机(以完成网络配置,主机名配置,主机域名映射,防火墙关闭并关闭重启,ssh免密,安装JDK等等)2.在node01上安装Hadoop,配置环境变量(修改和配置一些文件,修改时一定小心错一个字母就会失败。)3.同步配置信息(把在node01上修改的配置文件同步到node02和node03上)4.在node01上格式化,并启动集群。5.用jps查看启动情况,并测试上传下载是否能成功。在web端查看

2023-05-05 17:41:28 926

原创 安装启动单机HDFS

前提,需要确保有java8的环境,并安装java并且配置环境变量然后执行source /etc/profile重载配置文件。

2023-05-05 17:40:18 224

原创 HDFS基本概念

通常大型 Hadoop 集群是以机架的形式来组织的,同一个机架上的不同节点间的网络状况比不同机架之间的更为理想,NameNode 设法将数据块副本保存在不同的机架上以提高容错性。HDFS 不能够自动判断集群中各个 DataNode 的网络状况情况,Hadoop 允许集群的管理员通过配置 net.topology.script.file.name 参数来确定节点所处的机架,配置文件提供了 ip 到 rackid 的翻译。NameNode 通过这个配置知道集群中各个 DataNode 机器的 rackid。

2023-05-05 17:39:08 1878

原创 Hadoop概述

HDFS分布式文件系统的内部有一个副本存放策略:以默认的副本数=3为例:①第一个副本块存本机(若客户端在集群中,不在的话随机选择一个较近的机器)②第二个副本在另一个机架的随机节点③第三个副本在第二个副本所处机架的随机节点。这些信息不是长久固定的,每次启动系统后需要重新从数据节点获取这些信息。4、Namenode全权管理数据库的复制,它周期性的从集群中的每Datanode接收心跳信合和状态报告,接收到心跳信号意味着DataNode节点工作正常,块状态报告包含了一个该DataNode上所有的数据列表。

2023-05-05 17:38:08 1160

原创 RabbitTemplate的创建与配置

RabbitTemplate是我们在与SpringAMQP整合的时候进行发送消息的关键类该类提供了丰富的发送消息的方法,包括可靠性消息投递、回调监听消息接口ConfirmCallback、返回值确认接口ReturnCallback等等同样我们需要注入到Spring容器中,然后直接使用。在与spring整合时需要实例化,但是在与Springboot整合时,只需要添加配置文件即可首先将其注入到bean里面:如果自己不注入。

2023-04-05 17:26:41 3459

原创 Log4j2常用标签及使用

Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并参考了Logback中优秀的设计,同时修复了Logback架构中的一些问题。被誉为是目前最优秀的Java日志框架;异常处理:在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。性能提升:log4j2相较于log4j和logback都具有很明显的性能提升,在多线程方案中,异步记录器的吞吐量比Log4j 1.x和Logback高10倍。

2023-03-26 16:19:09 1544

原创 Mybatis-Plus批量更新原理

默认batchSize = 1000 进入executeBatch方法在这个方法基本就能看出来了,执行1000次方法后执行一次flushStatements,也就是说理论上是积累了1000个更新sql,才进行一次数据库更新使用的是BatchExcutor进行批量执行的。

2023-03-14 10:30:00 5516

原创 MybatisPlus如何完成字段类型转换

对每个字段都有自己的定义都有两个类型 javaType可以不显式写出来,mybatis可以根据指定的实体类推断出来jdbcType 也就是对应到数据库中的字段类型mybatis完成数据库的数据到java实体类型的转换这两个类型是必不可少的。会根据javaType和jdbcType去匹配到对应的处理器完成类型转换

2023-03-11 17:12:30 8062

原创 ES数据类型

String类型可以和java的string、mysql的varchar等同,但是为何会分为text、keyword呢?这两者又有什么区别?ES作为全文检索引擎,它强大的地方就在于 分词和倒排序索引。而 text 和 keyword 的区别就 在于是否分词(ps:什么叫分词?举个简单例子,“中国我爱你”这句话,如果使用了分词,那么这句话在底层的储存可能就是“中国”、“我爱你”, 被拆分成了两个关键字)

2023-03-06 09:56:02 2474

原创 MySql主从复制原理

1、什么是主从复制?概念 主从复制是用来建立一个和 主数据库完全一样的数据库环境称为从数据库;主数据库一般是准实时的业务数据库。2、主从复制作用我们来思考如果在企业网站中,后端MYSQL数据库只有一台时候,会有以下问题:1、单点故障服务不可用2、无法处理大量的并发数据请求3、数据丢失所以通过主从复制后,它的优点就很明显1、如果主节点出现故障,那么我们就直接将服务切到从节点,来保证服务立马可用。2、如果并发请求特别大的时候,我们可用进行读写分离操作,让主库负责写,从库负责读。

2023-02-23 17:35:46 2432 2

原创 使用docker配置mysql主从

使用一台虚拟机docker进行配置

2023-02-23 17:33:05 294

原创 什么是分库分表以及为什么分库分表

库分表对于后端程序员来说,绕不开数据库的使用与方案选型,那么随着业务规模的逐渐扩大,其对于存储的使用上也需要随之进行升级和优化。随着规模的扩大,数据库面临如下问题:面对上述问题,常见的优化手段有:索引优化、主从同步、缓存、分库分表每个技术手段都可以作为一个专题进行讲解,本文主要介绍分库分表的技术方案实现。对于阅读本文的读者来说,分库分表概念应该并不会陌生,其拆开来讲是分库和分表两个手段:何谓数据切分?简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库

2023-02-19 16:26:33 491

原创 Redis过期策略和内存淘汰策略

redis作为内存数据库,虽然提供了远快与关系型数据库IO的速度,但是内存显然是珍贵的 ,因此在使用redis作为时要注意缓存的数据量,并且设置过期时间,保证不被使用到的数据被淘汰。

2023-02-09 11:44:51 289

原创 分布式下如何根据token解析登录用户

使用缓存session的方法,往往只有在登录的时候,才会将session存起来。那么加入后续用户对象更新,那么session的用户信息就不是最新的了,这也是往往我们更改用户信息需要重新登录的原因。

2023-02-04 13:06:45 5726 1

原创 JVM堆内存占用高好还是占用低更好

堆内存占用高或者低,这个问题并不能直接得到答案,还需要借助jvm的架空工具,比如jstat命令,查看gc次数,gc时间等。

2023-02-03 13:59:32 1059

转载 如何合理配置一个线程池

如何来设置呢?需要根据几个值来决定tasks :每秒的任务数,假设为500~1000taskcost:每个任务花费时间,假设为0.1sresponsetime:系统允许容忍的最大响应时间,假设为1s做几个计算corePoolSize = 每秒需要多少个线程处理?

2023-02-03 13:56:08 1131

空空如也

空空如也

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

TA关注的人

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