- 博客(60)
- 收藏
- 关注
原创 Spring Boot 启动流程的深度剖析
Spring Boot 是一个基于 Spring 框架的开源项目,旨在简化 Spring 应用的创建、配置和运行。Spring Boot 的启动流程可以概括为:加载配置 -> 创建上下文 -> 执行自动配置 -> 初始化各种组件 -> 启动应用。通过对 Spring Boot 启动流程的深入剖析,我们对 Spring Boot 的工作机制有了更清晰的认识。结合源码的解读,我们能够更好地理解各个环节的实现原理。希望本文能够帮助读者在实际开发中更好地运用 Spring Boot 框架。
2024-08-19 11:49:50
915
原创 Java 中的 SPI 机制:探索服务发现与扩展的奥秘
SPI 是一种将服务接口与服务实现分离的机制,使得应用程序可以在运行时动态地发现和加载服务实现。它的核心思想是定义一个接口,然后由不同的实现方提供具体的实现类。在运行时,通过特定的配置文件,程序可以自动加载并使用这些实现类。SPI 机制是 Java 中实现服务发现和扩展的重要手段,通过将接口与实现分离,提高了系统的灵活性和可扩展性。Java SPI 作为基础的 SPI 实现,为其他框架的 SPI 机制提供了借鉴。
2024-08-19 11:40:32
750
原创 Java 中 HashMap 和 ConcurrentHashMap 核心原理解析
在现代软件开发中,数据的存储和检索是核心操作之一。高效的数据结构可以大大提高程序的运行效率,减少内存占用,提升用户体验。Java 作为一种广泛应用的编程语言,提供了多种数据结构来满足不同的需求,其中 HashMap 和 ConcurrentHashMap 是常用的键值对存储结构。本文深入探讨了 Java 中 HashMap 和 ConcurrentHashMap 的核心原理。HashMap 采用数组 + 链表 / 红黑树的存储结构,通过哈希函数将键映射到数组的索引位置,当负载因子达到一定值时会进行扩容操作。
2024-08-19 11:28:55
596
原创 Java 中关键字锁 synchronized 核心原理
大家好,我叫马丁,是一名专业的 Java 程序员。我经常在 CSDN 平台分享技术博客,希望能够帮助到大家。
2024-08-19 11:21:11
875
原创 深入理解 JVM:性能优化与问题解决之道
JVM 作为一个虚拟的计算机,其架构设计精巧而复杂。它主要由类加载器、运行时数据区、执行引擎和本地方法接口等核心组件构成。这些组件紧密协作,共同确保 Java 程序的正确执行。类加载器负责将字节码文件加载到 JVM 中,并通过一系列复杂的操作将其转换为可执行的代码。运行时数据区则为程序的运行提供了内存空间,用于存储各种数据,如栈用于存储方法的局部变量和操作数栈,堆用于存储对象实例,方法区用于存储类信息、常量、静态变量等。执行引擎则承担着解释和执行字节码指令的重要任务,将字节码转换为机器码并执行。
2024-08-19 10:33:41
538
原创 深入探究 Jmeter:性能测试的全方位指南
Jmeter 是 Apache 组织开发的一款开源的性能测试工具,它具有功能强大、易于使用、扩展性好等优点,被广泛应用于各种类型的性能测试中。Jmeter 可以模拟多种类型的负载,如 HTTP 请求、数据库请求、FTP 请求等,支持多种协议和数据格式。同时,Jmeter 还提供了丰富的监听器和断言,用于收集和分析测试结果,帮助我们快速定位和解决性能问题。Jmeter 在性能测试领域中具有重要的地位,它是许多性能测试工程师的首选工具之一。
2024-08-19 10:15:36
840
原创 深入剖析 RabbitMQ:架构深度解析、原理细节与关键特性全面掌握
本文深入探讨了 RabbitMQ 这一开源消息代理的各个方面,包括其架构设计、工作原理、关键特性如延迟消息、死信队列、高可用性、消费限流、去重策略、消息持久化和事务性操作等。旨在为开发者和架构师提供全面的 RabbitMQ 知识,以助其在分布式系统中有效利用该技术。
2024-08-19 09:49:30
943
原创 Spring 如何解决 Bean 的循环依赖问题
在接下来的篇章中,我们将深入剖析 Spring 是如何巧妙地解决 Bean 的循环依赖问题,并对相关的源码进行逐行解读,揭开这一神秘面纱背后的技术奥秘。这一创新的解决方案不仅在普通的 Bean 中发挥着神奇的作用,即使面对需要 AOP 代理的复杂 Bean ,也能游刃有余,确保应用在复杂的依赖关系中依然能够稳定前行。在 Spring 的框架下,当我们获取对象的引用时,对象的属性可以被智慧地延后设置。这些未成熟的 Bean 实例在解决循环依赖的过程中扮演着关键的角色,如同临时的桥梁,帮助跨越依赖的鸿沟。
2024-08-19 09:27:29
716
原创 深入探索 Java 线程池:原理、实战与优化
本文将深入探讨 Java 线程池的原理,包括源码解读、线程池关闭的方法对比、优雅关停线程池的实现、不同任务提交方法对异常的处理、JDK 线程池和 Spring 线程池的对比,以及通过线程池处理一个批处理任务的实战案例。当提交新任务时,如果线程池中的线程数小于核心线程数,会创建新的核心线程来执行任务;Spring 线程池在 JDK 线程池的基础上进行了封装和扩展,提供了更多的配置选项和管理功能,例如与 Spring 的上下文集成、动态调整线程池参数等。是线程池的核心类,它提供了丰富的参数来控制线程池的行为。
2024-08-19 08:59:54
751
原创 深入探究 Java 中的单元测试 Mock 技术
单元测试中的 Mock 技术是一项强大的工具,能够帮助我们更高效地编写可靠的代码。首先,我们需要在 Maven 项目的。在实际项目中,可能会遇到更复杂的交互场景,例如方法的多次调用、不同的参数组合等。这些模拟对象可以按照我们预先设定的规则返回特定的值,从而控制测试的输入和输出,使测试更加聚焦于被测试的单元本身。除了设置返回值,我们还可以对 Mock 对象的方法调用进行验证,以确保被测试的代码按照预期与依赖对象进行交互。在测试中保持清晰的意图,确保 Mock 的设置和验证能够准确反映测试的目标。
2024-08-18 22:24:50
914
原创 ThreadLocal、InheritableThreadLocal 与 TransmittableThreadLocal 的深度探究
在当今的 Java 多线程编程领域,ThreadLocal 及其相关的扩展 InheritableThreadLocal 和 TransmittableThreadLocal 宛如三把利剑,为我们在处理线程本地数据时提供了强大而灵活的工具。深入理解它们各自的特点、差异以及适用场景,对于我们编写出高效、可靠且稳定的多线程代码具有至关重要的意义。在接下来的篇幅中,让我们一同深入探讨这三个类的奥秘,通过详尽的代码片段和深入的原理解析,助您全面掌握它们在实际应用中的精髓。
2024-08-18 21:55:47
967
原创 理解DDD领域驱动设计思想
领域驱动设计是一种以领域为核心的软件开发方法,通过深入理解业务领域,建立清晰的领域模型,能够有效地提高软件的质量和可维护性。在实际项目中,应用DDD需要团队成员具备良好的业务理解能力和技术水平,同时需要不断地实践和总结经验。只有这样,才能真正发挥DDD的优势,打造出高质量的软件系统。希望本文能够为广大开发者提供一些有益的参考,让我们共同在领域驱动设计的道路上不断探索和前行。
2024-08-18 11:25:54
804
原创 【对话机器人】小白快速搭建专属对话机器人
大家好啊,之前说过我正在开发一个智能对话机器人平台,今天趁着第一个Demo版本快开发好了,赶紧来给大家介绍下这个版本的功能。新来的朋友可能还不太清楚,简单说下这个平台就是让小白用户也可以快速搭建一个专属于自己的问答机器人,接入到自己的网站、小程序、公众号中。大佬请略过,哈哈~废话不多少,我们一起开始吧~首先看下后台管理系统的样式吧,目前样式还是比较简单的,第一个出场的是机器人配置页面:在这个页面中,你可以还有机器人问答功能,你可以看到有机器人的类型、对话模型、嵌入模型、知识库等。
2024-08-16 12:57:14
793
原创 【RAG技术】Springboot整合Elasticsearch8 向量检索快速实战
本文演示了在RAG系统中,如何将ES作为向量数据库的使用介绍,包括如何进行索引文档的构建,如何构建查询模型进行相似度查询。再顺嘴简单说下RAG,一般是先通过嵌入模型计算文档向量,然后在保存到向量数据库中,这里的ES就可以作为一个向量数据库。当用户提出问题时,首先通过嵌入模型拿到问题的向量表示,然后根据向量到向量数据库中进行向量相似度查询。根据拿到的结果,进行重排序等操作拿到最相关的文档,最终一起构建提示词,喂给大模型。
2024-08-14 11:56:06
909
原创 【AI改写】Ubuntu启动顺序调整指南
GRUB,全称GRand Unified Bootloader,是Ubuntu系统中不可或缺的多操作系统引导加载程序。通过以上步骤,您可以轻松地在Ubuntu中调整启动顺序,享受更加灵活的系统启动体验。以上就是AI改写后的文章,个人感觉改写后文章结构更加清晰了,更加容易阅读了~以下是AI改写后的文章,大家对比下效果,欢迎提出自己的看法~执行上述命令后,重启您的计算机,您的启动顺序更改将立即生效。改写下面的文章,要求:醒目的标题,通俗、专业的内容风格。,代表启动顺序的第一个条目。在打开的配置文件中,找到以。
2024-08-09 23:59:15
568
原创 智能对话机器人平台:小白都可以从零快速搭建对话机器人
大家好,我是你们的程序员老朋友:马丁,今天给大家带来一个智能对话机器人平台,该平台可以满足广大企业在客服、营销场景的智能化的需求。通过该平台,你可以快速开发出一个智能机器人接入到你的网站、小程序、微信、APP中。你可以通过机器人帮你解答用户的问题,7*24小时不间断运行,不要工资,不会生气,随叫随到,岂不美哉~
2024-08-09 21:35:22
639
原创 家用消费级显卡玩转大模型超简单,一看就懂,一学就会
这篇文章主要介绍了如下内容:模型量化,包括转换为gguf格式如何通过Ollama部署运行模型通过这篇文章,你可以将一个很大的模型文件转换为一个相对很小的模型文件,并部署运行起来,运行速度可以大大提升,消费级显卡也可以无压力运行。
2024-07-31 13:19:36
1209
原创 一篇文章搞懂Spring AI,Java程序员玩转大模型
AI 模型是用于处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式和见解,这些模型可以做出预测、文本、图像或其他输出,从而增强各行各业的各种应用。有了上述的基本知识之后,我们就可以通过SpringAi 结合 Ollama、Elasticsearch 编写一个法律智能问答方面的RAG 检索增强实战案例,通过这个案例,除了可以学习SpringAi,还可以了解RAG相关的技术。这个项目还实现了 网络检索、RAG的混合检索、还实现了对话记忆、多伦对话的功能。
2024-07-29 19:51:01
2686
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅