【微服务】Eureka(服务注册,服务发现)
文章目录
- 1.基本介绍
- 1.学前说明
- 2.当前架构分析
- 1.示意图
- 2.问题分析
- 3.引出Eureka
- 1.项目架构分析
- 2.上图解读
- 2.创建单机版的Eureka
- 1.创建 e-commerce-eureka-server-9001 子模块
- 2.检查父子pom.xml
- 1.子 pom.xml
- 2.父 pom.xml
- 3.pom.xml 引入依赖
- 4.application.yml 配置eureka服务
- 5.com/sun/springcloud/EurekaApplication.java 编写启动类运行测试
- 6.会员中心模块作为Eureka Client示意图
- 7.member-service-provider-10001 模块作为Eureka Client
- 1.pom.xml引入Eureka 客户端依赖
- 2.application.yml 配置Eureka Client
- 3.修改启动类添加注解
- 8.测试
- 1.先启动Eureka 服务端,再启动Eureka 客户端
- 2.访问(http://localhost:9001/) 进入Eureka 服务端
- 9.服务消费模块作为Eureka Client示意图
- 10.member-service-consumer-81 模块作为Eureka Client
- 1.pom.xml 引入Eureka 客户端依赖
- 2.application.yml 配置Eureka Client
- 3.修改启动类添加注解
- 11.测试
- 1.先启动Eureka 服务端,再启动Eureka 客户端
- 2.访问(http://localhost:9001/) 进入Eureka 服务端
- 12.梳理Service Consumer Service Provider Eureka Server 维护机制
- 13.Eureka自我保护模式
- 1.基本介绍
- 2.小结
- 3.禁用自我保护模式
- 1.服务端配置
- 2.客户端配置
- 3.启动后访问http://localhost:9001/
- 4.关闭掉客户端
- 3.搭建Eureka多服务集群
- 1.示意图
- 2.创建e-commerce-eureka-server-9002子模块作为第二个Eureka服务
- 3.pom.xml 引入依赖(跟9001子模块的一样)
- 4.application.yml 配置
- 5.修改9001模块的 application.yml 配置完成两个服务相互注册
- 6.编写启动类
- 7.配置Hosts运行Eureka
- 1.解释
- 2.hosts文件所在位置
- 3.修改Hosts文件
- 4.启动这两个服务,访问测试
- 8.Eureka多个服务端互相注册配置文件理解
- 1.服务端一(eureka9001.com:9001)
- 2.服务端二(eureka9002.com:9002)
- 4.将客户端注册到Eureka服务集群
- 1.示意图
- 2.修改81客户端的application.yml
- 3.修改10001客户端的application.yml
- 5.启动四个服务
- 6.测试访问
- 7.Eureka多个客户端注册多个服务端配置文件理解
- 1.客户端一(端口81)
- 2.客户端二(端口10001)
- 5.搭建会员中心服务提供方集群
- 1.示意图
- 2.基本说明
- 3.创建 member-service-provider-10002 子模块与10001功能完全一致
- 4.打开10001模块的文件夹,复制main目录下的文件夹
- 5.打开10002模块的文件夹,将刚才复制的内容粘贴到main目录下
- 6.打开idea查看10002模块
- 7.将10001模块的pom.xml文件依赖粘贴到10002模块(刷新maven)
- 8.修改10002模块application.yml 的端口为10002
- 9.修改10002和10001模块的主启动类名称
- 10.启动所有服务进行测试
- 11.统一10001服务和10002服务的注册名并启动测试
- 6.服务消费方(81模块)使用Eureka服务集群
- 1.示意图
- 2.修改com/sun/springcloud/controller/MemberConsumerController.java 的前缀为服务提供者在Eureka服务端的key
- 3.修改com/sun/springcloud/config/CustomizationBean.java 增加调用时负载均衡注解
- 4.修改两个服务提供方的信息,以便区分
- member-service-provider-10001
- member-service-provider-10002
- 5.启动测试
- 1.启动全部服务
- 2.查看注册情况
- 3.postman测试两个服务提供方是否正常
- member-service-provider-10001
- member-service-provider-10002
- 4.发送请求到服务提供方 member-service-consumer-81
- 1.第一次请求
- 2.第二次请求
- 7.DiscoveryClient获取服务注册信息
- 1.示意图
- 2.需求分析
- 3.代码实现
- 1.com/sun/springcloud/controller/MemberConsumerController.java 服务消费者调用DiscoveryClient
- 1.以接口的形式注入DiscoveryClient
- 2.编写一个接口完成服务发现
- 3.在启动类使用@EnableDiscoveryClient启动服务发现
- 4.启动所有服务进行测试
- 5.注意事项
- 8.小结
- 1.项目完整文件目录
- 2.项目架构图
1.基本介绍
1.学前说明

2.当前架构分析
1.示意图

2.问题分析

3.引出Eureka
1.项目架构分析

2.上图解读

2.创建单机版的Eureka
1.创建 e-commerce-eureka-server-9001 子模块

2.检查父子pom.xml
1.子 pom.xml

2.父 pom.xml

3.pom.xml 引入依赖
<dependencies><!-- 引入 eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><!-- 使用版本仲裁 --></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><!-- 公共模块的jar包 --><dependency><groupId>org.example</groupId><artifactId>e_commerce_center-common-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
4.application.yml 配置eureka服务
server:port: 9001
eureka: # 配置eureka-serverinstance:hostname: localhost # 服务实例名client: # 因为以后可能有其他的eureka服务端,那是这个eureka服务就会既是客户端又是服务端,所以在这里配置一下作为客户端的配置register-with-eureka: false # 不向注册中心注册自己fetch-registry: false # 自己就是注册中心,所以不需要去发现服务service-url:# 这里使用了${}来动态获取主机和端口defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)
5.com/sun/springcloud/EurekaApplication.java 编写启动类运行测试
package com.sun.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/*** Description:** @Author sun* @Create 2024/3/24 19:38* @Version 1.0*/
@EnableEurekaServer // 作为eureka服务端启动
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}

6.会员中心模块作为Eureka Client示意图

7.member-service-provider-10001 模块作为Eureka Client
1.pom.xml引入Eureka 客户端依赖
<!-- 引入eureka的客户端场景启动器 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><!-- 使用版本仲裁 --></dependency>
2.application.yml 配置Eureka Client
server:port: 10001 # 配置服务端口
spring:application:name: member-service-provider-10001 # 配置服务的名称,名字任意这里与项目名保持一致
eureka: # eureka客户端配置client:register-with-eureka: true # 将自己注册到eureka服务fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡service-url:defaultZone: http://localhost:9001/eureka #表示自己要注册到哪个服务
3.修改启动类添加注解

8.测试
1.先启动Eureka 服务端,再启动Eureka 客户端
2.访问(http://localhost:9001/) 进入Eureka 服务端


9.服务消费模块作为Eureka Client示意图

10.member-service-consumer-81 模块作为Eureka Client
1.pom.xml 引入Eureka 客户端依赖
<!-- 引入eureka的客户端场景启动器 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><!-- 使用版本仲裁 --></dependency>
2.application.yml 配置Eureka Client
server:port: 81 # 监听81端口
spring:application:name: member-service-consumer-81
eureka: # eureka客户端配置client:register-with-eureka: true # 将自己注册到eureka服务fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡service-url:defaultZone: http://localhost:9001/eureka #表示自己要注册到哪个服务
3.修改启动类添加注解

11.测试
1.先启动Eureka 服务端,再启动Eureka 客户端
2.访问(http://localhost:9001/) 进入Eureka 服务端

12.梳理Service Consumer Service Provider Eureka Server 维护机制
- 简单来说Eureka就两个功能,发现服务,注册服务!
- 基本流程就是会员中心启动之后将自己的信息注册到Eureka Server(注册服务),服务消费者启动之后通过Eureka Server来发现服务(发现服务),得到会员中心的调用地址,然后通过rpc远程调用

13.Eureka自我保护模式
1.基本介绍

2.小结
- 服务在注册之后会不断地向服务端发送心跳,正常情况下如果90s内没有心跳,则服务端会认为这个客户端down掉了,就会清除记录
- 但是一旦自我保护机制开启,即使90s内没有心跳,也不会请求记录
3.禁用自我保护模式
1.服务端配置
server:port: 9001
eureka: # 配置eureka-serverinstance:hostname: localhost # 服务实例名client: # 因为以后可能有其他的eureka服务端,那是这个eureka服务就会既是客户端又是服务端,所以在这里配置一下作为客户端的配置register-with-eureka: false # 不向注册中心注册自己fetch-registry: false # 自己就是注册中心,所以不需要去检索服务service-url:# 这里使用了${}来动态获取主机和端口defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)server:enable-self-preservation: false # 关闭自我保护机制eviction-interval-timer-in-ms: 2000 # 两秒内收不到心跳包,就会超时
2.客户端配置
server:port: 10001 # 配置服务端口
spring:application:name: member-service-provider-10001 # 配置服务的名称,名字任意这里与项目名保持一致datasource:type: com.alibaba.druid.pool.DruidDataSource# 别忘记创建数据库之后修改数据库名称url: username: password:
mybatis:mapper-locations: classpath:mapper/*.xml # 扫描所有Mapper.xmltype-aliases-package: com.sun.springcloud.entity # 扫描所有实体类,可以直接使用类名来标识
eureka: # eureka客户端配置client:register-with-eureka: true # 将自己注册到eureka服务fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡service-url:defaultZone: http://localhost:9001/eureka #表示自己要注册到哪个服务instance:lease-renewal-interval-in-seconds: 1 # 客户端向服务端发送的心跳间隔,默认30slease-expiration-duration-in-seconds: 2 # 服务端收到最后一次心跳后等待的时间上限,默认90s
3.启动后访问http://localhost:9001/

4.关闭掉客户端

3.搭建Eureka多服务集群
1.示意图

2.创建e-commerce-eureka-server-9002子模块作为第二个Eureka服务

3.pom.xml 引入依赖(跟9001子模块的一样)
<dependencies><!-- 引入 eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><!-- 使用版本仲裁 --></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><!-- 公共模块的jar包 --><dependency><groupId>org.example</groupId><artifactId>e_commerce_center-common-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
4.application.yml 配置
server:port: 9002
eureka: # 配置eureka-serverinstance:hostname: eureka9002.com # 服务实例名client: # 因为以后可能有其他的eureka服务端,那是这个eureka服务就会既是客户端又是服务端,所以在这里配置一下作为客户端的配置register-with-eureka: false # 不向注册中心注册自己fetch-registry: false # 自己就是注册中心,所以不需要去检索服务service-url:# 注册到9001serverdefaultZone: http://eureka9001.com:9001/eureka/ # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)
5.修改9001模块的 application.yml 配置完成两个服务相互注册
server:port: 9001
eureka: # 配置eureka-serverinstance:hostname: eureka9001.com # 服务实例名client: # 因为以后可能有其他的eureka服务端,那是这个eureka服务就会既是客户端又是服务端,所以在这里配置一下作为客户端的配置register-with-eureka: false # 不向注册中心注册自己fetch-registry: false # 自己就是注册中心,所以不需要去检索服务service-url:# 注册到9002serverdefaultZone: http://eureka9002.com:9002/eureka/ # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)
6.编写启动类
package com.sun.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/*** Description:** @Author sun* @Create 2024/3/25 9:36* @Version 1.0*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication9002 {public static void main(String[] args) {SpringApplication.run(EurekaApplication9002.class, args);}
}
7.配置Hosts运行Eureka
1.解释
- 由于上面配置的两个Eureka服务使用的是域名eureka9001.com和eureka9002.com
- 所以需要配置hosts文件
2.hosts文件所在位置

3.修改Hosts文件
- 这样eureka9002.com和eureka9001.com都表示127.0.0.1了
- 如果这里不能直接修改就把文件复制一份在别的地方修改一下然后覆盖这个文件即可
- 注意:你如果现在开的代理服务器,hosts文件是不生效的!

4.启动这两个服务,访问测试


8.Eureka多个服务端互相注册配置文件理解
1.服务端一(eureka9001.com:9001)
server:port: 9001
eureka: # 配置eureka-serverinstance:hostname: eureka9001.com # 服务实例名(只有服务端才配置,就是ip)client: # 服务端和客户端都需要配置register-with-eureka: false # 不向注册中心注册自己fetch-registry: false # 自己就是注册中心,所以不需要去检索服务service-url:# 注册地址(如果只有一个服务端,就填写自己的服务地址加上/eureka/)这里注册到eureka9002.com:9002defaultZone: http://eureka9002.com:9002/eureka/ # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)
2.服务端二(eureka9002.com:9002)
server:port: 9002
eureka: # 配置eureka-serverinstance:hostname: eureka9002.com # 服务实例名(只有服务端才配置,就是ip)client: # 服务端和客户端都需要配置register-with-eureka: false # 不向注册中心注册自己fetch-registry: false # 自己就是注册中心,所以不需要去检索服务service-url:# 注册地址(如果只有一个服务端,就填写自己的服务地址加上/eureka/)这里注册到eureka9001.com:9001defaultZone: http://eureka9001.com:9001/eureka/ # 交互模块,查询服务和注册服务都需要依赖这个地址(就是注册这个)
4.将客户端注册到Eureka服务集群
1.示意图

2.修改81客户端的application.yml
server:port: 81 # 监听81端口
spring:application:name: member-service-consumer-81
eureka: # eureka客户端配置client:register-with-eureka: true # 将自己注册到eureka服务fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡service-url:# 需要注册到两个服务,则只需要用逗号间隔defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/
3.修改10001客户端的application.yml
server:port: 10001 # 监听10001端口
spring:application:name: member-service-provider-10001 # 配置服务的名称,名字任意这里与项目名保持一致
eureka: # eureka客户端配置client:register-with-eureka: true # 将自己注册到eureka服务fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡service-url:# 需要注册到两个服务,则只需要用逗号间隔defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/ #表示自己要注册到哪个服务
5.启动四个服务

6.测试访问


7.Eureka多个客户端注册多个服务端配置文件理解
1.客户端一(端口81)
server:port: 81 # 监听81端口
spring:application:name: member-service-consumer-81 # 客户端服务名称
eureka: # eureka客户端配置client:register-with-eureka: true # 将自己注册到eureka服务fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡service-url:# 需要注册到两个服务,则只需要用逗号间隔defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/
2.客户端二(端口10001)
server:port: 10001 # 监听10001端口
spring:application:name: member-service-provider-10001 # 客户端服务名称
eureka: # eureka客户端配置client:register-with-eureka: true # 将自己注册到eureka服务fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡service-url:# 需要注册到两个服务,则只需要用逗号间隔defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/ #表示自己要注册到哪个服务
5.搭建会员中心服务提供方集群
1.示意图

2.基本说明

3.创建 member-service-provider-10002 子模块与10001功能完全一致

4.打开10001模块的文件夹,复制main目录下的文件夹

5.打开10002模块的文件夹,将刚才复制的内容粘贴到main目录下

6.打开idea查看10002模块

7.将10001模块的pom.xml文件依赖粘贴到10002模块(刷新maven)
8.修改10002模块application.yml 的端口为10002

9.修改10002和10001模块的主启动类名称


10.启动所有服务进行测试


11.统一10001服务和10002服务的注册名并启动测试


6.服务消费方(81模块)使用Eureka服务集群
1.示意图

2.修改com/sun/springcloud/controller/MemberConsumerController.java 的前缀为服务提供者在Eureka服务端的key

3.修改com/sun/springcloud/config/CustomizationBean.java 增加调用时负载均衡注解

4.修改两个服务提供方的信息,以便区分
member-service-provider-10001

member-service-provider-10002

5.启动测试
1.启动全部服务

2.查看注册情况


3.postman测试两个服务提供方是否正常
member-service-provider-10001

member-service-provider-10002

4.发送请求到服务提供方 member-service-consumer-81
1.第一次请求

2.第二次请求

7.DiscoveryClient获取服务注册信息
1.示意图

2.需求分析

3.代码实现
1.com/sun/springcloud/controller/MemberConsumerController.java 服务消费者调用DiscoveryClient
1.以接口的形式注入DiscoveryClient

2.编写一个接口完成服务发现
/*** 服务消费方通过eureka服务集群来获取到服务提供方的服务** @return*/@GetMapping("/member/consumer/discovery")public Object discovery() {// 获取所有服务idList<String> services = discoveryClient.getServices();for (String service : services) {log.info("服务名小写={}", service);// 获取当前服务id对应的实例(可能有多个)List<ServiceInstance> instances = discoveryClient.getInstances(service);for (ServiceInstance instance : instances) {log.info("id={}, host={}, port={}, uri={}", service, instance.getHost(), instance.getPort(), instance.getUri());}}return services;}
3.在启动类使用@EnableDiscoveryClient启动服务发现

4.启动所有服务进行测试


5.注意事项

8.小结
1.项目完整文件目录

2.项目架构图

相关文章:
【微服务】Eureka(服务注册,服务发现)
文章目录 1.基本介绍1.学前说明2.当前架构分析1.示意图2.问题分析 3.引出Eureka1.项目架构分析2.上图解读 2.创建单机版的Eureka1.创建 e-commerce-eureka-server-9001 子模块2.检查父子pom.xml1.子 pom.xml2.父 pom.xml 3.pom.xml 引入依赖4.application.yml 配置eureka服务5.…...
windows上ssh设置代理,直接访问公司内网
ssh设置代理一般来说很简单,对于无密码或者可以支持密钥登录的,都比较无脑 难的地方在于使用用户名密码认证来使用一个http的代理或者socks5的代理,密码如何设置?特殊字符如何处理? 直接上答案,.ssh/conf…...
C++ union用法
在C中,union是一种特殊的数据类型,可以在同一个内存位置存储不同的数据类型。它的用法如下: 1. 声明union类型:使用关键字union加上union名称来声明一个union类型。 c union UnionName { dataType1 member1; dataType2 …...
JavaSE_运算符 案例分析
/*符号在字符串中的操作: 表示连接,会将其他内容和字符串连接在一起,形成一个字符串目标:理解符号在字符串中的作用会将其他内容和字符串连接在一起,形成一个字符串*/ public class Operator03 {public static void main(String[] args) {System.out.println("5 5 "…...
15、Spring Cloud Alibaba Sentinel实现熔断与限流
注:本篇文章主要参考周阳老师讲解的cloud进行整理的! 1、Sentinel 1.1、官网 https://sentinelguard.io/zh-cn/ 等价对标 Spring Cloud Circuit Breaker 1.2、是什么 https://github.com/alibaba/Sentinel/wiki 1.3、去哪下 https://github.com/alibab…...
Linux logout命令教程:如何安全地退出Linux会话(附实例详解和注意事项)
Linux logout命令介绍 logout命令用于退出当前的登录Shell。这个命令可以被普通用户用来结束他们自己的会话。 Linux logout命令适用的Linux版本 logout命令在所有主流的Linux发行版中都是可用的,包括但不限于Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、R…...
数据结构——顺序表(C语言版)
顺序表是数据结构中最基本的一种线性表,它以一段连续的存储空间来存储数据元素,元素之间的顺序由它们在内存中的位置来决定。在C语言中,我们通常使用数组来实现顺序表。 目录 顺序表的结构定义 顺序表的基本操作 应用实例 顺序表的结构定义…...
Knative 助力 XTransfer 加速应用云原生 Serverless 化
作者:元毅 公司介绍 XTransfer 是一站式外贸企业跨境金融和风控服务公司,致力于帮助中小微企业大幅降低全球展业的门槛和成本,提升全球竞争力。公司连续7年专注 B2B 外贸金融服务,已成为中国 B2B 外贸金融第一平台,目…...
服务器离线配置vscode连接,conda虚拟环境
记录一下服务器离线配置问题,以备不时之需。 服务器离线配置 vscode连接参考:vscode-server离线安装-CSDN博客 服务器离线配置conda虚拟环境:Conda 环境离线迁移(服务器断网情况下搭建虚拟环境envs) - 知乎 上次两个…...
各种需要使用的方法-->vue/微信小程序/layui
各种需要使用的方法-->vue/微信小程序/layui 1、vue里样式不起作用的方法,可以通过deep穿透的方式2、 js获取本周、上周、本月、上月日期3、ArrayBuffer Blob 格式转换ArrayBuffer与Blob的区别ArrayBuffer转BlobBlob转ArrayBuffer需要借助fileReader对象 4、使用…...
360奇酷刷机 360刷机助手 QGDP360手机QGDP刷机
360奇酷刷机 360刷机助手 QGDP破解版360手机QGDP刷机 360手机刷机资源下载链接:360rom.github.io 参考:360手机-360刷机360刷机包twrp、root 360奇酷刷机:360高通驱动安装 360手机刷机驱动;手机内置,可通过USB文件传输…...
2299. 强密码检验器 II
文章目录 题意思路代码 题意 题目链接 判断是否合法密码 思路 if 代码 class Solution { public:bool strongPasswordCheckerII(string password) {if (password.size() < 8)return false;int visit 0;for (size_t i 0; i < password.size(); i){char &ch pa…...
跟着cherno手搓游戏引擎【29】Batch简单合批
思路: CPU和GPU都开辟同样大小的一大块内存(为了存储顶点信息) 索引在程序运行时生成对应规则后绑定到索引缓冲中 动态生成顶点信息(现在改成Drawquad只是确定图形顶点的位置) 然后在Endscene,将CPU的动…...
粘包/半包及解决方案
一、粘包/半包介绍 1:粘包 粘包(Packet Concatenation)通常发生在基于流式传输协议(如 TCP)的通信中,因为 TCP 是面向流的传输协议,它不保证数据包的边界,而是将数据视为连续的字节…...
2024华为软件精英挑战赛记录
前言 本次主要是记录自己第一次参加华为软件挑战赛的经历。第一次参加比赛还是缺少经验,训练赛中拿到赛区的20多名,最后在正式赛中被反超了,只拿了40多名,实在是感到可惜。 题目:本次题目是一个智慧港口的问题。10个机…...
数据可视化艺术:Matplotlib与Seaborn实战
目录 1.Matplotlib基础绘图与定制化 1.1. 基础绘图 1.2. 定制化 2.Seaborn高级图表类型与样式设定 2.1. 高级图表类型 2.2. 样式设定 3.实战:绘制多维度数据可视化报告 4.总结 1. 前言 在数据科学领域,数据可视化扮演着至关重要的角色。通过图形化…...
python初级第一次作业
一、 dayint(input("enter today day")) fdayint(input("enter num of day since today")) c((fday%7)day)%7 if c0:print("sunday") elif c1:print("monday") elif c2:print("tuesday") elif c3:print("wendnsday&quo…...
Spring Boot整合Camunda打造高效工作流程
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇&#x…...
2.8、下拉刷新与上拉加载
页面的下拉刷新与上拉加载功能在移动应用中十分常见,例如,新闻页面的内容刷新和加载。这两种操作的原理都是通过响应用户的触摸事件,在顶部或者底部显示一个刷新或加载视图,完成后再将此视图隐藏。 实现思路 以下拉刷新为例,其实现主要分成三步: 监听手指按下事件,记录…...
java Web餐馆订单管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
一、源码特点 JSP 餐馆订单管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
