- 博客(43)
- 收藏
- 关注
原创 Java——JUC
本文摘要: 文章系统讲解了Java线程安全的核心概念、线程与进程区别、线程创建方式及生命周期管理。重点分析了线程安全的三大要素(原子性、可见性、有序性),并对比了synchronized与ReentrantLock的实现原理,包括轻量级锁、偏向锁等优化机制。详细解析了CAS无锁机制及其ABA问题解决方案,最后介绍了线程池的优势与参数配置策略。通过JMM内存模型、锁升级过程等底层原理阐述,完整呈现了Java并发编程的知识体系,为开发高并发程序提供了理论指导和实践方案。(149字)
2025-09-18 16:36:03
1020
原创 JUC——JMM
Java内存模型(JMM)定义了主存与工作内存的抽象概念,涉及可见性、有序性和原子性三大特性。volatile通过内存屏障保证变量修改的可见性和禁止指令重排序,避免线程读取缓存旧值。synchronized虽能保证原子性和可见性,但性能较低。双重检查锁定(DCL)需配合volatile使用,防止指令重排导致对象半初始化问题。单例模式实现中,静态内部类利用类加载机制实现线程安全的延迟初始化。JMM底层对应CPU缓存、寄存器等硬件优化机制,是多线程编程的基础。
2025-09-16 08:16:36
995
原创 JUC——线程安全
本文系统介绍了Java线程安全及并发编程的核心技术,主要内容包括:1.线程安全问题分析,包括临界区竞态条件和原子性问题;2.解决方案:详细讲解synchronized底层原理(对象头、Monitor、轻量级锁优化)、锁消除、变量安全分析等;3.线程协作机制:wait/notify的正确使用、保护性暂停模式;4.并发控制进阶:ReentrantLock特性(可中断、超时、条件变量)、死锁定位与避免;5.性能优化:偏向锁、自旋优化等JVM级锁优化策略。全文通过底层原理剖析和典型场景分析,构建了完整的Java并发
2025-09-16 08:15:35
959
原创 Java——JVM
JVM是Java程序运行的核心环境,其架构包含五大子系统:类加载子系统(负责加载类)、运行时数据区(管理内存区域)、执行引擎(执行字节码)、本地方法接口和本地方法库(支持本地调用)。JVM内存分为线程共享区(堆、方法区)和线程私有区(程序计数器、虚拟机栈等)。垃圾回收机制通过可达性分析判断对象存活,采用分代收集算法(新生代用复制算法,老年代用标记-清除/整理算法),并由CMS、G1等垃圾收集器实现。JDK版本演进中,方法区从永久代改为元空间,字符串常量池移至堆内存。JVM通过自动内存管理实现了跨平台特性。
2025-09-15 14:24:10
1154
原创 Java——集合
摘要:本文系统梳理了Java集合框架的核心知识点,重点分析了ArrayList与LinkedList的底层实现差异(数组vs链表)、扩容机制(1.5倍扩容)和线程安全方案(Collections.synchronizedList/CopyOnWriteArrayList)。对HashMap的底层结构(数组+链表+红黑树)、哈希冲突处理、put流程(哈希扰动→定位索引→解决冲突→扩容判断)和扩容机制(2倍扩容)进行了深入解析,并对比了JDK8的优化(红黑树、尾插法等)。最后探讨了集合的快速失败(fail-fa
2025-09-15 14:23:22
828
原创 Spring Al——记忆持久化
SpringAI基于Redis和MySQL实现对话记忆持久化的技术方案:Redis适用于高速读写的短期对话场景,利用内存存储优势保存临时上下文;MySQL适合长期存储完整对话历史,提供可靠的数据持久化。实现步骤包括Maven依赖配置、MySQL连接设置,以及通过MessageWindowChatMemory管理对话记忆。代码示例展示了如何存储对话记录和检索历史消息,其中Redis处理实时交互,MySQL负责数据归档。该方案兼顾性能与可靠性,为智能对话系统提供完整记忆管理解决方案。
2025-06-26 08:44:24
1475
原创 计算机网络——DNS,Linux,Cookie与Session
DNS查询通过层级服务器完成域名解析,Cookie/Session/Token分别用于客户端/服务器端状态管理和验证。Linux常用命令包括文件操作、权限管理和网络配置等。I/O多路复用技术中,select/poll存在性能限制,而epoll采用红黑树和事件通知机制解决了FD监听上限和遍历效率问题,显著提升了性能。
2025-06-25 09:35:53
502
原创 Al——tools
摘要:本文介绍了AI工具调用的工作原理及SpringAl开发框架中的工具使用方法。工具调用让AI借助外部工具完成自身无法处理的任务,基本流程包括工具定义、选择、执行和结果反馈。SpringAl提供了两种工具定义方式:注解式和编程式,支持灵活的工具绑定策略(按需或全局)。开发中建议优先使用社区现有工具,并通过集中注册类统一管理。SpringAl封装了工具调用全流程,开发者只需专注业务逻辑实现。
2025-06-25 09:35:12
972
原创 TCP连接
TCP通过序列号、校验和、超时重传等机制确保可靠传输,并采用拥塞控制算法(慢启动、拥塞避免等)调节发送速率。三次握手建立连接,确认双向通信能力;四次挥手释放连接,确保数据传输完成。其中三次握手防止资源浪费,四次挥手保证数据完整性,在特定情况下可合并为三次。这些机制共同构成了TCP协议可靠性保障的核心架构。
2025-06-24 08:28:10
1069
原创 HTTP面试题——缓存技术
HTTP缓存技术主要包括强制缓存和协商缓存两种方式。强制缓存通过Cache-Control和Expires响应头实现,浏览器直接判断缓存是否过期,未过期则直接使用本地缓存。协商缓存则通过服务器验证资源是否修改,实现方式有两种:基于时间的Last-Modified/If-Modified-Since和基于唯一标识的ETag/If-None-Match,其中ETag优先级更高。两种缓存都需配合Cache-Control使用,强制缓存失效后才触发协商缓存。这些技术有效减少了重复请求,提升了HTTP1.1的性能表现
2025-06-24 08:27:39
977
原创 AI学习——AI大模型接入
摘要:本文系统介绍了AI大模型的开发框架与实现技术。首先解析了AI大模型的概念、分类和调用方式(SDK、HTTP、SpringAI、LangChain4j),重点阐述了SpringAI框架的核心特性,包括统一API接口、结构化输出、对话记忆等功能。详细讲解了多轮对话的实现方法,包括Advisor机制、ChatMemory存储等关键技术。最后提供了扩展知识,涵盖自定义Advisor开发、结构化输出转换以及对话记忆持久化等进阶实践,为开发者构建智能对话系统提供了完整的技术指导。
2025-06-23 09:00:19
1290
原创 LangChain4j——智能体
本文摘要: 文章系统介绍了大模型应用开发的三个核心方面:1)部署方式对比了云服务器与本地部署的优缺点;2)详细说明了大模型调用的参数传递与响应处理机制;3)重点讲解了LangChain4j框架的使用,包括会话功能实现(流式调用、消息注解、会话记忆管理及Redis持久化)、RAG知识库构建(向量数据库操作与检索)以及Tools工具开发方法。全文以SpringBoot整合为例,提供了从环境配置到接口开发的完整技术方案,涵盖了大模型应用开发的关键技术环节。
2025-06-23 08:59:54
1004
原创 HTTP——不同版本区别
HTTP协议演进与安全传输机制 摘要:HTTP协议从1.0到3.0经历了重大改进:HTTP1.1引入长连接和管道传输;HTTP/2采用头部压缩、二进制格式和多路复用;HTTP/3改用UDP协议解决TCP限制。HTTPS通过SSL/TLS协议实现加密传输,使用三次握手和随机数协商会话密钥,确保通信安全。TCP与UDP的主要区别在于连接方式、可靠性和控制机制,其中TCP提供可靠传输而UDP更适合实时应用。这些协议共同构成了现代网络通信的基础架构,在保证性能的同时提升了安全性。
2025-06-22 09:37:26
1116
1
原创 AI——RAG知识库
AI知识问答应用中的RAG技术实践 摘要:本文探讨了如何利用RAG(检索增强生成)技术构建企业级AI知识问答系统。文章指出,RAG技术通过结合信息检索和AI生成,有效解决了大模型知识时效性和幻觉问题,使AI能够基于企业私有知识库提供个性化服务。关键技术实现包括文档收集切割、向量转换存储、文档过滤检索和查询增强关联四个核心步骤,其中文档预处理的质量直接影响系统上限。文章还介绍了使用SpringAl框架开发本地知识库和云知识库服务的实践方法,并提出了优化文档结构、切片策略及异常处理的具体建议,为企业构建高效AI
2025-06-22 09:36:32
1135
原创 Docker镜像无法拉取问题解决办法
这两个镜像源是我在多个测试环境中反复验证过的,确保它们能够提供快速且稳定的镜像拉取速度。完成上述步骤后,我们就可以尝试拉取 Docker 镜像了。3.修改完docker配置文件之后重新加载docker配置并重启docker。这样才能使新的镜像源配置生效。
2025-06-07 15:06:21
373
原创 JVM——内存模型
Java内存模型(JMM)定义了多线程环境下共享数据的读写规则,确保数据的原子性、可见性和有序性。原子性问题如i++操作在多线程中可能被中断,可通过synchronized解决,它通过Monitor机制控制线程访问。可见性问题涉及线程缓存与主内存不一致,volatile关键字可确保变量修改对所有线程可见,但不保证原子性。有序性问题在多线程中由指令重排引起,volatile也能防止指令重排序。CAS(比较并交换)是一种乐观锁技术,适用于低竞争环境,与volatile结合可实现无锁并发。synchronized
2025-05-23 09:00:27
1290
原创 JVM——垃圾回收
本文详细介绍了Java垃圾回收机制的核心概念和实现方法。首先,文章解释了如何判断对象可以回收,包括引用计数法和可达性分析算法,并介绍了四种引用类型:强引用、软引用、弱引用和虚引用。接着,文章探讨了三种垃圾回收算法:标记清除、标记整理和标记复制,并分析了它们的优缺点。随后,文章介绍了分代垃圾回收机制,将堆内存划分为新生代和老年代,并详细描述了MinorGC的流程。此外,文章还介绍了六种常见的垃圾回收器,包括串行、并行和并发的垃圾回收器,并重点分析了CMS和G1垃圾回收器的工作原理和优缺点。最后,文章提供了垃圾
2025-05-23 08:55:07
1566
原创 Spring Boot——自动配置
本文详细介绍了Spring框架中bean的多种加载方式及其控制机制。首先,通过XML和注解方式声明bean,包括使用@Component及其衍生注解、@Bean注解等。其次,探讨了扩展初始化、加载配置类、使用@Import注解、实现ImportSelector和ImportBeanDefinitionRegistrar接口等高级加载方式。此外,还介绍了bean加载控制,包括编程式和注解式匹配环境加载bean,以及通过属性配置解耦业务bean。最后,深入分析了SpringBoot自动配置的原理,包括@Spri
2025-05-22 11:19:03
1925
原创 SpringCloud(三)
Feign是一个声明式的HTTP客户端,旨在简化远程服务调用的代码编写,提高可读性和维护性。它通过Spring MVC注解来声明远程调用的信息,如服务名称、请求方式、路径和参数等。Feign支持自定义配置,如日志级别,并提供了性能优化选项,如使用连接池替代默认的URLConnection。最佳实践建议将FeignClient抽取为独立模块,以避免紧耦合。此外,Spring Cloud Gateway作为统一网关,提供了身份认证、权限校验、服务路由、负载均衡和请求限流等功能。它基于Spring 5的WebFl
2025-05-22 11:15:16
803
原创 JVM——类加载器
类加载器是JVM中用于将字节码文件(.class文件)加载到虚拟机中的组件,确保Java程序能够启动。类加载器包括启动类加载器、扩展类加载器、应用类加载器和自定义类加载器。双亲委派模型是类加载器的工作机制,通过逐级委托避免类重复加载,确保类库API的安全性和唯一性。类装载的执行流程包括加载、验证、准备、解析、初始化、使用和卸载七个阶段。加载阶段获取类的二进制数据并创建Class对象,验证确保类符合JVM规范,准备为类变量分配内存,解析将符号引用转换为直接引用,初始化执行静态变量和代码块的初始化,使用阶段执行
2025-05-21 08:45:40
1035
原创 SpringCloud(二)
本文主要介绍了Ribbon负载均衡和Nacos注册中心的相关内容。在Ribbon负载均衡部分,详细阐述了负载均衡的原理、流程、策略以及懒加载与饥饿加载的区别和配置方式。Nacos注册中心部分,首先介绍了Nacos的快速入门步骤,包括服务注册和依赖配置;其次,深入探讨了Nacos的服务分级存储模型,包括服务跨集群调用问题、集群属性设置和负载均衡策略;最后,介绍了Nacos的环境隔离功能及其与Eureka的区别。此外,还简要提及了Nacos的配置管理功能,包括统一配置管理、配置热更新、配置共享以及Nacos集群
2025-05-21 08:39:15
940
原创 JavaWeb——Request & Response
本文主要介绍了HTTP请求和响应的基本概念及其在Java Web开发中的应用。Request是浏览器发送的HTTP请求数据,由Tomcat解析并封装成对象,用于获取请求行、请求头和请求体中的数据。Response是服务器处理请求后返回的响应数据,开发人员可以通过该对象设置响应行、响应头和响应体。此外,文章还详细讲解了请求转发和重定向的实现方式及其特点:请求转发在服务器内部资源间跳转,地址栏不变,可共享数据;重定向可跳转到任意资源,地址栏变化,但不能共享数据。这些内容为理解Web开发中请求与响应的处理机制提供
2025-05-19 09:38:16
803
原创 SpringCloud——EureKa
本文介绍了微服务架构的基本概念及其优势,包括单一职责、面向服务、自治和隔离性等特点。重点讨论了微服务拆分及远程调用的注意事项,如避免重复开发、数据独立性和接口暴露等。此外,文章详细阐述了Eureka注册中心的原理及其在微服务架构中的作用,包括服务注册、发现和健康监控等。最后,提供了搭建EurekaServer和服务注册的具体步骤,以及如何通过服务名称进行服务发现和负载均衡的实现方法。
2025-05-19 09:37:08
1152
原创 HTTP协议
Hyper Text Transfer Protocal,超文本传输协议,规定了浏览器和服务器之间数据传输的规则1.基于TCP协议:面向连接,安全2.基于请求-响应模型的:一次请求对应一次响应3.HTTP协议是无状态的协议:对于事务处理能力没有记忆能力。每次请求-响应都是独立的。
2025-05-12 13:14:37
317
原创 Spring——面试题
Spring框架中的单例Bean默认是线程安全的,前提是Bean中不包含可变的成员变量。如果存在可变状态,需通过多例模式或加锁来确保线程安全。AOP(面向切面编程)用于封装与业务无关的公共行为,减少重复代码,提升系统可维护性,常见应用包括日志记录、缓存处理和事务管理。Spring事务管理分为编程式和声明式,后者基于AOP实现,通过拦截方法进行事务处理。事务失效的常见场景包括异常被捕获、抛出检查异常以及非public方法。Spring Bean的生命周期包括BeanDefinition的创建、实例化、依赖注入
2025-05-12 13:13:28
692
原创 JVM——内存结构
什么是JVM?Java Virtual Machine - java程序的运行环境好处:(1)一次编写,到处运行(2)自动内存管理,垃圾回收功能(3)数组下标越界检查(4)多态的基石比较JDK,JVM,JRE。
2025-04-22 08:00:00
633
原创 Redis——内存策略
Redis之所以性能强,主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。当内存使用达到上限时,就无法存储更多数据了,再添加数据时就会淘汰其他数据。所有就有内存淘汰策略。1.过期策略对于Redis缓存,我们可以通过expire命令给Redis的key设置TTL(存活时间):可以发现,当key的TTL到期以后,再次访问name返回时nil,说明这个key已经不存在了,对应的内存也得到释放。从而起到内存回收的目的。1.1过期策略——DB结构。
2025-04-20 14:23:50
1312
原创 Redis——通信协议
RESP 通信协议以其简洁、高效和易读的特点,成为了分布式系统和数据库领域的重要通信协议。无论是 Redis 开发者,还是从事分布式系统设计的工程师,掌握 RESP 协议的原理和应用都具有重要意义。
2025-04-20 12:13:23
508
原创 Redis——网络模型
Redis 以其卓越的性能和灵活的特性,成为众多开发者在缓存、消息队列等场景的首选。而 Redis 强大性能的背后,其网络模型与 IO 机制发挥着关键作用。数据的读写速度直接影响着用户体验。大家日常逛的电商平台,流畅加载商品详情页离不开它;接下来,我们就深入挖掘一下,看看 Redis 是如何通过它们实现高效运转的。
2025-04-18 20:46:19
1115
原创 SpringBoot——配置文件
Spring Boot 参数配置化是一种强大而实用的技术,它通过将配置与代码分离,为应用程序带来了更高的灵活性、可维护性和可扩展性。无论是简单的配置修改,还是复杂的多环境管理,Spring Boot 都提供了丰富多样的配置方式来满足我们的需求。掌握参数配置化技术,能够让我们在 Spring Boot 开发中更加得心应手,轻松应对各种配置需求。
2025-04-17 22:27:13
778
原创 Redis——五种数据类型
Redis 中的每种数据类型都由特定的数据结构来实现,数据结构为数据类型提供了底层的存储和操作机制。不同的数据类型具有不同的特性和应用场景,数据结构的选择和设计是为了更好地满足这些特性。数据结构是实现数据类型的基础,它们共同构成了 Redis 强大的功能体系,使得 Redis 能够在不同的应用场景中,根据数据的特点和操作需求,选择合适的数据类型和对应的数据结构来高效地处理和管理数据。
2025-04-17 13:49:45
939
原创 Redis——数据结构
Redis 的五种数据结构 String、Zset、Set、Hash、List 实际上是由底层 6 种数据结构支撑的,这 6 种底层数据结构分别是:简单动态字符串(SDS)、链表、字典、跳跃表、整数集合、压缩列表。
2025-04-17 10:10:57
1894
原创 Spring——AOP
面向切面编程,面向方面编程),其实就是面向特定方法编程,它允许开发者在不修改原有代码的基础上,对程序多个模块中重复出现的功能进行统一管理。动态代理是面向切面编程最主流的实现。而springAOP是spring框架的高级技术,旨在管理bean对象过程中,主要通过底层的动态代理机制,对特定的方法进行编程。
2025-04-15 09:53:15
1058
1
原创 MySQL——MVCC(多版本并发控制)
MVCC作用主要我们在快照读的时候来决定我们提取的到底是哪个版本MVCC实际上实现原理是3部分,隐藏字段,Undo log ,Read View隐藏字段:主要取决于事务id,和回滚指针undo log 版本链Read View读视图。
2025-04-13 15:04:00
960
1
原创 MySQL——事务
事务是一组操作的集合,他是一个不可分割的工作单位,事务把所有的操作作为一个整体一起向系统提交或撤销操作请求,以及这些操作要么同时成功要么同时失败。默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。
2025-04-13 13:16:35
1165
原创 Redis——实现消息队列
消息队列:Message Queue,字面意思就是存放消息的队列,最简单的消息队列模型包括3个角色以下就是基于Redis结构特性来实现消息队列。
2025-04-10 22:57:37
924
原创 MySQL——锁
读锁不会阻塞其他客户端的读,但是会阻塞写。写锁及会阻塞其他客户端的读,也会阻塞其他客户端的写对于DML操作插入,删除,查询表中的数据互相兼容,对数据库结构操作失败客户端一:开启事务进行查询语句客户端二:更新数据操作库表:为该库表添加一个字段失败意向共享锁与读锁兼容,与写锁互斥。意向互斥锁与读锁写锁互斥。1.针对索引进行检索时,对已存在的记录进行等值匹配时,将自动优化为行锁2.InnoDB的行锁是针对于索引加的锁不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,此时。
2025-04-09 22:00:18
1191
原创 MySQL——InnoDB引擎架构
当我们去操作MySQL的时候先去操作缓冲区,如果缓冲区没有数据会将磁盘中的数据加载回来,然后再存储在缓冲区中,我么在增删改的时候都去操作缓冲区,然后缓冲区中的数据 会以一定频率通过后台线程写道磁盘架构中进行永久化保存。
2025-04-09 12:28:38
1219
原创 Spring Boot Starter开发
是 Spring Boot 的依赖管理方式,是一组预定义的依赖集合。其用途在于简化项目依赖配置,避免手动添加和管理大量依赖。1.所以spring-boot-starter还是很强大的,不需要手动处理复杂的依赖关系,只需在pom.xml文件中引入就可以java中调用,大家试想一下大家在做项目的时候只是引入了mybatis-plus-boot-starter就可以在java中对数据库进行操作了可见有多么便捷,好用。2.如果不开发引入spring-boot-starter就要自己编写配置类手动创建配置类。
2025-03-23 22:28:55
564
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅