自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (1)
  • 收藏
  • 关注

原创 最全蓝桥杯省赛国赛知识点总结

最全蓝桥杯省赛国赛知识点总结及其模板

2023-06-12 23:03:17 2921 6

原创 责任链设计模式

接口继承自Ordered接口,用于实现链式处理逻辑。handle方法处理请求参数,方法为处理器分组提供依据。

2025-05-08 19:12:37 414

原创 Java多线程顺序打印ABC的两种实现方式详解

在Java多线程编程中,顺序执行任务是一个经典问题。本文将通过两个实现方案,演示如何让三个线程严格按照A->B->C的顺序各打印10次字符,并深入解析两种不同同步机制的实现原理。实现精准的线程唤醒控制,每个线程执行后唤醒下一个指定线程。实现状态控制,使用flag变量标识当前可执行线程。ABCABCABC…

2025-03-16 16:28:47 290

原创 Docker常用命令清单

(-d后台运行,-p映射端口,–name指定容器名)(记忆:pull=拉取,类似git拉取代码)(-it开启交互模式,可直接操作容器内系统)(显示Docker版本、存储驱动、内核等)表示当前目录的Dockerfile)(-v指定卷挂载,容器内数据持久化)(-a清理所有未使用的镜像和卷)(类似Linux的ps命令)(直接列出所有镜像,可加。(-f实时跟踪日志输出)(类似给镜像重命名)

2025-03-09 22:07:35 335

原创 OpenFeign:服务间通讯携带 Token 的实现

无论是异步调用还是MQ消费者场景,出现请求上下文缺失问题的根本原因在于的线程隔离特性。这一特性使得在跨线程或非HTTP请求触发的场景下,无法自动获取上下文。为了解决这一问题,我们需要在这些场景中手动处理上下文的传递或设置,确保Feign调用能够正确携带所需的请求头信息,从而保证微服务间通信的安全性和稳定性。通过对这些问题的深入理解和有效解决,我们能够更好地构建健壮的微服务架构应用。

2025-03-01 22:29:45 1158

原创 EasyExcel构建复杂多级表头

在Java开发中,处理Excel文件时,构建复杂的多级表头是一项常见且具有挑战性的任务。本文将详细介绍如何通过自定义的类结合EasyExcel库,轻松实现多级表头的构建,并将数据写入Excel文件。

2025-03-01 11:24:27 1136 1

原创 Spring Bean生命周期

类实现了多个Spring生命周期接口,并定义了自定义的初始化和销毁方法。我们用一个简单的例子来说明Spring Bean的生命周期。注解用于定义一个Bean实例,并指定初始化和销毁方法。接口,用来在Bean初始化前后做一些额外操作。Bean并在控制台输出它的名字。是一个自定义的Bean后处理器,它实现了。在这个类中,我们定义了一个名为。的Bean,并指定了初始化方法。关闭容器,触发销毁方法的执行。启动Spring应用,获取。首先,我们定义一个配置类。

2025-02-06 15:43:37 459

原创 Java异步编排

是 Java 提供的一个强大的工具,用于编写异步和非阻塞代码。它不仅支持简单的异步执行,还提供了丰富的功能用于处理任务的组合、异常处理、结果转换等。异步任务执行(有返回值) vsrunAsync()(无返回值)任务完成后处理(同步) vs(异步) vs(异常处理) vshandle()(结果与异常处理)结果转换与消费(转换) vs(消费) vsthenRun()(执行副作用操作)等待多个任务完成allOf()(等待所有任务完成) vsanyOf()(等待任意任务完成)结果获取get()

2025-01-22 10:43:19 623

原创 sentinel使用手册

【代码】sentinel使用手册。

2024-11-30 21:01:51 444

原创 Nacos使用手册

为了启用 Nacos 配置的热更新功能,我们需要在 Nacos 控制台中提交配置文件,并确保命名格式正确。通过 Nacos 的共享配置功能,可以将不同服务共享的配置存储在 Nacos 中,避免重复配置。的值在 Nacos 中发生变化,Spring 会自动加载最新的配置,支持热更新。通过 Java 代码读取配置并启用热更新功能,我们可以使用。提交配置后,可以在 Nacos 控制台中查看已上传的配置。中配置 Nacos 服务地址及应用名称。注解来绑定 Nacos 配置。

2024-11-30 17:09:45 442

原创 GateWay使用手册

定义一个全局过滤器,记录请求的时间并打印日志。@Component // 声明为Spring组件@Override// 记录请求开始时间System.out.println("请求开始时间: " + System.currentTimeMillis());// 放行请求// 记录请求结束时间System.out.println("请求结束时间: " + System.currentTimeMillis());}));@Override// 过滤器的执行顺序,数字越小优先级越高。

2024-11-28 10:28:09 746

原创 OpenFeign使用手册

OpenFeign使用手册

2024-11-27 18:04:41 176

原创 MyBatis-Plus使用手册

MyBatis-Plus代码生成器

2024-11-25 18:18:47 1161

原创 索引相关面试问题

索引失效的情况:不满足最左匹配原则对索引列进行了表达式计算、函数计算、类型转换(包含强制和隐式类型转换)对索引列进行了左模糊匹配使用了范围条件查询,则右侧字段索引失效使用了不等于 (!= 或 < >)OR 前后有非索引列建议使用索引的情况:当字段的值是唯一的在 WHERE、GROUP BY、ORDER BY 使用到的字段在 DISTINCT 使用到的字段多表连接时的连接字段区分度大,或者频繁使用的字段对于字符串,使用前缀索引不适合创建索引的情况:没有在 W

2024-10-13 10:21:16 361

原创 SpringMVC的处理流程

用户请求发送到前端控制器根据请求路径获取处理器执行链,处理器执行链包含了处理器方法和拦截器。根据处理器方法找到处理器适配器调用拦截器的preHandle方法处理器适配器执行处理器方法,返回调用拦截器的postHandle方法视图解析器解析modelAndView得的视图view并渲染调用拦截器的方法通过这八个步骤,SpringMVC 实现了从请求接收、控制器处理、视图渲染到资源清理的完整生命周期。理解这些步骤有助于更深入地掌握 SpringMVC 框架的运作原理,提高开发效率和代码的可维护性。

2024-10-10 14:46:27 1132

原创 Spring 事务管理失效的十大原因

Spring 提供了强大的事务管理机制,极大地方便了开发者处理复杂的事务操作。然而,事务管理的有效性依赖于正确的配置和使用。在本文中,我们深入探讨了 Spring 事务管理失效的十大常见原因,并提供了详细的解决方案和代码示例。

2024-10-09 22:08:02 1086

原创 Spring 事务传播机制:深入理解与实践

Spring 提供的七种事务传播机制,帮助我们在复杂业务场景中灵活控制事务的行为。通过合理选择传播机制,我们可以确保数据库操作的原子性和数据的一致性。无论是REQUIRED的无条件加入,还是的独立事务,亦或是NESTED的灵活嵌套,理解这些机制将极大提升你在实际开发中的事务管理能力。每一种传播机制都有自己的独特用例和适用场景,了解它们的内外事务关系以及回滚规则,是我们掌控事务边界、提高代码健壮性的关键。

2024-10-09 21:44:24 1573

原创 AQS是什么?

管理多个线程对资源的竞争。等方法来定义如何获取和释放锁。工作,具体的同步器(如。AQS 通过维护一个。

2024-10-01 17:31:46 265

原创 单例模式详解

饿汉式:类加载时创建实例,简单但可能会浪费内存资源。懒汉式:实例延迟到第一次使用时才创建,节省资源,但需要处理线程安全问题。静态内部类:优雅的解决方案,结合了懒加载、线程安全和性能的优点。枚举方式:最推荐的实现方式,简单、安全,且能防止反射和序列化破坏。单例模式虽然简单,但在高并发环境下实现需要特别注意线程安全问题。同时,序列化和反射可能会破坏单例,需要采取额外的防御措施,如和反射保护机制。

2024-09-16 10:31:05 1483

原创 深入理解Java中的偏向锁、轻量级锁与重量级锁

偏向锁:适用于锁主要被一个线程持有的场景,减少了锁的获取与释放开销。轻量级锁:适用于锁被少量线程竞争的场景,通过CAS操作实现快速的锁获取。重量级锁:适用于锁被高频率、多线程竞争的场景,确保锁的独占性。通过合理理解和应用这些锁机制,结合良好的并发编程实践,可以显著提升Java应用程序的性能和响应性。同时,随着Java版本的不断演进,锁的优化机制也在持续改进,开发者应及时关注最新的JVM优化技术,以充分利用其带来的性能优势。

2024-09-15 17:51:52 1567 2

原创 深入理解Java中的线程状态转换及关键同步方法

在Java中,线程是执行程序中最小的执行单元。Java通过类和接口提供了对线程的支持。线程允许程序并行执行多个任务,从而提升应用程序的性能和响应性。线程的生命周期由多个状态组成,理解这些状态及其转换对于掌握多线程编程至关重要。方法所属类用途阻塞状态释放锁唤醒方式其他特点join()等待另一个线程完成执行WAITING无目标线程终止或超时用于线程顺序控制,主线程等待子线程sleep()暂停当前线程执行指定时间无睡眠时间到达或被中断不依赖于任何锁,常用于定时任务wait()

2024-09-15 17:35:19 1029

原创 深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

秒杀业务的复杂性主要体现在高并发场景下的事务管理和并发控制。AOP 代理对象与事务管理:确保事务通过代理对象调用,避免事务失效。并发控制与锁机制:通过实现单机并发控制,在分布式环境下可以使用分布式锁。锁包含事务:锁先于事务执行,确保线程安全和数据一致性。乐观锁与CAS:通过库存判断或版本号机制确保库存扣减的正确性,避免超卖。限购策略:通过查询订单表限制用户的重复购买,防止一人多单。通过合理运用这些技术,能够设计出一个稳定、高效的秒杀系统,在应对高并发时保持系统稳定性,同时确保数据的安全性和一致性。

2024-09-08 15:00:22 1008

原创 防止缓存击穿、缓存穿透和缓存雪崩

通过使用Redis缓存、分布式锁和逻辑过期策略,我们可以有效解决缓存穿透缓存击穿和缓存雪崩问题。通过这套方案,我们能够在保证系统高可用的同时,减少数据库压力,并提高服务的性能和稳定性。缓存空值机制:防止缓存穿透。分布式锁:防止缓存击穿时多个线程同时访问数据库。这套方案对于处理高并发场景下的缓存问题是非常有效的。希望这篇文章能帮助大家更好地理解和应对缓存问题。

2024-09-08 10:06:52 1082

原创 ThreadLocal 及其工作原理

是 Java 提供的一种工具类,它为每个线程提供独立的变量副本。每个线程通过对象获取或修改自己专有的变量,而不会影响其他线程。这种机制称为线程本地存储(Thread Local Storage, TLS)。使用,可以避免在多线程环境下使用同步锁来控制变量访问,从而提高了代码的并发性和执行效率。

2024-08-28 18:43:26 861

原创 MyBatis中的占位符解析机制

MyBatis 在处理#{}占位符时,首先会根据 JavaBean 规范查找相应的 getter 方法。如果找不到对应的 getter 方法,它会尝试通过反射直接访问对象的字段值。理解 MyBatis 的这一工作机制,有助于我们编写更加健壮的代码,并避免潜在的属性访问错误。通过遵循 JavaBean 规范(为每个属性提供标准的 getter 和 setter 方法)以及了解 MyBatis 的工作原理,我们可以更有效地利用 MyBatis 的特性,并确保应用程序的稳定性和性能。

2024-08-27 20:04:53 850

原创 手写Spring框架(简单实现)

在实现一个简单的Spring风格的依赖注入容器时,我们通常需要处理Bean的生命周期,包括实例化、属性注入以及完全初始化。为了处理复杂的依赖关系和循环依赖问题,我们可以使用三级缓存机制。本文将介绍如何实现这种机制,并展示相应的代码示例。通过上述代码和说明,你可以实现一个简单的三级缓存机制,处理Bean的创建和依赖注入。这种实现方式可以有效地管理Bean的生命周期,并解决循环依赖等复杂问题。以下是一个实现三级缓存的简单容器的代码示例。库来解析XML配置文件,创建和管理Bean的生命周期。

2024-08-27 17:44:28 525

原创 Java中的深克隆与浅克隆

浅克隆:复制对象时不复制引用对象的内容,克隆对象和原对象共享引用对象。深克隆:复制对象时也复制引用对象的内容,克隆对象和原对象完全独立。实现深克隆的方式:重写clone()方法、使用序列化、使用第三方库(如Apache Commons Lang)、使用JSON序列化。了解深克隆和浅克隆的区别,并根据实际需要选择合适的克隆方式,可以帮助开发者更好地管理对象的复制和状态。希望这篇博客能够帮助你更好地理解Java中的深克隆和浅克隆!

2024-08-27 10:25:50 2421

原创 深入理解Java类加载器及资源加载

类加载器是Java虚拟机的一部分,用于动态加载Java类到JVM中。类加载器机制使Java具有动态扩展的能力。引导类加载器(Bootstrap ClassLoader)由JVM本身实现,通常用本地代码(C/C++)编写。加载JVM核心类库(如rt.jar没有父类加载器。扩展类加载器(Extension ClassLoader)由Java实现,加载扩展目录(如)中的类库。父类加载器是引导类加载器。应用程序类加载器(Application ClassLoader)

2024-08-06 16:39:47 961

原创 合成复用原则

合成复用原则是面向对象设计中的基本原则之一,通过优先使用组合或聚合而不是继承,可以提高系统的灵活性和可维护性。在实际开发中,遵循合成复用原则有助于我们设计出高质量的代码,使系统更加稳定和易于扩展。希望这个博客对你有所帮助。如果你有任何问题或需要进一步的例子,请随时告诉我!

2024-07-14 21:21:07 1001

原创 迪米特法则

迪米特法则是面向对象设计中的基本原则之一,通过确保对象之间的低耦合,可以提高系统的模块化程度和可维护性。在实际开发中,遵循迪米特法则有助于我们设计出高质量的代码,使系统更加稳定和易于扩展。希望这个博客对你有所帮助。如果你有任何问题或需要进一步的例子,请随时告诉我!

2024-07-14 20:27:24 572

原创 单一职责原则

单一职责原则是面向对象设计中的基本原则之一,通过将类的职责进行分离,可以提高代码的可维护性、可复用性和可测试性。在实际开发中,遵循单一职责原则有助于我们写出高质量的代码。希望这个例子对你写博客有所帮助。如果你有任何问题或需要进一步的例子,请随时告诉我!

2024-07-14 19:46:21 549

原创 里氏替换原则

里氏替换原则是面向对象设计中的基本原则之一,通过确保子类能够替换父类而不改变程序行为,可以提高系统的灵活性、代码的复用性和程序的正确性。在实际开发中,遵循里氏替换原则有助于我们设计出高质量的代码,使得系统更加稳定和易于维护。希望这个博客对你有所帮助。如果你有任何问题或需要进一步的例子,请随时告诉我!

2024-07-14 19:45:21 784

原创 依赖倒置原则

依赖倒置原则是面向对象设计中的基本原则之一,通过依赖于抽象而不是具体实现,可以降低模块间的耦合,提高系统的灵活性、可维护性和可扩展性。依赖传递的三种方式(构造函数注入、Setter方法注入和接口注入)提供了灵活的手段来实现这一原则。通过适当的依赖注入,我们可以设计出高质量的代码,使得系统更加灵活和易于维护。希望这个博客对你有所帮助。如果你有任何问题或需要进一步的例子,请随时告诉我!

2024-07-14 19:36:33 596

原创 开闭原则 (Open/Closed Principle, OCP)

开闭原则是面向对象设计中的基本原则之一,通过确保软件实体对扩展开放,对修改关闭,可以提高系统的稳定性、灵活性和可维护性。在实际开发中,遵循开闭原则有助于我们设计出高质量的代码,使系统更加健壮和易于扩展。希望这个博客对你有所帮助。如果你有任何问题或需要进一步的例子,请随时告诉我!

2024-07-14 16:18:19 2630

原创 Java枚举类

枚举类(enum)是Java中一种特殊的类,用于表示一组固定的常量。例如,一年四季(春、夏、秋、冬)、一周七天(周一到周日)等。这些常量是预定义的,并且在编译时就确定下来,不会在运行时改变。枚举类在Java中非常有用,尤其是在需要表示一组固定常量的时候。通过枚举类,可以确保代码的可读性和安全性。此外,枚举类还可以实现接口、定义成员变量和方法,使其具有更强的功能和灵活性。在实际开发中,合理使用枚举类可以大大提高代码的质量和可维护性。希望这篇博客能帮助您更好地理解和使用Java枚举类。

2024-07-13 22:48:11 370

原创 使用JDBC实现事务管理与隔离级别设置

通过上述示例代码,可以了解如何使用JDBC进行事务管理,包括开始事务、提交事务、回滚事务以及设置和获取事务的隔离级别。理解并应用这些概念和技术,可以有效地确保数据库操作的可靠性和数据的一致性。希望这篇博客能帮助你更好地理解和使用JDBC进行事务管理。如果你有任何问题或建议,欢迎在评论区留言。

2024-07-12 21:46:53 1618 1

原创 使用JDBC实现批量插入数据的最佳实践

通过使用JDBC的批处理操作,结合MySQL的批处理优化功能,可以显著提高批量插入数据的性能。在实际开发中,推荐在处理大批量数据时使用addBatch()等方法,并确保关闭自动提交模式以优化数据库操作的效率。

2024-07-12 19:37:53 1268

原创 使用JDBC进行数据库操作

通过上述工具类DBUtils,我们可以简化数据库操作,避免重复编写获取连接、关闭资源等代码,提高开发效率和代码可维护性。希望本文对您了解和使用JDBC进行数据库操作有所帮助。

2024-07-12 15:44:50 552

原创 理解 MySQL 中 `ALTER TABLE` 的行为:为什么某些约束在修改列时消失?

dept表和employees表。在使用 MySQL 的语句修改列时,需要注意约束条件的保留问题。NOT NULL和DEFAULT约束通常需要在修改时重新指定,而UNIQUE和等表级约束通常不会在修改单个列时被移除,因为它们涉及表级别的索引和引用完整性。CHECK约束可以是列级或表级,具体取决于它的定义。为了确保所有约束条件都正确应用,建议在修改列定义时明确重新指定所有需要的约束条件。

2024-07-09 10:39:48 865

原创 探索 Java 8 中的 Stream API

Stream 是一个用于处理数据序列的抽象概念。它不存储数据,而是从数据源(如集合、数组等)按需生成数据。Stream 提供了一套丰富的操作符,可以链式调用,以一种声明式的方式处理数据。Stream API 是 Java 8 引入的强大工具,提供了一种声明式、链式调用的方式来处理数据。通过了解中间操作和终止操作,你可以高效地处理数据流,简化代码,提高可读性和可维护性。希望本文能帮助你更好地理解和使用 Java 中的 Stream API。

2024-06-30 14:49:47 416

eatFish.zip

学校课设时候弄得大鱼吃小鱼,有需要的快下载

2020-06-26

空空如也

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

TA关注的人

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