Spring Boot项目启动优化

本文系统分析并优化了一个Spring Boot项目启动耗时高达280秒的问题。通过追踪各阶段耗时、识别瓶颈、优化分库分表加载逻辑、异步初始化耗时任务等手段,最终将启动耗时缩短至159秒,提升近50%。文章详细介绍了启动流程分析、性能热点识别、异步初始化设计等关键技术细节,为大型Spring Boot项目性能优化提供了参考。
Spring Boot项目启动优化
Spring AI 中的 DocumentTransformer 与 RAG 深度解析

Spring AI 架构解析与核心模块实践

在当今数字化转型的浪潮中,人工智能(AI)技术正逐渐成为推动业务创新的关键力量。Spring AI 作为 Spring 生态系统中的一员,为开发者提供了一种简单而高效的方式来集成 AI 功能。作为一名专注于 Java 技术的开发者,我深入研究了 Spring AI 的架构、核心模块以及其实现方式,并在此分享我的学习心得和实践代码。
Spring AI 架构解析与核心模块实践
流程条件表达式技术方案

一个超实用的Java集合处理库——collection-complete

在Java开发中,我们经常需要对集合数据进行各种操作,比如批量获取用户信息、订单信息等。如果处理不当,很容易导致代码冗余、性能低下等问题。今天给大家介绍一个我最近发现的超实用的Java集合处理库——collection-complete。 collection-complete是一个用于处理集合数据并补充相关信息的Java库。它提供了链式调用的功能,可以方便地对集合中的元素进行批量操作和属性补充。这个库的设计理念是简化集合数据的处理流程,让开发者能够更高效地完成业务逻辑的实现。
一个超实用的Java集合处理库——collection-complete

Java IO — NIO Channel

在上一章NIO Channel篇中我们解释了它在NIO中的作用。Channel(通道)是一个核心概念,它提供了与IO设备(如文件、网络套接字等)进行数据传输的能力。下面我将从多个方面详细讲解NIO的Channel。Channel本身不直接存储数据,它通过与Buffer(缓冲区)的交互来实现数据的读写。数据首先被读入到Buffer中,然后再从Buffer中写入到Channel,或者从Channel读入到Buffer。 Channel的工作原理 • ‌与Buffer的交互‌:Channel本身不直接存储数据,它通过与Buffer(缓冲区)的交互来实现数据的读写。数据首先被读入到Buffer中,然后再从Buffer中写入到Channel,或者从Channel读入到Buffer。 • ‌非阻塞模式‌:Channel支持非阻塞模式,这意味着线程可以在等待IO操作完成时继续执行其他任务,而不是被阻塞。这大大提高了程序的并发处理能力。 • ‌Selector机制‌:NIO还提供了Selector机制,它允许单个线程同时处理多个Channel的IO事件。Selector会不断地轮询注册在其上的Channel,检查是否有IO事件发生,并通知相应的线程进行处理。
Java IO — NIO Channel

Java IO — NIO Buffer

在上一章中我们介绍的 NIO模型的核心组件 以及其运行流程 知道如何简单使用 buffer 之后,下面就来探究一下 buffer 的底层原理。 Buffer 的原理主要在于它的四个属性: • mark:在缓冲区操作过程当中,可以将当前的 position 的值临时存入 mark 属性中,需要的时候再取出,恢复到之前的 position,重新从之前的 position 位置开始处理。调用 mark() 方法来设置 mark=position,再调用 reset() 可以让 position 恢复到 mark 标记的位置,即 position=mark • position:位置,读或写都会改变位置 • limit:表示缓冲区的当前终点,不能对缓冲区超过极限的位置进行读写操作,极限可以修改 • capacity:容量,在缓冲区创建时设定且不可修改,比如前面创建的缓冲区容量就是 1024 且不可修改
Java IO — NIO Buffer
Java IO — IO/NIO模型

Elasticsearch — 索引(Mapping Index)

在Elasticsearch中Mapping Index是一个核心概念,它定义了索引中数据的结构,包括字段的名称、类型、属性等。用于定义索引中文档及其字段如何被存储和索引的过程。它类似于传统关系型数据库中的表结构定义。在 MySQL 中,表结构里包含了字段名称,字段的类型还有索引信息等。在 Mapping 里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性。 ‌作用‌: • 定义索引下的字段名(Field Name)。 • 定义字段的类型,如文本型(text)、关键字型(keyword)、数字型(integer、long、float、double等)等。 • 定义字段的索引相关配置,如是否索引、是否记录位置信息等。
Elasticsearch — 索引(Mapping Index)

Elasticsearch — 如何存储数据并保持一致性?

Elasticsearch是一个基于Lucene分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间数据等。它构建于Lucene之上,并提供了一个易于使用的RESTful API来处理数据索引和搜索。Elasticsearch以其强大的全文搜索能力而闻名,并且能够实时地存储、搜索和分析大量数据。此外,Elasticsearch还常常与Logstash(用于收集、解析和处理数据流)和Kibana(用于数据可视化)结合使用,形成了ELK Stack,广泛应用于日志分析、指标分析以及其他大数据应用场景中。 在实际业务场景中我们或许是因为数据库中数量大且需要一个复杂的条件过滤时才考虑到应用Elasticsearch,因为它提供大数据量(PB)近乎实时的搜索功能。
Elasticsearch — 如何存储数据并保持一致性?

Java算法 — 快速排序(Quick Sort)

上文我们介绍了Java比较算法的核心思想 但那仅仅是最简单的思维方式并不是大家最常用下面我们来学习下组合了集中思想的快速排序算法。快速排序(Quick Sort)是一种高效且广泛应用的排序算法,由东尼·霍尔所发展,并于1960年由C.A.R.Hoare提出。快速排序是对冒泡排序的一种改进,它采用分治法的策略来将一个序列(或数组)分为两个子序列,并通过递归的方式对这两个子序列进行排序,从而达到整个序列有序的目的。通过选取一个基准值(pivot),将待排序的序列分为两部分,一部分包含所有小于基准值的元素,另一部分包含所有大于基准值的元素(相等的元素可以归到任一边)。然后,递归地对这两部分继续进行快速排序,直到整个序列有序。在Java中List接口中实际应用了该算法,也是我们最常使用的算法之一。本文介绍了Java中的快速排序和归并排序算法,包括其实现细节和优化策略。快速排序使用三向分区方法进行排序,而归并排序利用分治策略进行合并。还讨论了Timsort算法的执行过程和关键阀值,以及如何在Java中对List集合进行排序。Timsort结合了归并排序和二分插入排序的优点,适用于大数据集的排序。
Java算法 — 快速排序(Quick Sort)

Java算法 — 比较排序(Comparison-based Sorting)

比较排序(Comparison-based Sorting)是一种基于元素之间比较操作的排序算法。这类算法通过比较数据之间的大小关系来确定数据的相对顺序,从而完成排序。在我们学习Java算法过程中是一个比较重要的一个排序算法,下面我讲从一些基础简单算法 它们不是最好的算法但是其中的核心思想和思维模式值得我们深入学习。其实有 选择排序(Selection Sort),插入排序(Insertion Sort),冒泡排序(Bubble Sort),归并排序(Merge Sort),堆排序(Heap Sort)
Java算法 — 比较排序(Comparison-based Sorting)
1
...
45678
...
10
Honesty
Honesty
花有重开日,人无再少年.
统计
文章数:
120