自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

开发笔记、技术分享

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

原创 甩掉接口文档烦恼!Spring Boot 集成 Knife4j,轻松玩转 API 可视化

提供简洁美观的界面,方便用户浏览和使用 API 文档。支持接口排序、搜索、分组等功能,支持多种格式输出。提供了更友好的配置方式,使用起来更加简单方便。Knife4j 为我们提供了一种简单高效的方式来生成和管理 API 文档,从此告别繁琐的手动编写,让前后端协作更加顺畅!希望这篇文章能够帮助你快速上手 Knife4j,更多进阶的技能请阅读官方文档!🎉。

2024-05-29 17:25:05 1776

原创 Spring Boot 中使用 Spring Retry 重试:再也不怕代码“掉链子”了

Recover注解用于标记一个方法,该方法会在 @Retryable 注解标记的方法重试失败后被调用。它就像是一位经验丰富的“替补队员”,在主力队员(重试机制)多次尝试失败后,冷静地接手处理“烂摊子”。@Retryable 注解标记的方法在指定的最大重试次数后仍未成功。@Retryable 注解标记的方法抛出了指定的异常,并且所有重试尝试均失败。通过本文,我们了解了 Spring Retry 的基本用法,以及如何在 Spring Boot 中轻松集成这一强大的功能。

2024-05-28 16:20:59 2515

原创 面试官:讲讲为什么SpringBoot的 jar 可以直接运行?

通常,Java 应用程序需要通过java -jar命令来运行 JAR 文件。而 Spring Boot 应用程序的 JAR 文件不仅包含了应用程序的字节码和依赖库,还包含了一个内嵌的服务器(如 Tomcat 或 Jetty),使得它们可以通过直接运行 JAR 文件来启动整个应用。Spring Boot 使用类加载器来加载和下的资源。这种自定义类加载器能够处理特殊的 JAR 文件结构。以下是@Override// 自定义类加载逻辑。

2024-05-26 23:06:35 835

原创 Spring Boot 中缓存的用法

默认情况下,Spring Boot 使用作为缓存管理器。我们可以自定义缓存配置,来控制缓存的存储方式、过期时间等。@Bean// 在这里可以添加更多的缓存配置));通过这样的配置,我们可以集中管理缓存的各种属性,从而使得缓存配置变得更加灵活和可控。缓存是一把双刃剑,合理使用可以大大提高系统性能,但不当使用则可能导致数据不一致等问题。开发者应根据具体需求和场景,灵活使用缓存策略。个人观点,仅供参考。

2024-05-25 16:43:37 589

原创 告别沉重的ELK,这套轻量级的日志系统值得你拥有

Loki 是由 Grafana Labs 开源的一款高可用、高扩展性、多租户的日志聚合系统。它受到 Prometheus 的启发,采用了类似的机制,使用标签(labels)对日志进行特征标记,然后进行归集统计。Loki 的设计理念是经济高效且易于操作,它不会为日志内容建立全文索引,而是对日志数据进行压缩存储,并且只对日志数据的元数据(如时间戳、labels 等)建立索引。这样的设计使得 Loki 在存储成本和查询效率方面具有优势。

2024-05-23 13:52:20 2550 1

原创 高并发中的限流策略

限流,简单来说,就是限制在一定时间内可以处理的请求数量。这就好比是一条高速公路,虽然可以容纳很多车辆,但如果车辆过多,就会造成拥堵,甚至发生事故。限流的目的就是确保我们的服务器能够稳定运行,避免因为请求过多而导致的系统崩溃。限流是高并发系统中不可或缺的一部分,它可以帮助我们保护系统免受过多请求的冲击。通过上述的几种限流方式,我们可以根据自己的业务需求选择合适的限流策略。记住,限流不仅仅是为了保护系统,更是为了提供更好的用户体验。希望这篇文章能够帮助大家轻松理解并掌握高并发中的限流方式。

2024-05-22 16:11:25 677

原创 面向切面编程:干净、可维护代码的秘密武器

AOP,全称 Aspect-Oriented Programming,中文翻译为面向切面编程。AOP 是一种编程范式,旨在通过分离跨越应用程序多个模块的关注点(如日志记录、事务管理、权限检查等),来提高代码的模块化程度。换句话说,AOP 让你可以将一些通用的功能抽取出来,然后以一种不干扰核心业务逻辑的方式,将这些功能动态地应用到需要的地方。假设我们要在所有服务层方法执行前后记录日志。我们可以创建一个切面类并使用@Aspect注解来定义切面。import org。

2024-05-21 09:25:21 563

原创 公平锁与非公平锁【通俗易懂篇】

公平锁和非公平锁就像世界上不同的管理资源的方法。对于 Java 程序来说,我们需要根据自己的需要选择使用哪一种。就像现实生活中,有时我们需要排队等待,而有时我们又希望快速完成自己的任务。个人观点,仅供参考。

2024-05-20 09:45:05 484

原创 TypeScript的类与接口(Interfaces)

通过本文的介绍,我们深入了解了TypeScript中的类和接口。类是创建对象的模板,而接口定义了对象应该具有的结构。这两个概念在面向对象编程中非常重要,它们帮助我们创建结构化和模块化的代码。在后续的文章中,我们将继续探索TypeScript的其他特性,如泛型、装饰器等,并提供实际的代码示例和最佳实践。

2024-05-18 22:54:41 559

原创 Docker Swarm 集群搭建:轻松打造高可用、可扩展的分布式应用

Docker Swarm 是一个原生的 Docker 容器编排工具,它可以将多个 Docker 主机组成一个虚拟的 Docker 主机,称为 Swarm。Swarm 中的每个节点可以是工作节点(worker node)或管理节点(manager node)。管理节点负责集群的管理和调度,而工作节点负责运行容器。通过以上步骤,你已经成功在 CentOS 上搭建了一个 Docker Swarm 集群,并部署了一个简单的服务。Docker Swarm 提供了强大的原生集群管理能力,适用于多种应用场景。

2024-05-18 22:21:01 623

原创 深入理解TypeScript的Object和Tuple类型

通过本文的介绍,我们深入了解了TypeScript中的object和tuple类型。object类型提供了一种灵活的方式来处理多种类型的数据,而tuple类型则允许我们定义和处理具有固定长度和特定类型元素的数组。这些类型的特性使得TypeScript在处理复杂数据结构时更加强大和精确。在后续的文章中,我们将继续探索TypeScript的其他特性,如枚举(enum)、自定义类型、类与接口等,并提供实际的代码示例和最佳实践。

2024-05-17 09:56:14 481

原创 一文搞懂 Spring Boot 启动流程

Spring Boot 的启动流程虽然复杂,但通过本文的介绍,相信读者已经对其有了更深入的了解。理解 Spring Boot 的启动流程,有助于我们更好地使用 Spring Boot 进行开发,并在遇到问题时能够快速定位和解决。请注意,本文提供的代码示例和流程描述基于 Spring Boot 2.x 版本。随着 Spring Boot 的不断更新,具体实现可能会有所变化。建议读者参考最新的官方文档进行学习和实践。

2024-05-17 09:53:33 536

原创 TypeScript的数据类型系统

除了内置类型,TypeScript还允许你使用type关键字自定义新的类型。自定义类型可以是交叉类型、联合类型、映射类型等。通过本文的介绍,我们了解了TypeScript中的各种数据类型,包括基本类型、复杂类型以及如何自定义类型。这些类型为TypeScript提供了强大的类型检查能力,有助于我们在开发过程中捕捉错误和提高代码质量。在后续的文章中,我们将继续探索TypeScript的其他特性,如类与接口、泛型等,并提供实际的代码示例和最佳实践。

2024-05-16 10:18:25 383

原创 春风拂面,深入浅出:Bean 处理器揭秘 Spring Boot 启动之谜

和是 Spring 中强大的扩展接口,分别在不同的生命周期阶段提供了对 Bean 定义和实例进行处理的能力。通过合理使用这些接口,我们可以实现灵活的 Bean 管理和自定义逻辑,满足复杂的业务需求。希望本文的介绍和示例代码能够帮助你更好地理解和使用这些接口。在实际项目中,合理应用这些技术,可以大大提高代码的灵活性和可维护性。

2024-05-16 10:15:20 584

原创 TypeScript中的泛型(Generics)

泛型是一种在定义函数、类或接口时不指定具体类型的方式。泛型参数可以在使用时指定,这样可以确保我们的代码更加灵活和类型安全。通过本文的介绍,我们深入了解了TypeScript中的泛型。泛型提供了一种编写可重用且类型安全的代码的方式。无论是在函数、类还是接口中,泛型都是TypeScript中不可或缺的一部分。在后续的文章中,我们将继续探索TypeScript的其他高级特性,并提供实际的代码示例和最佳实践。

2024-05-15 15:51:09 380

原创 Spring Boot 中的秘密武器:ApplicationContextInitializer 接口揭秘

Override// 例如,添加一些自定义的应用监听器接口是 Spring Boot 提供的一个非常有用的扩展机制,它使得开发者可以在 Spring 容器完全启动之前进行各种自定义操作。无论是动态添加 Bean、预处理配置属性,还是自定义应用上下文行为,都能提供强大的支持。通过本文的讲解和示例代码,你应该对如何在 Spring Boot 应用中使用有了清晰的认识。在实际开发中,可以根据项目需求灵活运用此接口,以提升开发效率和应用的灵活性。

2024-05-15 14:17:28 739

原创 【保姆级教程】如何将火爆全网的Kimi接入微信公众号,成为你的专属AI智能客服

通过将 Coze Bot 这样的AI智能助手接入微信公众号,企业不仅能够提供更加智能化的服务,还能有效提升用户满意度和忠诚度。随着技术的不断进步,AI与社交媒体的结合将变得更加紧密,为企业带来更多创新的服务模式。通过本文的介绍,你应该对如何将AI智能助手接入微信公众号有了基本的了解。本文讲解的仅仅只是一个入门,这只是一个起点,更多的创新和优化还需要在实际开发和运营过程中不断探索和实践。

2024-05-14 15:00:48 2964 3

原创 通俗易懂的策略模式讲解

策略模式是一种设计模式,它允许你定义一系列的算法(策略),并将每个算法封装成一个对象。这样,你可以轻松地切换不同的算法,而不需要改变原始代码。策略模式是一种设计模式,它允许你定义一系列的算法(策略),并将每个算法封装成一个对象。这样,你可以轻松地切换不同的算法,而不需要改变原始代码。

2024-05-14 14:43:35 687

原创 掌握 Spring Boot 观察者模式:打造松耦合事件驱动应用程序

观察者模式是一种强大的设计模式,可以用于实现松耦合的代码,并简化事件驱动编程。Spring Boot 提供了内置的事件机制,可以轻松地实现观察者模式。

2024-05-13 09:29:43 587

原创 Spring Boot 集成 sa-token 实践教程

通过以上步骤,我们已经成功地将sa-token集成到了Spring Boot项目中,实现了基本的登录和权限控制功能。sa-token的更多高级功能,如角色管理、权限细分等,可以通过阅读官方文档进一步学习。

2024-05-12 14:50:36 811 1

原创 使用 Spring Boot 配合策略模式增强系统接口扩展能力

策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。通过使用策略模式,我们可以在运行时选择算法,并且可以动态地改变系统的行为。Context(环境):它持有一个对策略对象的引用,负责将具体的算法委托给策略对象执行。Strategy(策略):它是一个接口或抽象类,定义了一个算法族,具体的算法则实现了这个接口或继承了这个抽象类。ConcreteStrategy(具体策略):它实现了策略接口,提供了具体的算法实现。

2024-05-12 14:50:03 705

原创 Spring Boot数据映射利器:MapperStruct vs. BeanUtils.copyProperties 一较高下

在选择使用 MapperStruct 还是 BeanUtils.copyProperties 时,需要根据项目的具体情况来进行权衡。如果项目对性能要求较高,且需要更好的类型安全性和灵活性,推荐使用 MapperStruct;如果项目对性能要求不高,且简单的属性拷贝场景较多,可以考虑使用 BeanUtils.copyProperties。最终,根据实际情况选择合适的方式来进行对象之间的数据拷贝操作。

2024-05-11 09:41:48 833

原创 解锁Spring Boot数据映射新利器:深度探索MapperStruct

MapperStruct 是一款功能强大、易于使用的对象属性拷贝工具,可以帮助开发者快速、安全地完成对象属性拷贝工作。在实际开发中,可以根据具体的项目需求选择合适的工具进行对象属性拷贝。

2024-05-11 09:41:04 989

原创 TypeScript中的枚举(enum)与自定义类型

TypeScript的type关键字允许你定义新的类型,这可以是交叉类型、联合类型、映射类型等。自定义类型可以帮助你创建复杂的类型结构,使得代码更加精确地表达你的意图。通过本文的介绍,我们深入了解了TypeScript中的枚举(enum)和自定义类型。枚举提供了一种清晰的方式来定义一组命名的常量,而自定义类型则允许我们创建复杂的类型结构,使得代码更加精确和易于维护。在后续的文章中,我们将继续探索TypeScript的其他特性,如类与接口、泛型等,并提供实际的代码示例和最佳实践。

2024-05-10 14:32:48 578

原创 Spring Boot 调用外部接口的几种方式

以上对 Spring Boot 调用外部接口的三种方式进行了简单介绍,但实践中需要依据项目具体需求和实际情况进行选择,以确保项目导向和效率最优。

2024-05-10 14:31:44 1244 1

原创 TypeScript简介与基础概念

TypeScript 提供了一个强大的类型系统,可以帮助开发者编写更健壮、更易于维护的代码。通过本文的介绍,您应该对 TypeScript 的基本概念有了初步的了解。在接下来的系列文章中,我们将深入探讨 TypeScript 的其他特性,包括数据类型系统、类与接口、泛型等,并提供实际的代码示例和最佳实践。

2024-05-09 09:53:59 355

原创 Java经典面试题及答案详解:深入探索Java核心概念

本文提供了 Java 面试中常见的问题及其答案,涵盖了 Java 基础、面向对象编程、集合框架、异常处理和多线程等多个方面。希望这些内容能够帮助读者在面试中取得好成绩,同时也加深对 Java 编程的理解。

2024-05-09 09:51:50 629

原创 深入理解Java IO

Java IO是Java编程中不可或缺的一部分,通过本文的介绍,你应该对Java中的IO流有了更深入的理解。无论是文件操作还是网络通信,Java IO提供了丰富的API来满足各种需求。在实际项目中,合理使用Java IO可以提高程序的效率和可维护性。

2024-05-08 11:19:42 379

原创 深入理解Java类装载机制

Java的类加载机制是Java虚拟机的重要组成部分,它负责将类的字节码加载到内存中,并在运行时动态链接和初始化类。本文介绍了类加载的过程、类加载器的分类以及双亲委派模型,并通过示例代码演示了类加载器的使用。深入理解Java的类加载机制有助于开发人员编写高效、安全的Java应用程序。

2024-05-08 11:08:27 837

原创 深入理解Dozzle:轻量级Docker日志查看工具

Dozzle 在启动时可以通过环境变量来设置一些配置选项。Dozzle 提供了一个简单高效的方式来实时监控 Docker 容器日志。它安装简便、功能直观、界面友好,非常适合于开发和小规模生产环境。希望这篇文章能帮助您快速上手 Dozzle,并透过提供的技巧,充分发挥它的潜力。记得探索更多 Dozzle 提供的功能,它可能会成为您日常工作中的好帮手。

2024-05-07 17:04:46 1055

原创 探究POST请求为何会发送两次的技术原因

POST请求发送两次可能会导致数据的重复提交或者其他问题,因此在开发网络应用程序时需要格外注意。通过了解造成POST请求重复发送的常见原因,并采取相应的解决措施,可以有效地避免这一问题的发生,提升系统的稳定性和用户体验。

2024-05-07 15:58:58 847

原创 单例模式:确保一个类只有一个实例的策略

单例模式是确保一个类只有一个实例的有效手段,它在资源管理和配置信息共享方面非常有用。在 Spring Boot 中,单例模式被用于管理全局的配置、连接池、线程池等。通过理解单例模式的实现和应用,开发者可以更好地控制应用的资源和行为。

2024-04-28 09:46:48 597

原创 观察者模式(Observer)在Java中的应用与实践

观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Subject(主题):被观察的对象,它包含了观察者列表并提供了添加、删除观察者以及通知观察者的方法。Observer(观察者):观察主题的对象,当主题状态发生改变时,观察者会接收到通知并进行相应的更新操作。观察者模式是一种常用的设计模式,它可以实现对象之间的松耦合,并使得系统更加灵活和可扩展。在Java开发中,观察者模式被广泛应用于各种场景,特别是事件驱动系统和GUI开发中。

2024-04-28 09:42:54 408

原创 Java Stream API 深度解析与实践技巧

Java 的 Stream API 提供了一种更加简洁和强大的方式来处理集合数据。熟练地使用 Stream API 可以使代码更加清晰,同时提高执行效率。在日常开发中,把握好何时使用 Stream 以及各种操作的合理运用,是提高开发水平的关键。为进一步提高您的 Stream API 使用技能,建议您参考官方文档,以及一些高质量的博客和论文。这样,您就能更深入地了解 Stream API 背后的原理,并在实际开发中灵活运用。

2024-04-28 09:41:44 430

原创 责任链模式-解析与示例

这个例子非常简化,具体情况会根据实际业务需要做出相应的调整和完善。此外,在 Spring 框架中,很多已有的组件比如Filter等已经形成了一个责任链,可以通过配置文件或注解的方式灵活组合。

2024-04-27 15:37:56 488

原创 MySQL常见问题解答与调优经验分享

针对MySQL的性能优化是一个复杂但必要的过程。本文通过介绍慢查询优化、死锁解决和性能瓶颈的调优方法,希望能帮助开发人员更好地理解和应对MySQL数据库的挑战。记住,持续的监控、分析和调优是保证数据库性能的关键。为了更深入地理解本文讨论的每个问题和解决方案,读者应当查阅更多的官方文档、技术博客文章和相关学术论文,这些都是提升数据库管理和调优技能的宝贵资源。

2024-04-27 15:35:52 403 1

原创 Redis经典面试题解析,助你面试无忧!

Redis 是一个功能强大、应用广泛的NoSQL数据库。掌握 Redis 的基本知识和常见面试题答案,对于在面试中脱颖而出非常重要。本文整理的 Redis 经典面试题及答案解析,希望能够帮助大家更好地备战面试。

2024-04-26 10:34:31 560 1

原创 Redis三大问题:雪崩、穿透、击穿及解决方案

雪崩问题是指当缓存层因为大面积的缓存失效、宕机等原因导致请求直接打到了数据库层面,可能会引起数据库连接异常甚至崩溃。解决方案:设置不同的过期时间:防止同时大量的缓存失效。使用Redis集群:确保一个实例故障时,其他实例可以继续提供服务。限流降级策略:对突然增多的流量进行限制。// 假设我们有一个缓存方法,可以设置不同的过期时间// 设置一个随机的过期时间,避免同时过期穿透问题是指查询不存在于缓存和数据库中的数据,请求不断查询数据库,增加数据库的不必要压力。解决方案:缓存空对象。

2024-04-26 10:33:46 536 1

原创 SpringBoot 实现读写分离及查询强制路由到主库的实践指南

通过上述步骤,我们实现了Spring Boot应用中的读写分离,并支持了查询强制路由到主库。这种方法既利用了Spring Boot的声明式事务管理,又通过自定义动态数据源路由增加了灵活性。注意:本文中的示例代码和配置仅为说明如何使用Spring Boot实现读写分离。在实际应用中,应根据项目的具体情况和Spring Boot的版本进行适配。

2024-04-26 10:32:31 1089 2

原创 API 网关:现代应用架构的关键组件

API网关是一个管理微服务请求的服务器,它是所有客户端请求的中介。可以将其视为微服务架构的“前台接待”,负责请求路由、合成与协议转换。简而言之,API网关负责将外部请求转发到内部的多个服务。API网关对于微服务架构而言不可或缺,它确保了架构的灵活性、安全性和可维护性。通过适当的实现和配置,API网关不仅能提高服务的响应速度和可用性,还能提供有力的服务治理和监控功能。对于任何现代化的微服务项目来说,掌握API网关的使用与部署,是提升项目成功率的关键步骤之一。

2024-04-25 09:48:25 540 1

空空如也

空空如也

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

TA关注的人

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