- 博客(173)
- 资源 (2)
- 收藏
- 关注
原创 【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
Redisson:Redis的Java分布式应用框架 Redisson是一个强大的Java驻内存数据网格框架,基于Redis实现分布式锁、集合、对象等功能。它将Redis复杂操作封装为简单易用的Java接口,支持分布式锁(RLock)、集合(RMap/RList)、对象(RBucket)等数据结构的本地化操作。通过底层Redis数据结构(String/Hash/List)和Lua脚本实现高效分布式功能,并提供自动序列化、锁续期等特性。集成Spring Boot时只需简单配置即可注入RedissonClien
2025-06-07 14:27:02
933
原创 【Java微服务组件】分布式协调P3-从简单到复杂:锁的分布式协调之道
在微服务架构中,分布式协调是确保服务间高效协作的关键。本文深入剖析 Redis 和 ZooKeeper 在分布式锁实现中的机制与挑战,从基础的 SETNX 和 ZNode 到复杂生产场景下的锁续期、身份认证与可重入设计。面对网络不可靠、客户端崩溃等现实问题,我们探讨了看门狗、Lua 脚本、会话机制等解决方案,并对比了两者共识机制的权衡:ZooKeeper 的强一致性保障可靠但牺牲可用性,Redis 的高性能则以最终一致性为代价。解锁分布式协调的奥秘,助你应对复杂分布式系统的挑战!
2025-06-07 10:00:00
699
原创 职责链模式怎么设计?双亲委派告诉你
本文以Java双亲委派机制为例,阐述了职责链模式的设计思想。通过抽象类加载器MyClassLoader实现模板方法loadClass(),定义了检查缓存、父加载器委派、子类查找的标准流程。具体加载器如ExtensionLoader和AppLoader继承该模板,分别从ext和app目录查找类资源。这种分层处理机制既保证了类加载的唯一性,又实现了责任边界划分,体现了职责链模式"多个对象处理同一请求"的核心思想,有效解耦了请求发送者和接收者之间的关系。 (摘要字数:148字)
2025-06-06 11:38:57
395
原创 双亲委派机制为什么建立又为什么破坏?
成熟的设计应该兼具稳定性、安全性,同时又满足复杂应用场景和高级功能的灵活性和扩展性。追求简单、安全、高效,但不牺牲应对复杂性的能力。就像Java的类加载机制。
2025-06-06 08:30:00
618
原创 深入浅出 Byte Buddy:掌握 Java 运行时代码操作的利器
摘要: 本文介绍了Byte Buddy字节码增强技术的核心原理与常用API,通过示例展示了如何动态创建类、修改方法行为。主要内容包括: 技术优势:Byte Buddy相比其他字节码工具性能更优,API设计现代化,仅依赖ASM库。 核心功能: 动态创建类(subclass) 修改现有类(方法拦截/字段添加) 代理模式实现 非侵入式增强(如监控/日志) 关键API: DynamicType.Builder:类结构定义 ElementMatcher:元素匹配 MethodDelegation:方法委托(支持@Su
2025-06-05 21:17:46
791
原创 无侵入监控能力原理-Java Agent原理与入门
Java的众多监控工具(如Arthas、JProfiler、async-profiler)基本都具备无侵入的监控能力,这是怎么做到的呢?即答,使用Java Agent与字节码增强技术。
2025-06-05 08:30:00
635
原创 【Java实战】系统时间是如何坑人的?
为什么数据库服务器的时间是 12:00:00,我们的应用程序查询出来的时间却不是呢?可能是时间不一致,多半是时区偏移的影响。
2025-06-04 08:30:00
525
原创 【Java实战】服务是怎么挂掉的?
【摘要】 Java程序异常挂掉常见原因包括:1️⃣ OOM(堆内存、Metaspace、线程栈等不足);2️⃣ 代码逻辑问题(未捕获异常、死锁、无限循环);3️⃣ JVM崩溃(内部错误或JNI调用故障);4️⃣ 外部因素(系统OOM Killer、资源耗尽、依赖服务故障)。分析时需结合日志(应用/JVM/系统)、监控工具(JConsole/Arthas)及Dump文件(Heap/Thread Dump),定位内存泄漏或线程阻塞。合理配置JVM参数与异常处理是预防关键。 (字数:149)
2025-06-04 08:30:00
1092
原创 LangChain快速筑基(带代码)P8(完结)-SimpleRAG
摘要 本文介绍了一个基于LangChain框架的简单RAG(检索增强生成)实现方案。代码整合了多个模块:1)使用DeepSeek API初始化LLM;2)加载HuggingFace中文嵌入模型;3)构建Chroma向量数据库。核心RAG链通过检索相关文档并将其格式化为上下文,结合提示模板生成回答,当信息缺失时会明确告知用户。文中提供了完整的Python代码实现,包括各组件初始化、文档格式化处理以及RAG链的构建流程,并推荐了几个测试问题来验证系统效果。
2025-06-03 21:56:21
263
原创 LangChain快速筑基(带代码)P7-LLM外部数据检索Retrievers
文章摘要 本文介绍了LangChain中的Retriever机制,重点讲解了VectorStoreRetriever的实现与应用。作者通过代码演示如何将向量数据库转换为Retriever,并配置不同检索策略(相似性搜索/MMR),同时展示过滤元数据等高级用法。文章延续上篇的chroma数据库实例,详细说明Retriever统一交互标准的意义,以及通过search_kwargs参数定制搜索行为的方法(如设置返回数量k、元数据过滤等)。最后提供了完整的Python实现示例,包括初始化嵌入模型、加载持久化数据库及
2025-06-03 21:54:07
859
原创 LangChain快速筑基(带代码)P6-文本转向量存储
摘要 本文介绍了LangChain中文本转向量存储的关键步骤,主要包含两部分:嵌入模型(Embeddings)和向量数据库(Vector Stores)。嵌入模型(如HuggingFaceEmbeddings)将文本转换为语义向量,向量数据库(如Chroma)则高效存储和检索这些向量。文章通过代码示例展示了如何使用RecursiveCharacterTextSplitter分割文本、HuggingFaceEmbeddings生成向量,并最终存入Chroma数据库的过程。核心流程包括:文档分割→嵌入生成→向量
2025-06-03 21:52:39
843
原创 NVIDIA CUDA Toolkit安装
向量数据库FAISS有两个版本,分别是CPU 和 GPU 版本。其中GPU版本的CUDA配置如下。配置完成可以利用硬件加速。
2025-06-03 15:03:18
347
原创 【Spring】Spring哪些源码解决了哪些问题P1
本文介绍了Spring处理请求参数与响应的机制,重点解析了@RequestBody参数的绑定流程及JSON序列化自定义方法。Spring通过HandlerMethodArgumentResolver解析方法参数,其中RequestResponseBodyMethodProcessor负责处理@RequestBody,借助HttpMessageConverter(如MappingJackson2HttpMessageConverter)实现JSON反序列化。为定制JSON行为,可通过Jackson2O
2025-06-03 09:53:56
1220
原创 LangChain快速筑基(带代码)P5-已加载文本处理Text Splitters
在上一篇中,我们已经成功做到加载各类型数据。如果直接将整个长文档扔给大模型还有几个问题:上下文窗口限制、成本高、效率低、检索效果差。为了解决这些问题,LangChain提供了**文本分割器 (Text Splitters)**。
2025-06-02 10:15:00
756
原创 LangChain快速筑基(带代码)P4-文档加载Document Loaders(RAG起点)
怎么让大模型基于自己提供的数据做出回答呢?LangChain提供了文档加载器Document Loaders用于从各种来源(PDF文件、TXT文件、网页、数据库等)加载数据到LangChain中。数据加载之后,LangChain就可以使用其他组件(如文本分割器 Text Splitter、向量存储 Vector Store、检索起 Retriever)来实现基于数据的问答啦。
2025-06-02 10:00:00
960
原创 【Java实战】低侵入的线程池值传递
ThreadLocal存储值线程安全的本质,是获取线程实例独享的的ThreadLocalMap属性。且k-v内容为this-value.在线程池复用线程的场景中,如果每次使用ThreadLocal存储值而不清除,线程的ThreadLocalMap将会持续扩容,直至内存溢出。为此,我们需要在每次使用完ThreadLocal后进行remove操作。但是在复杂场景中,我们可能忘记清理。甚至在一些场景,我们希望主线程中ThreadLocal的值可以低侵入地传递到子线程中,那么,我们应该怎么做呢?
2025-05-31 23:00:01
1444
原创 LangChain快速筑基(带代码)P3-连续对话Memory
摘要 本文介绍了LangChain中的Memory组件功能及其在多轮对话中的应用。Memory通过存储和加载历史对话内容,使大模型能够保持上下文连贯性。文章重点演示了两种基础Memory类型: ConversationBufferMemory - 完整记录所有历史对话,适用于需要完整上下文的场景。代码示例展示了如何初始化内存、创建对话链并进行多轮对话测试。 ConversationBufferWindowMemory - 只保留最近的K轮对话,防止上下文过长。文中提供了转换到窗口内存的方法,但完整代码未展示
2025-05-31 18:29:46
571
原创 LangChain快速筑基(带代码)P2-链式调用Chains
本文介绍了LangChain中的链式调用(Chains)概念,重点讲解了两种链式结构:SimpleSequentialChain和SequentialChain。SimpleSequentialChain适用于简单顺序流程,将前一个链的输出自动传递给下一个链;而SequentialChain更灵活,支持多输入输出和中间结果访问。文章还介绍了StrOutputParser、LCEL语法和RunnablePassthrough等辅助组件,并通过代码示例展示了如何构建一个从故事标题生成到情节概要的多步骤链式流程。
2025-05-30 12:35:16
699
原创 LangChain快速筑基(带代码)P1-输入控制与输出解析
摘要: 本文介绍了如何利用LangChain框架增强AI对话的可控性,重点讲解提示模板(Prompt Templates)和输出解析器(Output Parsers)的使用。通过代码示例演示了如何规范输入指令、约束AI角色(如设为LangChain专家),并动态生成结构化输出(如JSON或列表)。文章还对比了元组语法与消息对象的差异,强调提示模板对提升对话质量的作用,适合开发者快速实现可控的AI交互场景。(150字) 关键词: LangChain、提示模板、输出解析器、AI可控性、结构化输出
2025-05-29 20:30:00
1460
原创 【Java实战】程序为什么慢?P1——启动时刻
程序启动慢的原因主要包括:初始化任务过多(框架、资源、自定义任务)和硬件性能不足;可通过精简初始化内容、异步非关键任务优化。方法首次调用慢源于JVM懒加载机制,建议对核心业务代码预热。Feign首次调用慢因TCP握手和服务发现延迟,可启用预热及Ribbon/LoadBalancer的缓存功能(如ribbon.eager-load.enabled或spring.cloud.loadbalancer.cache)加速后续请求。注意预热需针对高频核心路径,避免过度预热。
2025-05-29 08:30:00
248
原创 【System Design】系统设计:设计一个春晚红包雨系统
春晚红包雨系统设计。需求分析到边界与框架确认,然后做详细设计,以及完成最后的架构设计。主要设计思想为批量处理、缓冲、预处理。
2025-05-28 08:15:00
1194
原创 【System Design】系统设计入门概述
本文介绍了系统设计的基本思维框架和评估方法。作者提出使用2W1H公式(是什么、为什么、怎么做)进行结构化思考,强调演进式设计思维。系统设计主要从可行性、特定问题解决能力、分析能力、权衡能力和知识储备五个维度评估。在分析方法上,建议按照场景分析、服务拆分、存储设计和可扩展性四个步骤逐步深入。文章还列举了TPS、HPS和QPS三个关键性能指标。整体强调系统设计没有标准答案,但应该追求可扩展、高性能、可维护等核心特性。
2025-05-27 12:19:51
386
原创 【MySQL】2-MySQL索引P2-执行计划
本文摘要了MySQL执行计划EXPLAIN语句的output列说明,主要包括id和select_type两个字段。id表示SELECT语句的顺序号,数值越大越先执行;相同id时则按输出顺序执行。select_type表示SELECT类型,如简单查询、子查询等。文章还提供了官方文档链接,帮助理解如何通过EXPLAIN分析查询执行情况,优化索引使用和表连接顺序。内容简明扼要,适合需要了解MySQL执行计划的开发者快速查阅。
2025-05-27 11:13:50
639
原创 【MySQL】慢查询分析
摘要: 本文介绍了MySQL慢查询日志的配置与分析方法,帮助定位数据库性能问题。通过修改配置文件或使用SET GLOBAL命令可开启慢查询日志,设置阈值(如1秒)、输出目标(文件/表)及记录未使用索引的查询。推荐使用pt-query-digest工具分析日志,获取执行频率、耗时等关键指标。慢SQL主要因查询冗余数据或数据量过大导致,可通过优化索引、表结构、分库分表或提升服务器配置解决。合理配置慢查询日志对性能诊断至关重要。
2025-05-27 01:54:34
456
原创 【Redis】3-从数据结构看Redis应用
Redis作为高效内存数据库,支持多种数据结构(String、List、Set、Sorted Set等),适用于缓存、分布式锁、排行榜等场景。String可作原子计数器;List实现队列/栈;Set跟踪唯一项;Sorted Set构建排行榜。Redis还提供JSON支持,位图适合签到统计。常见缓存问题(穿透、击穿、雪崩)可通过请求过滤、随机过期时间等解决。分布式锁利用String的NX特性实现。官网详细介绍了各数据结构的应用实例。
2025-05-26 16:14:16
1107
原创 【Redis】2-Redis监控与内存
摘要: 本文介绍了Redis高效利用内存的设计,重点探讨了监控与内存管理机制。监控方面涵盖慢查询日志、监视器命令及生产级监控方案(如Prometheus)。内存管理解析了过期键删除策略(惰性+定期删除)及8种内存淘汰策略(如LRU/LFU)。针对常见内存问题,提出大Key处理、内存碎片优化等解决方案,并强调关注evicted_keys指标以避免频繁内存淘汰对性能的影响。为Redis运维提供实用监控与调优思路,适用于生产环境性能优化场景。
2025-05-26 00:13:52
868
原创 【Redis】1-高效的数据结构P3-压缩列表与对象
摘要:本文介绍了Redis的压缩列表(ziplist)和对象系统。压缩列表是节约内存的顺序型数据结构,用于存储少量小整数值或短字符串的列表/哈希键。Redis对象系统通过引用计数实现内存回收和对象共享机制,不同键可以共享常用短字符串和小集合对象以节省内存。对象还记录访问时间信息,支持近似LRU/LFU等淘汰策略。LRU通过随机采样淘汰空转最久的键,LFU则基于访问频率统计。引用计数机制在refcount归零时自动回收内存。(149字)
2025-05-24 22:10:20
684
原创 【AI】小参数,大影响:从OpenAI参数看AI开发挑战
本文介绍了在使用OpenAI等大模型API时,如何通过调整参数来控制模型的输出。主要参数包括: messages:用于输入对话内容,包含角色和内容。 temperature 和 top_p:控制输出的随机性和创造性,通常二选一。 max_tokens:限制生成文本的长度。 presence_penalty 和 frequency_penalty:减少重复性,提高新颖度。 stop:设置停止条件,精确控制生成结束。 n:生成多个候选输出。 stream:实时获取生成内容,提升用户体验。 通过这些参数,开发者可
2025-05-23 12:14:28
729
原创 【AI】AI基础概念
机器学习(Machine Learning, ML)是一种通过数据训练模型,使计算机能够自动从数据中学习模式和规律的编程方式。根据学习方式和数据类型的不同,机器学习主要分为三大类:监督学习、无监督学习和强化学习。监督学习通过带有标签的数据集进行训练,目标是学习一个映射函数以预测新数据;无监督学习则处理无标签数据,旨在发现数据中的隐藏结构;强化学习通过智能体与环境的交互,以最大化累积奖励为目标。深度学习是实现这些范式的强大手段,利用多层神经网络自动提取数据的层次化特征,广泛应用于计算机视觉、自然语言处理等领域
2025-05-23 12:11:40
598
原创 【Java面试】场景设计——延迟方案
消息延迟处理在业务场景中常见,如15分钟内未付款则关闭订单。处理方式可分为基于内部存储(如延迟队列)和外部存储(如消息队列)。本地延迟消息可通过内存队列实现,而分布式系统中的延迟消息则涉及定时任务调度设计,需具备容错性和高性能。生产级应用通常采用外部存储方案,如支付场景中的消息延迟处理方案,确保消息不丢失且高效执行。
2025-05-22 08:00:00
140
原创 【Java微服务组件】异步通信P1—消息队列基本概念
消息队列(MQ)是一种异步通信方式,广泛应用于异步处理、流量削峰、数据广播等场景,追求高性能和应用解耦。MQ的基本模型包括点对点(P2P)和发布/订阅(Pub/Sub)两种。P2P模型中,生产者发送消息到队列,消费者从队列中接收消息,确保消息被处理一次;Pub/Sub模型中,生产者将消息发布到主题,所有订阅该主题的消费者都会收到消息副本,适合事件驱动架构。消息由消息体和消息头组成,常见消息体格式有JSON、XML、Protobuf等。消息代理(Broker)负责接收、存储和转发消息,消息持久化确保消息不丢失
2025-05-20 21:36:54
596
原创 《财务自由之路Ⅱ》理论篇
《1000万销量的财务自由之路》通过理论和实践结合,探讨了实现财务自由的关键要素。书中强调明确目标、自我认知和持续学习的重要性,建议通过不断调整定位、解决弱点、寻找榜样和提升安全感来实现目标。作者指出,赚钱方式多样,但关键在于如何利用时间、出售想法和多次赚钱。此外,书中提倡正视风险、从错误中学习,并鼓励做热爱的事情,认为实现自我从未如此容易。这些观点为追求财务自由的人提供了实用的指导和启发。
2025-05-20 11:27:55
274
原创 【Spring】Spring中的适配器模式
本文介绍了适配器模式及其在Spring MVC中的应用。适配器模式通过将不兼容的接口转换为客户期望的接口,使不同类能够协同工作。在Spring MVC中,DispatcherServlet通过HandlerAdapter接口统一调用不同类型的处理器(Handler),如@Controller注解的方法或实现HttpRequestHandler接口的类。Spring提供了多种HandlerAdapter实现,每种适配特定类型的Handler,如RequestMappingHandlerAdapter和Http
2025-05-18 13:46:18
831
原创 【Spring】Spring的请求处理
本文介绍了Spring框架在处理应用层不同协议请求时的应用。首先,文章概述了服务间通信的三种模式:同步、异步和流式通信,并指出Spring框架专注于应用层开发。接着,详细探讨了Spring如何处理HTTP/HTTPS协议,包括Spring Web与Spring Web MVC模块的功能和流程,以及Spring WebFlux模块的响应式编程特性。此外,文章还提到了自定义TCP/IP协议的处理方式,如gRPC和Apache Dubbo,以及Spring框架对FTP和SMTP协议的支持。通过这些内容,读者可以了
2025-05-17 17:25:16
1152
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人