自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

逍遥Sean的博客

逍遥Sean的博客

  • 博客(174)
  • 收藏
  • 关注

原创 Linux - 如何在 Linux 中使用`find` 命令

find命令是 Linux 系统中强大的文件查找工具,能够帮助用户根据多种条件查找和操作文件。掌握其基本用法、选项和表达式组合,可以显著提升文件管理的效率。通过实践中的案例和技巧,你可以更好地利用find进行各种复杂的文件查找和处理任务。希望本文能够帮助你深入了解find命令,并在日常的系统维护中得心应手。如果你有任何问题或需要进一步的帮助,请随时留言讨论。

2024-08-29 11:17:22 1338

原创 微服务 - 深入解析 Redis 红锁:构建可靠分布式锁的技术细节

在现代分布式系统中,管理并发和确保数据一致性是一项重要挑战。分布式锁作为解决这些问题的关键技术之一,得到了广泛关注。Redis 红锁(Redlock)算法由 Redis 创始人 Antirez 提出,旨在为分布式环境下的锁管理提供一种高可靠性的解决方案。本博文将全面解析红锁的设计原理、实现细节、优势、挑战以及实际应用案例,Redis 红锁是针对分布式锁的高级解决方案,相较于传统的分布式锁机制,红锁提供了更高的容错性和可靠性。红锁的核心思想是通过多个独立的 Redis 实例来获取锁,从而防止单点故障的问题。

2024-08-22 11:48:19 1354

原创 微服务 - 分布式锁的实现与处理策略

分布式锁的实现涉及选择合适的技术和策略来解决锁的可靠性、宕机恢复以及锁过期问题。通过了解 Redis、Zookeeper 和 Etcd 等分布式锁实现的优缺点,结合具体业务场景,可以设计出高效、可靠的分布式锁机制。在实践中,合理配置锁的过期时间、实施心跳机制、设计重试逻辑和监控告警,将有效地应对分布式锁带来的挑战。

2024-08-21 19:16:24 1284 4

原创 数据库进阶 - 可串行化隔离级别的底层原理

在数据库中,事务是一个逻辑操作单元,包含一组要么全部执行成功,要么全部不执行的数据库操作。原子性(Atomicity):事务中的操作要么全部完成,要么全部不执行。一致性(Consistency):事务执行前后,数据库的一致性约束必须得到满足。隔离性(Isolation):多个事务并发执行时,彼此之间不应互相干扰。持久性(Durability):一旦事务提交,其结果应永久保存,即使系统崩溃也不应丢失。可串行化意味着一个系统的执行结果等同于某个串行执行的结果。

2024-08-21 19:05:53 885

原创 Java核心 - 使用反射时的缓存优化

反射是 Java 提供的一种强大功能,允许程序在运行时查询和操作类及其成员。尽管反射非常灵活,但它也会带来性能开销,特别是在高频次调用时。为了提高反射操作的效率,使用缓存机制是一个有效的优化方法。本文将探讨 Java 反射中使用缓存的用法与好处,并结合 Spring 框架中的应用示例进行说明。@[TOC](Java 反射中的缓存优化)# Java 反射中的缓存优化## 1. 反射的基本概念在 Java 中,反射允许你在运行时获取类的信息、访问和修改字段、调用方法等。以下是一个简单的反射示例:

2024-08-14 14:10:11 1306

原创 Java核心 - 创建可缓冲的 IO 流

缓冲流是为了提高 IO 性能而设计的一种流。它们通过在内存中维护一个缓冲区,减少了对底层硬盘或网络的直接读写操作,从而显著提高了数据处理的速度。缓冲流可以应用于字符流和字节流。缓冲流是 Java IO 操作中的重要工具,它通过在内存中使用缓冲区来减少对底层存储设备的直接访问,从而提高性能。通过理解和使用和,可以显著提升数据读写的效率。掌握这些缓冲流的用法和最佳实践,将使你在处理大规模数据时事半功倍。

2024-08-14 12:25:40 755

原创 Java核心 - 还在用+拼接字符串吗?(String.format详解)

在 Java 中,`String.format` 是一个强大的工具,用于创建格式化的字符串。它不仅让我们可以控制字符串的格式,还能提高代码的可读性和维护性。本文将深入探讨 `String.format` 的用法,包括基本语法、格式化占位符、常见应用场景及最佳实践。> 但不建议在for循环中用它拼接字符串,因为它的执行效率,比使用+号拼接字符串,或者使用StringBuilder拼接字符串都要慢一些。@[TOC](Java 的 `String.format`)不知道你有没有拼接过字符串,特别是那种

2024-08-14 12:23:12 1208

原创 消息队列中间件 - ActiveMQ关键特性与工作原理

Apache ActiveMQ 是一个完全支持 JMS(Java Message Service)规范的消息代理软件。它采用了基于消息队列的异步通信模型,能够在分布式系统中可靠地传递消息。ActiveMQ 提供了多种通信协议,包括 OpenWire、STOMP、AMQP 和 MQTT,使得它可以与不同类型的客户端和应用程序集成。广泛的协议支持:ActiveMQ 支持多种通信协议,包括 OpenWire、STOMP、AMQP 和 MQTT,使得它可以与不同类型的客户端和应用程序集成。高可靠性。

2024-08-01 11:25:20 714

原创 探索单体架构与微服务架构的较量

本文深入探讨了单体架构与微服务架构的优缺点及其适用场景,希望读者通过本文的分析能够更清晰地理解并在实际项目中做出明智的架构选择。无论是选择单体架构的简单直接,还是采用微服务架构的灵活性与可伸缩性,都应该根据具体项目的需求和团队的技术能力做出合理的决策。

2024-07-31 12:29:41 1008

原创 中间件 - 使用Eureka进行微服务注册与发现

Eureka是Netflix开发的一个REST服务,用于服务的注册与发现。它提供了简单易用的API,允许微服务在运行时注册自己,并且能够发现其他服务的位置和状态。Eureka基于客户端-服务端架构,服务注册是通过Eureka客户端完成的,服务发现则是通过Eureka服务端完成的。本文介绍了如何使用Netflix的Eureka实现微服务的注册与发现。通过Eureka,你可以构建出高可用性、弹性的微服务架构,轻松管理多个微服务之间的依赖关系。希望本文能够帮助你快速入门并掌握Eureka的基本用法。

2024-07-30 10:26:05 947

原创 网络编程 - 粘包与拆包第二弹 - Netty粘包与拆包问题的技术解决方案

Netty是一个高性能的异步事件驱动的网络应用框架,专注于快速开发可维护的高性能协议服务器和客户端。它提供了一系列的解决方案来处理TCP粘包与拆包问题,使得开发者可以专注于业务逻辑而不必过多关注底层网络细节。通过使用Netty提供的解码器和编码器,我们可以有效地处理TCP粘包与拆包问题,提升网络应用的稳定性和性能。选择合适的解决方案取决于你的具体业务需求和协议设计。希望本文能帮助读者深入理解和解决TCP粘包与拆包问题,在实际应用中获得更好的开发体验和性能优化。

2024-07-29 09:50:27 895

原创 IOC概述及其实现原理

IoC即Inversion of Control,反应过来就是控制反转。啥是控制反转啊?控制反转指的就是将对象的创建权反转给(交给)了Spring,其作用是实现了程序的解耦合。也可这样解释:获取对象的方式变了,对象创建的控制权不是"使用者",而是"框架"或者"容器"。用更通俗的话来说,IoC就是指对象的创建,并不是在代码中用new操作new出来的,而是通过Spring进行配置创建的。

2021-07-05 19:54:52 7953 3

原创 Linux - 深入探讨 Linux `ls` 命令:一个全面的技术指南

ls命令是 Linux 中一个基本而强大的工具,能够帮助你以多种方式查看目录内容。从基本的文件列出到详细的文件信息显示,从隐藏文件的显示到递归目录的列出,掌握ls命令的各种选项和用法将极大提高你的文件管理效率。通过灵活地使用这些选项,你可以更好地理解和控制你的文件系统,提升工作效率。希望这篇博文能够帮助你深入了解ls命令及其各种功能,让你在日常的 Linux 操作中更加得心应手。如果你有任何疑问或需要进一步的帮助,欢迎在评论区留言讨论。

2024-08-29 11:14:47 887

原创 Linux - 如何查看当前 Linux 系统的版本和内核信息

在 Linux 操作系统的日常管理中,了解系统版本和内核信息是至关重要的。这不仅有助于确保软件兼容性,还能帮助我们进行故障排查和性能调优。本文将详细介绍如何查看这些信息,并解释相关命令的用法和输出内容。了解和查看 Linux 系统的版本和内核信息对于系统管理员和用户来说是基本而重要的操作。掌握这些命令不仅可以帮助你了解系统的运行环境,还能在需要时进行系统诊断和解决问题。希望本文对你有所帮助,提升你在 Linux 系统管理方面的技能。

2024-08-29 11:11:13 1256

原创 IBM中国研发部门关闭:历史转折和未来展望

2024年8月26日,记者从IBM中国方面获悉,IBM将彻底关闭其中国研发部门,涉及员工数量超过1000人。这一决定标志着IBM在中国市场的一个重要转折点,结束了其在中国市场四十年的研发历史。这篇文章将详细探讨这一事件的背景、影响以及未来展望。

2024-08-27 09:19:31 963

原创 分布式 - 主从复制技术详解及时延处理

在现代数据库系统中,主从复制(Master-Slave Replication)是确保数据高可用性和扩展性的关键技术。它不仅有助于负载均衡,还能提供数据冗余,以提高系统的稳定性。然而,主从复制也面临着一些挑战,尤其是在处理数据同步时延方面。本文将深入探讨主从复制的技术细节、工作原理、实现方式、优缺点,并特别关注如何有效地处理复制时延。### 一、主从复制的基本概念主从复制是一种将主数据库(Master)的数据同步到一个或多个从数据库(Slave)的机制。主数据库负责处理所有的数据写入操作,而从数据库

2024-08-22 11:52:07 1132

原创 数据库 - 死锁深度解析:定义、检测与预防

死锁深度解析:定义、检测与预防引言一、死锁的定义二、死锁发生机制三、死锁检测方法四、死锁预防技术五、死锁避免技术六、死锁恢复技术七、实际案例分析八、总结在计算机科学和软件工程中,死锁是一个重要且复杂的问题,尤其在并发程序设计中。它发生在多个进程或线程相互等待,形成一种环形依赖,从而导致它们都无法继续执行。本文将深入探讨死锁的定义、发生机制、检测方法、预防技术以及实际案例。死锁是指在多线程或多进程环境中,两个或多个进程或线程由于相互持有对方所需的资源,导致它们都无法继续执行。互斥条件。

2024-08-21 19:08:28 966

原创 数据库进阶 - 可重复读与读已提交视图:创建时机的深度分析

事务隔离级别是数据库系统中用来控制事务之间相互干扰的机制。未提交读(Read Uncommitted):事务可以读取其他事务未提交的数据,可能导致脏读(Dirty Read)。读已提交(Read Committed):事务只能读取其他事务已经提交的数据,避免了脏读,但可能会出现不可重复读(Non-Repeatable Read)。可重复读(Repeatable Read):事务在执行过程中读取的数据是稳定的,避免了脏读和不可重复读,但可能会出现幻读(Phantom Read)。

2024-08-21 18:23:55 986

原创 JVM(Java虚拟机) - 深入了解Java中的GC命令:如何优化垃圾回收

Java中的GC命令和参数对于优化应用性能和解决内存问题至关重要。通过合理配置GC选项、调整堆内存大小、选择适当的GC算法,并定期监控和分析GC日志,你可以有效地管理Java应用的内存使用,提高系统的响应速度和稳定性。深入了解GC的工作原理和优化策略,将帮助你更好地应对复杂的应用场景和性能挑战。

2024-08-20 10:56:47 692

原创 数据库进阶 - 隔离级别的底层实现:技术深度探讨

在现代数据库管理系统(DBMS)中,事务的隔离级别是至关重要的,它决定读未提交(Read Uncommitted):允许一个事务读取另一个未提交事务的数据。此级别可能导致“脏读”。读已提交(Read Committed):保证一个事务只能读取另一个事务已提交的数据,避免“脏读”。可重复读(Repeatable Read):保证在事务执行期间,读取到的数据在事务结束前不会被其他事务修改,避免“不可重复读”。串行化(Serializable):提供最高级别的隔离,确保事务的执行顺序与串行执行相同,避免“幻读”。

2024-08-20 09:34:23 415

原创 数据库进阶 - ACID事务属性的实现机制详解

在现代数据库管理系统(DBMS)中,事务是用于确保数据库操作的完整性和一致原子性保证了事务中的所有操作要么全部成功,要么全部失败,不会出现部分操作成功的情况。一致性确保事务执行前后,数据库状态从一个一致的状态变为另一个一致的状态,遵循数据库的约束规则和数据完整性。隔离性保证了事务的执行不会被其他事务的操作干扰,即使多个事务同时执行,每个事务也会感知到一个一致的数据库状态。持久性确保了事务一旦提交,所做的所有更改都将永久保存,即使系统崩溃也不会丢失。ACID属性是确保数据库事务操作完整性和可靠性的核心原则。

2024-08-20 09:31:36 801

原创 Java并发编程 - 为什么在Java中应该谨慎使用`Executors`创建线程池

在Java编程中,线程池是管理并发任务的一个重要工具。`Executors`类提供了简单的静态工厂方法来创建各种类型的线程池。虽然这些方法可以快速地创建线程池,但在实际应用中,往往需要对线Executors类提供了方便的线程池创建方法,但它们并不是所有应用场景的最佳选择。直接使用这些工厂方法可能会导致任务队列无限增长、线程过多或内存问题。为了获得更好的控制和优化,建议使用来创建和配置线程池,以满足特定的需求和负载特性。通过理解线程池的工作机制并根据实际情况进行合理配置,可以有效提高应用程序的性能和稳定性。

2024-08-20 09:26:54 412

原创 Java核心 - `BigDecimal`的坑:深入理解与避免错误

使用BigDecimal避免使用double构造函数:用String构造函数来避免精度问题。正确使用compareTo进行比较:不要用equals来比较BigDecimal的值。指定舍入模式:在进行除法等操作时必须指定舍入模式。关注性能BigDecimal的不可变特性可能导致性能问题,特别是在大量计算时。正确设置精度:确保在计算时精度和舍入模式设置正确。通过遵循这些最佳实践,可以减少使用BigDecimal时的常见陷阱和错误,从而提高代码的精确性和稳定性。

2024-08-20 09:23:53 722

原创 Java核心 - 位运算对性能的优化详解与JDK源码应用分析

在Java编程中,位运算是一种被广泛应用于性能优化的技术。由于其直接在二进制位上进行操作的特性,位运算常常能显著提高计算效率。本文将探讨位运算在Java中的效率优势,并深入分析其在JDK底层的实现,以帮助开发者更好地理解和利用这一技术。

2024-08-16 19:19:01 705

原创 Java核心 - 关于懒加载的技术分析与实际应用

懒加载是一种设计模式,用于推迟对象的初始化,直到需要使用时才进行。这种模式主要用于减少应用程序的启动时间和内存占用,尤其是在处理资源密集型对象时非常有效。#### 实际工作中的懒加载应用1. **减少内存占用** 在处理大量数据时,懒加载可以显著减少内存占用。比如,在处理大型数据集合或图像时,只有在实际需要这些数据时才进行加载,可以有效避免内存浪费。2. **提高启动性能** 懒加载可以显著提升应用程序的启动速度。比如,复杂的Web应用程序可以在启动时只加载核心组件,而延迟加载其他

2024-08-16 19:15:01 888

原创 Java核心 - 使用 `@RestControllerAdvice` 代替满屏 `try...catch` 异常处理

在构建 Java 应用程序时,异常处理是一个至关重要的部分。传统上,我们在每个可能出错的地方使用 `try...catch` 来处理异常,这可能会导致代码变得臃肿且难以维护。为了提升代码的整洁性和可读性,我们可以使用 `@RestControllerAdvice` 来集中处理异常。这种方法特别适合于 Spring Boot 应用程序,它使我们能够将异常处理逻辑从控制器中分离出来,从而保持控制器代码的简洁性。@[TOC](使用 `@RestControllerAdvice` 代替满屏 `try...ca

2024-08-15 10:16:53 942

原创 Java核心 - 集合初始化时指定大小的性能影响分析

在Java编程中,使用集合类是非常常见的操作,如ArrayList、HashSet和HashMap等。对这些集合在初始化时是否指定大小进行合理的优化,可以显著提升程序的性能。本文将分析为什么指定初始大小会影响性能,并提供具体的代码示例来说明这一点。

2024-08-15 10:10:43 487

原创 Java核心 - 减少循环次数的必要性及其实现方法

减少循环次数是提升 Java 程序性能的关键策略之一。通过优化循环条件、减少嵌套循环、使用合适的数据结构、提前退出循环、合并循环以及利用并行处理等方法,可以显著提高程序的执行效率和资源利用率。掌握这些技术,不仅能够提升代码的执行性能,还能改善代码的可读性和维护性。

2024-08-14 12:28:56 1078

原创 Java核心 - Java 中为什么不建议使用 `==` 比较 `int` 类型

在 Java 编程中,使用==运算符来比较int类型是安全的,因为它直接比较原始值。但当涉及到Integer对象时,==比较可能会产生意外结果,特别是在缓存机制之外的值。为了确保比较的准确性,尤其是在处理Integer对象时,应使用.equals()方法。理解这些差异可以帮助开发者避免潜在的错误,编写更健壮的代码,并提高程序的稳定性和可靠性。

2024-08-14 12:17:17 524

原创 SQL调优 - 优化 MySQL 中的 IN 语句查询效率

在使用 MySQL 进行开发时,我们经常会使用到 `IN` 语句来查询某个字段是否包含在一个给定的值集合中。然而,当这个值集合的数量超过一定的限制时,`IN` 语句可能会导致查询效率显著下降,甚至引起性能问题。本文将探讨如何优化 MySQL 中 `IN` 语句的查询效率,以提升数据库操作的性能。@[TOC](优化 MySQL 中的 IN 语句查询效率)## 优化 MySQL 中的 IN 语句查询效率### 问题背景`IN` 语句的一般形式如下:```sqlSELECT * FROM t

2024-08-07 15:58:20 1365

原创 Java核心 - ArrayList和Vector的区别是什么呢

当谈到Java中的集合类时,ArrayList和Vector是两个常见的选择,它们都实现了`List`接口,但在设计和使用上有一些关键区别。本文将详细探讨ArrayList和Vector在Java中的区别,并分析在不同场景下如何选择合适的集合类来优化性能和功能。@[TOC](ArrayList和Vector的区别是什么呢)### 引言在Java编程中,集合类是非常重要的数据结构,它们提供了动态存储和操作数据的能力。ArrayList和Vector都是基于数组的动态数组实现,但它们在多线程支持、性能

2024-08-06 10:31:01 768

原创 Ubuntu系统上重新安装Redis

通过以上步骤,你可以在Ubuntu系统上重新安装和配置Redis服务器。确保在卸载旧版本之前备份重要的数据或配置文件,以防意外情况发生。重新安装通常能够解决由于配置或者依赖问题导致的Redis启动失败的情况。### 1. 卸载现有的Redis首先,需要确保先卸载现有的Redis服务器。可以使用以下命令:```bashsudo apt remove --purge redis-server```这将删除Redis及其相关的配置文件和数据。如果只想保留配置文件而不删除数据,可以省略 `--pu

2024-08-05 17:12:24 349

原创 Ubuntu系统Redis无法启动的问题排查

首先,查看Redis的运行状态和日志以获取更多信息:```bashsudo systemctl status redis-server```这将显示Redis的当前状态以及任何错误消息。如果Redis没有运行或者有错误,日志信息将会显示在这里。### 2. 检查配置文件确保Redis的配置文件 `/etc/redis/redis.conf` 没有语法错误或者不一致的设置。可以通过编辑器打开配置文件检查:```bashsudo nano /etc/redis/redis.conf`

2024-08-05 17:09:55 699

原创 JVM(Java虚拟机) - JVM内存分配与内存管理

在探讨具体的内存分配之前,首先需要了解Java内存模型(Java Memory Model, JMM)以及JVM的整体结构。Java内存模型定义了多线程情况下变量的访问规则,保证了数据的可见性和一致性。而JVM则是运行Java程序的核心,负责将Java字节码翻译为机器指令并执行。Java内存模型的关键概念包括:主内存与工作内存:主内存是所有线程共享的内存区域,用于存储Java对象实例和类的静态变量。工作内存是每个线程私有的,存储线程独享的变量副本,线程间的操作通过主内存来进行通信。

2024-08-02 17:18:36 1310

原创 Java核心 - 解锁Java Stream的强大魔力:功能强大的数据处理利器

Java Stream是Java 8引入的一个新的抽象层,用于处理集合数据。它允许开发者以声明性的方式对数据进行操作,例如过滤、映射、排序等,而无需手动编写传统的循环代码。Stream本质上是一种能够在集合元素上进行各种操作的高级迭代器,它支持链式操作和惰性求值的特性。除了标准操作外,Java Stream还支持自定义操作,如自定义收集器(Collector)、自定义中间操作等,这些操作能够进一步扩展Stream的功能和灵活性。Java Stream为Java编程带来了现代化和功能强大的集合操作方式。

2024-08-02 11:56:52 686

原创 Java实战 - 实现八皇后的回溯算法

初始化棋盘:使用一个二维数组board表示棋盘,其中的值为1表示第i行第j列有一个皇后,为0表示没有皇后。递归回溯函数:编写一个递归函数solve,通过尝试在每一行放置皇后来解决问题。如果当前行的皇后放置成功,则递归处理下一行;如果不能放置,则回溯到上一行尝试其他位置。判断有效性:在放置皇后时,需要检查当前位置是否与已放置的皇后位置冲突,即同一列、同一对角线上是否已经有皇后。输出解:当所有皇后都成功放置时,将当前的棋盘状态加入结果集。

2024-08-01 15:27:03 271

原创 Java实战 - 查找最长递增子序列

最长递增子序列是指在一个序列中,找到一个最长的子序列,使得子序列中的元素按照递增顺序排列。例如,在序列中,一个最长递增子序列可以是,长度为 6。本文详细介绍了如何使用动态规划算法来找到一个序列中的最长递增子序列的长度,并给出了基于 Java 的实现代码。通过学习和理解这个算法,读者可以在实际编程中应对类似的序列优化问题,提高算法解决问题的能力和效率。

2024-08-01 15:24:48 315

原创 Java实战 - 实现二进制转八进制

二进制:二进制是计算机中最基本的数字系统,只包含数字 0 和 1。每一位二进制数字代表一个 2 的幂次,例如,二进制数101表示 1*2^2 + 0*2^1 + 1*2^0 = 5。八进制:八进制是一种基数为 8 的数字系统,使用数字 0 到 7。八进制数中的每一位代表一个 8 的幂次,例如,八进制数12表示 1*8^1 + 2*8^0 = 10。本文详细介绍了如何使用 Java 编程语言来实现二进制到八进制的转换算法。

2024-08-01 15:22:31 605

原创 Java实战 - 实现闰年判断

能被100整除但不能被400整除的年份不是闰年;能直接被400整除的年份是闰年。按照这个规则,比如2000年是闰年,而1900年不是闰年。本文介绍了如何使用 Java 编程语言来实现闰年的判断,通过一个简单的方法和示例代码展示了实现的过程。希望读者通过这篇文章能够理解并掌握如何在自己的项目中应用这一功能,从而提升编程能力和实际开发效率。

2024-08-01 15:20:54 569

原创 消息队列中间件 - 深入理解 RabbitMQ:优势、挑战与应用场景探析

RabbitMQ 是一个基于 AMQP(高级消息队列协议)实现的消息代理软件,最初由 LShift 提供,并逐渐成为企业级应用中广泛使用的消息队列系统。其设计目标是提供可靠、可扩展和高度可用的消息传输机制,支持多种消息模型和应用场景。

2024-08-01 11:32:43 400

Java-全文搜索引擎Elasticsearch-掌握所有操作的源代码(Java api和spring data两种方式)

本资源中的项目,使用springboot、logback、junit、mybatis-plus、spring data集成Elasticsearch搜索引擎框架,结合实际案例(赛事系统)完成Elasticsearch中索引、文档所有操作(创建、查询、删除、批量操作等)。 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。Elasticsearch的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elasticsearch是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。本资源使用 Elasticsearch结合spring data,mybatis plus,logback日志等流行框架搭建自己的全文搜索引擎,大家跟着做就能学会其中的操作方式(Java api封装方法和spring data封装的操作方法)。 注:可以结合博主发布的系列文章学习使用!!!

2023-09-22

Java开发-日志管理-logback框架日志系统基础

在日常工程开发中,日志是非常重要的一部分,通过日志可以迅速定位线上问题,日志框架也有很多选择,日志框架Logback和Log4j是同一个作者,Logback相比于Log4j,性能提高了10倍以上的性能,占用的内存也变小了,并且文档十分详细。Logback主要分为以下三个模块:logback-core:Logback的基础模块;logback-classic:它是log4j的改良版本,同时它完整实现了Slf4j门面日志框架,可以很方便地更换成其它日志系统;logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能。 本资源基于maven,使用logback搭建日志结构,实现多种级别日志的输出控制,并封装各个级别的日志输出方法,可以作为日志管理基础进行扩展以满足其他场景的日志管理。

2023-09-22

手写IOC项目,学习理解Spring IOC原理

我们都知道,Spring框架的IOC是基于Java的反射机制实现,实现IOC,必须掌握反射的实践方法。Java反射机制是在运行状态中,对于任意类,都能够知道这个类的属性和方法;对于任何一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象的方式称为Java语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信息。想要解剖一个类,必须先要获取到该类的Class对象。而剖析一个类或用反射解决具体的问题就是使用相关应用程序接口(1)`java.lang.Class`(2)`java.lang.reflect`,所以,Class对象是反射的根源。 IOC和DI是Spring里面最核心的东西,,资源中会写出这两个模块。资源内容包括Java反射机制的实践,使用反射机制实现IOC(包括依赖注入和对象创建)。

2023-09-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除