- 博客(231)
- 资源 (3)
- 收藏
- 关注
原创 Redis的缓存击穿,缓存雪崩,缓存穿透问题
在分布式系统中,缓存是一种常用的提升性能和减轻数据库压力的手段。然而,缓存系统也存在一些常见的问题,如缓存击穿、缓存雪崩和缓存穿透。这些问题如果不加以解决,可能会导致系统性能下降,甚至崩溃。本文将详细介绍这三个问题是如何发生的,并说明在Spring开发框架中的解决方案。
2024-07-02 08:31:40
684
1
原创 Spring Cacheable 注解
在Spring框架中,缓存是一种提高应用程序性能的重要技术手段。`@Cacheable`注解是Spring Cache中最常用的注解之一,它用于将方法的返回值缓存起来,以便后续调用时直接从缓存中获取,而不是再次执行方法。本文将详细介绍`@Cacheable`注解的使用方法及其工作原理。
2024-07-02 08:30:50
1184
原创 分布式限流:Spring Cloud Gateway 限流
在现代微服务架构中,流量控制是一个至关重要的部分。分布式限流作为一种有效的流量控制手段,能够帮助我们保护系统不被突发的流量冲垮。Spring Cloud Gateway支持多种限流方式。
2024-07-01 08:45:10
477
原创 分布式事务:理论与实践
在现代分布式系统中,分布式事务是一种确保跨多个独立系统的一致性和完整性的方法。本文将介绍分布式事务的基本概念、实现方式、在Java中的具体实现以及在实际应用中的案例。
2024-07-01 08:44:26
958
原创 关于Redisson分布式锁的用法
Redisson是一个基于Redis的Java分布式对象和服务框架,它提供了多种分布式锁的实现,包括可重入锁、公平锁、读写锁等。Redisson实现分布式锁的核心原理主要依赖于Redis的数据结构和Redisson框架提供的高级功能。
2024-06-30 09:58:22
554
原创 分布式锁及其实现与应用场景
分布式锁是一种用于在分布式系统中协调多个进程或线程对共享资源进行访问的机制。它的主要目的是确保在同一时间只有一个进程或线程可以访问特定资源,从而避免数据竞争和不一致问题。分布式锁通常用于集群环境中,例如微服务架构或多实例应用中,以实现数据一致性和系统的高可用性。
2024-06-29 12:22:41
901
原创 自定义一个MyBaits脱敏插件
用于对查询结果中的敏感数据进行脱敏处理。这个插件将拦截`ResultSetHandler`对象的处理结果,对某些敏感字段进行脱敏。
2024-06-29 12:21:23
380
原创 乐观锁和悲观锁(MySQL和Java)
在并发编程中,为了确保数据的一致性和完整性,我们通常需要使用锁机制来控制对共享资源的访问。锁主要分为两种:乐观锁和悲观锁。本文将详细介绍这两种锁的概念、工作原理以及它们的优缺点。
2024-06-28 08:25:30
942
原创 MySQL丢失更新问题的出现和解决
丢失更新问题(Lost Update)指的是两个或多个事务在读同一数据并基于此数据进行更新操作时,某些更新操作被覆盖或丢失。例如,事务A和事务B都读取了某个数据,然后事务A更新了该数据,而事务B在没有意识到事务A的更新的情况下,也更新了该数据,导致事务A的更新被覆盖。
2024-06-28 08:24:41
1432
原创 MySQL的隔离级别详解
MySQL是一个广泛使用的关系数据库管理系统,其事务处理能力是其核心功能之一。事务处理中的隔离级别决定了一个事务在读取或写入数据时如何受到其他并发事务的影响。MySQL提供了四种标准的隔离级别,每种隔离级别在性能和一致性之间做出了不同的权衡。下面详细解释这四种隔离级别及其特点。
2024-06-27 12:33:15
1020
原创 详细解释Spring事务的传播机制
Spring框架中,事务传播机制是指在一个事务方法调用另一个事务方法时,Spring如何管理这些方法之间的事务边界。Spring提供了七种事务传播行为,以满足不同的业务需求。下面将详细解释每种传播行为及其适用场景,并探讨在特定情况下事务的行为。
2024-06-27 12:32:22
1217
原创 MySQL锁和使用
在MySQL中,锁用于控制并发访问,以保证数据的一致性和完整性。MySQL提供了多种类型的锁,包括表级锁、行级锁和页面级锁。以下是MySQL中各种锁的详细介绍及其使用方法:
2024-06-26 09:38:14
568
原创 如何在SpringBoot中自定义starter
Spring Boot 提供了一种简便的方法来创建自定义的 starter,从而帮助开发者封装常用的配置和依赖。本文将介绍如何在 Spring Boot 中自定义一个 starter。
2024-06-25 17:56:04
522
原创 深入了解MySQL的哈希索引
哈希索引是一种基于哈希表的数据结构,通过对索引键值进行哈希运算,直接定位存储位置,从而实现快速数据访问。哈希索引在等值查询中表现尤为出色,但不适用于范围查询。虽然哈希索引在某些场景下可以显著提升查询性能,但也存在哈希冲突和内存消耗较大等局限性。
2024-06-25 17:55:04
1173
原创 SpringBoot 过滤器和拦截器的区别
Spring拦截器(Interceptor)和过滤器(Filter)是Spring框架中用于处理请求的两种机制,虽然它们都可以在请求处理的不同阶段进行拦截和处理,但它们的工作原理和应用场景有所不同。以下是它们的主要区别:
2024-06-23 08:15:00
727
原创 什么是循环依赖?
循环依赖(Circular Dependency),也称为循环引用,是指两个或多个Bean之间相互依赖,形成一个环状依赖链。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A,这就形成了一个简单的循环依赖。
2024-06-23 08:00:00
713
原创 了解Spring的BeanPostProcessor
Spring框架提供了一种机制,允许在Spring容器实例化Bean之前和之后进行自定义的修改。这个机制就是`BeanPostProcessor`接口。`BeanPostProcessor`是Spring的核心接口之一,用于在Spring容器创建和初始化Bean的过程中进行干预和自定义处理。
2024-06-22 08:15:00
924
原创 Spring Bean 生命周期详解
在 Spring 框架中,Bean 的生命周期由 Spring 容器全权管理。了解和掌握 Bean 的生命周期对于使用 Spring 开发稳定且高效的应用程序至关重要。本文将详细介绍 Spring Bean 生命周期的五个主要阶段:实例化、属性注入、初始化、使用和销毁,并涵盖各个阶段的关键步骤和扩展点。
2024-06-22 08:00:00
1279
原创 理解Spring Bean的作用域
在Spring框架中,Bean的作用域决定了Bean的生命周期及其可见性。Spring提供了几种不同的Bean作用域,以便开发人员根据特定的应用程序需求来管理Bean的创建和使用。本文将详细介绍Spring Bean的各种作用域,包括它们的特点和适用场景。
2024-06-21 08:15:00
1038
原创 synchronized(this) 写法的利弊分析
`synchronized` 关键字用于同步代码块,以确保在同一时间只有一个线程可以执行该代码块。`synchronized(this)` 是一种特殊的用法,它使用当前对象实例 (`this`) 作为锁。
2024-06-21 08:00:00
329
原创 了解Java并发同步框架:AQS(AbstractQueuedSynchronizer)
AQS(AbstractQueuedSynchronizer)是Java并发编程中一个重要的同步框架,提供了一个实现锁和其他同步器的基础。它通过FIFO队列来管理线程的争用,为开发者提供了便捷且高效的工具来实现自己的同步器,如ReentrantLock, CountDownLatch等。
2024-06-20 08:15:00
780
原创 了解ForkJoin框架
Fork/Join框架是Java 7引入的一种并行处理框架,用于有效地利用多处理器系统的计算资源。该框架通过将大任务拆分成多个子任务,并行处理这些子任务,最终将子任务的结果合并,以提高程序的执行效率。本文将介绍Fork/Join框架的基本概念、工作原理及其应用场景。
2024-06-20 08:00:00
493
原创 了解Java的CAS操作
CAS(Compare-And-Swap)是一种原子操作,用于实现无锁(lock-free)并发编程。它的主要作用是在多线程环境下保证数据的一致性。CAS操作比较某个内存位置的当前值是否与预期值相等,如果相等,则更新为新值,否则不做任何操作。
2024-06-19 08:15:00
524
原创 深入了解Java的CopyOnWriteArrayList类
在Java的并发编程中,`CopyOnWriteArrayList`类是一个特殊的列表实现,旨在提供一种线程安全的读操作无锁并发访问。这种实现的基础理念是在写操作时创建一个新的数组副本,从而使得读操作不会被写操作阻塞或影响。本文将详细探讨`CopyOnWriteArrayList`的工作原理、使用场景以及其优缺点。
2024-06-18 09:24:26
477
原创 Java阻塞队列:DelayQueue
在Java的并发编程中,阻塞队列是一种非常有用的数据结构,它不仅提供了线程安全的队列操作,还在必要时会自动阻塞获取操作,直到队列变得不为空。本文将重点介绍一种特殊的阻塞队列——`DelayQueue`,它在处理带有延迟时间的元素方面非常有用。
2024-06-18 09:22:49
335
原创 Java阻塞队列:PriorityBlockingQueue
在Java的并发编程中,阻塞队列是一种非常重要的数据结构。它不仅能在多线程环境下安全地进行数据交换,还能在需要时自动阻塞或唤醒线程。本文将详细介绍阻塞队列中的一种重要实现——`PriorityBlockingQueue`。
2024-06-17 09:13:52
536
原创 了解Java的LinkedBlockingQueue
`LinkedBlockingQueue`是一个基于链接节点的有界阻塞队列。它实现了`BlockingQueue`接口,可以在多线程环境中安全地进行插入、移除和检查操作。`LinkedBlockingQueue`的容量可以在创建时指定,如果未指定,则默认容量为Integer的最大值。
2024-06-17 09:13:08
974
原创 Java阻塞队列:ArrayBlockingQueue
`ArrayBlockingQueue`是Java中的一个阻塞队列(Blocking Queue)实现,它是线程安全的,并且基于数组实现。`ArrayBlockingQueue`常用于生产者-消费者模型,在这种模型中,生产者线程负责将元素放入队列,而消费者线程负责从队列中取出元素。
2024-06-16 11:49:48
388
原创 Java线程池的抛弃策略
Java线程池是Java并发编程中非常重要的一个组件。它通过重用已创建的线程来减少线程创建和销毁的开销,从而提高应用程序的性能和响应速度。然而,当线程池中的任务数量超过其处理能力时,就需要一种机制来处理新提交的任务,这就是线程池的抛弃策略。
2024-06-16 11:14:37
552
原创 深入理解ReentrantLock
在Java并发编程中,锁(Lock)是控制多个线程对共享资源访问的重要工具。虽然`Synchronized`关键字是实现锁的常用方式,但它在功能上比较有限。`ReentrantLock`是`java.util.concurrent.locks`包中提供的一个更加灵活和强大的锁实现,它是一个可重入的互斥锁,它允许线程在获取锁之后再次获取该锁而不被阻塞。简单来说,如果一个线程已经持有了一个锁,再次请求获取该锁时,它可以成功获取而不会被阻塞。
2024-06-15 12:03:21
411
原创 深入学习Java `synchronized` 关键字
`synchronized`关键字通过确保在同一时间只有一个线程可以执行某个代码块,从而防止多个线程同时访问共享资源时发生数据不一致的问题。
2024-06-15 12:02:40
396
原创 学习理解 CompletableFuture
`CompletableFuture` 是 Java 8 引入的一个强大的工具,它使得编写异步和并行代码变得更加容易。`CompletableFuture` 是 `java.util.concurrent` 包的一部分,是 `Future` 的扩展,它不仅允许你手动完成计算,还提供了一套丰富的 API 来支持异步编程。与传统的 `Future` 不同,`CompletableFuture` 提供了非阻塞的方式来获取结果,并且可以链式调用和组合多个异步任务。
2024-06-14 08:30:00
1838
原创 学习Java中的Future类
在Java中,异步编程是一种常见且强大的编程模式,它允许程序在等待一个任务完成的同时继续执行其他任务。`Future`类是Java中的一种机制,用于表示异步计算的结果。在这篇文章中,我们将深入探讨Java中的`Future`类,了解它的使用方法及其在并发编程中的重要性。
2024-06-14 08:00:00
400
原创 JVM性能优化案例:减少对象频繁创建
某金融应用系统在处理大量并发交易时,响应时间过长,并且有时出现内存溢出(OutOfMemoryError)的问题。经过分析,发现问题主要出在频繁的对象创建和较差的内存管理上。
2024-06-13 10:17:59
639
原创 JVM性能优化案例:优化垃圾回收器的年轻代和老年代占比
从GC日志中可以看到,年轻代GC的频率较高,而老年代GC的频率较低。这表明当前配置下年轻代内存空间可能较小,导致频繁的年轻代GC。这种频繁的GC会影响系统的吞吐量和响应时间。我们有一款在线交易系统,要求低延迟和高吞吐量。系统运行在Ubuntu服务器上,使用OpenJDK 11,并启用了G1垃圾回收器。通过增加年轻代内存空间,可以减少年轻代GC的频率,从而提升系统性能。合理设置GC暂停时间目标,确保系统在低延迟和高吞吐量之间取得平衡。利用多核CPU资源,增加GC并发线程数,加快GC过程。
2024-06-13 10:17:16
629
原创 JVM产生FullGC的原因有哪些?
在Java虚拟机(JVM)中,垃圾回收(Garbage Collection,简称GC)是一个非常重要的机制。GC的目的是自动管理内存,回收不再使用的对象,防止内存泄漏。在JVM中,Full GC是一种比较昂贵的操作,它会暂停应用程序的执行(Stop-the-World),对所有的堆内存进行垃圾回收。因此,了解产生Full GC的原因,对于优化Java应用的性能至关重要。本文将详细探讨JVM产生Full GC的几种主要原因。
2024-06-12 12:43:17
992
原创 双亲委派模型是什么,为什么要使用双亲委派模型
在Java中,类加载器(ClassLoader)是负责将类文件加载到JVM中的关键组件。为了确保类加载过程的安全性和稳定性,Java引入了一种叫做双亲委派模型(Parent Delegation Model)的机制。这篇文章将介绍什么是双亲委派模型,以及为什么要使用这种模型。
2024-06-12 12:42:07
1578
原创 JVM 类加载器的工作原理
Java 虚拟机(JVM)的类加载器是 JVM 体系结构中的一个重要组件,它负责动态加载 Java 类到内存中。类加载器的工作原理涉及几个关键步骤和概念。本文将详细介绍 JVM 类加载器的工作原理。
2024-06-11 15:09:40
1153
原创 介绍JVM的JIT编译器
Java虚拟机(JVM)是Java编程语言的基础,它使Java程序能够在各种平台上运行。为了实现这一目标,JVM将Java字节码转换为机器代码。JIT编译器(Just-In-Time Compiler,即时编译器)是JVM中的一个重要组件,它在程序运行时将字节码动态编译为本地机器代码,从而提高程序的执行效率。
2024-06-11 10:35:26
453
GitKraKen-6.5.1-main.zip
2023-08-31
表面网络,深网和暗网介绍.pdf
2023-08-31
文件处理程序-转移指定文件-v0.4
2023-08-31
Xshell6个人版,本人自己在用。解压即可使用。亲测有效。
2020-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人