当前位置: 首页 > news >正文

面试专区|【54道Spring Cloud高频题整理(附答案背诵版)】

  1. 什么是Spring Cloud?

Spring Cloud是一个基于Spring Boot的开源框架,它提供了在分布式系统中集成各种服务治理功能的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态等。其主要目标是通过简单的方式,快速地为开发人员构建与部署分布式系统中的通用模式。

简单来说,Spring Cloud就像是一个“工具箱”,里面装了很多已经封装好的工具,这些工具可以帮助我们更轻松地构建和维护微服务架构。比如,当你有多个微服务需要互相通信时,你可以使用Spring Cloud提供的服务发现功能,让每个服务都能够自动找到其他服务的位置。

举个例子,假设你正在开发一个电商平台,这个平台由多个微服务组成,比如订单服务、商品服务、用户服务等。你可以使用Spring Cloud来管理这些微服务,让它们能够更好地协同工作。比如,当用户下单时,订单服务可以通过Spring Cloud找到商品服务和用户服务的位置,然后调用它们的接口完成订单处理。这样,你就可以更专注于业务逻辑的开发,而不用过多地关心服务之间的通信和管理问题。

  1. SpringBoot和SpringCloud的区别?

SpringBoot和SpringCloud都是Spring生态圈中非常重要的组件,但它们各自的角色和功能是有所区别的。

  1. 作用与目标:SpringBoot的设计目标是为了简化新Spring应用的初始搭建以及开发过程,它致力于快速地创建独立的、生产级别的Spring基础应用程序。而SpringCloud的目标则是为了构建分布式系统,它提供了一套完整的解决方案,用于在微服务架构中集成各种服务治理功能,如配置管理、服务发现、断路器、智能路由、微代理、控制总线等。
  2. 使用方式:SpringBoot可以独立使用,它是一个快速开发框架,用于简化Spring的开发过程。而SpringCloud则必须基于SpringBoot才能使用,它是构建在SpringBoot之上的,用于在微服务之间提供协调和管理功能的工具集。
  3. 组成:SpringBoot通过简化配置、内嵌的服务器、快速创建独立可运行的应用等方式来提高开发效率。而SpringCloud则是一个包含了多个子项目的集合,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Bus等,这些子项目提供了各种服务治理功能。

总的来说,SpringBoot和SpringCloud都是为了让开发者能够更轻松地构建和维护应用程序,但它们各自关注的领域和提供的功能是不同的。SpringBoot主要关注于快速开发单个应用程序,而SpringCloud则更关注于在微服务架构中管理和协调多个服务。

  1. 使用 Spring Boot 开发分布式微服务时,我们面临以下问题

  2. 服务发现与注册

    • 问题:在分布式系统中,服务实例可能动态地上线或下线,客户端如何知道服务的位置?
  • 解答:Spring Cloud提供了服务发现与注册的解决方案,如Eureka。Eureka是一个服务注册中心,服务提供者启动时,会将自己的信息注册到Eureka Server,同时服务消费者会从Eureka Server获取服务提供者的信息,实现服务的动态发现。
  1. 负载均衡

    • 问题:当有多个服务实例时,如何均匀地分配客户端的请求?
  • 解答:Spring Cloud集成了Ribbon,一个客户端负载均衡器。Ribbon能够自动地从服务注册中心获取服务列表,并基于某种策略(如轮询、随机等)将请求分发到不同的服务实例上。
  1. 容错与断路器

    • 问题:当某个服务出现故障时,如何避免整个系统的崩溃?
    • 解答:Spring Cloud引入了Hystrix,一个断路器库。Hystrix能够监控服务的调用情况,当服务调用失败率达到一定阈值时,会自动触发断路器,阻止后续的请求继续调用该服务,从而保护整个系统的稳定性。
  2. 配置管理

    • 问题:在分布式系统中,如何统一管理各个服务的配置?
    • 解答:Spring Cloud Config是一个配置管理工具。它支持将配置信息存储在中心化的位置(如Git仓库),服务启动时,会从配置中心拉取配置信息,实现配置的集中管理和动态刷新。
  3. API网关

    • 问题:如何统一管理和路由外部的API请求?
    • 解答:Spring Cloud Zuul是一个API网关,它能够作为系统的统一入口,处理所有的外部请求。Zuul支持请求路由、过滤、限流等功能,可以有效地保护后端服务。
  4. 链路追踪

    • 问题:在一个复杂的微服务架构中,如何追踪一个请求从发起到完成的整个调用链?
    • 解答:Spring Cloud Sleuth提供了链路追踪的解决方案。它能够在每个请求中注入一个唯一的追踪ID,并记录请求在各个服务间的调用路径,从而帮助我们分析和监控系统的性能瓶颈。

应用场景与例子:

  • 服务发现与注册:假设我们有一个电商系统,其中包括商品服务、订单服务等。我们可以使用Eureka作为服务注册中心,各个服务启动时自动注册到Eureka,同时前端应用可以从Eureka获取服务列表,实现服务的动态发现。
  • 负载均衡:在电商系统中,当有多个订单服务实例时,Ribbon可以帮助我们均匀地分配用户的下单请求,保证系统的处理能力。
  • 容错与断路器:如果商品服务突然出现故障,Hystrix可以在检测到故障后迅速切断对商品服务的调用,避免用户的请求长时间等待或失败,从而提升用户体验。
  • 配置管理:当我们需要修改订单服务的某些配置时,只需在Spring Cloud Config的配置中心更新配置信息,然后通知订单服务刷新配置即可,无需重启服务。
  • API网关:我们可以使用Zuul作为电商系统的API网关,处理所有的外部请求,如用户的登录、商品查询、下单等操作。Zuul可以根据请求的路径将其路由到相应的服务,同时还可以对请求进行权限验证、限流等处理。
  • 链路追踪:当用户反映下单速度慢时,我们可以利用Spring Cloud Sleuth生成的链路追踪信息,分析请求在整个系统中的调用路径和耗时,从而定位性能瓶颈并进行优化。
  1. 服务注册和发现是什么意思?Spring Cloud 如何实现?

    服务注册和发现是微服务架构中的关键概念,主要涉及到服务的动态管理和网络位置的自动检测。

服务注册指的是当服务实例启动后,它会将自己的网络地址等信息注册到服务注册中心,这样其他服务或客户端就可以通过网络找到它。而服务发现则是客户端通过查询服务注册中心,找到需要的服务实例的网络地址,进而实现服务的调用。

在Spring Cloud中,服务注册和发现主要通过Eureka、Zookeeper、Consul等组件来实现。这些组件都提供了服务注册和发现的功能,可以动态地管理服务实例的网络位置,并且支持服务的健康检查和负载均衡等特性。

以Eureka为例,当服务实例启动时,它会向Eureka Server注册自己的信息,包括网络地址、端口号、服务名称等。Eureka Server会维护一个服务注册表,记录所有注册的服务实例信息。当客户端需要调用某个服务时,它会向Eureka Server发起查询请求,获取可用的服务实例列表,并从中选择一个进行调用。

除了Eureka之外,Spring Cloud还支持其他的服务注册和发现组件,如Zookeeper和Consul。这些组件的使用方法略有不同,但基本原理是相似的。

总的来说,服务注册和发现是微服务架构中非常重要的概念,它可以帮助我们更好地管理和调用服务,提高系统的可用性和可扩展性。而Spring Cloud提供了多种组件来实现服务注册和发现的功能,可以根据实际需求进行选择和配置。

  1. Spring Cloud 和dubbo区别?

Spring Cloud和Dubbo都是用于构建微服务架构的工具,但它们在多个方面存在显著的差异。

  1. 初始定位:Spring Cloud定位为微服务架构下的一站式解决方案,提供了一套完整的微服务治理工具集;而Dubbo是SOA时代的产物,它的关注点主要在于服务的调用和治理。
  2. 生态环境:Spring Cloud依托于Spring平台,具备更加完善的生态体系,包括配置管理、服务发现、熔断器、智能路由等功能的支持;而Dubbo一开始只是做RPC远程调用,生态相对匮乏,但现在已经逐渐丰富起来,提供了包括服务注册与发现、负载均衡、容错处理等功能。
  3. 调用方式:Spring Cloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;而Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定。但调用时采用Netty的NIO方式,性能较好。
  4. 组件差异:Spring Cloud和Dubbo在组件方面也存在差异,例如Spring Cloud注册中心一般用Eureka,而Dubbo用的是Zookeeper。此外,Spring Cloud生态丰富,功能完善,更像是品牌机,Dubbo则相对灵活,可定制性强,更像是组装机。

总的来说,Spring Cloud和Dubbo各有优势,选择哪个取决于具体需求和场景。如果需要更完善的生态体系和一站式解决方案,可以选择Spring Cloud;如果对性能有较高要求且需要更灵活的服务治理,可以考虑使用Dubbo。

  1. 负载平衡的意义什么?

负载平衡(Load Balancing)在分布式系统中扮演着非常重要的角色。简单来说,负载平衡就是将工作任务或者网络请求等负载,均匀地分摊到多个操作单元或服务器上进行处理,从而达到避免单点故障、提高系统性能、增强系统可扩展性等目的。

举个例子,如果我们有一个非常受欢迎的在线购物网站,在没有负载平衡的情况下,所有的用户请求可能都会集中到某一台服务器上,这样很容易导致这台服务器过载,而其他服务器却处于空闲状态。一旦这台过载的服务器崩溃,整个网站就会面临瘫痪的风险。

而通过负载平衡技术,我们可以将这些用户请求分散到多台服务器上,确保每台服务器都能够承担适量的负载。这样不仅能够提高整个系统的处理能力和稳定性,还能够实现水平扩展,即通过增加服务器数量来进一步提升系统性能。

在Spring Cloud中,负载平衡通常是通过服务注册与发现组件(如Eureka)和负载均衡器(如Ribbon或Spring Cloud LoadBalancer)来实现的。这些组件可以帮助我们自动地管理和分配负载,从而简化分布式系统的开发和运维工作。

  1. 什么是 Hystrix?它如何实现容错?

Hystrix是Netflix开源的一款容错框架,被广泛用于处理分布式系统中的延迟和容错问题。在分布式环境中,许多服务不可避免地会依赖一些可能失败的服务。Hystrix通过添加延迟容忍和容错逻辑,帮助我们控制这些分布式服务之间的交互。

Hystrix实现容错的方式主要有以下几种:

  1. 包裹请求:使用HystrixCommand或HystrixObservableCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行。
  2. 跳闸机制:当某服务的错误率超过一定阈值时,Hystrix可以自动或手动跳闸,停止请求该服务一段时间。这类似于电路中的保险丝,一旦后端服务不可用,断路器会直接切断请求链,避免发送大量无效请求影响系统吞吐量,并且断路器有自我检测并恢复的能力。
  3. 资源隔离:Hystrix为每一个服务调用都维护一个小型线程池(或信号量),使得资源之间彼此隔离,防止故障在整个系统中蔓延。如果线程池已满,请求会立即被拒绝,从而加速失败。
  4. 回退机制:当请求出错或断路器打开时,会执行回退逻辑,返回我们设定的默认值,保证系统的整体弹性。
  5. 实时监控:Hystrix还提供了实时的运行指标和配置变化监控,帮助我们更好地了解系统的运行状态。

总的来说,Hystrix通过隔离、跳闸、回退等机制,实现了对分布式系统中故障的容错处理,提高了系统的稳定性和可靠性。

  1. 什么是 Hystrix 断路器?我们需要它吗?

Hystrix是一个用于处理分布式系统的延迟和容错的开源库。在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

“断路器”本身是一种开关装置。当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

至于是否需要Hystrix断路器,这取决于你的系统的具体情况。如果你的系统是一个分布式系统,并且有许多依赖关系,那么使用Hystrix断路器可能会很有帮助。然而,在某些情况下,可能还有其他方法(如预防性维护、故障预测和恢复等)更为合适。

因此,需要根据实际情况来决定是否使用Hystrix断路器。如果你的系统需要处理大量的依赖调用,并且需要有一定的容错和弹性,那么使用Hystrix断路器可能是一个很好的选择。

  1. 什么是 Netflix Feign?它的优点是什么?

Netflix Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon结合使用以支持负载均衡。

Netflix Feign的主要优点包括:

  1. 声明式API:Feign通过声明式API简化了HTTP客户端的编写,让开发者能够像调用本地方法一样调用远程服务,而无需关注底层的HTTP通信细节。
  2. 集成与Spring Cloud:Feign能够很好地与Spring Cloud集成,这使得它成为了在Spring生态系统中进行微服务间通信的理想选择。
  3. 负载均衡:Feign可以与Eureka和Ribbon等组件结合使用,实现客户端负载均衡,从而提高了系统的可用性和可扩展性。
  4. 可插拔性:Feign的注解、编码器和解码器都是可插拔的,这使得它可以根据项目需求进行定制化配置。
  5. 减少代码量:通过使用Feign,开发者可以减少大量的HTTP客户端编写代码,从而提高开发效率。

总之,Netflix Feign是一个功能强大且易于使用的Web服务客户端,它在Spring Cloud生态系统中发挥着重要作用,为微服务间的通信提供了便捷、高效和可靠的解决方案。

  1. 什么是 Spring Cloud Bus?我们需要它吗?

Spring Cloud Bus是Spring Cloud体系内的消息总线,用于连接分布式系统的所有节点。它利用轻量级的消息代理(如RabbitMQ、Kafka等)将各个分布的节点连接起来,并允许广播状态变化(如配置变更)或其他管理指令。

Spring Cloud Bus提供了跨多个实例刷新配置的功能。例如,当我们在Git中更改了Eureka的注册属性,并且想要在不重新启动服务的情况下获取这些更新时,Spring Cloud Bus就可以发挥作用。它能够将更改广播到所有连接到消息总线的微服务,并触发它们的自动刷新。

至于是否需要Spring Cloud Bus,这取决于你的具体需求。如果你的系统是一个分布式系统,并且你需要动态地刷新配置或服务间的通信,那么Spring Cloud Bus将是一个非常有价值的工具。然而,如果你的系统并不复杂,或者你不需要这种动态刷新的功能,那么你可能就不需要Spring Cloud Bus。

总的来说,Spring Cloud Bus为分布式系统提供了一种有效的通信和管理机制,但是否使用它还需要根据具体情况来决定。

  1. Spring Cloud断路器的作用

Spring Cloud断路器是微服务架构中一种重要的容错机制,具有以下几个主要作用:

  1. 异常容忍能力:当某个微服务出现故障或异常时,断路器可以快速失败,避免长时间等待和资源浪费。它还可以自动切换到备用服务,防止故障微服务对整个系统的影响。
  2. 熔断保护:断路器通过监控微服务之间的调用,当某个微服务的调用延迟超过阈值或失败次数超过阈值时,会自动将该微服务置为不可用状态,从而避免连锁故障。这种机制可以提高系统的容错能力。
  3. 降级处理:当某个微服务不可用时,断路器可以提供一种降级处理策略,例如返回默认的响应或使用缓存的数据来代替真实的响应。这可以确保系统的可用性和稳定性。
  4. 实时监控和统计:断路器可以实时监控微服务的状态和性能指标,如请求的成功和失败次数、响应时间等。这些统计数据可以帮助找出故障和性能问题的根本原因,从而进行针对性的优化和改进。
  5. 自动恢复:断路器可以根据微服务的状态和性能指标,自动决定是否恢复对断开的微服务的访问。当故障微服务恢复正常时,断路器可以自动重新建立对该微服务的访问。
  6. 隔离机制:断路器可以提供一种隔离机制,防止微服务之间由于故障引起的相互影响。当一个微服务发生故障时,断路器可以确保其他微服务正常运行。

在Spring Cloud中,Hystrix是实现断路器功能的一种常用库。通过使用Hystrix,我们可以更容易地实现上述功能,提高微服务架构的容错能力和稳定性。

总的来说,Spring Cloud断路器在微服务架构中发挥着至关重要的作用,它可以帮助我们更好地应对和处理各种故障和异常情况,确保系统的稳定运行。

  1. 什么是Spring Cloud Config?

Spring Cloud Config是Spring Cloud项目中的一个子项目,旨在为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持。它分为客户端和服务端两部分。服务端也称为分布式配置中心,是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口。客户端则是微服务架构中的各微服务应用或基础设施,通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。

Spring Cloud Config服务端默认使用Git来存储配置信息,因此它可以轻松地支持标签版本的配置环境。此外,Spring Cloud Config服务端也可以用其他的方式来实现配置的存储,比如SVN仓库、本地文件、数据库等。

当配置中心发生变化时,Spring Cloud Config可以利用Spring Cloud Bus来通知微服务架构中的各微服务应用,从而实现动态刷新配置。此外,Spring Cloud Config还具有配置加密与解密的功能,可以更好地保护配置信息的安全性。

总的来说,Spring Cloud Config是一个非常重要的组件,它可以帮助开发人员更好地管理和维护分布式系统中的配置信息,从而提高系统的可维护性和可扩展性。

  1. 什么是Spring Cloud Gateway?

Spring Cloud Gateway是Spring官方基于Spring 5.0、Spring Boot 2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。

它是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。Spring Cloud Gateway的性能比Zuul更加优秀,从测试结果来看,Spring Cloud Gateway的RPS是Zuul的1.6倍。

此外,Spring Cloud Gateway还提供了丰富的API管理功能,可以辅助企业管理大规模的API,降低管理成本和安全风险。这些功能包括协议适配、协议转发、安全策略、防刷、流量、监控日志等。

总的来说,Spring Cloud Gateway是一个功能强大、性能优秀的API网关,适用于微服务架构中的API管理和路由。

  1. 什么是微服务?

微服务(或微服务架构)是一种云原生架构方法,它将一个单一的应用拆分成多个小型的服务,每个服务都在自己的进程中运行,并采用轻量级通信机制进行通信。这些服务围绕业务能力构建,并能够全自动独立部署。每个服务可以使用不同的编程语言、数据库和数据管理模型,具有高度的自治性。微服务架构可以促进更好的扩展性、灵活性和可维护性。

微服务架构的特点包括:

  1. 易于开发和维护:每个微服务关注特定的业务功能,业务清晰、代码量较少,开发和维护单个微服务相对简单,而对整个应用进行维护时,也能保持在一个可控状态。
  2. 局部修改容易部署:在微服务架构中,只需对修改的服务进行重新部署,而不需要重新部署整个应用,这可以大大节省部署时间,降低部署成本。
  3. 技术栈不受限:微服务架构允许结合不同服务开发团队的技术强项和特点,合理地选择技术栈。这意味着开发团队可以根据需要选择最适合特定服务的技术,而不必在整个应用中统一技术栈。
  4. 容错和隔离:微服务架构可以更好地实现容错和隔离。由于每个服务都运行在独立的进程中,某个服务的故障不会影响到其他服务。此外,通过合理地设计微服务之间的交互和依赖关系,可以进一步降低故障传播的风险。

然而,微服务架构也面临一些挑战,如分布式系统的复杂性、网络延迟、数据一致性问题等。因此,在实施微服务架构时,需要充分考虑这些因素,并采取相应的措施来应对这些挑战。

  1. 微服务之间如何独立通讯的?

微服务之间独立通讯的方式主要有两种:同步通信和异步通信。

同步通信方式中,常见的有RPC(Remote Procedure Call,远程过程调用)和REST(Representational State Transfer,表述性状态转移)。RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。在微服务架构中,各个微服务可以使用RPC框架(如gRPC、Apache Thrift等)进行通信,实现服务的调用和返回结果。REST则是一种基于HTTP协议的通信方式,它通过将资源用URL进行标识,并使用不同的HTTP方法(GET、POST、PUT、DELETE等)对资源进行操作,从而实现微服务之间的通信。

异步通信方式中,常用的有消息队列。消息队列是一种跨进程通信或同一进程内线程之间的通信方式,它可以用来处理并发操作,实现异步处理。在微服务架构中,各个微服务可以将需要通信的消息发送到消息队列中,由其他微服务异步地接收和处理这些消息。常见的消息队列有RabbitMQ、Kafka等。

无论是同步通信还是异步通信,微服务之间的通信都需要遵循一定的协议和规范,以确保通信的正确性和可靠性。同时,为了提高系统的可用性和可扩展性,微服务之间的通信也需要考虑负载均衡、容错处理等问题。在实际应用中,可以根据具体的需求和场景选择合适的通信方式,并结合Spring Cloud等微服务框架提供的组件和工具来实现微服务之间的通信和管理。

由于内容太多,更多内容以链接形势给大家,点击进去就是答案了

16. 微服务的优缺点是什么?说下你在项目中碰到的坑。

17. eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?

18. 你所知道微服务的技术栈有哪些?列举一二。

19. 什么是微服务架构?

20. spring cloud 的核心组件有哪些?

21. 使用Spring Cloud有什么优势?

22. Ribbon负载均衡策略有哪些?

23. 使用Zuul的优点?

24. Zuul有几种过滤器类型?分别是?

25. Eureka的自我保护模式是什么?

26. 简述什么是CAP,并说明Eureka包含CAP中的哪些?

27. 什么是Spring Cloud Zuul(服务网关)

28. Zuul与Nginx有什么区别?

29. ZuulFilter常用有哪些方法?

30. Ribbon是什么?

31. Nginx与Ribbon的区别

32. Ribbon底层实现原理

33. 谈谈服务雪崩效应

34. 在微服务中,如何保护服务?

35. 谈谈服务降级、熔断、服务隔离

36. Ribbon和Feign调用服务的区别

37. Spring Cloud的版本关系

38. Spring Cloud和SpringBoot版本对应关系

39. Spring Cloud和各子项目版本对应关系

40. 分布式和微服务有什么区别?

41. 为什么会产生Eureka的自我保护呢?

42. 如何关闭Eureka的自我保护机制?

43. Consul是什么?

44. Consul有哪些特性?

45. Eureka、Consul、Zookeeper三者都是注册中心,有什么区别?

46. Ribbon负载均衡算法,你了解吗?

47. Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别?

48. OpenFeign的超时控制你了解?

49. 服务限流,你了解吗?

50. 为什么我们选择GateWay?

51. Spring Cloud Gateway 与 Zuul的区别?

52. Spring Cloud Config有什么作用?

53. Spring Cloud Bus如何动态刷新全局广播?

54. 为什么Spring Cloud Stream可以统一底层差异?

相关文章:

面试专区|【54道Spring Cloud高频题整理(附答案背诵版)】

什么是Spring Cloud? Spring Cloud是一个基于Spring Boot的开源框架,它提供了在分布式系统中集成各种服务治理功能的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态等。其主要目…...

Shopee(虾皮)怎么获取流量?

店铺流量的高低会直接关联到卖家店铺单量,也关系到一个店铺的营业情况和利润,那么Shopee的流量从哪里来呢? Shopee的平台流量可分为五个部分: 1.自然流量 2.关键字广告流量 3.平台活动流量 4.营销流量 5.粉丝流量 怎么提升…...

Java启动虚拟机默认字符集编码

-Dfile.encodingUTF-8 java程序启动默认字符集编码参数 // 这里会创建一个Charset.defaultCharset().name()的流,在Windows命令行窗口启动,会出现字符编码为GBK的情况 // 导致乱码输入、输出都会有影响 // 解决办法流的读取指定编码new InputStreamRead…...

【单片机编程模式】状态机编程

状态机编程是一种编程模式,它基于有限状态机(Finite State Machine,简称FSM)的概念。以下是状态机编程的清晰解释,分点表示和归纳: 基本概念: 状态机是一个有向图形,由一组节点&…...

IPSS模块怎么安装到VOS服务器的,到底有没有效果,是不是能大幅度提升VOS3000安全性呢

由于VOS的普及性,不得不承认VOS确实是非常优秀的软交换,但是很多客户在使用过程中都会遇到各种安全问题,比如话费被盗用了,历史话单一堆的非法呼叫话单,严重的影响到了话务安全,并不是那点话费的事了&#…...

C++ STL容器:序列式容器-堆pirority_queue

摘要: CC STL(Standard Template Library,标准模板库)在C编程中的重要性不容忽视,STL提供了一系列容器、迭代器、算法和函数对象,这些组件极大地提高了C程序的开发效率和代码质量。 STL 容器 分为 2 大类 …...

ECharts在最新版本中使用getInstanceByDom报错处理

引用问题导致报错 如果按如下引用的话,会报错 import echarts from “echarts/lib/echarts”; 原因 在 ECharts 的之前版本中,默认导出了一个名为 echarts 的对象,所以使用 import echarts from “echarts” 是没有问题的。但是在 ECharts …...

利用C语言实现三子棋游戏

文章目录 1.游戏界面2.游戏内容2.1 棋盘类型2.2棋盘的初始化2.3 打印棋盘的界面展示 3.游戏操作3.1 玩家操作3.2 电脑操作3.3 胜负判定 4.代码整合 1.游戏界面 无论写任何程序,我们都需要先去了解它的大概框架,这里我们先把它的初始界面写出来。一个游戏…...

大学教师门诊预约小程序-计算机毕业设计源码73068

摘要 在当今数字化、信息化的浪潮中,大学校园的服务管理正朝着智能化、便捷化的方向迈进。为了优化大学教师的医疗体验,提升门诊预约的效率和便捷性,我们基于Spring Boot框架设计并实现了一款大学教师门诊预约小程序。该小程序不仅提供了传统…...

Python PyCryptodome库介绍与实例

Python PyCryptodome库介绍与实例 1. 安装2. 基本概念3. 使用场景和示例代码3.1 对称加密 - AES3.2 非对称加密 - RSA3.3 哈希函数 - SHA2563.4 消息认证码 - HMAC 4. 总结 PyCryptodome是一个强大的Python加密库,提供了各种加密算法和工具。本文将介绍PyCryptodome的基本概念和…...

《框架封装者 · 自定义初始化事件》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

ActiViz实战:使用vtkImageClip和vtkImageActor根据滑动条来显示当前图像数据切面

文章目录 一、效果预览二、代码实现三、源码地址一、效果预览 ActiViz实现图像数据切面显示 二、代码实现 public partial class Form1 : Form {private vtkRenderWindowInteractor _interactor;private vtkRenderer _renderer...

【论文笔记】BEVCar: Camera-Radar Fusion for BEV Map and Object Segmentation

原文链接:https://arxiv.org/abs/2403.11761 0. 概述 本文的BEVCar模型是基于环视图像和雷达融合的BEV目标检测和地图分割模型,如图所示。模型的图像分支利用可变形注意力,将图像特征提升到BEV空间中,其中雷达数据用于初始化查询…...

圆通寄15kg30kg一般多少钱?寄大件物品怎么寄最便宜?

作为一名即将毕业的大学生,搬家成了我和室友们共同的难题。尤其是在寄送大件物品时,如何省钱、如何打包、选择哪家快递公司等问题让我们头疼不已。今天,我就来分享一些寄大件物品的省钱技巧以及打包方法,希望对大家有所帮助。 一…...

transformer初探

transformer初探 self-attentionmultihead-attentionencoderdecoder self-attention 其实就是三个矩阵, W q W_q Wq​、 W k W_k Wk​、 W v W_v Wv​,这三个矩阵就是需要训练的参数。分别得到每个token对应的 q q q k k k v v v,其中 q …...

JUC并发编程基础(包含线程概念,状态等具体实现)

一.JUC并发编程基础 1. 并行与并发 1.1 并发: 是在同一实体上的多个事件是在一台处理器上"同时处理多个任务"同一时刻,其实是只有一个事件在发生. 即多个线程抢占同一个资源. 1.2 并行 是在不同实体上的多个事件是在多台处理器上同时处理多个任务同一时刻,大家…...

集中管理和分析日志:使用 ELK 套件构建强大的日志管理平台

集中管理和分析日志:使用 ELK 套件构建强大的日志管理平台 日志是监控和调试应用程序和系统的重要工具。集中管理和分析日志可以帮助你快速定位问题、了解系统运行状况和性能,并提高你的日志管理效率。ELK 是一个流行的日志管理解决方案,由 …...

深度学习 - 模型的保存与部署方式汇总

深度学习模型保存和加载格式科普 在深度学习中,模型的保存和加载是非常重要的环节。不同的格式有不同的特点和适用场景。本文将为新手朋友们介绍几种常见的模型格式,包括它们的简介、保存方式、加载方式、优缺点以及应用场景。 1. PyTorch (.pth, .pt)…...

人工智能对网络安全有何影响?

人工智能网络安全在短期、中期和长期如何变化 当今数字时代网络安全的重要性 在谈论人工智能在网络安全中的作用时,必须首先考虑短期影响,因为它们是最明显的,而且它是一个未知的领域,需要超越直接炒作的能力。 因此&#xff0…...

Oracle的RECYCLEBIN回收站:轻松恢复误删对象

目录 Oracle的RECYCLEBIN回收站:轻松恢复误删对象一、概念二、工作原理三、使用方法1 查看回收站中的对象2 恢复回收站中的对象2.1 恢复表(TABLE)2.2 恢复索引(INDEX)2.3 恢复视图(VIEW)2.4 恢复…...

Android 内存原理详解以及优化(二)

上一篇讲了内存原理,如果还没看可以先看上一篇:Android 内存原理详解以及优化(一) 这一篇我总结一下我们经常遇到的内存优化问题: 1.内存抖动 自定义view的ondraw是会被频繁调用的,那在这个方法里面就不能频…...

Shell学习——Shell变量

文章目录 Shell变量使用变量只读变量删除变量变量类型字符串变量: 在 Shell中,变量通常被视为字符串。整数变量: 在一些Shell中,你可以使用 declare 或 typeset 命令来声明整数变量。数组变量: Shell 也支持数组&#…...

Java中的持续集成与持续部署(CI/CD)

Java中的持续集成与持续部署(CI/CD) 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中的持续集成(Co…...

极狐GitLab 将亮相2024空天信息大会暨数字地球生态峰会,携手中科星图赋能空天行业开发者

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...

Beats:使用 Filebeat 从 Python 应用程序中提取日志

本指南演示了如何从 Python 应用程序中提取日志并将其安全地传送到 Elasticsearch Service 部署中。你将设置 Filebeat 来监控具有标准 Elastic Common Schema (ECS) 格式字段的 JSON 结构日志文件,然后你将在 Kibana 中查看日志事件发生的实时可视化。虽然此示例使…...

51单片机第23步_定时器1工作在模式0(13位定时器)

重点学习51单片机定时器1工作在模式0的应用。 在51单片机中,定时器1工作在模式0,它和定时器0一样,TL1占低5位,TH1占高8位,合计13位,也是向上计数。 1、定时器1工作在模式0 1)、定时器1工作在模式0的框图…...

linux的服务管理

systemd systemd 是一个系统和服务管理器,用于Linux操作系统中,旨在替代传统的Unix系统V初始化系统(SysV init)。 不一定所有使用 yum 安装的软件都可以通过 systemctl start 来管理。能否通过 systemctl start 管理取决于软件包…...

动手学深度学习(Pytorch版)代码实践 -循环神经网络-53语言模型和数据集

53语言模型和数据集 1.自然语言统计 引入库和读取数据: import random import torch from d2l import torch as d2l import liliPytorch as lp import numpy as np import matplotlib.pyplot as plttokens lp.tokenize(lp.read_time_machine())一元语法&#xf…...

Python 学习之自动化运维技术(八)

Python 的自动化运维技术 Python的自动化运维技术是指利用Python编程语言和相关工具实现运维工作的自动化,以提高效率、减轻工作负担。以下是对Python自动化运维技术的清晰归纳和详细介绍: 一、自动化运维的核心优势 ● 提高效率:通过自动化脚…...

【python】PyQt5可视化开发,如何设计鼠标显示的形状?

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

利用大模型知识库,优化智能客服问答效果 | 创新场景

ITValue 痛点 SSC( Share Service Center ,共享服务中心)是企业日常接触最多的场景之一,更多是对内服务,包括 HR 、财务、IT 等。该场景对专业度要求非常高,知识点非常多,对于知识的使用者或者查…...

物联网协议都包含哪些协议?

物联网协议是物联网生态系统中不可或缺的组成部分,它们负责处理和协调物联网设备之间的通信。具体介绍如下: Ethernet:以太网是一种有线网络协议,广泛应用于局域网络(LAN)中,提供稳定的高速数据传输。Wi-Fi&#xff1…...

面试专区|【52道微服务架构高频题整理(附答案背诵版)】

简述什么是微服务? 微服务是一种软件架构风格,它将应用程序拆分成一系列小型、独立的服务,每个服务都运行在其自己的进程中,通过轻量级通信机制进行通信。每个服务都具有明确的业务能力,并且可以独立开发、测试、部署…...

数据结构之算法的时间复杂度

1.时间复杂度的定义 在计算机科学中,算法的时间复杂度是一个函数,它定量描述了算法的运行时间。一个算法所花费的时间与其中语句的执行次数成正比列,算法中的基本操作的执行次数,为算法的时间复杂度 例1: 计算Func1…...

unity中物体被激活自动执行挂载代码

在Unity中,如果希望当物体被激活时自动执行特定的函数,可以利用 MonoBehaviour 的生命周期函数 OnEnable()。这个方法会在对象被激活时调用,可以用来执行初始化或者处理其他逻辑。以下是如何在脚本中使用 OnEnable() 方法: using UnityEngine;public class ActivateFuncti…...

Pandas数据可视化详解:大案例解析(第27天)

系列文章目录 Pandas数据可视化解决不显示中文和负号问题matplotlib数据可视化seaborn数据可视化pyecharts数据可视化优衣库数据分析案例 文章目录 系列文章目录前言1. Pandas数据可视化1.1 案例解析:代码实现 2. 解决不显示中文和负号问题3. matplotlib数据可视化…...

Redis基础教程(七):redis列表(List)

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…...

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【生成密钥(C/C++)】

生成密钥(C/C) 以生成ECC密钥为例,生成随机密钥。具体的场景介绍及支持的算法规格。 注意: 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复…...

ssm“落雪”动漫网站-计算机毕业设计源码81664

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据新增流程 3.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…...

【面试题】Reactor模型

Reactor模型 定义 Reactor模型是一种事件驱动的设计模式,用于处理服务请求。它通过将事件处理逻辑与事件分发机制解耦,实现高性能、可扩展的并发处理。Reactor模型适用于高并发、事件驱动的程序设计,如网络服务器等。 特点 事件驱动&#…...

RedHat9 | kickstart无人值守批量安装

一、知识补充 kickstart Kickstart是一种用于Linux系统安装的自动化工具,它通过一个名为ks.cfg的配置文件来定义Linux安装过程中的各种参数和设置。 kickstart的工作原理 Kickstart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,…...

k8s-第五节-StatefulSet

StatefulSet StatefulSet 是用来管理有状态的应用,例如数据库。 前面我们部署的应用,都是不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的,可替代的。 而像**数据库、Redis **这类…...

ai机器狗

ai机器狗的代码很早就开源了,相当于核心,最难东西美国人公开了,开源了,如果有钱,有足够资源的,造出东西有可能比公开这些核心代码的公司或者组织还好。没有技术含量,技术含量别人都解决了&#…...

数据库关键字执行顺序

在 SQL 中,关键字的执行顺序通常如下: FROM:确定要查询的表或数据源,并执行表之间的连接操作(如 INNER JOIN、LEFT JOIN 等)。FROM 子句执行顺序为从后往前、从右到左。ON:应用连接条件&#xf…...

Linux 永久挂载磁盘

文章目录 前言一、使用步骤1.命令 总结 前言 一、使用步骤 1.命令 第一步:创建挂载点 sudo mkdir /hhkj 第二步:磁盘挂载到挂载点(lsblk、lvdisplay) sudo mount /dev/sdb2 /hhkj 或者 sudo mount /dev/centos/home /hhkj 第三…...

windows启动Docker闪退Docker desktop stopped

Windows启动Docker闪退-Docker desktop stopped 电脑上很早就安装有Docker了,但是有一段时间都没有启动了,今天想启动启动不起来了,打开没几秒就闪退,记录一下解决方案。仅供参考 首先,参照其他解决方案,本…...

探索Redis GEOMETRY数据结构:地理空间索引与查询(基于Redis GEO和Java实现附近商户查找功能)

摘要 Redis是一个高性能的键值存储系统,广泛应用于缓存、消息队列、排行榜等场景。本文将介绍Redis中一个假设的GEOMETRY数据结构,用于高效地存储和查询地理空间数据。 1. Redis地理空间数据结构概述 地理空间数据结构允许用户存储地理位置信息&#…...

DP学习——策略模式

学而时习之,温故而知新。 敌人出招(使用场景) 业务中需要多个算法可替换,而不能重构代码时,怎么办?或者一个对象在运行中要根据业务切换不同的模式或者采用不同的算法,怎么办? 到…...

0701_ARM5

练习:使用usart4 main.c #include "uart4.h"int main() {// 初始化 UART4hal_uart4_init();while (1) {// 发送一个字符串//hal_put_char( hal_get_char());hal_put_string(hal_get_string());}return 0; } usart4.c #include "uart4.h"//**…...

Python用户宝典:了解并实现遗传算法

遗传算法是一种基于自然选择的技术,用于解决复杂问题。由于问题很复杂,遗传算法(而不是其他方法)被用来得出解决问题的合理方案。本文介绍遗传算法的基础知识以及如何用Python来实现。 遗传算法的要素 适应度函数 适应度函数衡…...