自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RabbitMQ幂等性、限流、消息确认代码实现

消息幂等性,其实就是保证一个消息不管因为什么原因都只会被消费一次,正常情况下,消费者消费完消息之后,会发送一个ack给生产者,但是中途有可能因为网络等原因导致生产者未收到确认信息,导致一条消息被重复消费。如何避免重复消费的问题1.使用一个唯一的id。消费之前根据id去判断消息是否被消费过,未被消费则正常使用消息。2.使用redis只能有一个key的特性。我们这里只介绍第一种方法,SpringAMQP中给出了这种问题的解决方案。关于配置问题和入门使用SpringAMQP,大家可以看我之前写的文章。

2024-05-07 15:13:06 589

原创 SpringAMQP快速入门

实现:创建一个叫simple.direct的交换机,类型是direct,创建两个队列,在交换机中进行绑定,队列1绑定的key是red和blue,队列2绑定的是red和green。发送消息的类型是Object,在发送时会序列化成字节,接收到消息之后会反序列化成java对象,因此有些时候消息转化过程就会是字节,不是我们想要的数据,这时就要配置JSON转化器,有两种方式。在Direct中,队列绑定交换机时会指定一个路由key,发送消息时,也必须指定路由key,根据路由key的不同发送到不同的队列。

2024-03-03 14:23:35 1168 1

原创 java面试题-JVM

线程私有的,每个线程一份,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。

2024-02-26 20:27:32 327 1

原创 java面试题-并发编程

AQS是多线程中的队列同步器,是一种锁机制,他是作为一个基础框架使用的。AQS内部维护了一个先进先出的双向队列,队列中存储的排队的线程。AQS内部有一个state,这个state相当于是一个资源,默认是0(无锁状态),如果队列中的有一个线程修改成功了,state改为1,则当前线程相当于获取了资源。对state修改的时候使用cas操作,保证原子性。

2024-02-24 14:28:18 249

原创 java面试题-集合

数组转集合:使用Arrays的asList方法,如果修改了数组的内容,list的内容也会一起修改,,因为他们底层使用的Arrays类中的一个内部类ArrayList来构造的集合,在这个集合的构造器中,把我们传入的这个集合进行了包装而已,最终指向的都是同一个内存地址。集合转数组:使用集合的toArray方法,里面写要转的类型和数组长度,如果修改了集合内容,数组不会受影响,只是对数据进行了拷贝。如果是链表,需要遍历链表,进行判断,要么留在原来的位置,要么移动到原来位置+增加的数组大小这个位置上。

2024-02-23 13:32:36 236 1

原创 java面试题-微服务篇

默认关闭,需要手动打开,如果检测到10秒内请求失败率超过50%,就会触发熔断机制,之后每隔5秒重新尝试请求微服务,如果微服务不能相应,继续走熔断机制,,如果微服务可以到达,则关闭熔断机制,恢复正常请求。服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会手请求突增影响变得不可用,,确保服务不会崩溃。服务注册:服务提供者需要把自己的信息注册到注册中心,由注册中心保存这些信息,比如ip地址,端口号,服务名称等。2.权重选择:按照权重来选择服务器,响应时间越长,权重越小。

2024-02-21 14:28:08 298

原创 java面试题-消息中间件篇

消息成功会返回ack,失败会返回nack(未发送到交换机),ack(publish-return,未发送到队列),失败后解决方案:回调方法即使重发,记录日志手动处理,保存到数据库定时重发,发送成功删除数据。消费者消息丢失方案:SpringAMQP支持auto确认模式,没有异常保证消费者接受到消息,如果发生异常,进行重试,重试到达一定次数,将消息投递给异常交换机,由人工处理。消息丢失的几种可能性:消息未达到交换机,消息未达到队列,队列中消息丢失,消费者未收到消息。扩大队列容积,提高堆积上限,采用惰性队列。

2024-02-20 18:49:16 179

原创 java面试题-框架

面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,,抽取公共模块复用,降低耦合。最常用于:记录日志。

2024-02-20 15:51:51 380

原创 java面试题-MySQL篇

超大分页问题:数据量较大时,如果使用普通的分页查询,效率会很低,因此建议写法是先找到对应的id,然后根据id查询数据,例如:select * from table where id = (select id from table limit 90000 100),先找到id,在查询数据。索引创建原则:数据量较大,并且查询比较频繁的表,常作为查询条件,排序,分组的字段,尽量使用联合索引,要控制索引的数量。幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在。

2024-02-20 10:54:15 1119

原创 java面试题Redis篇

集群脑裂时由于主节点和从节点的哨兵处于不同的网络分区,导致哨兵没有能够心跳感知到主节点,所以推选新的从节点为主节点,这样就会存在两个主节点,就像大脑分裂一样,这样客户端还在老的主节点那里写入数据,新节点无法同步数据,当网络恢复后,哨兵会将老的主节点降为从节点,这样再从新的主节点同步数据,就会导致数据丢失。注意:在RDB过程中,主进程修改数据会产生一些问题,解决方案:fork采用的是copy-on-write技术,主进程只是读的操作,就会访问共享内存,当主进程执行写的操作时,会拷贝一份数据,执行写的操作。

2024-02-17 19:37:21 905

原创 java实现微信V3支付

第一次写文章,可能会有很多不熟悉的地方,后续也会逐步完善,当时找了很久,都没有找到一些比较方便容易的业务代码,所以想着自己写一下,如果有人可以参考是最好的,后面也会根据自己情况去完善支付别的代码,因为支付最重要的其实不是这些代码,这些只是完成了功能,后面还会写一些更加复杂的逻辑和代码。t=N7T8。

2023-10-22 12:02:32 176 2

空空如也

空空如也

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

TA关注的人

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