- 博客(180)
- 收藏
- 关注
原创 【快速的开发Al大模型应用的流程】
摘要:本文介绍了基于Spring Boot和阿里百炼平台的AI模型应用开发流程。内容包括环境准备(JDK17+和IDEA2022+安装)、API密钥获取、Maven依赖配置(Spring Boot 3.2.4和spring-ai-alibaba-starter),以及一个简单的聊天接口实现。通过ChatClient调用阿里大模型,实现了基础的问答功能,并提供了配置文件和调用示例。该方案可快速搭建基于阿里云大模型的智能对话应用。
2025-08-01 17:26:52
451
原创 【Spring-cloud-OpenFegin源码解析】
OpenFeign是一个声明式Web服务客户端,通过接口和注解简化远程调用。它具有声明式调用、支持Spring MVC注解、负载均衡、熔断降级、拦截器和全局配置等特性。使用时需添加依赖并启用@EnableFeignClients,通过@FeignClient定义接口即可实现远程服务调用。源码分析显示其核心是FeignClientsRegistrar,负责将Feign客户端注册到Spring容器。OpenFeign整合了Spring Cloud生态,提供了便捷的微服务间调用方案。
2025-07-29 14:08:20
646
原创 【多线程的常见使用场景】
前置条件:在考虑多线程导出,我们首先要考虑,我们的服务器的最大承载的数据量的大小,按照8核16G的服务器来说,我们新生代有5G的大小,因此eden区会有进4G的大小,按照每条数据生成的对象,占300字节,我们1G大概可以承载数据375万,因此,我们只需要考虑好分页,以及当前的线程数即可。为了保证单个文件太大,导致打不开的情况,我们按照数据量分文件,每个文件20万,最后再考虑将所有的文件合并压缩,返回给用户。2.考虑线程池的配置,核心线程池,最大线程池,阻塞队列,存活时间,线程工厂,拒绝策略等。
2025-07-16 13:49:08
374
原创 Redisson的分布式锁源码分析2
Redisson的读写锁RReadWriteLock是基于Redis实现的可重入分布式锁,支持跨线程和跨JVM的并发控制。通过RReadWriteLock获取读锁或写锁后,可以实现分布式环境下的资源访问控制。其核心实现包括:1) 使用Lua脚本尝试获取锁,返回null表示成功,否则返回剩余生存时间;2) 采用"阻塞+自旋"机制,订阅锁释放事件并循环尝试获取锁;3) 支持自动续约机制和指定锁过期时间两种模式。底层通过RedissonLock的lock()方法实现阻塞式获取锁,tryAcqu
2025-07-04 14:14:41
1081
原创 【Redisson锁系列总结1】
Redisson是一个功能强大的Redis Java客户端,提供多种分布式锁实现,包括可重入锁、公平锁、联锁、红锁等。相比原生Redis锁,RLock具备重入性、安全释放、自动续期等优势,支持主从一致性和集群部署。加锁流程采用Lua脚本实现原子操作,结合"阻塞+自旋"机制提高效率。源码分析显示,RLock通过线程ID绑定、锁释放订阅和循环重试等机制确保分布式锁的安全性和可靠性,为分布式系统提供完善的同步解决方案。
2025-07-02 16:23:28
737
原创 【数据库中的锁机制】
数据库锁机制主要分为按粒度分类(表锁、行锁、页锁)和按读写分类(共享锁、排他锁)。InnoDB引擎提供多种特有锁,如行锁、间隙锁等,用于不同操作场景。事务隔离级别影响锁行为,从READ UNCOMMITTED到SERIALIZABLE,锁严格性递增。案例展示了行锁和间隙锁的具体应用,以及不同索引类型对锁范围的影响,其中无索引查询会升级为表锁。合理使用锁机制可平衡数据一致性与并发性能。
2025-06-27 15:04:01
979
原创 【JVMGC垃圾回收场景总结】
文章摘要: CMS垃圾回收器通过"记忆集+写屏障"机制解决并发标记阶段跨代引用变更问题,其中写屏障记录引用变化,记忆集跟踪可能包含跨代引用的区域。JVM对象主要在堆上分配,采用TLAB机制解决多线程并发分配时的堆抢占问题。对象内存结构包含对象头、实例数据和对齐填充,内存对齐提升CPU访问效率。性能优化方面,栈上分配通过逃逸分析实现,可提升分配速度并减少GC压力。JVM参数设置需考虑对象创建速度、GC频率与系统吞吐量/响应时间的平衡,通过案例展示了8G内存环境下如何计算合理的内存分配方案。
2025-06-16 16:37:58
833
原创 【Netty源码分析总结】
Netty是一个高性能异步网络框架,适用于高并发场景。其核心流程包括:1) NioEventLoopGroup继承结构管理事件循环;2) EventLoop通过run()方法启动事件扫描,非IO线程首次执行任务时会启动线程;3) 避免空轮询的机制包括Selector重建、任务感知和wakeup优化。关键源码如execute()和startThread()方法通过状态检测确保线程安全启动,processSelectedKeys()处理IO事件。设计上通过延迟启动和线程绑定机制优化性能,同时防范NIO空轮询问题
2025-06-04 14:12:57
1257
1
原创 【Seata分布式事务源码分析】
Seata分布式事务框架的核心流程和自动装配机制如下:TM(事务管理器)负责发起全局事务,TC(事务协调器)管理全局事务状态并通知RM(资源管理器)提交/回滚。事务流程包括:1)TM注册全局事务;2)SQL拦截生成分支事务;3)根据业务结果提交或回滚事务。自动装配通过GlobalTransactionScanner初始化TM/RM客户端,扫描并增强带有@GlobalTransactional注解的业务类。Seata通过代理拦截SQL操作,记录前后镜像数据到undo_log表实现事务回滚,确保分布式事务的一致
2025-05-27 17:58:33
1122
原创 【常见的面试题总结】
MySQL日志机制:InnoDB通过redo log(物理日志)保证持久性,undo log(逻辑日志)实现事务回滚和MVCC,binlog(逻辑日志)用于主从复制。采用两阶段提交协议确保redo log和binlog的一致性。 数据刷盘:采用WAL机制,事务提交时先写redo log,后台线程异步刷脏页。MVCC通过隐藏字段和事务快照实现读写隔离,可重复读隔离级别使用next-key锁解决幻读。 消息队列:Kafka通过分区机制实现高并发消费,顺序消费需单线程处理单个分区。解决消息堆积需加快消费、扩容分区
2025-05-16 14:54:46
889
原创 【xxl-job调度器的源码分析】
调度器是任务管理的核心组件,主要负责任务的调度、执行和监控。调度中心(Admin)通过Web控制台和后台定时调度器实现任务管理、日志查看和失败重试等功能,并将任务通过网络调用推送给执行器。其核心功能包括定时调度任务(基于Cron表达式)、分片广播(多执行器并行处理)、超时控制与失败重试、以及子任务链路的触发。调度器的执行流程包括任务扫描、任务触发、执行器注册与心跳监控、失败重试机制,以及超时任务的处理。调度器通过定期扫描数据库和执行器状态,确保任务高效执行,并在任务失败或超时时进行重试或标记失败,保障系统的
2025-05-13 16:19:15
380
原创 【RocketMq延迟消息操作流程】
消息一开始不会立刻到达业务 Topic,而是先进入系统内部的 延迟Topic(名字叫 SCHEDULE_TOPIC_XXXX)。当定时任务(TimerTask)触发时,去扫描 延迟消息队列(也就是延迟Topic:SCHEDULE_TOPIC_XXXX),brokerController启动时,会执行start方法,然后也会Master的角色的broker启动一个定时任务。比如 Level 3 的消息,写到 SCHEDULE_TOPIC_XXXX 主题的第三个队列里。
2025-04-29 11:04:28
756
原创 【RocketMq-消费者消费逻辑分析】
进入这个类 defaultMQPushConsumerImpl#doRebalance方法。执行updateProcessQueueTableInRebalance()方法。开启拉消息服务,主要执行PullMessageService中的run方法。消息投递消费,分为两种,并发消费和顺序消费,这个方法是并发消费的点。执行RebalanceImpl#rebalanceByTopic()调用pullMessage()方法获取消息。pillMessage() 方法。//消费完成后,我们处理消费结果。
2025-04-27 17:26:49
1019
原创 【Nacos-安全与限流机制健全06 】
一、Nacos安全控制机制Nacos 提供了多种安全控制机制,以保证服务和配置的访问安全:身份验证 (Authentication)Nacos 支持用户身份验证来防止未授权的访问。其实现方式如下:Basic Authentication:通过 HTTP 请求头传递用户的认证信息(如 Authorization),Nacos 会校验用户名和密码。
2025-04-25 16:53:37
1170
原创 【B+树数据结构】
B+ 树是一种 自平衡的多叉搜索树,常用于 数据库索引(如 MySQL)和文件系统。它是 B-树(B-tree)的变种,具有更高的磁盘读写效率和范围查询性能。特点:1 所有数据存储在叶子节点,非叶子节点仅存储索引键,不存数据。2 叶子节点之间有指针相连,支持高效的区间查询。3 多路平衡树(非二叉树),每个节点最多有 M 个子节点(M 阶 B+ 树)。4 根节点到叶子节点的路径长度相同,保持树的平衡性。5 非叶子节点不会存储数据,只作为索引,提高内存利用率。
2025-04-03 11:21:10
1084
原创 【Spring-事务总结】
Spring 事务(Spring Transaction)用于保证数据一致性,避免并发问题,确保数据库操作符合 ACID(原子性、一致性、隔离性、持久性) 原则。原子性(Atomicity) 事务中的所有操作要么全部成功,要么全部回滚一致性(Consistency) 事务执行前后,数据库保持一致隔离性(Isolation) 并发事务相互独立,避免脏读、不可重复读、幻读持久性(Durability) 事务提交后,数据永久存储。
2025-03-27 10:44:01
1086
原创 【java代理模式】
代理模式(Proxy Pattern) 是 结构型设计模式 之一,为某个对象提供一个代理,以控制对该对象的访问。CGLIB(Code Generation Library) 是基于 ASM 生成字节码的动态代理技术,可代理没有接口的类。动态代理(JDK 动态代理):运行时动态生成代理对象,基于 InvocationHandler 和 Proxy。CGLIB 动态代理:使用 字节码技术 生成代理类(适用于没有接口的类)。代理类 运行时生成,无需手写代理类。代理类是被代理类的子类(继承方式)
2025-03-21 14:19:57
355
原创 【spring-cloud负载均衡策略实现】
负载均衡(Load Balancing)是一种将流量分配到多个服务器的技术,旨在提高系统的可用性、性能和可靠性。它的核心目标是确保所有服务器负载均匀,避免某个服务器过载而影响系统运行。创建我们自定义的ReactorLoadBalancer,自定义一个类,继承ReactorServiceInstanceLoadBalancer,自定义的实现choose方法//如何选择我们的实例@Override// 选择第一个实例(自定义逻辑)配置 ReactorLoadBalancer Bean。
2025-03-06 17:55:10
546
原创 【Nacos服务的发现和订阅总结】
服务发现是指 服务提供者(Provider)自动注册到 Nacos,服务消费者(Consumer)可以通过 Nacos 获取最新的服务实例列表,实现动态调用。Nacos 服务发现流程1.服务提供者注册启动时,将自己的信息(IP、端口、元数据等)注册到 Nacos。2.Nacos 维护服务实例,Nacos 维护一个服务实例列表,并定期进行健康检查。3.服务消费者发现,消费者从 Nacos 获取可用实例列表,调用合适的实例。
2025-03-05 15:32:50
1043
原创 【SpringBoot自动装配总结】
Spring Boot 的自动装配(Auto Configuration)是一种机制,能够自动配置 Spring 容器中的 Bean,避免繁琐的 XML 或 Java 配置代码,让开发者可以专注于业务逻辑,而不用关心底层的 Spring 配置。Spring Boot 通过 @EnableAutoConfiguration 注解,结合 spring.factories 机制,在应用启动时自动注册和配置所需的 Bean。
2025-02-24 15:31:45
1300
原创 【异步编程解析】
FutureTask 是 Java 并发包 (java.util.concurrent) 中的一个 可取消的异步计算任务,它实现了 Runnable 和 Future 接口,可以用于 异步任务执行 和 获取结果。CompletableFuture 是 Java 8 引入的 异步编程工具,提供了更强大的功能来处理异步任务、组合任务、并行计算,并支持非阻塞编程。supplyAsync() 适用于有返回值的异步任务。runAsync() 适用于没有返回值的异步任务。
2025-02-20 17:58:21
508
原创 【并发工具解析】
它维护了一组许可(permits),线程必须先获取许可才能继续执行,使用完后需要释放许可。CyclicBarrier 是 Java 并发工具类,用于让一组线程相互等待,直到所有线程都到达屏障后再继续执行。可选的 barrierAction(当所有线程到达时,自动执行一个任务)。所有线程都必须到达屏障(await()),否则它们都要等待。例如,并行计算任务,多个线程计算子任务,最后主线程汇总。让多个线程 同时开始执行某个任务,用于并发测试。例如,赛跑比赛,所有选手准备好后,一起起跑。
2025-02-17 16:37:36
905
原创 【数据结构-红黑树】
红黑树(Red-Black Tree)是一种自平衡的二叉查找树(Binary Search Tree, BST),它在普通二叉查找树的基础上增加了一些额外的约束条件,以确保树的平衡性,从而保证在最坏情况下插入、删除和查找操作的时间复杂度为 O(logn)。
2025-02-11 13:50:28
2427
原创 【Lock中的Condition分析】
在 Java 中,Lock 和 Condition 是并发编程中用于实现线程同步的重要工具,它们提供了比传统 synchronized 更灵活的线程控制能力。Lock 提供了显式的锁操作,而 Condition 则允许线程在某些条件不满足时挂起,并在条件满足时被唤醒。以下是一个使用 Lock 和 Condition 实现生产者-消费者模型的示例代码。这个示例展示了如何通过 Lock 和 Condition 来协调生产者和消费者的行为。
2025-01-23 13:53:28
1103
原创 【支付架构业务架构】
3.判断当前的商户配置的结算是D0还是D1,如果是D0,请求计费系统根据配置的商户费率,计算出手续费,一般的商户手续费千分之六来收取,手续费为0.03元,商户应该收到的金额为4.97元,如果为D1结算,先不计算手续费,第二天凌晨统一结算。7.如果为D1账户类型,我们在D+1的凌晨进行清结算,计算出手续费和商户的应得金额,通过日终翻账将商户的应得金额转入现金账户,手续费转入内部收益账户。2.业务侧收到的一笔请求,先进行基本的数据校验,保证业务校验逻辑通过后,将数据落入订单表中,业务校验失败,返回交易失败。
2025-01-14 14:02:46
988
原创 【SpringAop实现切片注解】
Spring AOP(Aspect-Oriented Programming)是 Spring 框架中的一项功能,旨在通过切面(Aspect)将横切关注点(Cross-Cutting Concerns)与业务逻辑解耦,从而使代码更加模块化和易维护。Spring AOP(Aspect-Oriented Programming)是 Spring 框架中的一项功能,旨在通过切面(Aspect)将横切关注点(Cross-Cutting Concerns)与业务逻辑解耦,从而使代码更加模块化和易维护。
2025-01-10 16:36:13
1150
原创 【Sharding-Jdbc总结】
Sharding-JDBC 是 Apache ShardingSphere 的一个模块,它是一个 轻量级的 Java 数据访问框架,通过增强 JDBC 驱动实现了分库分表、分布式事务、读写分离和数据加密等功能。它适用于任何基于 JDBC 的应用程序。
2025-01-03 14:12:42
1096
原创 【spring-cloud-gateway总结】
在微服务架构中,gateway网关是一个服务,它作为系统的唯一入口点,处理所有的客户端请求,然后将这些请求路由到适当的服务。提供了几个关键功能:1.请求路由:根据请求的URL路径和其他参数,将请求路由到正确的后端服务。2.负载均衡:在多个服务实例之间分配流量,以提高可用性和可扩展性。3.认证和授权:检查用户是否有权访问特定的服务。4.限流:控制访问后端服务的请求速率,以防止过载。5.监控:收集关于API使用情况的统计数据,用于分析和计费。
2024-12-22 20:37:25
597
原创 【SpringBoot-事件监听】
2. 创建监听器3. 发布事件注意事项1.确保事件发布者和监听器处于同一个Spring应用程序上下文中。2.事件发布是异步的,所以事件处理方法不应该有关于执行时间的假设。3.事件监听器方法可以声明抛出异常,这些异常会被Spring捕获并记录。
2024-12-11 21:24:15
433
原创 【Open-Fegin使用介绍】
OpenFeign 是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加容易。OpenFeign 旨在整合Ribbon和Nacos,为微服务架构中的服务间调用提供声明式的REST客户端。它使得编写服务客户端变得简单,就像编写本地接口一样。以下是OpenFeign的一些关键特性:1.声明式REST客户端:OpenFeign允许你通过定义一个接口并使用注解来声明服务调用,而不是编写客户端的实现代码。
2024-12-04 21:36:15
773
原创 【Spring Security框架解析】
Spring Security是一个功能强大且高度可定制的Java安全框架,用于保护基于Spring的应用程序。它提供了全面的安全服务,包括认证(Authentication)、授权(Authorization)、防止CSRF等。认证(Authentication)认证是确认用户身份的过程。Spring Security支持多种认证机制,如表单登录、HTTP基本认证、OAuth2、LDAP等。授权(Authorization)授权是确定用户是否有权限访问特定资源的过程。
2024-12-02 20:54:50
1108
原创 【Naocs-04源码分析-服务健康检查】
Nacos中临时实例基于心跳上报方式维持活性,基本的健康检查流程基本如下:Nacos客户端会维护一个定时任务,每隔5秒发送一次心跳请求,以确保自己处于活跃状态。Nacos服务端在15秒内如果没收到客户端的心跳请求,会将该实例设置为不健康,在30秒内没收到心跳,会将这个临时实例摘除。可以看出定时任务的执行间隔就是配置的metadata中的数据preserved.heart.beat.interval,与上面提到配置heart-beat-interval本质是一回事,默认是5秒。
2024-11-21 16:17:00
802
原创 【Lambda表达式与Stream API】
Lambda表达式(也称为λ表达式)是Java 8中引入的一种新特性,它允许你以简洁的语法编写匿名函数。Lambda表达式主要用于实现没有名称的内联函数,它们可以作为参数传递给方法,或者作为返回值。(参数列表)->{Lambda体}测试案例:新起一个线程打印hello world字段//非lambda表达式写法@Override).start();//lambda表达式写法}).start();函数式接口可以有一个或多个默认方法和静态方法,但只能有一个抽象方法。
2024-11-21 11:25:12
1130
原创 【Mysql主从复制总结】
MySQL的主从复制(Master-Slave Replication)是一种数据库复制技术,用于将一个数据库服务器(主服务器,Master)上的数据更改同步到一个或多个其他数据库服务器(从服务器,Slave)上。这种技术可以用于多种目的,包括数据备份、负载均衡、高可用性、读写分离等。以下是主从复制的一些关键点:1.数据备份和高可用性:主从复制可以用于创建数据的热备份,即在从服务器上实时复制主服务器的数据,以防止主服务器发生故障时数据丢失。
2024-11-18 16:27:26
940
原创 【mybaties-plus多数据源配置】
随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源(动态数据源)应运而生。本文将介绍两种 MyBatis-Plus 的多数据源扩展插件:开源生态的 dynamic-datasource和mybatis-mate。
2024-11-12 21:48:21
620
原创 【mybaties-plus配置自动路由月表】
InnerInterceptor 是 MyBatis Plus 提供的一个拦截器接口,它允许开发者在 MyBatis 的执行过程中插入自定义逻辑。这个接口是 MyBatis 插件机制的一部分,可以用来拦截和修改 SQL 语句、处理事务、日志记录等。接口处理:在 StatementHandler 准备 SQL 语句之前调用。可以在这里修改 SQL 语句或者执行一些前置处理。在 StatementHandler 准备 SQL 语句之后调用。
2024-11-10 20:51:52
931
原创 【xxl-job总结】
XXL-JOB是一个轻量级分布式任务调度平台,它的核心设计目标是开发迅速、学习简单、轻量级、易扩展。1.简单易用:XXL-JOB提供了友好的Web界面,使得用户可以通过简单的操作完成任务的创建、编辑、删除和查询。2.动态管理:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效。3.调度中心高可用(HA):调度采用中心式设计,支持集群部署,可保证调度中心的高可用性。4.执行器高可用(HA):任务分布式执行,执行器支持集群部署,可保证任务执行的高可用性。
2024-11-05 21:44:09
1087
原创 【Nacos-03集群内数据同步讲解】
当服务启动时,如果是Follower节点接收到请求,则会自动将请求转发给Leader节点,Leader节点完成实际的注册登记工作后,会向其他Follower节点发起“同步注册日志”的指令,以确保所有节点的数据一致性,Distro算法是集群中的一台机器收到接收到写请求并处理后,它会异步地将数据变更复制到其他节点,这样可以减少对写操作的延迟影响 ,来保证最终一致性,因此Nacos的临时节点保证AP,持久节点保证CP。这意味着在不同的地理位置,Nacos节点之间需要同步数据,以确保服务的连续性和数据的一致性。
2024-10-27 21:14:19
1557
1
原创 【延时队列的实现方式】
DelayQueue是一个BlockingQueue(无界阻塞)队列,它本质就是封装了一个PriorityQueue(优先队列),PriorityQueue内部使用完全二叉堆(不知道的自行了解哈)来实现队列元素排序,我们在向DelayQueue队列中添加元素时,会给元素一个Delay(延迟时间)作为排序条件,队列中最小的元素会优先放在队首。Redis的数据结构Zset,同样可以实现延迟队列的效果,主要利用它的score属性,redis通过score来为集合中的成员进行从小到大的排序。
2024-09-25 21:24:31
1176
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人