- 博客(154)
- 收藏
- 关注
原创 Springboot并发篇
推荐做法:将异步服务和调用者分开到不同的类中不推荐但可行:如果必须放在同一类中,可以使用自我注入或获取代理对象的方式注意事项确保已添加注解配置合适的线程池异步方法应为public方法同一类内直接调用异步方法不会生效分离关注点(Separation of Concerns)是更好的设计实践,建议将异步服务单独放在一个类中。方法优点缺点适用场景功能强大,Java 8+原生支持需要理解函数式编程推荐大多数场景控制精确,简单直接需要手动管理计数需要精确同步控制的场景Spring原生支持不如。
2025-05-22 19:04:17
986
原创 图片矫正模型
doctr是一个用于文档图像分析的开源库,由法国的 DocEdge 团队开发。它建立在深度学习框架(如 PyTorch 和 TensorFlow)之上,为文档处理任务提供了高度模块化且易于使用的解决方案。以下是doctr。
2025-04-27 17:49:30
319
原创 DJL FastText (FtModel) 使用指南
java复制下载.optEngine("FastText") // 指定使用FastText引擎.optOption("quantized", "true") // 如果使用量化模型.build();// 使用predictor...
2025-04-27 13:56:40
564
原创 ApplicationListener<ApplicationReadyEvent>
是 Spring 框架里的一个接口,借助实现这个接口,你能够监听事件。当 Spring 应用完全启动并准备好处理请求时,就会发布事件。下面为你详细介绍其用法。
2025-04-27 11:19:47
165
原创 Apache PDFBox
Apache PDFBox 是一个用于处理 PDF 文档的开源 Java 库,由 Apache 软件基金会开发和维护。它提供了丰富的功能,允许开发者在 Java 应用程序中创建、读取、修改和提取 PDF 文件中的信息。
2025-04-22 10:59:30
657
原创 @Valid VS @Validated
在 Spring 相关的开发中,@NotEmpty并非 Spring 框架直接提供的注解,而是 JSR-303(Bean Validation 1.0)和 JSR-349(Bean Validation 1.1)规范中定义的注解,在 Spring 项目里,通常借助 Hibernate Validator 这个实现来使用它。下面为你详细介绍@NotEmpty。
2025-04-05 14:28:22
729
原创 Swagger @ApiOperation
注解并非 Spring Boot 自带的注解,而是来自 Swagger 框架,Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,而主要用于为 API 接口的操作添加描述信息。
2025-04-05 14:19:02
430
原创 Redis 梳理汇总目录
Redis 哨兵集群(Sentinel)与 Cluster 集群对比-优快云博客如何快速将大规模数据保存到Redis集群-优快云博客Redis的一些高级指令-优快云博客
2025-04-01 16:33:10
254
原创 Redis的一些高级指令
在 Redis 中,pipeline(管道,你可能是想问这个而不是pinline)是一种用于批量执行命令的机制,它允许客户端将多个命令一次性发送到 Redis 服务器,而不需要等待每个命令的响应,然后一次性接收所有命令的响应。这种方式可以减少客户端和服务器之间的网络往返次数,提高执行效率。下面以 Python 的redis-py客户端库为例,展示如何使用管道来批量执行命令:python在上述代码中:首先创建了一个 Redis 客户端连接对象r。然后通过创建了一个管道对象pipe,并使用with。
2025-04-01 16:31:32
531
原创 如何快速将大规模数据保存到Redis集群
从 Redis 读取数据时再进行解压缩,这样可以减少数据在网络传输和 Redis 存储中所占用的空间,提高存储和读取的速度。:将大规模数据按照一定的规则进行分片,然后并行地将各个分片的数据保存到 Redis 集群中。在使用多线程或多进程时,要注意处理好线程安全和资源竞争的问题,确保数据的一致性和正确性。在实际应用中,需要根据具体的业务场景和数据特点,综合运用这些策略来达到最佳的性能表现。使用这些批量操作可以减少与 Redis 集群的交互次数,从而提高数据保存的效率。:避免逐条插入数据,Redis 提供了。
2025-04-01 16:15:09
341
原创 Redis 哨兵集群(Sentinel)与 Cluster 集群对比
redis-cli --cluster set-timeout 15000 # 调整节点超时时间。Master[主节点宕机] --> Detect[从节点检测到主FAIL]redis-cli --cluster rebalance # 自动平衡槽位分布。Elect -->|获得多数主节点同意| Promote[晋升为新主]遵循先到先得原则(First-Come-First-Served)# 通过min-replicas-to-write配置预防。实际选型需结合数据规模、业务特征和技术栈成熟度综合决策。
2025-04-01 16:01:02
1016
原创 RAG专栏:提示工程
提示工程(Prompt Engineering)是指设计和优化向语言模型(如 GPT 系列、BERT、文心一言、通义千问等)输入的文本提示,以引导模型生成更准确、有用、符合预期的输出的过程。提示工程通过为大模型设计高效且精确的提示词,能够有效引导大模型理解输入信息,从而提升生成的准确性与相关性。
2025-03-27 12:01:45
140
原创 RAG专栏:混合检索
混合检索,又称融合检索 / 多路召回,是指在检索过程中同时采用多种检索方式,并将各类检索结果进行融合,从而得到最终的检索结果。混合检索的优势在于能够充分利用不同检索方式的优点,弥补各自的不足,从而提升检索的准确性和效率。
2025-03-27 11:10:12
430
原创 RAG专栏:向量数据库
Chroma、Qdrant 适合快速开发和轻量化部署,Milvus/Zilliz 适用于高性能和可扩展性需求,FAISS 适合不要求持久化且对性能有极致要求,Weaviate 和 LanceDB 在多模态数据处理中表现出色,PGVector、Elasticsearch 和 Redis 则在现有数据库的高效集成中占优势,而 Pinecone 是云托管场景的理想选择。通过这种索引和检索机制,检索到的向量为生成模型提供了必要的上下文信息,使模型能够依据当前的语义上下文生成更加精准和相关的响应。
2025-03-26 20:16:24
264
原创 RAG专栏:嵌入技术
Embedding 嵌入是指将文本、图像、音频、视频等形式的信息映射为高维空间中的密集向量表示。这些向量在语义空间中起到坐标的作用,捕捉对象之间的语义关系和隐含的意义。通过在向量空间中进行计算(例如余弦相似度),可以量化和衡量这些对象之间的语义相似性。在具体实现中,嵌入的每个维度通常对应文本的某种特征,例如性别、类别、数量等。通过多维度的数值表示,计算机能够理解并解析文本的复杂语义结构。
2025-03-26 17:06:55
378
原创 RAG专栏:分块策略
文档数据(Documents)经过解析后,通过分块技术将信息内容划分为适当大小的文档片段(chunks),从而使 RAG 系统能够高效处理和精准检索这些片段信息。分块的本质在于依据一定逻辑或语义原则,将较长文本拆解为更小的单元。分块策略有多种,各有侧重,选择适合特定场景的分块策略是提升 RAG 系统召回率的关键。
2025-03-26 16:48:23
959
原创 RAG专栏:文档解析
一般企业内部数据源多样性:如关系型数据 mysql,非关系型数据:redis,时序数据:InfluxDB及其他 ES 等,还有文档类的:pdf,word,ppt,excel,cvs,MD,json,xml,html等,针对这些不同的数据格式,我们需要针对各种类型做出对应处理。主要运用LangChain Document Loaders来对应文档操作。
2025-03-26 12:01:59
187
原创 RAG专栏:RAG的场景及技术原理
RAG 模型的核心思想在于通过检索与生成的有机结合,弥补大模型在处理领域问题和实时任务时的不足。传统的生成模型在面对复杂问题时,往往由于知识储备不足,生成出错误或无关的回答。而 RAG 通过检索模块获取相关的背景信息,使生成模块能够参考这些信息,从而生成更具可信度和准确性的答案。这种方法不仅增强了生成内容的准确性,还提高了模型在应对特定领域知识和动态信息时的适应能力。
2025-03-26 11:01:35
615
原创 Java 什么是线程安全及如何实现线程安全
通过 JVM 内置锁(Monitor)实现互斥访问,确保同一时间只有一个线程执行临界区代码。:基于 CAS(Compare-and-Swap)实现无锁线程安全操作,适用于简单原子操作。理解线程安全的三要素(原子性、可见性、有序性)是解决多线程问题的关键。死锁(Deadlock):多个线程互相等待对方释放锁,导致永久阻塞。:保证变量的可见性和禁止指令重排序,但不保证原子性。:操作不可分割,要么全部完成,要么全部不执行。更灵活的锁控制(如可中断、超时、公平锁)。单一变量的原子操作(如计数器、标志位)。
2025-03-12 18:31:26
1273
原创 Spring Bean
三者初始化方式同时出现时候的顺序依次为:@PostConstruct 标注方法, 实现 InitializingBean 接口的 afterPropertiesSet() 方法,最后才是自定义初始化方法如@Bean(initMethod = "initUserFactory")。
2025-03-08 22:49:37
253
原创 Spring 构造器注入和setter注入的比较
在 Spring 框架中,构造器注入(Constructor Injection)和 Setter 注入(Setter Injection)是实现依赖注入(DI)的两种主要方式。它们的核心区别在于依赖注入的时机、代码设计理念以及适用场景。以下是两者的详细比较:优点:不可变性:依赖字段可声明为 ,确保线程安全和对象状态一致性。明确性:强制要求所有必需依赖,避免 。代码简洁性:结合 Lombok 的 ,可自动生成构造方法。兼容测试:易于在单元测试中手动注入依赖。缺点:灵活性不足:对可选依赖支持较弱,需通过重载构
2025-03-07 18:24:33
984
原创 IOC 篇
Spring IOC(Inversion of Control,控制反转)是 Spring 框架的核心特性之一,它是一种设计理念,用于实现对象的创建和依赖关系的管理。
2025-03-07 18:21:52
398
原创 SpringBoot 外化配置及加载顺序
Spring Boot 的配置加载顺序以“就近覆盖”为原则,同时支持灵活的外部化配置。理解这一机制有助于在不同环境(开发、测试、生产)中高效管理配置。Spring Boot 的外化配置加载顺序遵循特定的优先级规则,高优先级的配置会覆盖低优先级的。分隔符定义不同 Profile 的配置(需 Spring Boot 2.4+)。通过环境变量或系统属性传递的 JSON 格式配置,如。或 YAML 文件(如。或 YAML 文件(如。或 YAML 文件(如。或 YAML 文件(如。(命令行参数优先级最高)。
2025-03-06 08:08:34
390
原创 Kubernetes 篇
Kubernetes 中的资源通常是按命名空间(Namespace)进行隔离的,因此需要先确定目标 Pod 所在的命名空间。在开始查询 Pod 日志之前,需要确保你已经正确配置了 Kubectl 工具,并且能够连接到目标 K8S 集群。通过以上步骤,你可以在 K8S 集群环境下完整地查询一个 Pod 的日志,并检索包含特定关键字的日志信息。在确定了命名空间之后,需要找到目标 Pod 的名称。命令来检索包含特定关键字的日志信息。如果需要查看 Pod 的实时日志,可以使用。如果日志信息较多,可以使用。
2025-03-05 14:23:07
828
原创 Mysql死锁场景案例及解决方案
MySQL 死锁(Deadlock)是指两个或多个事务在执行过程中,因争夺资源而相互等待的现象。每个事务都持有对方需要的锁,导致无法继续执行。通过统一操作顺序、优化索引、减少事务粒度、设置锁超时等方法可有效避免死锁。实际开发中需结合业务场景和监控日志,持续优化事务设计和数据库配置。MySQL死锁的常见原因包括。
2025-02-27 11:00:54
641
原创 Mysql 死锁场景及解决方案
在可重复读(RR)隔离级别下,事务A删除某范围数据,事务B尝试插入相同范围的数据。:高并发下插入相同唯一键数据,事务A和事务B同时尝试插入,触发唯一约束冲突。:更新操作未命中索引,导致全表扫描,锁住所有记录(甚至间隙锁)。:双方各持有一把锁,同时请求对方持有的锁,形成循环等待。部分,分析锁类型(行锁、间隙锁)和事务操作路径。:监控并拆分执行时间过长的事务,减少锁持有时间。:无索引时,行锁可能升级为表锁,增大死锁概率。:间隙锁阻塞插入操作,导致互相等待。:减少事务内操作,尽快提交释放锁。
2025-02-27 11:00:04
919
原创 ReentrantLock 底层实现
CAS(Compare-And-Swap,比较并交换)操作是一种无锁的原子操作,它在多线程环境下能够保证线程安全,主要是通过硬件级别的原子性以及乐观锁的思想来实现的。以下详细介绍 CAS 操作保证线程安全的原理:CAS 操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B)。其操作过程如下:在 Java 中, 类提供了一些基于 CAS 的操作方法,例如 、 等, 等原子类就是基于这些方法实现的。CAS 操作的原子性是由硬件保证的。在现代 CPU 中,CAS 操作是一个原子指令,这意味着在执行 CAS
2025-02-26 19:59:09
591
原创 Springboot 启动过程
• 它会扫描启动类所在包及其子包下的所有组件,包括带有@Component、@Service、@Repository、@Controller等注解的类,将它们注册为Spring Bean,放入Spring容器中进行管理。• 当应用接收到关闭信号(如通过命令行输入停止命令或系统关闭事件)时,Spring Boot会执行关闭流程,包括关闭嵌入式服务器、释放资源、销毁Spring容器中的Bean等操作,确保应用安全、有序地关闭。• 当所有的配置和初始化工作完成后,Spring Boot应用就成功启动了。
2025-02-26 08:28:38
159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人