- 博客(111)
- 收藏
- 关注
原创 RAG概念
*RAG(Retrieval-Augmented Generation,检索增强生成)**是一种结合信息检索技术和 AI 内容生成的混合架构,可以解决大模型的知识时效性限制和幻觉问题。简单来说,RAG 就像给 AI 配了一个 “小抄本”,让 AI 回答问题前先查一查特定的知识库来获取知识,确保回答是基于真实资料而不是凭空想象。从技术角度看,RAG 在大语言模型生成回答之前会先从外部知识库中检索相关信息,然后将这些检索到的内容作为额外上下文提供给模型。
2026-01-23 10:53:02
885
原创 Prompt(提示词工程)
Prompt 工程(Prompt Engineering)又叫提示词工程,简单来说,。能帮我写个数学题吗?,构建一个能够按照预期生成内容的提示词既是一门艺术,也是一门科学。,因此这也是 AI 应用开发的关键技能。
2026-01-20 17:40:00
1487
原创 CAS(比较并交换)
中文译为比较并交换,是一种无锁并发的原子操作算法。它包含三个核心操作数:内存位置(V)- 要操作的内存地址预期原值(A)- 读取到的旧值新值(B)- 想要更新的值它包含3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。if (V == A) { // 如果内存值等于预期值V = B;
2026-01-20 14:56:32
588
原创 Docker讲解
其中,比较常见的命令有:命令说明文档地址拉取镜像推送镜像到DockerRegistry查看本地镜像docker rmi删除本地镜像docker rmidocker run创建并运行容器(不能重复创建)docker run停止指定容器启动指定容器重新启动容器docker rm删除指定容器docker rmdocker ps查看容器docker ps查看容器运行日志进入容器保存镜像到本地压缩文件加载本地压缩文件到镜像查看容器详细信息。
2026-01-16 19:57:41
890
原创 java并发编程
线程是沉程序执行的最小单位,是进程中的一个执行路径,一个进程可以包含多个线程,它们共享进程的内存空间。操作系统在分配资源时是把资源分配给进程的, 但是CPU 资源比较特殊, 它是被分配到线程的, 因为真正要占用CPU 运行的是线程, 所以也说线程是CPU 分配的基本单位(cpu直接分配给线程,不经过进程)。多个线程共享进程的堆、方法区、直接内存等共享资源。方法区则用来存放JVM 加载的类、常量及静态变量等信息,也是线程共享的。
2026-01-16 19:57:06
594
原创 AI大模型接入
AI 大模型是指具有超大规模参数(通常为数十亿到数万亿)的深度学习模型,通过对大规模数据的训练,能够理解、生成人类语言,处理图像、音频等多种模态数据,并展示出强大的推理和创作能力。大模型的强大之处在于它的涌现能力—— 随着模型参数量和训练数据量的增加,模型会展现出训练过程中未明确赋予的新能力,比如逻辑推理、代码编写、多步骤问题解决等。模型参数量达到,训练数据覆盖文本、图像、音频等多模态海量信息;参数量与数据量突破临界阈值后,会涌现出小模型不具备的复杂能力。
2026-01-12 15:24:49
785
原创 JVM 类加载机制
类加载器作用范围加载路径启动类加载器(Bootstrap)加载 JVM 核心类(比如JAVA_HOME/jre/lib/rt.jar 等核心 jar扩展类加载器(Extension)加载 JVM 扩展类JAVA_HOME/jre/lib/ext 目录应用程序类加载器(App)加载用户编写的类和第三方 jar应用 classpath 路径要不要我帮你补充一份类加载器工作流程示意图,直观展示双亲委派模型的执行顺序?当前文件内容过长,豆包只阅读了前 33%。
2026-01-09 16:39:09
1081
原创 JVM垃圾回收器
串行回收器(Serial Garbage Collector)是JVM中最古老、最简单的垃圾收集器,采用单线程进行垃圾回收,执行期间会暂停所有应用线程(Stop-The-World)。串行回收器主要有两个特点:它仅仅使用单线程进行垃圾回收。它是独占式的垃圾回收。在串行收集器进行垃圾回收时,Java应用程序中的线程都需要暂停,等待垃圾回收的完成。如图所示,在串行回收器运行时,应用程序中的所有线程都停止工作,进行等待。这种现象称之为“Stop-The-World”。
2026-01-08 18:09:42
607
原创 JVM垃圾回收算法
这种改进的复制算法,既保证了空间的连续性,又避免了大量的内存空间浪费。这样在新生代GC时,可以不用花大量时间扫描所有老年代对象,来确定每一个对 象的引用关系,而可以先扫描卡表,只有当卡表的标记位为1时,才需要扫描给定区域的老年代对象,而卡表位为0的所在区域的老年代对象,一定不含有新生代对象的引用。复制算法的核心思想是:将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收。
2026-01-06 18:18:52
927
原创 SpringBoot项目部署到云服务器
将下载的 redis 安装包上传到服务器上,并解压。将 daemonize no 改为 daemonize yes。利用npm脚本,npm build 将项目打包成dist目录。修改nginx.conf文件,配置root和后端接口等信息。添加后端地址,proxy_pass配置到自己的路径和端口。将前端本地部署项目的后端接口修改为云服务器上的数据接口。将location中 root修改为html/dist。编译完成后,会在当前文件夹内生成一个 src 文件夹。进入到当前目录,将dist目录放到html中。
2026-01-03 16:53:34
939
原创 LangChan4j在SpringBoot配置并且接入模型
LangChain4j 的目标是简化将大语言模型(LLM - Large Language Model)集成到 Java 应用程序中的过程。LangChain4J是LangChain(Python) 的 Java 移植版,遵循其原设计理念,灵活、模块化、非侵入式,是通用性很强的工具包。虽然LangChain4j是Python LangChain的 Java 实现,但并非简单移植,而是融合了 LangChain、Haystack、LlamaIndex 等框架的理念,专为 Java 开发者优化。
2025-12-31 11:36:29
1022
原创 JVM面试题
线程私有的有:栈、本地方法栈、程序计数器线程共享的有:方法区、直接内存、堆2、️哪个区域不会出现 OutOfMemoryError?程序计数器是唯一一个不会出现 OutOfMemoryError 的内存区域,它的生命周期随着线程的创建而创建,随着线程的结束而死亡。程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。另外,
2025-12-30 18:08:52
543
1
原创 JVM学习笔记
Java 虚拟机(JVM)是一个抽象的计算机器,它通过在实际的计算机上模拟各种计算机功能来运行 Java 程序。它的核心作用是将 Java 字节码(.class文件)翻译成特定操作系统和硬件平台的机器指令,从而实现 Java 的核心特性:“一次编写,到处运行”(Write Once, Run Anywhere)。这是一张图片,ocr 内容为:1.1 类加载器子系统类加载子系统负责从文件系统或者网络中加载Class 信息,加载的类信息存放于一块称为方法区的内存空间。
2025-12-29 16:32:51
788
原创 HashMap源码
JDK 1.8的HashMap通过引入红黑树、优化hash计算、改为尾插法等改进,显著提升了最坏情况下的性能,并解决了1.7中多线程resize的死循环问题。这些改进使得HashMap在大多数场景下都能提供更好的性能表现。
2025-12-28 22:51:51
1086
原创 TransactionManager 详解、常见问题、解决方法
一、什么是 TransactionManager是Java事务管理的核心接口,负责协调和管理事务的生命周期。核心接口定义PlatformTransactionManager是 Spring 事务抽象的核心接口,它采用了策略模式(Strategy Pattern),为不同的事务管理技术提供了统一的抽象层。1.getTransaction() - 获取事务参数:TransactionDefinition返回值:TransactionStatus2.commit() - 提交事务3.
2025-12-28 22:51:14
915
原创 JAVA中的代理
代理模式:为一个对象提供一个替身或占位符,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用。代理的作用代理的出现是为了"增强功能但不修改原代码",实现"开闭原则"(对扩展开放,对修改关闭)。代理是Java实现AOP(面向切面编程)的基础,让横切关注点(日志、事务、安全等)能够集中管理而不是散落各处。在不修改源代码的情况下,为目标对象添加额外功能。控制客户端对真实对象的访问,实现访问限制。将通用功能(横切关注点)从业务逻辑中分离出来。
2025-12-26 22:58:45
851
原创 == 和 equals() 的区别
比较维度==equals()类型操作符方法基本类型比较值不可用引用类型默认比较内存地址比较内存地址(同==)引用类型重写后仍比较内存地址比较自定义内容String比较是否同一对象比较字符串内容包装类(缓存内)可能true(同一对象)比较值包装类(缓存外)false(不同对象)比较值null处理为true应返回false性能O(1)可能O(n)集合中使用不适合必须正确实现最佳实践基本类型、枚举比较引用类型内容比较黄金法则:基本类型→ 用==引用类型比较引用→ 用==引用类型比较内容。
2025-12-25 20:50:00
1143
原创 128陷阱
Integer包装类在实现自动装箱时,为了节省内存和提升性能,设置了缓存数组。该缓存数组在Integer类加载时预创建了从-128到127共256个Integer对象。当使用自动装箱或调用Integer.valueOf()方法时,如果数值在-128到127范围内,则直接返回缓存中的对象;如果数值超出此范围,则创建新的Integer对象。
2025-12-25 20:48:41
409
原创 SQL核心语法总结:从基础操作到高级窗口函数
SQL作为数据处理的核心语言,掌握其常用语法和高级特性是数据分析、开发的必备技能。本文将系统梳理SQL高频语法,涵盖数据插入、字符串处理、条件判断、存在性查询、窗口函数等核心知识点,结合示例帮你快速理解和应用。数据插入优先根据“重复数据处理逻辑”选择或;字符串处理掌握LENGTHREPLACESUBSTRINGLEFTRIGHT即可覆盖大部分场景;条件判断用CASE表达式,灵活处理多分支逻辑;存在性查询优先用EXISTS替代IN,提升大数据量查询效率;窗口函数OVER()
2025-12-19 23:14:48
846
原创 MySQL窗口函数 OVER()讲解
窗口函数)是对一组行(称为"窗口")执行计算,并为每一行返回一个值的函数。与聚合函数不同,窗口函数不减少行数。
2025-12-19 22:47:29
797
原创 YOLOv8环境配置
如果没有安装conda可以搜索一下conda配置教程,按照流程安装好conda,还要下载好符合自己电脑版本的CUDA 后续会用,这里默认是安装conda环境是没有问题的。推荐yolov8s.pt或者yolov8n.pt,模型小,下载快,在gitee或者github下方readme里面,下载完成后,将模型放在主文件夹下,结果保存在runs\detect\中,你们的看Results saved to 存放地址,结果如下图。是否安装环境所需基础包,输入y安装即可,安装完成如下图。输入下面命令查看是否创建成功。
2025-12-19 22:21:07
1055
原创 悲观锁讲解
先加锁,后操作”- 假设事务之间一定会发生冲突,所以在操作数据之前先获取锁,确保同一时间只有一个事务能操作数据。悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。也就是说,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。像Java中和等独占锁就是悲观锁思想的实现。// 需要同步的操作try {// 需要同步的操作。
2025-12-19 19:56:33
280
原创 乐观锁讲解
高并发的场景下,乐观锁相比悲观锁来说,不存在锁竞争造成线程阻塞,也不会有死锁问题,在性能上往往会更胜一筹。但是,如果冲突频繁发生(写占比非常多的情况),会频繁失败并重试,这样同样会非常影响性能,导致 CPU 飙升。,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源(也就是数据)是否被其它线程修改了(具体方法可以使用版本号机制或 CAS 算法)。原子操作 即最小不可拆分的操作,也就是说操作一旦开始,就不能被打断,直到操作完成。不过,乐观锁主要针对的对象是单个共享变量(参考。
2025-12-19 17:00:59
665
原创 Lombok 注解:简化 Java 代码
Lombok是一个Java库,它可以通过注解的方式自动生成构造函数、getter、setter、toString 等方法,减少了手动编写样板代码的工作量。使用Lombok可以使代码更加简洁,同时也能减少因手动编写样板代码而可能引入的错误。Lombok是一个非常实用的 Java 库,它通过注解的方式自动生成样板代码,使我们的代码更加简洁、高效。然而,在使用Lombok时,我们也需要权衡其优缺点,根据项目的实际情况进行选择。同时,为了保证代码的可维护性,建议在团队中统一对Lombok的使用规范。
2025-12-18 23:37:47
586
原创 GitLab讲解
在C盘下 .ssh 文件夹中会生成 id_rsa 和 id_rsa.pub 两个文件,其中 id_rsa.pub 里面是以ssh-rsa开头并以您的用户名和主机结尾的完整密钥。如果是要下载老版本的汉化包,需要加上老版本的分支,如果想下载10.0.2,可以运行如下语句。安装成功,但是需要配置,安装完成后出现上面的提示,按照提示修改配置文件中的url地址为本地服务器的地址。选择项目路径,输入项目名称,项目描述,选择项目等级(私人的,内部的,公开的),包集成了它需要的软件,简化了安装步骤,所以直接安装。
2025-12-17 22:07:59
877
原创 Nginx详讲
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性丰富的功能集简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器。
2025-12-16 21:32:22
786
原创 Java集合-Queue讲解
Java 集合框架(Collections Framework)是 Java 中用于。它提供了一组接口、实现类和算法。
2025-12-16 14:31:01
690
原创 Java集合-Set讲解
Java 集合框架(Collections Framework)是 Java 中用于。它提供了一组接口、实现类和算法。
2025-12-16 14:02:53
1007
原创 Java集合-List讲解
Java 集合框架(Collections Framework)是 Java 中用于。它提供了一组接口、实现类和算法。
2025-12-16 13:19:18
1327
原创 Spring Cache讲解
key可以用多种情况展示,参数名称,当有多个参数的时候可以使用#p0,#p1,单一参数的时候可以使用#root,参数名称等多种情况。当数据没有存到redis时候,会直接查询数据库,如果存到redis之后会直接从redis中查找,并且不经过代码直接返回。Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。时,Spring 会创建一个缓存相关的切面,以拦截带有缓存注解的方法调用。不同的是,无论缓存中是否已存在,都会执行方法并更新缓存。
2025-12-15 21:30:58
1261
1
原创 Vue2和Vue3的对比
Vue 2bindinsertedupdateVue 3:对齐组件生命周期mountedupdated“销毁改卸载,组合API用on前缀,setup替代创建钩子”Vue3移除了beforeDestroy/destroyed,统一为,语义更准确;同时的钩子需从vue中导入,避免与混淆。// 需要实现完整渲染接口// ... 数十个方法// 使用复杂✅Proxy 响应式:性能更好,支持完整对象✅编译时优化:静态提升、Patch Flag✅:按需导入,包更小。
2025-12-15 12:24:55
1111
原创 JWT令牌技术
JWT令牌是现在越来越流行,使用越来越广泛的会话跟踪技术,可以在多端使用,并且有极强的安全性能,还可以应对服务器集群问题,是解决登录认证问题的最佳选择。
2025-12-15 10:45:12
585
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅