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

springcloud简单了解及上手

springcloud微服务框架简单上手

文章目录

  • springcloud微服务框架简单上手
    • 一、SpringCloud简单介绍
      • 1.1 单体架构
      • 1.2 分布式架构
      • 1.3 微服务
    • 二、SpringCloud与SpringBoot的版本对应关系
      • 2022.x 分支
      • 2021.x 分支
      • 2.2.x 分支
    • 三、Nacos注册中心
      • 3.1 认识和安装Nacos
      • 3.2 配置Nacos
      • 3.3 nacos部署springboot项目
    • 四、http客户端Feign
      • 4.1 Feign的介绍
      • 4.2 自定义实现Feign
      • 4.3 Feign实践
    • 五、统一网关Gateway
      • 5.1 为什么要使用网关
      • 5.2 搭建网关服务
      • 5.3 测试网关GateWay

前言:作者是通过自己的项目所运用作为讲解,分享只是作者用到的方面

一、SpringCloud简单介绍

  • SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
  • SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

在这里插入图片描述

1.1 单体架构

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。

**优点 **:
架构简单
部署成本低

缺点
耦合度高

如下就是简单的单体架构图

在这里插入图片描述

1.2 分布式架构

分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点
降低服务耦合
有利于服务升级拓展

如下就是简单的分布式架构图

在这里插入图片描述

1.3 微服务

微服务:是一种经过良好架构设计的分布式架构方案

微服务架构特征
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
面向服务:微服务对外暴露业务接口
自治:团队独立、技术独立、数据独立、部署独立
隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

如下就是简单的微服务架构图

在这里插入图片描述

二、SpringCloud与SpringBoot的版本对应关系

2022.x 分支

适配 Spring Boot 3.0,Spring Cloud 2022.x 版本及以上的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记): (注意,该分支 Spring Cloud Alibaba 版本命名方式进行了调整,未来将对应 Spring Cloud 版本,前三位为 Spring Cloud 版本,最后一位为扩展版本,比如适配 Spring Cloud 2022.0.0 版本对应的 Spring Cloud Alibaba 第一个版本为:2022.0.0.0,第个二版本为:2022.0.0.1,依此类推)

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2022.0.0.0*Spring Cloud 2022.0.03.0.2
2022.0.0.0-RC2Spring Cloud 2022.0.03.0.2
2022.0.0.0-RC1Spring Cloud 2022.0.03.0.0

2021.x 分支

适配 Spring Boot 2.4,Spring Cloud 2021.x 版本及以上的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记):

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2021.0.5.0*Spring Cloud 2021.0.52.6.13
2021.0.4.0Spring Cloud 2021.0.42.6.11
2021.0.1.0Spring Cloud 2021.0.12.6.3
2021.1Spring Cloud 2020.0.12.4.2

2.2.x 分支

适配 Spring Boot 为 2.4,Spring Cloud Hoxton 版本及以下的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记):

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2.2.10-RC1*Spring Cloud Hoxton.SR122.3.12.RELEASE
2.2.9.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE
2.2.8.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE
2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE
2.2.6.RELEASESpring Cloud Hoxton.SR92.3.2.RELEASE
2.2.1.RELEASESpring Cloud Hoxton.SR32.2.5.RELEASE
2.2.0.RELEASESpring Cloud Hoxton.RELEASE2.2.X.RELEASE
2.1.4.RELEASESpring Cloud Greenwich.SR62.1.13.RELEASE
2.1.2.RELEASESpring Cloud Greenwich2.1.X.RELEASE
2.0.4.RELEASE(停止维护,建议升级)Spring Cloud Finchley2.0.X.RELEASE
1.5.1.RELEASE(停止维护,建议升级)Spring Cloud Edgware1.5.X.RELEASE
spring cloud alibaba、spring cloud、spring boot版本对应:来自 gitHub 中的spring cloud alibaba官方说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明spring官网:https://spring.io/spring历史官方文档:https://docs.spring.io/spring-cloud/docs/spring离线依赖及文档下载地址:https://repo.spring.io/ui/native/libs-release-local/org/springframework/

三、Nacos注册中心

3.1 认识和安装Nacos

Nacos 是一个开源的分布式服务发现、配置管理和服务管理平台。它提供了服务注册与发现、配置管理、服务健康监测等功能,可以帮助开发者构建和管理云原生微服务架构。

具体来说,Nacos 提供了以下核心功能:

  1. 服务注册与发现(Service Discovery):允许服务实例注册到 Nacos,并通过 Nacos 客户端发现其他服务实例。这样,服务之间可以动态地发现和通信,实现了微服务架构中的服务发现功能。
  2. 配置管理(Configuration Management):Nacos 提供了统一的配置管理平台,允许开发者集中管理微服务的配置信息,支持配置的动态变更和实时推送,从而提高了配置管理的灵活性和可靠性。
  3. 服务健康监测(Health Check):Nacos 会定期检查服务实例的健康状态,确保只有健康的服务实例会被注册到服务发现中,并且及时地将不健康的实例移除,从而提高了整个系统的稳定性和可用性。

Nacos下载

链接:https://pan.baidu.com/s/1gwHPkvylWLtrjQYQCwmqqw?pwd=T401
提取码:T401

3.2 配置Nacos

Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:

在这里插入图片描述

修改其中的内容为其他端口

在这里插入图片描述

启动nacos,进入bin目录, 然后 cmd 进入该目录执行命令

./startup.cmd -m standalone

出现下面内容即可

在这里插入图片描述

如果觉得在cmd输入命令麻烦可以修改脚本, 编辑start.cmd脚本,将集群模式修改为单机模式,在bin目录下右击startup.cmd文件,用记事本的方式打开,将MODE改成standalone即可,如下图所示

在这里插入图片描述

这样直接双击startup.cmd即可运行nacos

在这里插入图片描述

ctrl+左键点击命令窗口给的地址

在这里插入图片描述

nacos账号: nacos

nacos密码: nacos

在这里插入图片描述

到此nacos安装完成

3.3 nacos部署springboot项目

父工程

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>

添加nacos的客户端依赖

 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.6.RELEASE</version></dependency>

修改需要更改服务的中的application.yml文件

spring:  application:  # 应用配置项name: dataAccountService  # 应用名称为 dataAccountServicecloud:  nacos: server-addr: localhost:8848  # Nacos 服务端地址为 localhost:8848discovery:  # Nacos 服务发现配置项cluster-name: CQ  # 使用的 Nacos 集群名称为 CQ

启动springboot项目和nacos,出现自己配置的服务,及完成nacos的简单部署,在我的项目中,nacos主要做的是服务注册与发现,并没有其他内容,如果有需要可以参考其他博客

在这里插入图片描述

四、http客户端Feign

4.1 Feign的介绍

Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign
其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

Feign 的主要优势在于:

  1. 声明式 API 定义:Feign 允许开发者使用接口和注解来定义 RESTful 服务的请求和响应,而无需关心底层的 HTTP 请求和响应处理逻辑。通过编写简单的 Java 接口和添加 Feign 注解,就可以定义服务调用的各种细节,比如 URL、HTTP 方法、请求参数、请求头等。
  2. 模板化请求:Feign 提供了一套模板化的请求构建和发送机制,使得开发者可以轻松地构造 HTTP 请求并发送到目标服务端点。Feign 会根据接口定义和注解配置,自动构造出对应的 HTTP 请求,并将请求参数、请求头等信息注入到请求中。
  3. 集成了负载均衡和服务发现:Feign 可以与 Spring Cloud 中的服务发现组件(如 Eureka、Consul 等)和负载均衡组件(如 Ribbon)集成,从而实现服务之间的负载均衡和自动服务发现。开发者可以直接通过服务名来调用其他微服务,而无需硬编码服务的地址和端口。
  4. 可扩展性:Feign 提供了丰富的扩展点,开发者可以通过自定义编码器、解码器、拦截器等来扩展 Feign 的功能,从而满足各种特定的业务需求。

在这里插入图片描述

Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:

类型作用说明
feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象
feign.codec.Encoder请求参数编码将请求参数编码,便于通过http请求发送
feign. Contract支持的注解格式默认是SpringMVC的注解
feign. Retryer失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

4.2 自定义实现Feign

导入依赖

如果服务A需要调用服务B的方法,则将依赖写入服务A的pom文件中,既服务A是消费者

        <!--        feign消费者--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.6.RELEASE</version></dependency>

配置Feign日志有两种方式:
方式一:配置文件方式
全局生效:

feign:httpclient:enabled: trueclient:config:default:  # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置logger-level: NONE #日志级别

局部生效

feign:httpclient:enabled: trueclient:config:dataAssetService:  # 这里用dataAssetService就是局部配置,只对dataAssetService服务生效logger-level: NONE #日志级别

方式二:编程方式,先声明一个Bean:

public class FeignClientConfiguration {@Beanpublic Logger.Level feignLogLevel(){return Logger.Level.BASIC; }
}

而后如果是全局配置,则把它放到@EnableFeignClients这个注解中

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class) 

如果是局部配置,则把它放到@FeignClient这个注解中:

@FeignClient(value = "dataAssetService", configuration = FeignClientConfiguration.class) 

4.3 Feign实践

方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。

  • 服务紧耦合

  • 父接口参数列表中的映射不会被继承

    自定义Feign 客户端接口


//被消费的服务名称
@FeignClient(name = "dataManagementService")
public interface dataAssetClient {/*** 获取数据标准信息* @param dataStandardCode * @return* /dataStandard/getDataStandardInfo为被消费的接口路径*/@GetMapping("/dataStandard/getDataStandardInfo")R getDataStandard(@RequestParam("dataStandardCode") String dataStandardCode);
}

消费者的controller


/*** <p>* 数据资产表 前端控制器* </p>** @author 不入青山入我怀* @since 2024-03-21*/
@RestController
@RequestMapping("/dataAsset")
public class DataAssetController {@Autowiredprivate dataAssetClient dataassetClient;//数据标准目录/*** 远程调用其他接口* /dataAsset/getDataStandard 在该服务调用其他服务的接口路径* @return*/@GetMapping("getDataStandard")public R getDataStandard() {return dataassetClient.getDataStandard("");}}

被消费者controller(正常写就行)

    /*** 获取数据标准信息* @param dataStandardCode* @return*/@GetMapping("getDataStandardInfo")public R getDataStandardInfo(@RequestParam("dataStandardCode") String dataStandardCode){return dataStandardService.getDataStandardInfo(dataStandardCode);//实现具体逻辑}

作者的Feign的实现逻辑

在这里插入图片描述

你也可以将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用,如下图

在这里插入图片描述

五、统一网关Gateway

5.1 为什么要使用网关

  1. 路由与负载均衡:网关可以作为请求的入口,根据请求的路径或者其他条件将请求路由到不同的后端服务。这样可以实现请求的负载均衡,将流量合理地分发到不同的服务实例上,从而提高整个系统的性能和可扩展性。
  2. 安全性:网关可以作为安全屏障,用于保护后端服务免受恶意攻击或者非法访问。通过网关可以实现访问控制、身份认证、权限验证等安全功能,确保只有合法的请求可以访问后端服务。
  3. 监控与统计:网关可以对请求进行监控和统计,记录请求的响应时间、成功率、失败率等指标,并生成相应的监控报告和统计数据。这样可以帮助开发者实时了解系统的运行状况,及时发现和解决问题。
  4. 日志与审计:网关可以记录请求的日志,包括请求的来源、目的地、参数、响应状态等信息,用于后续的审计和分析。这对于排查问题、追踪请求流程、分析用户行为等都非常有帮助。
  5. 服务聚合与协议转换:网关可以将多个后端服务的接口聚合成一个统一的接口供客户端调用,从而简化客户端的调用逻辑。同时,网关还可以实现不同协议之间的转换,比如将 HTTP 请求转换为 WebSocket 请求,或者将 RESTful 接口转换为 GraphQL 接口等。

5.2 搭建网关服务

创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖:

   <!--        网关gateway--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>2.2.6.RELEASE</version></dependency><!--        nacos服务注册发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.6.RELEASE</version></dependency>

编写路由配置及nacos地址

网关路由可以配置的内容包括:

  • 路由id:路由唯一标示
  • uri:路由目的地,支持lb和http两种
  • predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地
  • filters:路由过滤器,处理请求或响应
spring:  application:  name: gateway  # 应用名称为 gatewaycloud: nacos: discovery: server-addr: localhost:8848  # Nacos 服务端地址为 localhost:8848gateway: routes:  # 网关路由配置项,定义了多个路由规则- id: server-provice  # 第一个路由规则的标识符uri: lb://serve-provide  # 路由到服务名为 serve-provide 的服务predicates:  # 定义了路由匹配的条件- Path=/api/serve/**  # 匹配路径以 /api/serve/ 开头的请求filters:  # 定义了对请求和响应的处理规则- RewritePath=/api/(?<segment>/?.*),/$\{segment}  # 重写请求路径,将 /api/ 后面的路径段作为参数传递给后端服务- id: data-asset-service  # 第二个路由规则的标识符uri: lb://dataAssetService  # 路由到服务名为 dataAssetService 的服务predicates:  # 定义了路由匹配的条件- Path=/api/dataAsset/** ,/api/dataAssetField/** ,/api/dataAssetRelationCategory/**  # 匹配多个路径的请求filters:  # 定义了对请求和响应的处理规则- RewritePath=/api/(?<segment>/?.*),/$\{segment}  # 重写请求路径,将 /api/ 后面的路径段作为参数传递给后端服务server:port: 8989 

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

在这里插入图片描述

5.3 测试网关GateWay

利用Postman来测试,通过访问网关的端口8989,成功把接口转发到对应的服务中去

在这里插入图片描述

相关文章:

springcloud简单了解及上手

springcloud微服务框架简单上手 文章目录 springcloud微服务框架简单上手一、SpringCloud简单介绍1.1 单体架构1.2 分布式架构1.3 微服务 二、SpringCloud与SpringBoot的版本对应关系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注册中心3.1 认识和安装Nacos3.2 配置Nacos3.3 n…...

Halcon与深度学习框架结合进行图像分析

Halcon 是一款强大的机器视觉软件&#xff0c;而深度学习框架如 TensorFlow 或 PyTorch 在图像识别和分类任务中表现出色。结合两者的优势&#xff0c;可以实现复杂的图像分析任务。Halcon 负责图像预处理和特征提取&#xff0c;而深度学习框架则利用这些特征进行高级分析和识别…...

STL----push,insert,empalce

push_back和emplace_back的区别 #include <iostream> #include <vector>using namespace std; class testDemo { public:testDemo(int n) :num(n) {cout << "构造函数" << endl;}testDemo(const testDemo& other) :num(other.num) {cou…...

解决OpenHarmony设备开发Device Tools工具的QUICK ACCESS一直为空

今天重新安装了OpenHarmony设备开发的环境&#xff0c;在安装过程中&#xff0c;到了工程之后&#xff0c;QUICK ACCESS一直为空。如下图红色大方框的内容一开始没有。 解决方案&#xff1a; 在此记录我的原因&#xff0c;我的原因主要是deveco device tools的远程连接的是z…...

k8s拉起一个pod底层是如何运行的

在Kubernetes中&#xff0c;当你尝试启动一个Pod时&#xff0c;底层的运行方式是由Kubelet服务来管理的。以下是Pod启动过程的简化概述&#xff1a; Kubernetes API Server接收到创建Pod的请求。 API Server将Pod的元数据存储到etcd中&#xff0c;以便于Pod的调度和跟踪。 Sc…...

Java代理模式的实现详解

一、前言 1.1、说明 本文章是在学习mybatis框架源码的过程中&#xff0c;发现对于动态代理Mapper接口这一块的代理实现还是有些遗忘和陌生&#xff0c;因此在本文章中就Java实现代理模式的过程进行一个学习和总结。 1.2、参考文章 《设计模式》&#xff08;第2版&#xff0…...

数据结构与算法===优先队列

文章目录 前言一、优先队列二、应用场景三、代码实现总结 前言 之前写过很多数据结构与算法相关的了&#xff0c;今天看一个新的数据结构&#xff0c;优先队列。优先队列类似队列&#xff0c;却又优先于队列&#xff0c;是堆实现的。接下来详细看看。 一、优先队列 优先队列一…...

HTML常用标签-超链接标签

超链接标签 点击后带有链接跳转的标签 ,也叫作a标签 href属性用于定义连接 href中可以使用绝对路径,以/开头,始终以一个固定路径作为基准路径作为出发点href中也可以使用相对路径,不以/开头,以当前文件所在路径为出发点href中也可以定义完整的URL target用于定义打开的方式 _b…...

财务管理|基于SprinBoot+vue的财务管理系统(源码+数据库+文档)

财务管理系统 目录 基于SprinBootvue的财务管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 1管理员功能模块 2员工功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1…...

快速学习SpringAi

Spring AI是AI工程师的一个应用框架&#xff0c;它提供了一个友好的API和开发AI应用的抽象&#xff0c;旨在简化AI应用的开发工序&#xff0c;例如开发一款基于ChatGPT的对话应用程序。通过使用Spring Ai使我们更简单直接使用chatgpt 1.创建项目 jdk17 引入依赖 2.依赖配置 …...

谈谈 Spring 的过滤器和拦截器

前言 我们在进行 Web 应用开发时&#xff0c;时常需要对请求进行拦截或处理&#xff0c;故 Spring 为我们提供了过滤器和拦截器来应对这种情况。那么两者之间有什么不同呢&#xff1f;本文将详细讲解两者的区别和对应的使用场景。 &#xff08;本文的代码实现首先是基于 Sprin…...

请介绍下H264的多参考帧技术及其应用场景,并请说明下为什么要有多参考帧?

H.264&#xff08;也称为H.264/AVC&#xff09;的多参考帧机制是其编码效率和质量提升的关键部分。这个机制允许编码器在编码当前帧时&#xff0c;参考多个之前已编码的帧。这种多参考帧的方法为编码器提供了更多的选择&#xff0c;使其能够更准确地预测当前帧的内容&#xff0…...

第6章 Elasticsearch,分布式搜索引擎【仿牛客网社区论坛项目】

第6章 Elasticsearch&#xff0c;分布式搜索引擎【仿牛客网社区论坛项目】 前言推荐项目总结第6章 Elasticsearch&#xff0c;分布式搜索引擎1.Elasticsearch入门2.Spring整合ElasticsearchDiscussPostRepositoryDiscussPostControllerEventConsumer 3.开发社区搜索功能 最后 前…...

odoo 全局调整list_controller中默认方法(form_controller和kanban_controller等亦可以同样操作)

需求说明 工作中遇到需要调整odoo原生的tree hearder button显示逻辑&#xff0c;又不可以直接跳转odoo源码&#xff0c;故新加个js全局替换对应的方法&#xff0c;以实现对应功能的同时不影响后期odoo版本升级。 odoo 全局调整list_controller方法示例 创建一个js放到stati…...

大模型日报2024-05-13

大模型日报 2024-05-13 大模型资讯 谷歌推出Gemini生成式AI平台 摘要: 生成式人工智能正在改变我们与技术的互动方式。谷歌最近推出了名为Gemini的新平台&#xff0c;该平台代表了其在生成式AI领域的最新进展。Gemini平台集成了一系列先进的工具和功能&#xff0c;旨在为用户提…...

【使用Condition来模拟生产消费】

使用Condition来模拟生产消费 1. 关于ReentrantLock 和condition的认知?2.使用condition实现生产者-消费者1. 关于ReentrantLock 和condition的认知? /*Q: ReentrantLock是如何实现管理锁和线程的?A: ReentrantLock是并发包中 一个类,它实现了Lock接口,提供了比内置synch…...

5.14学习总结

java聊天室项目 分片上传 将大文件切分为多个小的数据块&#xff08;通常大小为1MB~10MB&#xff09;&#xff0c;然后将这些小数据块分别上传至服务器&#xff0c;最后由服务器将这些小块组合成完整的文件。这种方式可以避免由于网络中断或超时而导致上传失败&#xff0c;并…...

最新极空间部署iCloudpd教程,实现自动同步iCloud照片到NAS硬盘

【iPhone福利】最新极空间部署iCloudpd教程&#xff0c;实现自动同步iCloud照片到NAS硬盘 哈喽小伙伴们好&#xff0c;我是Stark-C~ 我记得我前年的时候发过一篇群晖使用Docker部署iCloudpd容器来实现自动同步iCloud照片的教程&#xff0c;当时热度还很高&#xff0c;可见大家…...

Sketch总结

sketch禁用了lineGap https://www.sketch.com/docs/designing/text/ http://www.sketchcn.com/sketch-chinese-user-manual.html https://github.com/sketch-hq/sketch-document https://developer.sketch.com/file-format/ https://animaapp.github.io/sketch-web-viewer/ htt…...

【iOS】工厂模式

文章目录 前言设计模式的三大原则简单工厂模式工厂方法模式抽象工厂模式关于三兄弟的升级与降级注意 前言 上文讲完了iOS的架构模式&#xff0c;接下来聊一聊设计模式&#xff0c;设计模式有许多&#xff0c;主要介绍一下工厂模式 设计模式的三大原则 S 单一职责原则 告诉我…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...