Resilience4j原理及应用:构建高可用性系统的熔断、限流与容错机制(一)

本系列文章简介:

        在本系列文章中,我们将深入探讨Resilience4j的原理及应用,包括熔断器、限流器和容错策略的工作原理、配置方法以及最佳实践。通过学习和掌握Resilience4j的使用技巧,我们将能够更好地构建高可用性系统,提升系统的稳定性和可靠性,为企业的发展提供有力保障。欢迎大家订阅《Java技术栈高级攻略》专栏,一起学习,一起涨分!

目录

一、引言

1.1 Resilience4j简介

1.2 高可用性系统的挑战与需求

1.3 Resilience4j在构建高可用性系统中的作用

二、Resilience4j的核心原理

2.1 熔断器(Circuit Breaker)原理

2.1.1 熔断器的工作模式

2.1.2 熔断器的状态转换机制

2.1.3 熔断器的配置参数与调整策略

2.2 限流器(Rate Limiter)原理

2.2.1 限流器的工作机制

2.2.2 滑动窗口算法与令牌桶算法

2.2.3 限流器的应用场景与配置

2.3 容错机制(Fault Tolerance)

2.3.1 重试(Retry)策略

2.3.2 超时(Timeout)控制

2.3.3 降级(Fallback)机制

三、Resilience4j的应用实践

四、Resilience4j的监控与调优

五、总结与展望

六、结语


一、引言


1.1 Resilience4j简介

Resilience4j是一个轻量级的容错库,它被设计用来帮助开发人员构建弹性和可靠的Java应用程序。它提供了诸如断路器、限流、重试和超时等功能,以保护应用程序免受故障和异常的影响。

Resilience4j的核心概念是“函数式编程”,它允许开发人员使用Java 8的函数式编程特性来定义和组合容错策略。这使得容错逻辑更加灵活、可读性更高,并且易于测试和维护。

Resilience4j提供了一系列的模块,每个模块都用于解决不同类型的容错问题。例如,Circuit Breaker模块提供了断路器功能,可以阻止故障的传播和持续的失败调用。Rate Limiter模块提供了限流功能,可以控制调用的速率,以避免资源耗尽。Retry模块提供了重试功能,可以在发生错误时重试失败的操作。Time Limiter模块提供了超时功能,可以设置操作的最大执行时间。

Resilience4j还提供了与Spring Boot集成的支持,使得在Spring应用程序中使用Resilience4j变得更加简单和方便。


1.2 高可用性系统的挑战与需求

高可用性系统是指系统在遭受故障或其他不可预料事件影响时,仍能够提供持续稳定可靠的服务。高可用性系统的设计和实现面临着许多挑战和需求。

挑战:

  1. 故障隔离:系统需要能够检测到故障的发生,并将故障隔离在一个较小的范围内,以避免故障的扩散和影响其他部分的正常运行。
  2. 容错性:系统需要能够在出现故障时自动应对和恢复,保证系统的可用性不受影响。
  3. 数据一致性:在分布式系统中,数据的一致性是一个重要的挑战。系统需要保证数据的一致性,确保用户在任何时刻都能够获取到最新的数据。
  4. 高性能:高可用性系统需要具备高性能,能够在大量的请求和流量下保持稳定和可靠的响应时间。
  5. 扩展性:系统需要能够方便地进行扩展,以应对不断增长的用户和数据量。

需求:

  1. 容灾备份:系统需要具备容灾备份机制,能够在主系统发生故障时迅速切换到备用系统,保证服务的连续性。
  2. 自动化运维:系统需要具备自动化的运维能力,能够快速检测和恢复故障,减少人工干预的需求,提高系统的可用性。
  3. 负载均衡:系统需要具备负载均衡的能力,能够将请求均匀地分发给多个服务器,避免单点故障和资源瓶颈。
  4. 冗余备份:系统需要具备冗余备份的能力,能够在硬件或软件故障发生时,自动切换到备用的设备或组件,保证系统的连续性。
  5. 监控和警报:系统需要具备监控和警报机制,能够实时监测系统的运行状态,并在出现异常时及时发出警报,以便及时采取措施修复故障。

高可用性系统的挑战和需求是复杂而多样的,需要综合考虑各种因素并进行合理的设计和实现,以保证系统能够持续稳定地提供服务。


1.3 Resilience4j在构建高可用性系统中的作用

Resilience4j是一个用于构建高可用性系统的库,它提供了一些关键的功能和模式,可以帮助开发人员设计和实现具有弹性和容错能力的应用程序。

以下是Resilience4j在构建高可用性系统中的主要作用:

  1. 断路器模式:Resilience4j提供了一种断路器模式的实现,可以自动检测和处理远程服务的故障,当服务不可用或响应时间过长时,可以将请求快速失败,避免资源耗尽和系统崩溃。

  2. 限流模式:Resilience4j提供了一种限流模式的实现,可以限制对远程服务的并发请求数量,以防止资源耗尽和系统过载。它可以通过设置最大并发请求数、等待队列大小等参数来控制系统的负载。

  3. 重试模式:Resilience4j提供了一种重试模式的实现,可以自动重试失败的远程调用,以增加系统的容错能力。它可以根据不同的策略和配置来决定何时重试、重试次数、重试间隔等。

  4. 超时模式:Resilience4j提供了一种超时模式的实现,可以设置远程调用的最大响应时间,当超过指定时间时将请求快速失败,以防止应用程序被长时间阻塞。

  5. 事件监听器:Resilience4j提供了一种事件监听器,可以监控系统中的故障和恢复情况。开发人员可以通过监听器来捕获和处理异常,以适应不同的故障情况,并进行相应的逻辑处理。

总的来说,Resilience4j提供了一些重要的功能和模式,帮助开发人员构建高可用性的系统。它可以通过断路器、限流、重试和超时等机制来增加应用程序的容错能力,同时通过事件监听器来监控系统的健康状态。通过使用Resilience4j,开发人员可以更好地应对故障和异常,提高系统的可靠性和可用性。

二、Resilience4j的核心原理


2.1 熔断器(Circuit Breaker)原理


2.1.1 熔断器的工作模式

熔断器(Circuit Breaker)是Resilience4j中非常重要的一个模块,用于保护我们的应用程序免受故障和异常的影响。熔断器的工作模式如下:

  1. 关闭状态(Closed):熔断器初始状态为关闭状态。在这个状态下,所有的请求都会被直接通过,不会产生任何熔断操作。当请求失败率低于定义的阈值时,熔断器会保持在关闭状态。

  2. 开放状态(Open):当请求失败率超过定义的阈值时,熔断器会进入开放状态。在这个状态下,熔断器会立即拒绝所有请求,并抛出一个预定义的异常(比如 CircuitBreakerOpenException)。在一定的时间窗口期内,所有的请求都会被拒绝。

  3. 半开状态(Half-Open):当熔断器进入开放状态后一段时间,它会进入半开状态。在这个状态下,熔断器会允许一个请求通过以检测外部服务是否恢复正常。如果这个请求成功,则熔断器会进入关闭状态;如果失败,则会重新进入开放状态。

通过这种模式,熔断器能够在外部服务的故障或异常问题出现时,快速地拒绝请求,保护我们的应用程序免受不可用的外部服务的影响。熔断器还提供了一些其他功能,比如定义熔断条件、熔断事件的监控和处理等,使我们能够更好地管理和保护我们的系统。


2.1.2 熔断器的状态转换机制

熔断器是一种用于防止故障扩散的机制,可以保护应用程序免受故障的影响。Resilience4j的熔断器采用了状态转换机制来实现。

熔断器有三个状态:关闭(CLOSED)、开启(OPEN)和半开(HALF_OPEN)。

  1. 关闭状态(CLOSED):在关闭状态下,所有的请求都会被正常处理。如果失败的请求数量超过了预设的阈值(比如在一段时间内失败率超过了一定百分比),熔断器将会进入下一个状态。

  2. 开启状态(OPEN):在开启状态下,所有的请求都会被熔断器直接拒绝,而不会发送到目标服务。这样可以快速响应并降低资源消耗。在一段时间后,熔断器会自动进入下一个状态。

  3. 半开状态(HALF_OPEN):半开状态是熔断器的恢复阶段。在此状态下,熔断器会允许一部分请求通过到目标服务进行测试。如果这些请求成功,则熔断器将会进入关闭状态,否则将会回到开启状态。

状态转换的触发条件是可配置的,比如可以设置失败的请求数量、失败率等。在状态转换过程中,Resilience4j还支持熔断事件的处理,可以通过回调函数来处理熔断事件。

通过这种状态转换机制,熔断器可以根据实际情况来自动调整自身的状态,以保护应用程序免受故障的影响。


2.1.3 熔断器的配置参数与调整策略

Resilience4j是一个用于构建弹性和容错性应用程序的轻量级库。它提供了许多弹性模式,包括熔断器(Circuit Breaker)模式。

熔断器是一种用于保护应用程序免受故障和慢响应的机制。它基于一组配置参数和调整策略来定义何时打开和关闭熔断器。

熔断器的配置参数包括:

  1. 熔断器状态切换的阈值:熔断器会根据请求的失败率来判断是否打开或关闭。阈值参数包括故障率阈值、故障统计窗口大小和最小请求数量。

  2. 重试和超时设置:当熔断器打开时,可以配置重试的次数和间隔时间,以及请求的超时时间。

  3. 时间窗口设置:可以配置一个时间窗口以了解请求的成功率和失败率,以便确定熔断器的状态。

调整策略是根据应用程序的需求来定义熔断器的行为。可以根据以下一些策略来调整熔断器的状态:

  1. 错误百分比:当请求的失败率超过阈值时,熔断器会打开。可以配置一个百分比来定义失败率的阈值。

  2. 错误数:当失败的请求数量超过阈值时,熔断器会打开。可以配置一个固定的数量来定义失败的请求数量的阈值。

  3. 平均响应时间:当请求的平均响应时间超过阈值时,熔断器会打开。可以配置一个时间来定义平均响应时间的阈值。

  4. 自定义策略:可以根据具体应用场景,自定义一个策略来判断熔断器的状态。

通过对这些配置参数和调整策略的调整,可以实现对熔断器的动态控制,以适应不同的应用场景和需求。


2.2 限流器(Rate Limiter)原理


2.2.1 限流器的工作机制

Resilience4j的限流器(Rate Limiter)是一种用于控制并发请求的工具,它基于令牌桶算法(Token Bucket Algorithm)实现。限流器的目标是确保系统在高负载情况下能够稳定运行,通过限制请求的速率来保护系统免受过载的影响。

限流器的工作机制如下:

  1. 限流器通过管理一个固定容量的令牌桶来控制请求的速率。令牌桶中的每个令牌代表一个允许通过的请求。令牌以恒定速率产生,并存储在令牌桶中。
  2. 每当系统收到一个请求时,限流器会尝试从令牌桶中获取一个令牌。
  3. 如果令牌桶中有可用的令牌,限流器会允许请求通过,并且从令牌桶中消耗一个令牌。
  4. 如果令牌桶中没有可用的令牌,限流器会阻止请求,并且根据配置的失败策略决定如何处理该请求(例如,抛出异常、返回默认值等)。
  5. 限流器会定期向令牌桶中加入新的令牌,以确保请求速率维持在限制范围内。

通过使用限流器,可以有效地控制系统的请求速率,以避免系统过载和资源耗尽。这种机制可以在高并发情况下平滑地调整请求流量,提高系统的可靠性和稳定性。


2.2.2 滑动窗口算法与令牌桶算法

限流器(Rate Limiter)是一种常用的流量控制机制,用于限制某个系统或服务对外提供的请求次数或并发数,以保护系统免受过载的影响。Resilience4j是一个优秀的Java库,提供了一系列的弹性容错工具,其中之一就是限流器。

Resilience4j的限流器实现了两种常见的限流算法,分别是滑动窗口算法和令牌桶算法。

  1. 滑动窗口算法(Sliding Window Algorithm): 滑动窗口算法是一种基于时间窗口的限流算法。它将一段时间分成多个小的时间窗口,统计每个时间窗口内的请求次数,并与设定的阈值进行比较,从而确定是否允许通过请求。 滑动窗口算法的主要思想是,维护一个固定大小的时间窗口,窗口内的请求次数不能超过设定的阈值。窗口内的时间段会不断滑动,过时的请求会被移除,新的请求会被添加到窗口内。

  2. 令牌桶算法(Token Bucket Algorithm): 令牌桶算法是一种基于令牌的限流算法。它模拟了一个令牌桶,桶内存放了一定数量的令牌。每个请求需要获取一个令牌,如果桶内令牌数量足够,则允许通过请求;如果桶内令牌数量不足,则拒绝请求。 令牌桶算法的主要思想是,桶内以固定的速率(单位时间流入的令牌数量)生成令牌,桶内最多存放一定数量的令牌。每个请求需要消耗一个令牌,如果桶内令牌数量不足,则请求被拒绝。

Resilience4j的限流器根据用户的需求和配置,可以选择使用滑动窗口算法或令牌桶算法。这两种算法都可以有效地进行流量控制,并根据实际情况来限制系统的请求次数或并发数,从而保护系统的稳定性和可用性。


2.2.3 限流器的应用场景与配置

限流器(Rate Limiter)是Resilience4j中用于限制应用程序对某个操作的访问速率的组件。它可以确保应用程序在给定的时间窗口内不会超过指定的请求数。

限流器组件的应用场景包括:

  1. 保护特定服务或资源:限流器可以保护特定的服务或资源,防止过多的请求造成资源耗尽或服务崩溃。例如,限制对数据库的并发访问,防止数据库压力过大。
  2. 防止恶意攻击:限流器可以用于防止恶意用户或攻击者通过发送大量请求来耗尽服务资源。通过限制请求速率,可以降低攻击的影响。
  3. 平滑流量:限流器可以用于平滑处理流量。例如,在高峰期限制请求速率,以免服务过载,而在低峰期放宽限制,以提高响应速度。

配置限流器的关键参数包括:

  1. 限制速率:可以指定在给定的时间窗口内允许的最大请求数。例如,每秒允许最多100个请求。
  2. 突发限制:可以指定在突发情况下允许的最大请求数。突发限制可以比限制速率更高,但只会在突发期间生效。例如,允许在1秒内的某个瞬间接收200个请求,而不超过此数量。
  3. 策略:可以通过策略来定义当请求超过限制时的行为。常见的策略包括拒绝请求、等待一段时间再处理请求、以及通过优先级队列来处理请求。

除了以上的参数配置,Resilience4j的限流器还提供了其他功能,如:

  1. 提供实时的请求统计数据:可以获取当前限流器的请求统计数据,如请求数、拒绝的请求数、等待时间等。
  2. 动态修改限制速率:可以在运行时动态调整限制速率,以适应不同的流量需求。
  3. 自动配置:限流器可以与其他Resilience4j组件(如断路器)一起使用,通过自动配置来提供更强大的容错机制。

通过合理的应用和配置限流器,可以更好地保护和管理应用程序的资源和服务,确保系统的可靠性和稳定性。


2.3 容错机制(Fault Tolerance)


2.3.1 重试(Retry)策略

Resilience4j是一个针对Java应用程序的容错库,提供了一系列的容错原则和策略。其中之一是重试(Retry)策略,可以帮助应对临时性的错误或故障。

重试策略的核心原理是在发生错误或故障时,自动重试请求,直到请求成功或达到最大重试次数。以下是重试策略的一些关键特性和原则:

  1. 最大重试次数(Max Retry Attempts):设置重试的最大次数。如果达到最大次数仍然未成功,则重试失败。
  2. 重试间隔(Wait Interval):在每次重试之间设置一个固定的等待时间,以避免过于频繁地重试。
  3. 重试条件(Retry Conditions):可以根据特定的错误类型或异常来决定是否重试。可以设置重试条件以仅对特定类型的错误进行重试。
  4. 退避策略(Backoff Policy):在重试过程中,可以使用退避策略来逐渐增加重试间隔的时间,以避免过度加载服务或资源。
  5. 重试监听器(Retry Listeners):可以注册重试监听器来监听和记录重试的过程和结果。

通过配置这些参数和特性,可以根据具体应用程序的需求来制定适当的重试策略。重试策略可以在单个方法调用或整个应用程序中的多个方法调用之间共享和重用。

Resilience4j提供了多种类型的重试策略,如固定时间间隔重试策略(Fixed Interval)和指数退避重试策略(Exponential Backoff)。开发人员可以根据自己的需求选择适当的策略。

总之,重试策略是Resilience4j中一种重要的容错机制,用于处理临时性错误和故障。通过设置最大重试次数、重试间隔、重试条件和退避策略等参数,可以制定适合应用程序需求的重试策略。


2.3.2 超时(Timeout)控制

在Resilience4j中,超时控制是一种容错机制,用于防止长时间的调用或请求导致系统的崩溃或性能下降。使用超时控制,可以设置一个时间限制来限制调用或请求的执行时间,如果在指定时间内未完成,将中断调用并返回一个默认的或预定的结果。

超时控制的核心原理是通过设置一个计时器来检测调用或请求的执行时间。当调用或请求开始时,计时器开始计时,如果在指定的超时时间内完成,结果将返回给调用方。但如果超过了超时时间,计时器将触发中断操作,中断调用并返回一个预定义的结果。

超时控制可以在Resilience4j的Circuit Breaker、Rate Limiter、Retry等其他容错机制之上使用,以增强系统的可靠性和性能。例如,当一个调用频繁但耗时较长的服务时,可以在Circuit Breaker上设置一个较短的超时时间,以避免服务的连续调用导致系统的负担过重。

通过超时控制,Resilience4j可以更好地保护系统免受调用或请求的长时间阻塞、慢速响应等问题的影响,提供更好的用户体验和系统稳定性。


2.3.3 降级(Fallback)机制

Resilience4j是一个容错库,提供了多种容错机制来帮助开发人员构建弹性和可靠的应用程序。其中之一是降级(Fallback)机制。

降级机制在面对故障或异常情况时,可以提供一个备选方案或默认值,以保证系统的可用性和稳定性。在Resilience4j中,降级机制通过以下步骤实现:

  1. 定义降级函数(Fallback Function):开发人员需要定义一个降级函数,用来提供备选方案或默认值。这个函数应该具有与原始函数相同的参数和返回类型。

  2. 绑定降级函数:将降级函数绑定到原始函数或方法上,以在出现故障或异常时执行。可以使用注解或编程方式将降级函数绑定到原始函数。

  3. 触发降级:当原始函数出现故障、异常或达到一定的超时时间时,降级函数将被触发执行,并返回备选方案或默认值。

降级机制提供了一种优雅地处理故障和异常情况的方式。它可以帮助系统保持可用性,并提供一种应对故障的策略,从而提高系统的可靠性和稳定性。

需要注意的是,降级机制是一种应对故障的策略,而不是解决故障的根本方法。在使用降级机制时,开发人员应该仔细考虑备选方案和默认值的选择,以充分满足系统的需求和用户的期望。

三、Resilience4j的应用实践

        详见《Resilience4j原理及应用:构建高可用性系统的熔断、限流与容错机制(二)
 

四、Resilience4j的监控与调优

        详见《Resilience4j原理及应用:构建高可用性系统的熔断、限流与容错机制(二)

五、总结与展望

        详见《Resilience4j原理及应用:构建高可用性系统的熔断、限流与容错机制(二)

六、结语

        通过本文的探讨,我们深入了解了Resilience4j的原理及其在构建高可用性系统中的应用。Resilience4j以其轻量级、易集成和高效的特点,为开发者提供了强大的熔断、限流和容错机制,帮助我们构建出更加稳定、可靠的系统。

        在分布式、微服务架构盛行的当下,系统面临的复杂性和不确定性日益增加。服务之间的调用关系错综复杂,任何一点微小的故障都可能引发连锁反应,导致整个系统的崩溃。Resilience4j正是为了解决这些问题而诞生的,它允许我们在系统中嵌入智能的容错逻辑,使得系统在面对故障和异常时能够自动调整、自我保护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络编程: TCP协议首部与可选项简述

一、TCP/IP五层模型 物理层(Physical Layer):物理层是最底层,负责传输比特流(bitstream)以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流,例如通过电缆、光纤或无线传输等。…

python中字典相关知识点总结

1.字典的定义 字典:在Python中,字典是一系列键-值对。每个键都与一个值相关联,程序员可以通过键来访问与之相关联的值。 实际举例: student{name:xincun,age:18} 通过实例我们可以发现,键-值对是两个相关联的值。指…

如何实现数据库的主从复制?

如何实现数据库的主从复制? 数据库的主从复制是实现数据备份、负载均衡和故障恢复的重要策略。它涉及一个主数据库(Master)和一个或多个从数据库(Slave),主数据库负责处理写入操作,而从数据库则…

代码随想录算法训练营第二十九天|491.递增子序列、46.全排列、47.全排列 II

文档讲解&#xff1a;491.递增子序列、46.全排列、47.全排列 II 题目链接&#xff1a;491.递增子序列、46.全排列、47.全排列 II 491.递增子序列 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList<…

CodeWhisperer插件

一、前言 产品官网地址&#xff1a;What is CodeWhisperer? - CodeWhisperer Amazon CodeWhisperer 是一个通用的、由机器学习驱动的代码生成器&#xff0c;可实时为您提供代码建议。在您编写代码时&#xff0c;CodeWhisperer 会根据您现有的代码和注释自动生成建议。您的个…

JAVA 100道题(6)

6.创建一个表示矩形的类&#xff0c;包括宽度和高度属性&#xff0c;以及计算面积和周长的方法。 下面是一个简单的Python类&#xff0c;表示矩形&#xff0c;包含宽度和高度属性&#xff0c;以及计算面积和周长的方法&#xff1a; python复制代码 class Rectangle: def __ini…

机器人路径规划:基于斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

【随笔馆001-安住当下是最高的人生智慧】

&#x1f332;今天我去另外一个地方参加会议&#xff0c;结束后叫了一个滴滴&#xff0c;结果司机走错了路害我等了好久。我开始有点不悦&#xff0c;突然听到马路对面有一个人在弹萨克斯。我想与其在这里焦躁地等司机&#xff0c;还不如静下心来好好欣赏音乐。就这样&#xff…

【ROS】解决编译含有Python的ROS包遇到的 “Could NOT find PY_em (missing: PY_EM)“ 问题

使用ROS编译含有Python的ROS包时会遇到 “Could NOT find PY_em (missing: PY_EM)” 的错误。这个问题通常是由于ROS找不到正确的Python解释器而导致的。解决方法&#xff1a;通过指定正确的Python解释器路径来解决这个问题。Ubuntu系统的Python解释器通常位于 /usr/bin/python…

日期问题总结

做日期问题,首先把模版写下来,再根据具体情况具体分析,基本上考试考到日期问题都是模拟和枚举,数据量也不会太大,所以我们根据题目要求直接打暴力就可以过. 模板&#xff1a; const int months[]{//平年天数 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int is_leap(int y){//…

小项目知识点

0.vue运行自启动 "dev": "vite --open" //package.json 1.Element-plus 安装element-plus pnpm i element-plus 如何使用&#xff1f; <el-button :icon"Plus">按钮</el-button> <script setup langts> import { Plus …

mysql 数据库 增删改查 基本操作

目录 一 SQL 详细介绍 &#xff08;一&#xff09;SQL 分类 &#xff08;二&#xff09; SQL 语言规范 &#xff08;三&#xff09;数据库对象和命名 1&#xff0c;数据库的组件(对象)&#xff1a; 2&#xff0c;命名规则&#xff1a; &#xff08;四&#xff09; SQL…

【Rust】——panic!和不可恢复的错误

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

使用Python查找字符串中包含的多个元素

目录 一、引言 二、基本字符串操作 使用in关键字查找子字符串 使用循环和条件判断查找多个子字符串 三、使用正则表达式进行高级搜索 导入re模块 使用re.search()查找单个模式 使用re.findall()查找多个模式 四、案例与代码 五、优化与扩展 六、总结 一、引言 在Py…

【5G NB-IoT NTN】3GPP R17 NB-IoT NTN介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

20万买新能源,除了烂大街的车,还可以选“精而美”

美”文 | AUTO芯球 作者 | 雷歌 “旧车撞了&#xff0c;准备买新车”。 前几天老家一个同学发来消息&#xff0c;春节他追尾了别人的车&#xff0c;不光赔了钱&#xff0c;还把自己的车车头撞废了&#xff0c;修好得一大笔钱&#xff0c;他干脆当废铁1万块钱卖给二手车商了。…

我的自建博客之旅06之Mrdoc

这个是我折腾笔记项目的最后一篇文章了,这个项目是类似于语雀的文档笔记项目,因为我当初想找一个既可以当做笔记,又可以作为团队文档分享的笔记,除了语雀,就发现了这个项目。 这个开源项目的界面或者文档组织方式其实是我最喜欢的,但是我后来放弃它的原因是它的后台编辑逻…

React Native:跨平台移动应用开发的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

nginx学习记录-目录结构及基本配置

1. nginx目录结构 执行tree命令就可以看到nginx的目录结构了&#xff0c;主要有4个&#xff0c;分别是配置目录conf&#xff0c;还有界面目录html&#xff0c;日志目录logs以及程序sbin/nginx。 2. nignx基本配置 nginx的主要配置文件为/usr/local/nginx/conf/nginx.conf&…

matlab 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面

1、内容简介 略 65-可以交流、咨询、答疑 2、内容说明 matlab 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面 李雅普洛夫指数谱、相图、分岔图、庞加莱界面 3、仿真分析 略 4、参考论文 略