自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式相关学习

实现了请求和处理的解耦,请求者不需要关心处理的细节,处理者也不需要关心请求的全貌。工厂模式:定义一个创建对象的接口(生成子工厂的接口),让子类决定实例化哪个类(子工厂决定生产哪个产品),相比简单工厂,工厂模式使得。抽象工厂模式:打破了工厂和产品一对一的关系,扩展了具体工厂的功能,使其可以生产多个产品大类。产品A和产品B拥有共同的父类——产品,工厂就是负责创建产品A、产品B,根据传入参数的不同,可以创建不同产品的实例。(简单说就是不再是一个大工厂生产所有产品,而是由大工厂底下的小工厂决定自己所生产的产品)。

2025-04-11 21:33:08 843

原创 面试问题准备合集(不断更新中)

之前用栈做记录的最主要原因是我们不知道何时一个结点的左子树全部走完(递归也是隐式维护了一个栈),而Morris算法先去访问。自己开的学习中、面试中遇到的题目合集,题解是我自己写的,可能会有不当的地方,该合集打算长期更新,欢迎交流与指正。,让其右孩子指向根结点,这样当我们从根结点开始,第二次遍历到根结点的时候,就知道此时根结点的左子树已经访问完毕。//本质上利用了b ^ b = 0以及a ^ 0 = a,此式过后b = a。比较常规的题,但很久不做有点宕机,想到递归和迭代的思路,但不知道怎么写。

2025-03-30 21:50:06 325

原创 3.25消息队列项目实战

2)第三方封装好的客户端引入,如Spring Boot Starter AMQP。以上是消息队列的一个比较基础的引入方式 ,具体项目中还需做更多的修改。注意具体版本要与Spring Boot的版本一致,不然无法运行成功。消息队列多用于分布式场景下的应用解耦、负载均衡以及消息的可靠性保证。缺点:太过灵活,不易上手,自己还需要一些额外的维护与处理。线程池多用于并发场景,减少线程开销。优点:简单易上手,方便管理连接。优点:兼容性好,较为灵活。2)在yml中引入配置。缺点:被框架所限制。5)创建交换机和队列。

2025-03-25 22:08:19 291

原创 3.23消息队列相关学习

模拟延迟队列:本质就是开两个队列,一个主业务队列,一个延迟队列(死信队列),消息在主业务队列过期后,会自动转到延迟队列;示例场景:商品下单(生产者生产)后十五分钟(有效期)内,如果库存系统(消费者)崩溃导致一直没有处理,那么该订单就已经失效,即使后续库存系统修复也无需扣减库存。作用:为了保证消息的可靠性(如每条消息都被成功消费)而提供的容错机制,主要是解决如何处理失败消息的问题。死信:过期消息、拒收消息、队列满后无法接收的消息、处理失败的消息等的统称。死信队列:专门处理死信的队列(本质是普通队列)。

2025-03-23 22:38:37 601

原创 3.21消息队列交换机相关学习

指定具体的路由键,特殊情况如消息附带的路由键在交换机中找不到对应的队列,此时交换机会丢弃该消息(因为不知道该存放于哪个队列)。#:匹配0个或多个单词(>=0),如lazy.#,则lazy.red、lazy.black.yellow都可以匹配。类似topic和direct交换机,可以根据消息头(headers)中的内容来指定发送到哪个队列。交换机在其中扮演类似路由器的角色,负责把消息转发到不同的队列上,好让不同的消费者消费。注意事项:这里的“.”是单词的分隔符,其与MYSQL的like的%不同。

2025-03-22 22:05:33 271

原创 3.18RabbitMQ实战入门2

接收消息后会自动执行ack命令,此种方法在真实的业务场景中并不适用,因为即便接收到了信息,如果处理任务没有完成,是不能直接反馈为ack的,因而在最后的basicConsume参数配置中,应设置autoAck为false,同时在消息处理部分也应进行相应的配置操作,让RabbitMQ明确何时给予何种反馈(basicAck、basicNack、basicReject)。,而其可能导致消息丢失或队列中的消息状态混乱,故最后我只在任务做完后进行Ack操作。值得一提,basicAck(basicNack)的。

2025-03-19 19:27:49 360

原创 3.16RabbitMQ入门实战

在很多AMQP详解中其实是Binding,表示交换机和队列之间的虚拟连接,Binding存在一个Binding Key,其会与生产者和交换机间省略的Routing Key进行比对,当两者一致时交换机才会将消息转发到对应的队列中,整个过程采用的是完全匹配、单播的模式。Channel(频道):消息队列的client(类似redisClient,jdbcClient),提供了和消息队列server建立通信的传输方法,利用Channel操作RabbitMQ。路由(Routes):转发的通道,虚拟连接。

2025-03-18 16:15:05 534

原创 3.12消息队列相关学习

如QQ这样一个非常大的核心系统,其内部做出了某些调整,那么绑定QQ的其它系统,如王者荣耀、和平精英、英雄联盟等系统需要获取到QQ调整的通知。如果没有消息队列进行发布订阅,那就需要核心系统一个个调用子系统,耗时长且存在调用失败的情况,同时可能存在部分项目收不到通知的情况(核心系统感知不到的系统)。(2)削峰填谷:生产者(调用方)将消息(用户的请求)放入消息队列中,消费者(实际处理的应用)可以按照需求决定何时去取消息进行处理。(或存储,用来处理传输失败的情况),而不考虑传输应用的编程语言、系统、框架等。

2025-03-12 20:37:35 416

原创 3.11异步生成图表实战

定长的核心线程数或任务队列可能导致服务处理方资源的不足,严重导致服务器的宕机,因此动态调整参数,使得调用方请求频率一直可控就很有必要,这里引入反向压力的概念。(1)单机→多机,目前的异步操作基于本地的线程池实现,不符合分布式系统的需求,当有多台服务器时就会超出AI服务的限制。(3)采用微服务的思想,将长耗时的任务单独抽成一个程序(应用解耦),利用中间件连接两个系统,如核心系统和智能业务系统。的逻辑,在用户上传完数据之后立刻保存,将任务提交到线程池,待异步生成结果之后更新数据库,以实现解放用户时间的目标。

2025-03-12 16:25:39 270

原创 3.9异步化的相关学习

在Spring中,可以使用ThreadPoolTaskExecutor配合@Async来实现,然而Spring对线程池还是做了一定的封装,所以建议使用更通用的Java版本,在JUC并发编程包中的ThreadPoolExecutor来自定义线程池。引入线程池,线程池比较复杂,这里简单理解为用池化思想去管理线程资源,主要目的是减少线程创建和销毁的开销,提高系统的响应速度和吞吐量,同时限制系统中并发线程的数量,避免过多的线程导致系统资源耗尽。,可以让每个线程都能利用好CPU每个核,减少线程切换的次数。

2025-03-09 21:10:10 413

Spring Boot + MyBatis + AIGC(接入deepseek)+ Vue2 的企业通用erp系统

在校期间做的课设,整体框架较为简单,主要就是个后台的企业管理系统,后期引入了将excel文件数据转csv数据喂给AI,最终制表并分析的功能(同步),该功能更完善的版本(如异步调用、限流等)在后续的项目中有实现。

2025-03-23

空空如也

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

TA关注的人

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