- 博客(91)
- 收藏
- 关注
原创 为什么使用SpringAI时通常用Builder来创建对象?详解 【Builder模式】和【直接 new】的区别
摘要:文章对比了直接new和Builder模式创建对象的差异。直接new适用于简单对象,但存在参数混淆、扩展性差等问题;Builder模式通过链式调用提高可读性,支持可选参数,并能保证对象不可变性,适用于复杂对象的构建。Builder模式封装了构建逻辑,扩展性更好,但会增加代码量。应根据对象复杂度选择创建方式,简单对象用new,复杂对象用Builder模式。
2025-11-29 20:28:50
539
6
原创 SpringAI:详解 基于【Prompt】和【Message】构建的ChatMemoryAdvisor的区别
摘要:MessageChatMemoryAdvisor与PromptChatMemoryAdvisor是两种对话记忆管理组件,均支持记忆维护和会话隔离。前者基于结构化消息对象列表,保留完整元数据,适合复杂场景;后者采用文本拼接方式,内存占用低,适合简单应用。核心差异体现在实现原理(对象列表vs文本Prompt)、性能(处理速度/内存消耗)和功能(精细控制vs基础功能)。开发者可根据业务复杂度选择,前者适用于需角色区分和元数据管理的场景,后者适合快速原型开发。
2025-11-28 21:59:38
535
8
原创 如何部署PostgreSQL并远程连接?Linux部署和云服务器部署两种方法教程
本文详细介绍了PostgreSQL在Linux(CentOS7)和云服务器(阿里云)两种环境下的部署与远程连接配置方法。针对Linux本地部署,重点讲解了依赖安装、官方仓库配置、数据库初始化、服务启动等步骤,特别强调了远程连接必须的密码设置和配置文件修改(pg_hba.conf和postgresql.conf)。对于云服务器部署,推荐使用阿里云Serverless版,介绍了账号创建、数据库新建、插件安装及网络配置等关键操作。两种部署方式最后都需通过数据库客户端工具进行远程连接验证。
2025-11-27 09:24:44
777
14
原创 一张思维导图理清【Redis】
Redis核心机制解析:采用单线程处理核心命令,辅以多线程优化I/O和后台任务。底层数据结构针对不同场景优化,包括SDS字符串、压缩列表、跳表等,支持String、List、Hash、Set、ZSet等丰富类型。提供RDB快照和AOF日志两种持久化方式,支持主从同步、哨兵和集群三种高可用方案。典型应用场景包括缓存(需防范击穿/雪崩/穿透)、排行榜、消息队列等,通过合理选择数据结构和淘汰策略可优化性能。注意大key/热key问题,并通过读写分离、数据分片等方案保障系统稳定性。
2025-11-24 20:50:08
1526
16
原创 一张思维导图理清【操作系统】
摘要: 本文系统梳理操作系统核心概念,重点对比进程、线程、协程的特性与切换机制:进程隔离性强但切换开销大,线程共享内存,协程最轻量。详述进程/线程通信方式(管道、共享内存、锁等)及调度策略,分析死锁预防与银行家算法。内存管理涵盖虚拟内存、页表、malloc机制及页面置换算法(如LRU)。网络IO部分解析五种模型,对比select/poll/epoll差异,阐述零拷贝(mmap/sendfile)原理及适用场景,揭示Redis/Nginx等高性能组件依赖的Reactor模式与内核优化技术。全文贯穿用户态与内核
2025-11-20 21:20:50
773
13
原创 一张思维导图理清【JVM】
【摘要】本文系统介绍了JVM内存模型与垃圾回收机制。内存模型包括程序计数器、虚拟机栈、本地方法栈、堆和方法区等核心组件,详细解析了各区域的功能特性及存储内容。类加载机制涵盖双亲委派模型、加载过程五个阶段及对象创建流程。垃圾回收部分阐述了判断算法(引用计数/可达性分析)、回收算法(标记清除/整理/复制)及主流回收器(CMS/G1)的特点比较,分析了不同GC类型(Minor/Major/Full)的触发条件。全文从内存管理到对象生命周期,完整呈现了JVM的核心运行机制,为性能调优和内存问题排查提供了理论基础。
2025-11-20 21:13:01
976
2
原创 一张思维导图理清【JUC】
这张 JUC 思维导图从多线程、并发安全、线程池、场景四模块展开。多线程关注特性、数据一致性方案、线程状态与通信等;并发安全涉及 JUC 包类(线程池、并发集合、同步工具、原子类)、锁(synchronized、ReentrantLock)及 ThreadLocal;线程池讲解原理、参数、种类、关闭方式;场景包含多线程控制顺序和单例模式,系统梳理了 Java 并发编程的核心知识。
2025-11-19 18:06:22
684
3
原创 一张思维导图理清 【MySQL】
摘要:本文系统梳理了SQL与NoSQL数据库的核心差异,重点解析了MySQL的关键技术。从数据存储结构(三大范式)到查询操作(连表查询、索引应用),详细阐述了InnoDB等存储引擎特性及B+树索引实现原理。深入探讨了事务ACID特性、MVCC机制和并发控制,分析了各类锁的应用场景。系统介绍了binlog、redolog、undolog等日志机制及其在数据恢复中的作用。通过对比不同技术方案(如B+树vs跳表),揭示了数据库设计的核心考量,为开发者提供了全面的MySQL知识框架和实践指南。
2025-11-19 18:02:53
967
原创 一张思维导图理清【Java集合】
本文总结了Java集合框架中List、Map和Set的主要实现类及其特性。List部分介绍了ArrayList的动态数组实现及线程安全方案(CopyOnWriteArrayList和同步包装)、LinkedList的双链表结构以及Vector的线程安全实现。Map部分详细解析了HashMap的哈希表结构(包括链表转红黑树机制、扩容原理)、LinkedHashMap的顺序保持特性、TreeMap的红黑树实现,以及线程安全的ConcurrentHashMap在JDK7和JDK8中的不同实现。Set部分指出其通过
2025-11-18 20:46:57
833
1
原创 一张思维导图理清 【Java基础】
Java核心知识点摘要 Java是一种跨平台的面向对象语言,通过JVM实现"一次编写,到处运行"。其核心特性包括自动内存管理(GC)、类和接口、泛型等。数据类型分为基本类型和引用类型,数值精度问题可用BigDecimal解决。面向对象三大特性为封装、继承和多态,遵循六大设计原则。异常处理通过try-catch-finally实现。Java8新增lambda、Stream等特性提升编码效率。NIO采用Selector实现高并发网络编程,相比BIO性能更高。设计模式如单例模式通过volati
2025-11-18 20:43:58
1371
原创 详解 Redis Stream
Redis Stream是Redis 5.x引入的一种消息队列数据结构,克服了传统发布订阅模式无法持久化消息的缺点。它支持多生产者和消费者、消费者组、消息有序性和持久化存储等特性,提供了一系列操作命令如XADD添加消息、XREAD读取消息、XGROUP创建消费组等,实现了可靠的消息队列功能。消费者可通过XREADGROUP以阻塞或非阻塞方式获取消息,并通过XA CK确认消息处理,确保消息不被重复处理。
2025-11-17 16:57:55
895
13
原创 详解 MySQL 自适应哈希
哈希索引是基于哈希表实现的一种内存索引结构,增删改查时间复杂度均为O(1)。它通过哈希函数将索引键映射到存储位置,快速定位数据。InnoDB自适应哈希索引(AHI)存储在缓冲池中,使用数组+链表结构,动态调整大小以适应热点数据。AHI会监控等值查询频率高的索引键,当访问次数达到阈值时自动构建哈希索引,后续查询可直接通过哈希定位数据页,避免B+树遍历。适用于主键、选择性高的等值查询场景,但不支持范围查询和低选择性索引。AHI维护需考虑开销,需根据实际场景评估是否开启。
2025-11-16 12:28:29
1223
40
原创 Redis集群 基本概念介绍
文章摘要: 本文介绍了Redis的核心技术,包括两种持久化方式(RDB快照和AOF日志)、主从同步原理(基于ReplicationId和offset)、哨兵机制(故障检测与自动切换),以及分片集群架构(16384个散列插槽)。同时探讨了多级缓存中本地缓存Caffeine的三种驱逐策略(容量、时间、引用)。这些技术共同保障了Redis的高性能、高可用性和可扩展性,为分布式系统提供了完善的缓存解决方案。
2025-11-13 19:35:52
788
12
原创 【微服务】基本概念介绍
文章摘要:本文介绍了微服务架构中远程调用的实现方案。首先讨论了使用RestTemplate进行HTTP调用的基本方法,包括注入Bean、发送请求和响应处理。接着分析了直接调用的问题,引入Nacos注册中心实现服务发现和负载均衡。然后讲解了OpenFeign的优化和连接池配置,以及网关的核心功能实现,包括路由规则配置、断言条件、过滤器和登录校验逻辑。最后介绍了配置管理的优化方案,包括Nacos配置中心、共享配置和热更新机制,解决了配置分散和重启服务的问题。
2025-11-12 17:34:09
1009
9
原创 【操作系统】详解 分页与分段系统存储管理
摘要:本文系统阐述了分页和分段存储管理机制。分页管理将内存划分为固定大小的页框,通过页表实现逻辑地址到物理地址的转换,利用快表(TLB)提高访问效率,并采用两级页表解决单级页表的内存浪费问题。分段管理则按逻辑模块划分可变长度段,通过段表实现地址转换。比较显示,分页侧重物理管理效率,对用户透明;分段强调逻辑划分,便于共享保护。两种机制各具特点,分页地址空间为一维,分段为二维。
2025-11-12 15:51:15
1292
27
原创 详细解析 MySQL 性能优化之【索引下推】
摘要:索引下推(ICP)是数据库查询优化技术,通过在存储引擎层利用索引提前过滤数据,减少不必要的回表操作,提升联合索引查询效率。其核心原理是将部分WHERE条件过滤下推到引擎层执行,而非全部在Server层处理。通过案例对比可见,ICP能显著减少回表次数(如从多次降为1次)。使用条件包括联合索引、非前缀匹配查询等场景,可通过optimizer_switch系统变量控制开关。该技术特别适用于回表代价高的查询场景。
2025-11-10 11:34:28
1330
14
原创 详解【限流算法】:令牌桶、漏桶、计算器算法及Java实现
文章摘要:本文介绍了三种常见的限流算法:令牌桶算法、漏桶算法和计数器算法。令牌桶算法通过固定速率生成令牌,支持突发流量;漏桶算法以固定速率处理请求,平滑输出流量;计数器算法则在固定时间窗口内限制请求数量。每种算法都配有Java实现代码,展示其核心逻辑和线程安全处理。三种算法各有特点:令牌桶适合允许突发的场景,漏桶保证稳定输出速率,计数器实现简单但不够平滑。实际应用中可根据业务需求选择合适的限流策略,必要时可结合Redis等中间件实现分布式限流。
2025-11-08 15:42:26
1115
16
原创 AI是如何做到流式输出的?一篇文章了解 SSE
摘要:SSE(Server-Sent Events)是一种基于HTTP的服务器向客户端单向推送实时数据的技术,适用于AI流式输出等场景。其核心特点是单向通信、基于HTTP协议、文本数据传输、自动重连和自定义事件类型。与普通HTTP相比,SSE采用长连接推送模式,能持续传输数据;与WebSocket相比,SSE更轻量但仅支持单向通信。SSE特别适合需要服务器主动推送数据的应用,如实时通知、数据监控和AI内容流式输出,能显著改善用户体验。
2025-11-08 13:27:38
658
4
原创 详解 零拷贝(Zero Copy):mmap、sendfile、DMA gather、splice
零拷贝是一种优化数据传输效率的技术,通过减少CPU参与的数据拷贝次数来提升性能。传统I/O需要4次拷贝和4次状态切换,而零拷贝技术如用户态直接I/O、mmap+write、sendfile和splice等,通过DMA传输、内存映射或建立管道等方式,将数据拷贝次数降至2次甚至完全避免CPU拷贝。其中mmap+write适用于小块文件,sendfile适合大文件传输,Kafka和RocketMQ分别采用这两种技术。零拷贝技术大幅降低了CPU开销和传输延迟,实现了高效的数据处理。
2025-11-06 12:05:08
1198
39
原创 详解JDK21新特性【虚拟线程】
虚拟线程突破传统线程瓶颈:针对平台线程的局限,虚拟线程通过轻量级实现(动态内存分配和用户态调度)显著降低资源开销,支持百万级并发;保持同步编程模型,简化高并发开发;特别适合I/O密集型场景(自动挂起释放资源)。但不适用于CPU密集型任务(依赖底层平台线程且增加调度开销)。使用方式上,通过Thread.ofVirtual()即可快速创建,兼容现有线程API。这一创新使开发者能用"一个任务一个线程"的直观方式处理海量并发,无需复杂异步改造。
2025-11-04 20:12:15
1253
14
原创 【JVM】详解 线程与协程
文章摘要:本文系统讲解了进程与线程的核心概念及实现方式。进程是资源分配单位,线程是任务执行单位,共享进程资源。线程实现分为内核线程(1:1)、用户线程(1:N)和混合实现(N:M)。Java采用内核线程直接映射方式。线程调度包含协同式和抢占式两种模式,涉及6种状态转换。最后探讨了协程优势,相比内核线程具有轻量级、低切换成本的特点,分为有栈和无栈两种类型,能有效解决高并发场景下的性能瓶颈问题。
2025-11-03 11:37:49
1018
7
原创 【JVM】详解 Java内存模型(JMM)
Java内存模型(JMM)定义了多线程环境下变量的访问规则,确保程序在各平台的内存访问一致性。它采用主内存和工作内存的结构,线程操作需通过8种原子性指令完成。volatile关键字保证变量可见性和禁止指令重排序,通过内存屏障实现。JMM确保原子性、有序性和可见性,其中happens-before原则提供判断线程安全的依据,包括程序次序、锁规则等8项原则。但时间顺序不等于happens-before关系,示例代码因未建立happens-before关系而线程不安全。
2025-11-02 14:10:03
1261
33
原创 Langchain4j 实战 【AI代码生成平台】:接入deepseek,开发AI服务并实现结构化输出
本文介绍了如何通过Langchain4j框架接入DeepSeek大模型。首先在DeepSeek开放平台获取API key,然后在Java项目中配置相关依赖和YML文件参数。重点讲解了创建AI服务接口、初始化配置类的方法,以及如何将大模型输出结构化处理。文章还提供了优化结构化输出的四种策略:设置max_tokens、添加字段描述注解、配置JSON模式、明确系统提示词。通过这些步骤,开发者可以便捷地将DeepSeek大模型集成到Java应用中,实现智能对话功能。
2025-11-01 13:34:25
920
11
原创 Kafka Consumer 详解API,分区分配策略以及消费offset
本文介绍了Kafka消费者的编程实现及核心概念。主要内容包括:1)消费者API代码示例,展示如何创建独立消费者订阅主题或分区;2)消费者组工作原理;3)三种主要分区分配策略(Range、RoundRobin、Sticky)的特点;4)offset存储方式及提交机制(自动/手动提交);5)消费者事务处理重复/漏消费问题;6)数据积压解决方案:增加分区和消费者数量,或提高每批次拉取量。重点强调了不同分区策略的优劣势,以及offset管理在消息可靠性中的关键作用。
2025-10-29 12:02:50
1377
15
原创 Kafka Consumer 消费流程详解
Kafka采用Pull模式消费消息,消费者主动从分区拉取数据并指定起始offset,避免Push模式因速率不匹配导致的问题。消费者组(CG)通过Coordinator协调分区分配,采用Leader选举和心跳机制维护消费进度并触发重平衡。消费流程包括参数化拉取请求、Broker响应处理及消息反序列化、拦截和业务处理。一个分区仅由一个消费者消费,消费者组间互不影响,确保消息有序且避免重复消费。Offset由__consumer_offsets主题持久化存储,保证进度可靠性。
2025-10-29 10:53:12
951
2
原创 一篇文章详解Kafka Broker
Kafka集群高可用架构与高效存储机制 摘要:本文详细介绍了Kafka集群的工作机制,包括Broker注册、Controller选举、故障感知与恢复流程。重点阐述了副本管理机制(AR/ISR/OSR)和Leader选举规则,以及Follower/Leader故障时的处理策略。同时解析了Kafka高效的文件存储结构,包括Segment分片、索引机制和日志清理策略,并揭示了其高性能读写背后的关键技术:顺序写磁盘、稀疏索引和页缓存+零拷贝技术。这些机制共同保障了Kafka集群的高可用性、数据可靠性和卓越的吞吐性能
2025-10-27 20:32:59
912
12
原创 Kafka生产者详解(下):数据去重(幂等性)与数据有序
Kafka数据可靠性机制详解:通过acks参数控制不同级别的可靠性,0(不等待应答,效率高但可能丢失)、1(Leader落盘应答,中等可靠性)和-1(ISR全部同步应答,高可靠性但效率低)。幂等性和事务机制解决了数据重复问题,实现ExactlyOnce语义。事务流程包括PID申请、消息发送、事务提交等步骤,确保关键数据不丢不重。此外,通过max.in.flight.requests.per.connection参数配置可实现单分区有序性。Kafka在1.x版本后结合幂等性可保证局部有序,但整体分区间仍为无序
2025-10-26 14:09:45
983
8
原创 Kafka 生产者详解(上):消息发送流程与API,分区,吞吐量与数据可靠性
摘要:本文详细介绍了Kafka生产者消息发送的整体流程及关键参数配置。生产者采用双线程模型(main线程和Sender线程),通过RecordAccumulator实现消息缓冲。核心参数包括batch.size(批次大小)、linger.ms(延迟时间)和ACK应答机制(0/1/-1)。文章还讲解了分区策略、吞吐量优化方法(如压缩、缓冲区调整)以及数据可靠性保障机制(ISR同步机制)。最后对比了异步/同步发送API的实现方式,并分析了不同ACK配置下的可靠性差异,为生产环境配置提供了指导建议。(148字)
2025-10-26 13:36:33
933
1
原创 【JVM】详解 编译器原理与优化技术
Javac编译器工作流程包括:词法语法分析生成AST;填充符号表;注解处理器处理;语义分析(类型检查、数据流分析);解语法糖(泛型擦除等);字节码生成。HotSpot采用分层编译策略,解释器与JIT协作,通过热点探测(计数器/采样)触发编译。优化手段包括方法内联(CHA解决虚方法问题)、逃逸分析(栈分配/标量替换)、公共子表达式消除等,提升执行效率。
2025-10-25 20:38:19
2127
9
原创 Kafka入门:基础架构讲解,安装与使用
Kafka基础架构包含生产者、Broker、消费者和Zookeeper四大组件。生产者负责发送消息到Broker,支持分区策略和批量发送;Broker节点存储消息并管理分区副本;消费者通过消费组订阅消息,支持位移管理和再平衡机制;Zookeeper负责集群元数据管理和协调(2.8版本后逐步被KRaft取代)。部署方式包括本地安装和Docker容器化,通过命令行工具可创建Topic并实现消息的生产与消费。Kafka通过分区、副本等机制实现高吞吐、高可用的消息队列服务。
2025-10-23 18:24:42
1045
10
原创 【JVM】详解 类加载器与类加载过程
摘要:Java类加载机制采用双亲委派模型,包含启动类、扩展类和应用程序类三种加载器。类加载流程分为加载、连接(验证、准备、解析)和初始化阶段,其中初始化触发条件严格限定。双亲委派机制通过递归请求父类加载器保证安全性和类的唯一性,但存在破坏场景如线程上下文类加载器和OSGi热部署。JDK9引入模块化后,类加载器架构调整为平台类加载器取代扩展类加载器,并采用新的模块归属机制。类加载器与类本身共同确定类的唯一性,不同加载器加载的相同类被视为不同类。
2025-10-22 15:38:45
930
37
原创 【JVM】低延迟垃圾收集器:Shenandoah收集器与ZGC收集器
本文介绍了两种低延迟垃圾收集器Shenandoah和ZGC。Shenandoah采用连接矩阵记录引用关系,通过Brooks指针实现并发回收,但吞吐量有所下降。ZGC基于Region布局,使用染色指针技术,实现并发标记-整理,吞吐量接近Parallel Scavenge。两者都通过并发操作减少STW时间,但实现方式不同:Shenandoah采用转发指针,ZGC利用染色指针和内存映射技术。测试显示ZGC在吞吐量方面表现更优,几乎达到高吞吐量收集器的水平。
2025-10-21 17:54:04
1042
6
原创 【JVM】详解 Class类文件的结构
Java Class文件是遵循特定格式的二进制流,用于定义类或接口。其结构包含魔数、版本号、常量池(存储字面量和符号引用)、访问标志(标识类/接口访问权限)、类继承关系索引(类/父类/接口索引)、字段表(描述变量属性)、方法表(存储方法信息)和属性表(如Code属性存放字节码指令,Exceptions属性列举受查异常)。常量池作为资源库,字段表和方法表通过索引引用常量池项,属性表处理专有场景数据。高版本JDK向下兼容低版本Class文件,但反之不可。
2025-10-21 16:32:30
890
原创 【JVM】详解 对象的创建
摘要:Java创建对象有四种主要方式:(1)new关键字直接调用构造方法;(2)反射机制通过Class或Constructor类创建;(3)clone()方法浅拷贝对象;(4)反序列化恢复对象。对象创建过程涉及类加载检查、内存分配(指针碰撞或空闲列表)、并发处理(CAS/TLAB)、初始化零值、设置对象头和执行构造方法等步骤。不同方式适用于不同场景,如反射适合动态创建,clone用于对象复制,反序列化用于持久化恢复。(150字)
2025-10-19 15:23:22
824
13
原创 【JVM】详解 垃圾回收
本文系统介绍了Java垃圾回收机制,主要包括:1.对象存活的判断方法,重点阐述了可达性分析算法及其GC Roots对象类型;2.四种引用类型(强、软、弱、虚)及其回收特性;3.finalize()方法的作用与执行机制;4.堆内存的分代结构(新生代、老年代)和垃圾回收算法(标记-清除、标记-复制、标记-整理);5.HotSpot虚拟机的实现细节,包括OopMap、安全点、安全区域、记忆集等技术;6.并发可达性分析的解决方案。这些内容完整展现了Java垃圾回收的核心原理与实现机制。
2025-10-19 15:22:32
2999
37
原创 【JVM】详解 运行时数据区
JVM内存结构主要包括程序计数器、虚拟机栈、本地方法栈、堆和方法区。程序计数器是线程私有的,记录执行位置;虚拟机栈存储方法调用信息,存在StackOverflowError和OOM风险;堆是最大内存区域,存放对象实例;方法区存储类信息,JDK1.8后改为元空间使用本地内存。此外,直接内存不属于JVM但可通过NIO使用,可能导致OOM。各区域功能和特性不同,共同支撑Java程序运行。
2025-10-17 16:50:32
973
13
原创 设计模式之【组合模式】:只需一行代码完成业务的复杂验证
文章摘要: 本文介绍了一种基于组合模式的业务验证方法,用于解决复杂业务验证场景下代码冗余和修改困难的问题。通过将验证逻辑抽象为树形结构中的节点(AbstractComposite),实现验证逻辑的组合与有序执行。系统包含三个核心部分:1) 树节点定义,包含层级关系和执行顺序控制;2) 树构建逻辑,通过反射自动组织验证节点;3) 层序遍历执行机制。以用户注册验证为例,展示了如何将多个验证处理器(如频次检查、验证码校验等)组织成树结构,通过单一接口调用即可顺序执行所有验证逻辑。这种方法显著提升了代码复用性和可维
2025-10-17 16:44:26
551
1
原创 【深入理解计算机网络11】应用层详解:DNS,WWW,HTTP
应用层为应用程序提供通信服务,其协议定义了报文类型、语法、语义及交互规则,支持文件传输、邮件、远程登录等功能,主要采用C/S和P2P两种模型。DNS系统实现域名到IP地址的转换,通过层级域名服务器进行递归或迭代查询。HTTP是万维网的核心协议,支持非持续和持续连接,通过请求/响应报文传输数据,并使用Cookie保持会话状态。FTP专用于文件传输,区分控制连接和数据连接。
2025-10-15 16:00:53
1080
15
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅