- 博客(80)
- 收藏
- 关注
原创 AI Agent
Al Agent(人工智能代理)是指一种能够自主感知环境状态、进行行独立决策并执行相应动作以完成特定目标的智能体。相较于传统意义上仅能执行预设规则或单一任务的人工智能系统,AlAgent的核心特征在于其具备通过自主思考、规划与工具调用来实现复杂目标天的能力。例如,当用户向AlAgent发出"订购外卖"的指令时,该代理可以主动调用外卖平台的应用程序接口(API)完成菜品选择,并进生一步调用支付系统执行结算操作,而无需人类逐步指导其每每一个操作细节。
2025-11-29 21:16:26
1006
原创 通义千问大模型调优
大模型调优 指的是通过一系列技术和方法,调整或影响一个大语言模型的行为和输出,使其更契合特定任务、领域或风格需求的过程。简单来说,就是“教”一个通用的、知识渊博的模型,让它变得更“专业”,更能理解并满足你的独特要求。您给出的定义非常精准:“调优是指可以根据自己的需求获取更精准或者更有创建性的一些答案”。我们可以从两个维度来理解这个定义:更精准:让模型在特定领域(如医疗、法律、金融、你公司的内部知识)的回答更准确、更可靠,减少“幻觉”(即胡编乱造)。更有创造性。
2025-10-06 13:43:24
1983
1
原创 Spring-AI 接入(本地大模型 deepseek + 阿里云百炼 + 硅基流动)
Spring-AI 接入(本地大模型 deepseek + 阿里云百炼 + 硅基流动)
2025-10-04 10:04:01
2179
原创 单点登录(SSO)接入 - 以企微单点为例
单点登录是一种身份认证机制,允许用户在多个相互信任的应用系统中,只需登录一次,即可访问所有授权的系统,无需重复输入用户名和密码。它解决了传统登录方式中用户需要为每个应用单独记忆凭证的问题,提升了用户体验和安全性。其实总体而言,单点登录就那几步,获取 code -> 获取用户信息 -> 映射到自己系统用户 -> 将 token 写入浏览器 -> 重定向至指定地址。不过不同的认证系统,单点接入的方式各有一些差异,比如企业微信获取用户,要先通过 code 换取票据,再用票据才能换取用户敏感信息。
2025-09-19 00:57:47
2506
原创 Java进阶之-函数式编程
通过学习 Java 的函数式编程思想,可以大大简化、高效、优雅的去处理我们的代码。熟练的掌握这些用法之后,你的代码档次,b格会提升一个台阶!ps:以下是我整理的java面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!# 《Java知识宝典》
2025-01-22 17:11:09
1025
1
原创 Java进阶之-记录类(record)及其密封类(sealed)作用及使用场景
Record类是一种被称为“数据载体类”(Data Carrier Class)的特殊类,主要用于简化不可变数据的定义和使用。它的设计目的是减少样板代码,使得开发者能够更容易地创建不可变的数据对象。RecordRecordequals()hashCode()toString()RecordRecordRecord以下Person类是通常的写法,它的属性是final的,并且提供了构造器,get,set,equals,hashcode,toString方法。
2025-01-22 09:46:50
2036
原创 使用Redis Stream偶发空指针问题
使用redission封装的redis stream时遇到这个问题,只需要升级redission到3.30.0之后的版本即可。使用redission客户端封装的stream消息队列,在进行消息轮询时,偶发出现空指针问题。可以看到redission官网在3.30.0版本解决了这个问题。
2024-12-05 11:11:11
520
2
原创 使用 Redis Stream 结合 Redission DelayedQueue 实现延迟消息队列(已上线生产)
*** redis stream 消息监听器基类*/@Data@Slf4j@Component@Overridelog.info("--- redis stream 接收到消息 --- message :{}", message);try {// 消息消费// 消息确认/*** 具体的消费逻辑* @param streamName 主题* @param message 消息体*//*** 消息确认机制。
2024-12-02 08:45:00
2134
11
原创 程序员必备 - Git代码提交规范
1)每次提交只能包含同一类别的改动,不要把不同类型的改动混合在同一次提交中。2)每次提交不能超过3个问题,确保每个提交的改动清晰明确。3)提交信息不符合规范时,可以使用修改,或者使用回退提交。
2024-09-20 20:49:49
1437
原创 优化IDEA卡顿,提示慢的问题,亲测有效!
经过以上修改,IDEA的速率会大幅起飞,作为程序员,特别是Java程序员,个人推荐内存起码要32G以上,如有其它问题欢迎留言!
2024-09-14 10:47:22
11662
10
原创 @Async详解,为什么生产环境不推荐直接使用@Async?
Async注解用于声明一个方法是异步的。当在方法上加上这个注解时,Spring 将会在一个新的线程中执行该方法,而不会阻塞原始线程。这对于需要进行一些异步操作的场景非常有用,比如在后台执行一些耗时的任务而不影响前台响应。@Service@Async// 异步执行的代码在上面的例子中,方法使用@Async注解标记,表示该方法将在一个独立的线程中执行。
2024-05-26 07:37:18
2629
2
原创 分布式事务之 CAP 理论和 Base 理论
CAP 是 Consistency、Availability、Partition tolerance 三个单词的缩写,分别表示一致性、可用性、分区容错性。C(一致性一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意节点读取到的数据都是最新的状态。可用性是指任何事务操作都可以得到响应结果,且不会出现响应超时或响应错误。通常分布式系统的各结点部署在不同的子网,这就是网络分区,不可避免的会出现由于网络问题而导致结点之间通信失败,此时仍可对外提供服务,这叫分区容错性。
2024-05-19 05:37:23
865
1
原创 Java实战之自定义注解(以excel导出为案例)
Excel用于设置excel的标题和默认值@PrintExcelLog用于标识是否打印excel导出日志/*** 用于设置excel的标题和默认值*/@Component/*** 用于标识是否打印excel导出日志*/其中@Retention是用来定义生命周期,我们这里是运行时;: 可以应用于类、接口、枚举(enum)。: 可以应用于字段(包括枚举常量)。: 可以应用于方法。: 可以应用于方法的参数。: 可以应用于构造方法。: 可以应用于局部变量。: 可以应用于注解类型。
2024-05-18 09:45:00
2005
原创 动态链接是什么?在JVM中,类、对象、方法是如何交互的?
常量池是JVM中存储字面量(literal)和符号引用(symbolic reference)的地方。在类加载的过程中,类文件的常量池中的符号引用会被解析成直接引用,这个过程就是动态链接。
2024-04-18 00:40:15
612
原创 RocketMQ之Topic和Tag最佳实践
RocketMQ的主题用于对消息进行分类和组织。通过为不同类型的消息分配不同的主题,可以使消息更具可读性和可管理性。每个主题都有自己的消息队列,用于存储该主题下的消息。每个队列都可以并行地接收和处理消息,从而实现高吞吐量和负载均衡。生产者在发送消息时指定目标主题,消费者则通过订阅感兴趣的主题来接收对应的消息。RocketMQ根据主题将消息路由到相应的队列上,然后再由消费者消费。
2024-04-09 08:15:00
2215
原创 Sql优化篇-干货总结大全
在Innodb中,表存储主要依赖两个文件,分别是,frm文件和.ibd文件。.frm文件用于存储表结构定义信息,而.ibd文件则用于存储表数据。分区之后,表面看其实还是一张表,但是它数据存储的位置就分开来了。表的分区意味着将表的数据存储在不同的.ibd文件中,而不是像普通的表一样将所有数据存储在一个.ibd和一个.frm文件中。每个分区对应一个.ibd和一个.frm文件,这些文件可以分布在不同的磁盘上,从而实现数据的分散存储,提高了I/O并发性能。
2024-04-08 03:47:22
4773
原创 Mysql【索引覆盖、索引下推、索引合并、索引跳跃】介绍
上图来自MySQL官方文档。MySQL服务层:包括NoSQL和SQL接口、查询解析器、优化器、缓存和Buffer等组件。存储引擎层:各种插件式的表格存储引擎,实现事务、索引等各种存储引擎相关的特性。文件系统层: 读写物理文件。MySQL服务层负责SQL语法解析、触发器、视图、内置函数、binlog、生成执行计划等,并调用存储引擎层去执行数据的存储和检索。我们后续说到的“索引下推”,它的“下”其实就是指将部分上层(服务层)负责的事情,交给了下层(存储引擎)去处理。
2024-04-07 06:18:23
3854
1
原创 缓存最佳实践
缓存策略写入时读取时适用场景旁路先更新DB,再删cachemiss后查询DB回写cache高一致性穿透hit则更新DB和cache,miss仅更新DBmiss后查询DB回写cache冷热分区异步只更新cache,异步更新DBmiss后查询DB回写cache高频写入兜底直接写DB先读DB,hit则更新cache,miss则读cache高可用只读直接写DB只读cache,并通过其它更新方式异步更新缓存最终一致性回源直接写DB查询DB回写cache缓存降级。
2024-04-02 06:20:23
2749
原创 红黑树是什么,为什么HashMap使用红黑树代替数组+链表?
红黑树是一种自平衡的二叉搜索树,它是一种在插入和删除操作时能够自我调整以保持平衡的数据结构。红黑树之所以称为红黑树,是因为每个节点都具有颜色属性,可以是红色或黑色,这些颜色属性必须满足一定的约束条件,以确保树的平衡性。红黑树必须满足四个条件!根节点是黑色的。每个叶子节点(NIL节点,即空节点)是黑色的。如果一个节点是红色的,则它的两个子节点都是黑色的(不能有连续的红色节点)。从任一节点到其每个叶子的所有路径都包含相同数量的黑色节点(黑色节点的数量被称为该节点的“黑色高度”)。
2024-04-01 02:53:43
2330
原创 Spring设计模式-实战篇之责任链模式
解耦合:你无需关注你的下一个链条是如何实现的,只需要把自己的模块实现好即可,并且链条之间的顺序可以随意切换,在构建责任链时指定Next即可,无需去各个实现类中进行修改代码;当需要新增加或者修改支付回调处理的步骤时,可以通过添加新的处理器来实现,而无需修改已有的代码。每一个步骤的实现代码都在独立的类中实现,这样可以更容易地理解和调试代码,不像很多业务代码一样,一大堆业务处理逻辑放在一个方法里面调来调去,很容易搞迷糊。
2024-03-25 03:23:40
2189
原创 Spring设计模式-实战篇之模板方法模式
模板方法模式在项目中的应用是通过定义一个抽象类作为模板,将固定的流程封装在模板方法中,而其中的某些步骤可以由具体子类来实现。这样可以减少重复的代码,并提供一个统一的执行流程,使得开发者可以更方便地编写代码。一般来说在设计某些框架时会使用,因为整体流程都一致,只有某些步骤需要重写方法,来完成具体细节的实现。如JDBCTemplate,RestTemplate,RedisTemplate,MogoTemplate都是这么干的。ps:以下是我整理的java面试资料,感兴趣的可以看看。
2024-03-24 05:39:38
1338
原创 Spring设计模式-实战篇之策略模式 + 工厂模式
对于大量的if-else,特别是大量的嵌套的if-else,可以用策略模式+工厂模式优化,少量的if-else就没必要了;使用设计模式,将会增加代码量,但是解耦性特别强,代码更加清晰易懂,而且具有更强的扩展性和维护性。策略模式将不同的责任分配到不同的类中,实现单一职责原则,提高代码的内聚性。ps:以下是我整理的java面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!# 《Java面试宝典》
2024-03-23 04:37:37
1451
原创 Spring设计模式-实战篇之单例模式
懒汉式是线程不安全的,可以通过synchonized进行加锁,保证它的一个线程安全性;如果你想提高它的效率,可以使用Double-Check这种机制,让它存在实例以后无需再去竞争锁,在外层 if 即可直接判断;当你使用Double-Check这种机制的时候,请注意加上volatile关键字,防止优化器指令重排序带来的影响。ps:以下是我整理的java面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!# 《Java面试宝典》
2024-03-22 05:31:19
877
1
原创 使用java实现三个线程循环打印A,B,C,并写出三种方式
ps:以下是我整理的java面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!
2024-03-20 03:08:35
975
原创 innodb三大特性
插入缓冲(Insert Buffer):InnoDB 存储引擎在插入新记录时,会将数据先写入到内存的插入缓冲区中,然后再按一定的规则将数据批量插入到磁盘的数据页中。这个过程可以提高插入操作的性能,减少随机的磁盘写入,而是将随机写入转换为顺序写入,从而提高写入性能。 二次写(Double Write):InnoDB 存储引擎在进行数据写入磁盘时,会先将数据写入到 doublewrite buffer 中,而后再将数据写入到真正的位置。这样做的好处是,在发生异常情况下(例如断电),可以通过 doublewri
2024-03-19 02:23:09
284
原创 图解I/O中的零拷贝技术
零拷贝是一种计算机系统中的 I/O 优化技术,它的核心思想是在数据传输过程中尽可能地减少或完全避免 CPU 将数据从一个存储区域复制到另一个存储区域的操作,从而减少了上下文切换和 CPU 拷贝时间,提高了系统的性能和效率。在 Java 领域,诸如等框架就使用了零拷贝技术来提高性能和效率,尤其在处理大规模数据传输时表现突出。直接内存访问(技术。简单理解就是,
2024-03-16 05:05:40
1374
原创 BIO、NIO、AIO分别是什么
BIO(Blocking I/O):传统的阻塞式I/O模型,当线程执行输入输出操作时会被阻塞,直到数据准备就绪。每个连接需要独立的线程进行处理,如果连接数量较大,会导致线程资源消耗过多。 NIO(Non-blocking I/O):非阻塞式I/O模型,引入了Channel和Buffer的概念,使得一个线程可以处理多个连接。通过Selector来实现多路复用,一个线程可以监听多个通道上的事件,从而减少线程开销。但需要线程主动去查询是否有IO事件。 AIO(Asynchronous I/O):异步I/O模型
2024-03-16 01:55:45
272
原创 Nginx常用命令
nginx -s reload -squit 重新加载 nginx 配置文件并优雅地停止旧的工作进程。nginx -s reload -squit 重新加载 nginx 配置文件并优雅地停止旧的工作进程。nginx -s stop -wait 停止 nginx 服务并等待旧的工作进程退出。nginx -s stop -wait 停止 nginx 服务并等待旧的工作进程退出。nginx -s reload 重新加载 nginx 配置文件。nginx -s stop 停止 nginx 服务。
2024-03-13 15:31:31
480
原创 Nginx反向代理
Nginx的反向代理是指Nginx作为代理服务器,将客户端请求转发给后端的服务器。反向代理隐藏了后端服务器的真实IP地址,提高了服务器的安全性,并且可以负载均衡地分发请求到多个后端服务器上。
2024-03-13 15:28:45
1104
原创 架构师之路:中台和微服务区别
中台架构是一种将业务逻辑和技术能力模块化的架构思想,通过构建统一的中间层服务,将业务能力和技术能力解耦,使得各业务领域的功能和服务能够共享和复用。业务中台:将业务逻辑进行分层,构建通用的业务能力模块,以满足不同业务场景的需求。例如,用户管理、订单管理、支付管理等。技术中台:将技术能力进行分层,构建通用的技术服务模块,以提供统一的技术支持和基础设施。例如,身份认证、权限控制、日志监控等。
2024-03-12 03:29:21
1047
原创 分布式事务Seata中的XA和AT区别,通俗易懂!
首先a进行操作,num=num-10,在a提交本地事务之前,会拿到全局锁,这个全局锁就是当前num的值,也就是90,a拿到全局锁之后提交本地事务,然后b开始执行本地事务num=num-10,b在提交本地事务之前,会去拿全局锁,因为此时全局锁是90,假如b拿到的不是90,他就会一直cas重试,直至回滚。首先把a, b的事务状态设置为prepare,并且获取全局锁,在a完成本地事务num=100-10之后,b再执行本地事务num=90-10,直到两个事务都完成之后,才释放全局锁,a,b一起提交给事务协调器。
2024-03-12 03:14:47
2430
原创 SOA、分布式、微服务之间有什么关系和区别?
分布式架构是一种基础架构,可以用于实现 SOA 或微服务架构,它强调系统的分布和通信。 SOA 是一种面向服务的架构风格,可以看作是分布式架构的一种实现方式,它强调服务的组织和重用。 微服务架构是 SOA 的一种演化形式,它将服务设计为小型、独立的服务单元,强调服务的自治性和独立部署。
2024-03-11 20:21:51
188
原创 Spring Cloud核心组件及作用
(双层Map,第一层Key是服务名,第二层Key是实例名,Value是服务地址加端口,同时对服务维持心跳,剔除不可用的服务,eureka集群各节点相互注册,每个实例中都有一样的服务清单。:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求,简化服务间的调用,在Ribbon的基础上进行进一步的封装。:从一个服务的多台服务机器中选择一台(被调用的服务地址有多个),Ribbon也是通过发起http请求来进行调用,只不过通过调用服务名的地址来实现的。
2024-03-11 20:20:28
385
原创 RocketMQ死信队列
死信队列(Dead-Letter Queue)是存储死信消息(Dead-Letter Message)的特殊队列,这些消息在正常情况下无法被消费者正常消费。这些在正常情况下无法被消费者消费的消息被称为死信消息(Dead-Letter Message),并且会被存储在特殊的队列中,这个队列被称为死信队列(Dead-Letter Queue,简称DLQ)。需要注意的是,死信消息的有效期与正常消息相同,默认为3天,3天后会被自动删除。因此,需要在死信消息产生后的3天内及时处理这些消息,以避免消息丢失。
2024-03-11 02:29:36
1430
原创 Spring Cglib动态代理和JDK动态代理区别
如果目标类实现了接口,将会使用JDK动态代理,否则会使用Cglib动态代理; JDK代理使用自己的字节码生成工具生成代理对象,而Cglib会使用ASM字节码生成工具去生成; JDK动态代理是通过反射的方式去实现代理对象的所有方法, 通过InvocationHandler 接口,重写invoke()方法来实现代理逻辑,其中会调用Proxy.newProxyInstance()来创建目标对象,而Cglib是通过继承的方式; JDK只会生成一个代理对象,而Cglib会生成多个,采用空间换取时间的方式,所以生
2024-03-10 23:24:42
230
原创 RocketMQ事务消息
事务消息是一种在发送方和接收方之间保证消息传递的一致性和可靠性的消息传递机制。在消息发送过程中,生产者可以将消息发送到消息队列,但不会立即被消费者接收和处理。相反,消息会先进入一种“准备”状态,然后等待生产者确认消息的状态,最后再决定是否将消息提交给消费者。
2024-03-10 18:49:38
664
原创 RocketMQ消息堆积问题
综上所述,解决RocketMQ中的消息堆积问题需要从多个方面入手,包括优化生产者发送速度、优化消费者消费速度、扩容Broker、调整消息存储策略以及启用消息重试和死信队列等。同时,也需要对RocketMQ集群进行持续的监控和优化,确保系统的稳定性和高效性。当然也有可能是因为Broker宕机,这也是属于broker队列太慢了。消息堆积无非就是从三个方面考虑,第一生产者太快了,第二broker太慢了,第三消费者太慢了。
2024-03-10 18:44:18
954
原创 SpringMVC拦截器和过滤器执行顺序及区别
拦截器和过滤器执行顺序?拦截器和过滤器区别?拦截次数不同: 过滤器:一次请求只能被一个过滤器拦截一次,它们按照在web.xml中的声明顺序依次执行。 拦截器:拦截器可以拦截多次请求,并且可以在请求前、请求时、请求后等多个时机进行处理。 实现原理不同: 过滤器:过滤器是基于回调函数的,它们实现了javax.servlet.Filter接口,在Servlet生命周期中的不同阶段会调用不同的方法。 拦截器:拦截器则是基于Java的反射机制实现的,它们依赖于动态代理,可以在目标方
2024-03-08 01:45:13
818
原创 Spring AOP相关注解及执行顺序
用于标识一个类是切面的注解。通常与其他通知注解一起使用,定义切面类。: 注解来定义切点,它用于描述哪些连接点将会被通知所通知。
2024-03-07 19:01:00
896
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅