未来已来:Spring Cloud引领微服务新纪元

文章目录

      • 1. 引言
        • 1.1 微服务架构的兴起与挑战
        • 1.2 引入Spring Cloud作为微服务解决方案的重要性
      • 2. 背景介绍
        • 2.1 微服务架构概述
        • 2.2 Spring Cloud的定位
        • 2.3 Spring Cloud特性概览
      • 3. Spring Cloud核心组件
        • 3.1 Eureka - 服务发现
        • 3.2 Hystrix - 断路器
        • 3.3 Ribbon - 客户端负载均衡
        • 3.4 Zuul / Gateway - API网关
        • 3.5 Config Server & Client - 配置中心
      • 4. Spring Cloud实战应用
        • 4.1 微服务构建与部署
        • 4.2 服务链路追踪
        • 4.3 消息驱动与事件处理
        • 4.4 安全与监控
      • 5. 高级话题与最佳实践
        • 5.1 微服务性能优化
        • 5.2 服务网格与Spring Cloud的融合
        • 5.3 微服务治理与运维挑战
      • 6. 结论
        • 6.1 回顾Spring Cloud的核心价值
        • 6.2 展望Spring Cloud的未来发展趋势
        • 6.3 总结

1. 引言

在这个快速变化的数字化时代,软件架构的演进就像一部精彩的科幻小说,充满了创新和挑战。而微服务架构,正是这部小说中一个令人瞩目的章节。它以一种革命性的方式,将传统的单体应用拆分成一系列小型服务,每个服务都围绕着特定的业务功能构建,独立部署、独立扩展,就像是一个个独立的小宇宙,共同构成了一个庞大的星系。

1.1 微服务架构的兴起与挑战

想象一下,你是一位星际飞船的船长,你的飞船由无数个模块组成,每个模块都有其独特的功能,比如导航、生命维持、武器系统等。当其中一个模块出现问题时,你不需要让整个飞船停飞,只需修复那个特定的模块即可。这就是微服务架构的魅力所在——灵活性和可维护性。
然而,管理这样一个由众多独立模块组成的飞船并非易事。服务之间的通信、数据一致性、部署和扩展等问题,都像是宇宙中的黑洞,随时可能吞噬你的努力。这就是微服务架构面临的挑战。

1.2 引入Spring Cloud作为微服务解决方案的重要性

在这样的背景下,Spring Cloud就像是一艘装备了最先进技术的救援船,它携带了一系列强大的工具和策略,帮助船长们驾驭微服务的星系。Spring Cloud基于Spring Boot,一个用于创建独立、生产级别的Spring应用的轻量级框架,提供了一套微服务解决方案,包括服务发现、配置管理、断路器等关键特性,让微服务的管理变得井井有条。
通过Spring Cloud,开发者可以像拼搭乐高积木一样构建应用,每个服务都是一个独立的模块,可以快速构建、部署和扩展。而且,Spring Cloud的生态非常丰富,它整合了Netflix OSS、Apache等社区的多个项目,形成了一个强大的微服务生态系统。
在接下来的章节中,我们将深入探索Spring Cloud的各个核心组件,了解它们如何帮助我们构建、部署和管理微服务应用。我们将一起踏上这段星际旅行,揭开Spring Cloud的神秘面纱,探索微服务架构的无限可能。系好安全带,我们的飞船即将启航!

在这里插入图片描述

2. 背景介绍

在微服务的星际航行中,了解我们的飞船和星系的背景知识至关重要。这不仅帮助我们更好地理解Spring Cloud的起源和它在微服务宇宙中的位置,还能让我们掌握如何利用它的特性来克服前方的挑战。

2.1 微服务架构概述

微服务架构,就像是一个由众多独立星球组成的星系,每个星球都拥有自己的生态系统,它们通过星际网络相互连接,共同维持着整个星系的繁荣。在软件开发中,这意味着将一个庞大的应用拆分成一系列小型服务,每个服务都专注于完成特定的任务,它们通过定义良好的API进行通信。

微服务的核心原则包括:

  • 独立性:每个服务都是独立的,拥有自己的生命周期和部署周期。
  • 轻量级通信:服务间通过轻量级的通信机制(如HTTP RESTful API)进行交互。
  • 业务中心:每个服务都围绕特定的业务能力构建。
  • 技术多样性:不同的服务可以使用最适合的技术栈。
2.2 Spring Cloud的定位

Spring Cloud在Spring生态系统中扮演着至关重要的角色。如果将Spring Boot比作一艘飞船的引擎,那么Spring Cloud就是这艘飞船的导航系统,它确保了飞船在星际旅行中的航向和稳定性。Spring Cloud整合了多种微服务解决方案,提供了一套全面的微服务架构支持,包括但不限于:

  • 服务发现:帮助服务在星系中找到彼此。
  • 配置管理:统一管理各个服务的配置。
  • 负载均衡:智能地分配请求到不同的服务实例。
  • 断路器:在服务间建立保护机制,防止故障蔓延。
2.3 Spring Cloud特性概览

Spring Cloud的关键特性就像是飞船上的各种高科技设备,它们共同确保了飞船的高效运行和安全航行。以下是一些主要的特性:

  • 服务发现:通过Eureka等组件,服务可以相互发现并建立联系。
  • 配置管理:使用Config Server,我们可以集中管理所有服务的配置。
  • 断路器:Hystrix等组件提供了断路器模式的实现,防止服务故障的连锁反应。
  • 负载均衡:Ribbon允许客户端智能地选择服务实例进行调用。
  • API网关:Zuul或Spring Cloud Gateway作为微服务的统一入口,处理路由和安全认证。

通过这些特性,Spring Cloud帮助我们构建了一个既灵活又健壮的微服务生态系统。在接下来的章节中,我们将深入探讨这些特性的具体实现和应用,让每一位星际船长都能熟练地驾驭自己的飞船,探索更加广阔的宇宙。

3. Spring Cloud核心组件

在微服务的星际航行中,Spring Cloud的核心组件就像是我们飞船上的各种高科技装备,它们各司其职,确保我们的航行既平稳又高效。

3.1 Eureka - 服务发现

想象一下,如果你是一位星际飞船的船长,需要在浩瀚的星系中找到特定的服务星球,比如补给站或维修基地,这时候Eureka就像是你的星际定位系统,帮助你快速准确地发现这些星球。

Eureka通过服务注册与发现机制,让各个服务能够相互“看到”对方。当一个服务启动时,它会向Eureka注册自己的位置;当其他服务需要与这个服务通信时,它们会向Eureka查询这个服务的位置信息。

集群配置与高可用实践
在星际航行中,单点故障是不可接受的。Eureka可以通过集群部署来实现高可用性。就像在星系中建立多个定位基站,即使某个基站出现故障,其他基站仍然可以提供定位服务。

// 假设我们有一个服务提供者,它向Eureka注册自己
@EnableEurekaClient
@SpringBootApplication
public class ServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(ServiceProviderApplication.class, args);}// 服务提供者的实例信息@Beanpublic ApplicationListener<ServiceRegistryInitializedEvent> registryInitializedEvent() {return event -> {InstanceInfo info = event.getContext().getInstanceInfo();System.out.println("Service registered with Eureka with instanceId : " + info.getInstanceId());};};
}
3.2 Hystrix - 断路器

在星际航行中,难免会遇到一些不可预见的情况,比如服务星球突然失去联系。这时,Hystrix就像是一个智能断路器,能够保护我们的飞船不会因为等待一个无法响应的服务而陷入瘫痪。

Hystrix通过实现断路器模式,为服务间的通信提供了一层额外的保护。当某个服务连续失败达到一定次数时,Hystrix会“断开”与该服务的连接,避免进一步的尝试,从而保证了系统的稳定性。

服务降级与熔断策略
就像飞船在遇到故障时会切换到备用系统,Hystrix允许我们定义服务降级策略,当服务不可用时,提供一个备选的响应。

// 使用Hystrix的Command模式执行服务调用,并定义降级策略
public class ServiceConsumer {// 定义一个HystrixCommandpublic static class ServiceCommand extends HystrixCommand<String> {private final String serviceUrl;public ServiceCommand(String serviceUrl) {this.serviceUrl = serviceUrl;}@Overrideprotected String run() throws Exception {// 执行服务调用return someServiceCall(serviceUrl);}@Overrideprotected String getFallback() {// 服务降级逻辑return "Service is unavailable. Please try again later.";}}public static void main(String[] args) {// 创建命令并执行ServiceCommand command = new ServiceCommand("http://service-provider");System.out.println(command.execute());}
}
3.3 Ribbon - 客户端负载均衡

在微服务架构中,一个服务可能会有多个实例运行在不同的星球上。Ribbon就像是我们的导航系统,它可以根据一定的策略,智能地选择一个最合适的星球(服务实例)进行通信。

动态客户端负载均衡原理
Ribbon通过轮询、随机或根据响应时间等策略,动态地选择服务实例,实现负载均衡。

自定义负载均衡策略
就像我们可以根据自己的需求定制飞船的导航系统,Ribbon也允许我们自定义负载均衡策略,以适应不同的业务场景。

// 假设我们有一个服务消费者,使用Ribbon进行负载均衡
@Configuration
public class RibbonConfig {@Beanpublic IRule ribbonRule() {// 返回自定义的负载均衡策略,例如:轮询return new RoundRobinRule();}
}
3.4 Zuul / Gateway - API网关

在微服务星系中,Zuul或Spring Cloud Gateway就像是我们的星门,它是所有服务的统一入口。通过API网关,我们可以集中处理路由、安全认证和监控等任务。

API路由与过滤器机制
API网关可以根据请求的路径、头信息等,将请求路由到正确的服务。

微服务间的安全与认证
网关还负责处理服务间的安全和认证,确保只有授权的请求才能访问特定的服务。

// 配置Zuul路由
@Configuration
public class ZuulConfig {@Beanpublic ZuulRouteLocator routeLocator() {// 定义路由规则,将请求转发到特定的服务return new ZuulRouteLocator() {@Overridepublic void addRoute(String id, String loc, String path) {super.addRoute(id, loc, path);}};}
}
3.5 Config Server & Client - 配置中心

在星际航行中,配置信息就像是飞船的操作手册,它告诉我们如何正确地操作飞船。Config Server和Client提供了一个集中的配置管理机制,让我们可以统一管理所有服务的配置。

分布式配置管理流程
通过Config Server,我们可以集中存储和管理配置信息,而各个服务通过Config Client从Config Server获取自己的配置。

加密与刷新机制
Config Server还支持配置信息的加密,确保敏感信息的安全。同时,当配置发生变化时,Config Client可以实时刷新配置,无需重启服务。

# 配置文件示例 (application.yml)
my:service:name: MyServiceport: 8080

通过这些核心组件,Spring Cloud为我们的微服务架构提供了强大的支持,让星际航行变得更加安全、高效和有趣。在下一章,我们将探索如何将这些组件应用到实战中,构建和部署我们自己的微服务星系。系好安全带,准备启航!
在这里插入图片描述

4. Spring Cloud实战应用

在微服务的宇宙中,理论是一回事,但真正将这些理论应用到实践中,就像是将飞船从机库里开出来,让它在星际间翱翔。本章将带你走进Spring Cloud的实战世界,看看如何将这些高大上的概念,转化为实实在在的代码和运行中的服务。

4.1 微服务构建与部署

想象一下,你是一位星际飞船的工程师,需要快速搭建一艘艘飞船,并将它们部署到星系中的不同位置。使用Spring Boot,这个过程就像是使用乐高积木一样简单快捷。

使用Spring Boot快速搭建微服务
Spring Boot通过提供一系列“Starters”(启动器),让我们能够快速搭建起一个微服务的基础框架。你只需要在你的pom.xmlbuild.gradle文件中添加对应的依赖,Spring Boot就会自动配置好一切。

<!-- Maven pom.xml 示例 -->
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 添加其他需要的Starters -->
</dependencies>

Docker容器化部署策略
一旦飞船建造完成,我们就需要考虑如何将它们安全、高效地部署到星系中。Docker容器化技术为我们提供了一种轻量级、可移植的部署方式。每个服务都被封装在自己的容器中,就像一艘艘独立的飞船,可以在任何支持Docker的环境中运行。

# Dockerfile 示例
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
4.2 服务链路追踪

在微服务架构中,一个请求可能会经过多个服务的流转,这就要求我们能够追踪到这个请求在各个服务中的流动情况。Sleuth和Zipkin就是为此而生的工具。

Sleuth & Zipkin应用实践
Spring Cloud Sleuth为服务间的调用提供了一种跟踪机制,它会为每个请求生成一个唯一的跟踪ID。而Zipkin则负责收集和展示这些跟踪信息,帮助我们理解请求在服务间的流动情况。

// 使用Sleuth添加跟踪信息
@RestController
public class MyController {@GetMapping("/my-service")public String myServiceMethod() {// 手动添加一个Span,记录当前服务的操作return "Service response";}
}
4.3 消息驱动与事件处理

在微服务的宇宙中,服务之间需要一种异步的通信机制,以便在不直接影响对方的情况下交换信息。Spring Cloud Stream就是这样一种机制。

Spring Cloud Stream与RabbitMQ/Kafka集成
Spring Cloud Stream提供了一种简单的模型来发送和接收消息。通过与消息代理如RabbitMQ或Kafka的集成,我们可以轻松地实现服务间的异步通信。

// 使用Spring Cloud Stream发送消息
@EnableBinding(Sink.class)
public class MyService {@StreamEmitterpublic void emit(String message) {// 发送消息}
}
4.4 安全与监控

在星际航行中,安全和监控是至关重要的。Spring Cloud Security和Spring Boot Actuator提供了一套完整的安全和监控解决方案。

Spring Cloud Security实践
Spring Cloud Security整合了Spring Security,提供了一套强大的安全机制,包括认证、授权、OAuth2等。

监控与日志收集
Spring Boot Actuator允许我们监控应用的运行时信息,而ELK Stack(Elasticsearch, Logstash, Kibana)则帮助我们收集和分析日志。

// Spring Boot Actuator配置
management.endpoints.web.exposure.include=health,metrics

通过这些实战技巧,我们不仅能够构建和部署微服务,还能确保它们的安全性和可监控性。在下一章,我们将探讨一些高级话题和最佳实践,让我们的微服务飞船更加强大和可靠。准备好,我们的旅程才刚刚开始!

5. 高级话题与最佳实践

在微服务的星际旅行中,我们已经掌握了如何驾驶飞船、如何进行服务发现、如何保证服务的稳定性和安全性。现在,让我们深入探索一些高级话题和最佳实践,让我们的飞船更加高效、灵活和健壮。

5.1 微服务性能优化

在星际航行中,飞船的性能至关重要。同样,在微服务架构中,性能优化也是我们不得不面对的挑战。

性能测试与瓶颈分析
性能测试就像是给我们的飞船进行体检,通过模拟不同的负载情况,找出飞船的性能瓶颈。我们可以使用JMeter、Gatling等工具进行性能测试。

// 使用JMeter进行性能测试的简单示例
// 在JMeter中创建线程组,添加HTTP请求,设置并发数和循环次数,然后运行测试

服务间的高效通讯策略
服务间的通信是影响性能的重要因素。我们可以通过使用缓存、批处理、异步通信等技术来优化服务间的通信。

// 使用缓存优化服务性能的示例
@Service
public class MyService {@Autowiredprivate CacheManager cacheManager;public String getData(String key) {Cache cache = cacheManager.getCache("myCache");String data = (String) cache.get(key).get();if (data == null) {data = // 从数据库或其他服务获取数据cache.put(key, data);}return data;}
}
5.2 服务网格与Spring Cloud的融合

服务网格是微服务架构中的一个新兴概念,它为服务间的通信、安全、监控等提供了一种更加灵活和可扩展的解决方案。

Istio等服务网格技术概览
Istio是一个流行的服务网格解决方案,它提供了流量管理、服务认证、监控等功能。

与Spring Cloud的集成考虑
我们可以将Istio与Spring Cloud集成,利用Istio的功能来增强Spring Cloud微服务的通信和安全。

# Istio的虚拟服务配置示例
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: myservice
spec:hosts:- myservicehttp:- route:- destination:host: myservice
5.3 微服务治理与运维挑战

在微服务的宇宙中,服务的治理和运维是一个持续的过程,需要我们不断地进行优化和调整。

服务版本管理与升级策略
随着业务的发展,服务可能会经历多次迭代和升级。我们需要制定合理的版本管理策略,确保服务的平滑升级。

故障排查与混沌工程
在星际航行中,我们总是会遇到各种意外和故障。通过混沌工程,我们可以主动地引入故障,测试系统的容错能力和恢复能力。

// 使用Spring Boot Actuator进行故障排查的示例
// 通过访问/actuator/health端点,可以获取服务的健康状况
// 如果服务出现问题,还可以通过其他端点进行更深入的排查

通过这些高级话题和最佳实践,我们可以让我们的微服务飞船更加强大和可靠。在接下来的结论部分,我们将回顾Spring Cloud在微服务架构中的核心价值,并展望它的未来发展趋势。系好安全带,我们的旅程还在继续!
在这里插入图片描述

6. 结论

随着我们对Spring Cloud的深入探索,我们仿佛经历了一场激动人心的星际旅行。从微服务架构的兴起,到Spring Cloud的引入,再到核心组件的实战应用,每一步都充满了挑战和创新。现在,让我们回顾一下这段旅程,并展望一下未来。

6.1 回顾Spring Cloud的核心价值

Spring Cloud不仅仅是一套微服务解决方案,它更像是一位经验丰富的向导,引领我们在微服务的宇宙中航行。它的核心价值体现在:

  • 灵活性:Spring Cloud让我们能够以模块化的方式构建应用,每个服务都可以独立开发、部署和扩展。
  • 可维护性:通过服务发现、配置管理等机制,Spring Cloud极大地提高了微服务的可维护性。
  • 健壮性:Hystrix等组件提供的断路器模式,为服务间的通信提供了额外的保护,提高了系统的稳定性。
  • 易用性:Spring Cloud整合了多种技术,提供了一套开箱即用的解决方案,降低了微服务架构的入门门槛。
6.2 展望Spring Cloud的未来发展趋势

随着技术的发展,Spring Cloud也在不断地演进和完善。未来的Spring Cloud可能会:

  • 更加智能化:通过引入机器学习等技术,Spring Cloud可能会变得更加智能化,能够自动地进行性能优化、故障预测等。
  • 更加集成化:Spring Cloud可能会与更多的技术进行集成,比如服务网格、云原生存储等,形成一个更加完整的生态系统。
  • 更加社区化:随着Spring Cloud的普及,社区的力量将更加凸显。更多的开发者将参与到Spring Cloud的开发和维护中,共同推动其发展。
6.3 总结

在这段旅程中,我们从微服务架构的兴起讲起,介绍了Spring Cloud的背景、核心组件、实战应用、高级话题和最佳实践。我们看到了Spring Cloud如何解决微服务架构中的各种挑战,如何提高微服务的灵活性、可维护性和健壮性。我们也展望了Spring Cloud未来的发展趋势,看到了它无限的潜力和可能性。

微服务架构就像是一片充满机遇和挑战的新大陆,而Spring Cloud就是我们征服这片大陆的利器。通过Spring Cloud,我们可以让微服务的开发和管理变得更加简单、高效和可靠。虽然这段旅程即将结束,但我相信,每一位读者都已经准备好,驾驶着自己的微服务飞船,驶向更加广阔的宇宙。
系好安全带,启动引擎,让我们在Spring Cloud的指引下,继续探索微服务的无限可能吧!

在这里插入图片描述

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

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

相关文章

Python vs MATLAB:选择深度学习的首选编程语言

Python vs MATLAB&#xff1a;选择深度学习的首选编程语言 在深度学习领域&#xff0c;编程语言的选择对于初学者的学习路径和未来的职业发展至关重要。目前&#xff0c;Python和MATLAB都是进行科学计算和数据分析的流行工具&#xff0c;但它们在深度学习社区中的应用和受欢迎…

构建教育新未来:智慧校园平台的深度解读与全景呈现

引言 在全球数字化转型的大潮中&#xff0c;智慧校园平台作为教育信息化的重要载体&#xff0c;正以前所未有的姿态颠覆传统的教育模式&#xff0c;引领教育行业步入一个崭新的时代。这个融合了大数据、人工智能、云计算、物联网等一系列前沿科技的平台&#xff0c;以其强大的功…

C++笔记:类和对象(一)

一.类的引入 1.类(class)是C中的一种特殊的数据结构&#xff0c;它封装了数据和操作这些数据的函数。 2.类中的数据被称为成员变量&#xff0c;而函数则被称为成员函数。 3.类可以被看作是一种模板&#xff0c;用于创建具有相同属性和行为的多个对象。 在C语言中结构体是一种复…

数字化运维体系:重塑IT运维的未来面貌

随着信息技术的飞速发展&#xff0c;传统运维模式已难以满足现代企业日益增长的复杂需求。在此背景下数字化运维体系应运而生&#xff0c;以其独特的视角和方法论为IT运维领域带来了革新性的变革。本文将深入探讨数字化运维体系的定义、核心要素&#xff0c;并阐述如何通过这一…

rust开发web服务器框架,github排名对比

Rocket Star最多的框架 github仓库地址&#xff1a;GitHub - rwf2/Rocket: A web framework for Rust. Rocket 是一个针对 Rust 的异步 Web 框架&#xff0c;重点关注可用性、安全性、可扩展性和速度。 Axum 异步运行时 githuh仓库地址&#xff1a;GitHub - tokio-rs/axum: …

Redis—图文详解高可用原因

本文不会讲解Redis的用途&#xff0c;关于用途会发另一片文章讲解&#xff0c;本文主要讲的是高可用的原理。 Redis高可用主要有以下三个原因&#xff1a;主从模式(上一篇讲Kafka的文章里有涉及到)&#xff0c;哨兵模式&#xff0c;Redis-Cluster(Redis集群)。 什么是主从模式…

【2024高校网络安全管理运维赛】巨细记录!

2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点&#xff1a;动态图片分帧提取 easyshell考点&#xff1a;流量分析 冰蝎3.0 Webphpsql考点&#xff1a;sql万能钥匙 fileit考点&#xff1a;xml注入 外带 Cryptosecretbit考点&#xff1a;代码阅读…

数据结构与算法-时间复杂度

这篇文章会讲到时间频度&#xff0c;时间复杂度&#xff0c;一些排序算法的平均时间复杂度与最坏时间复杂度 目录 1.度量一个程序&#xff08;算法&#xff09;的两种方法 1&#xff09;事后统计法 2&#xff09;事前估算法 2.时间频度 1.基本介绍 算法1&#xff1a; 算…

C语言 | Leetcode C语言题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; struct ListNode* partition(struct ListNode* head, int x) {struct ListNode* small malloc(sizeof(struct ListNode));struct ListNode* smallHead small;struct ListNode* large malloc(sizeof(struct ListNode));struct ListNode* …

SpringCloud微服务之Eureka、Ribbon、Nacos详解

SpringCloud微服务之Eureka、Ribbon、Nacos详解 1、认识微服务1.1、单体架构1.2、分布式架构1.3、微服务1.4、SpringCloud 2、服务拆分与远程调用2.1、服务拆分的原则2.2、服务拆分示例2.2、提供者与消费者 3、Eureka注册中心3.1、Eureka的结构和作用3.2、搭建eureka-server3.2…

使用IIS部署Vue项目

前提 使用IIS部署Vue项目&#xff0c;后端必须跨域&#xff0c;不要在Vue中用proxy跨域&#xff0c;那个只在dev环境中有用&#xff01; IIS安装&#xff0c;不用全部打勾&#xff0c;有些他默认就是方块 ■ 选择性安装的&#xff0c;就维持原样就可以。 添加网站配置 右键…

4.1 编写程序,从键盘接收一个小写字母,然后找出他的前导字符和后续字符,再按顺序显示这三个字符

方法一&#xff1a; 运行效果&#xff1a; 输入B&#xff0c;输出显示ABC&#xff1b;输入A&#xff0c;输出显示AB 思路&#xff1a; 1、通过键盘输入接收一个字母。 2、将输入的字母减去1&#xff0c;得到前导字符&#xff0c;然后输出。 3、将输入的字母加上1&#xff0c;得…

公有云Linux模拟UDP端口并抓包

目录 写在前面操作步骤服务端开启UDP端口并监听客户端连接Wireshark抓包查看 写在前面 关于具体的操作&#xff0c;请参考我的上一篇文章 公有云Linux模拟TCP三次挥手与四次握手&#xff08;Wireshark抓包验证版&#xff09; 在本文&#xff0c;仅介绍与上一篇不同的地方。 操…

机器学习特征降维

目录 特征降维概念 低方差过滤法 PCA主成分分析 相关系数法 小结 特征降维概念 特征对训练模型时非常重要的&#xff1b;用于训练的数据集包含一些不重要的特征&#xff0c;可能导致模型性能不好、泛化性能不佳&#xff1b;例如&#xff1a; 某些特征的取值较为接近&…

MySQL查询篇-聚合函数-窗口函数

文章目录 distinct 关键字聚合函数常见的聚合函数group by和having 分组过滤 窗口函数with as窗口聚合函数排名窗口函数值窗口函数 distinct 关键字 distinct 去重数据&#xff0c;ps:null值也会查出来 select distinct column from table;聚合函数 常见的聚合函数 select …

YOLOv8独家原创改进: AKConv(可改变核卷积)

1.AKConv原理介绍 地址:2311.11587 (arxiv.org) 摘要:基于卷积运算的神经网络在深度学习领域取得了令人瞩目的成果,但标准卷积运算存在两个固有的缺陷。一方面,卷积运算仅限于局部窗口,无法捕获其他位置的信息, 并且它的采样形状是固定的。 另一方面,卷积核的大小固定为…

08.4.grafana自定义图形并直接数据库取值

grafana自定义图形并直接数据库取值 自定义添加油表图形 选择gauge图形&#xff0c;并且配置对应设定值&#xff0c;点击应用 如图所示&#xff0c;可以看到仪表盘上的值是zabbix上取得值 配置grafana直接数据库取值 添加mysql数据源 添加后进行配置&#xff0c;我这…

通过内网穿透实现远程访问个人电脑资源详细过程(免费)(NatApp + Tomcat)

目录 1. 什么是内网穿透 2. 内网穿透软件 3. NatApp配置 4. 启动NatApp 5. 通过内网穿透免费部署我们的springboot项目 通过内网穿透可以实现远程通过网络访问电脑的资源&#xff0c;本文主要讲述通过内网穿透实现远程访问个人电脑静态资源的访问&#xff0c;下一章节将讲…

Mobilenet四代网络模型架构

一、Mobilenet v1 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文地址:https://arxiv.org/abs/1704.04861https://arxiv.org/abs/1704.04861 1.概述 Mobilenet是一个用于移动端和嵌入式的神经网络,其核心思想是采用深度可分离…

纯血鸿蒙APP实战开发——首页下拉进入二楼效果案例

介绍 本示例主要介绍了利用position和onTouch来实现首页下拉进入二楼、二楼上划进入首页的效果场景&#xff0c;利用translate和opacity实现动效的移动和缩放&#xff0c;并将界面沉浸式&#xff08;全屏&#xff09;显示。 效果图预览 使用说明 向下滑动首页页面超过触发距…