SpringCloudEureka理论与入门

文章目录

  • 1. 前置工作
    • 1.1 搭建 user-server
      • 1.1.1 pom
      • 1.1.2 po,mapper,controller
      • 1.1.3 yml
      • 1.1.4 启动类
      • 1.1.5 启动并访问
    • 1.2 搭建 order-server
      • 1.2.1 pom
      • 1.2.2 po mapper controller
      • 1.2.3 yml
      • 1.2.4 启动类
      • 1.2.5 启动并访问
    • 1.3 两个服务通信
  • 2. Eureka
    • 2.1 Eureka 概述
    • 2.2 搭建 Eureka
      • 2.2.1 pom
      • 2.2.2 yml
      • 2.2.3 启动类
      • 2.2.4 启动访问
    • 2.3 将服务注册进 Eureka
    • 2.4 通过Eureka调用服务
  • 3. Eureka 原理
  • 4. 注意



在这里插入图片描述


1. 前置工作

先准备两个能独立跑起来的微服务(user-server 和 order-server)

将 所需 SQL 导入

/*Navicat Premium Data TransferSource Server         : CentOS7Source Server Type    : MySQLSource Schema         : cloudTarget Server Type    : MySQLDate: 28/05/2023 10:19:17
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for tb_order
-- ----------------------------
DROP TABLE IF EXISTS `tb_order`;
CREATE TABLE `tb_order`  (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单id',`user_id` bigint(20) NOT NULL COMMENT '用户id',`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品名称',`price` bigint(20) NOT NULL COMMENT '商品价格',`num` int(10) DEFAULT 0 COMMENT '商品数量',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `username`(`name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 109 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of tb_order
-- ----------------------------
INSERT INTO `tb_order` VALUES (101, 1, 'Apple 苹果 iPhone 12 ', 699900, 1);
INSERT INTO `tb_order` VALUES (102, 2, '雅迪 yadea 新国标电动车', 209900, 1);
INSERT INTO `tb_order` VALUES (103, 3, '骆驼(CAMEL)休闲运动鞋女', 43900, 1);
INSERT INTO `tb_order` VALUES (104, 4, '小米10 双模5G 骁龙865', 359900, 1);
INSERT INTO `tb_order` VALUES (105, 5, 'OPPO Reno3 Pro 双模5G 视频双防抖', 299900, 1);
INSERT INTO `tb_order` VALUES (106, 6, '美的(Midea) 新能效 冷静星II ', 544900, 1);
INSERT INTO `tb_order` VALUES (107, 2, '西昊/SIHOO 人体工学电脑椅子', 79900, 1);
INSERT INTO `tb_order` VALUES (108, 3, '梵班(FAMDBANN)休闲男鞋', 31900, 1);-- ----------------------------
-- Table structure for tb_user
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user`  (`id` bigint(20) NOT NULL AUTO_INCREMENT,`username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '收件人',`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 109 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES (1, '宋祖儿', '北京市朝阳区');
INSERT INTO `tb_user` VALUES (2, '景甜', '陕西省西安市');
INSERT INTO `tb_user` VALUES (3, '李现', '湖北省十堰市');
INSERT INTO `tb_user` VALUES (4, '郭德纲', '天津市');
INSERT INTO `tb_user` VALUES (5, '王思聪', '辽宁省沈阳市');
INSERT INTO `tb_user` VALUES (6, '刘亦菲', '湖北省武汉市');SET FOREIGN_KEY_CHECKS = 1;

1.1 搭建 user-server


在这里插入图片描述


1.1.1 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.9.RELEASE</version><relativePath/></parent><groupId>com.snow</groupId><artifactId>cloud_user</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><servlet.version>3.1.0</servlet.version><druid.version>1.1.20</druid.version><mybatisplus.version>3.4.1</mybatisplus.version><mysql.version>5.1.6</mysql.version><commons.lang.version>3.7</commons.lang.version><commons.codec.version>1.10</commons.codec.version><fastjson.version>1.2.45</fastjson.version><lombok.version>1.18.4</lombok.version><!-- SpringCloud版本号 --><spring-cloud.version>Hoxton.SR10</spring-cloud.version></properties><!-- 版本锁定: 并不是jar包导入 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><!-- 打包方式为pom: 说明我们导入的是一个父工程 --><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus.version}</version><exclusions><exclusion><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId></exclusion></exclusions></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><!-- 阿里JSON解析器 --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.16</version></dependency></dependencies></project>

1.1.2 po,mapper,controller

@Data
@TableName("tb_user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private String address;
}
@Mapper
public interface UserMapper extends BaseMapper<User> {}
@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate UserMapper userMapper;@GetMapping("/get/{id}")public User get(@PathVariable("id") Long id){return userMapper.selectById(id);}
}

1.1.3 yml

server:port: 8081
spring:datasource:url: jdbc:mysql://192.168.0.108:3306/cloud?useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver

1.1.4 启动类

@SpringBootApplication
public class UserServerApplication {public static void main(String[] args) {SpringApplication.run(UserServerApplication.class, args);}
}

1.1.5 启动并访问

效果如下


在这里插入图片描述


1.2 搭建 order-server

1.2.1 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.9.RELEASE</version><relativePath/></parent><groupId>com.snow</groupId><artifactId>cloud_order</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><servlet.version>3.1.0</servlet.version><druid.version>1.1.20</druid.version><mybatisplus.version>3.4.1</mybatisplus.version><mysql.version>5.1.6</mysql.version><commons.lang.version>3.7</commons.lang.version><commons.codec.version>1.10</commons.codec.version><fastjson.version>1.2.45</fastjson.version><lombok.version>1.18.4</lombok.version><!-- SpringCloud版本号 --><spring-cloud.version>Hoxton.SR10</spring-cloud.version></properties><!-- 版本锁定: 并不是jar包导入 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><!-- 打包方式为pom: 说明我们导入的是一个父工程 --><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus.version}</version><exclusions><exclusion><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId></exclusion></exclusions></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><!-- 阿里JSON解析器 --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.16</version></dependency></dependencies></project>

1.2.2 po mapper controller

@Data
@TableName("tb_order")
public class Order {@TableId(type = IdType.AUTO)private Long id;private Long price;private String name;private Integer num;private Long userId;@TableField(exist = false)private User user;
}
@Data
public class User {private Long id;private String username;private String address;
}
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
}
@RestController
@RequestMapping("/order")
public class OrderController {@Resourceprivate OrderMapper orderMapper;@GetMapping("/get/{id}")public Order get(@PathVariable("id") Long id){Order order = orderMapper.selectById(id);return order;}
}

1.2.3 yml

server:port: 9091
spring:datasource:url: jdbc:mysql://192.168.0.108:3306/cloud?useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver

1.2.4 启动类

@SpringBootApplication
public class OrderServerApplication {public static void main(String[] args) {SpringApplication.run(OrderServerApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}

1.2.5 启动并访问

效果如下


在这里插入图片描述


至此 两个独立的微服务就顺利的跑起来了。

1.3 两个服务通信

上面的两个独立服务已经跑起来了,因为上来看呢, 可以看到我们的 order服务是需要调用 user 服务的。如下图


在这里插入图片描述

可以看到我们的 order信息里的 user 是为null,因为我们还没有去调用 user 服务。
下来我们在 order服务里调用 user 服务。

改造 order 服务的 OrderController:

@RestController
@RequestMapping("/order")
public class OrderController {@Resourceprivate OrderMapper orderMapper;@Resourceprivate RestTemplate restTemplate;@GetMapping("/get/{id}")public Order get(@PathVariable("id") Long id){String url = "http://localhost:8081/user/get/";Order order = orderMapper.selectById(id);User user = restTemplate.getForObject(url + order.getUserId(), User.class);order.setUser(user);return order;}
}

启动,访问


在这里插入图片描述

可以看到 order 里有 user 的数据了 !OK!


2. Eureka


2.1 Eureka 概述


Eureka 是 Netflix 提供的基于 REST 的服务发现组件,用于帮助开发者管理微服务架构中的服务实例。它提供了一个可伸缩的注册中心,可以让每个微服务都能够找到其他微服务的位置和元数据信息,并对其进行负载均衡、自动故障转移等操作。

通过将 Eureka Server 部署在中心服务器上,然后将各个微服务节点(即Eureka Client)注册到该中心服务器上,便可以实现微服务间的快速查找和调用。

在这里插入图片描述

使用Eureka能够方便地扩展和部署大规模微服务应用程序,并让你更容易地维护和监控整个系统。

同时,由于Eureka本身是基于REST接口设计的,因此它能够与多种编程语言和框架无缝集成,可以让开发者像使用本地服务一样轻松地编写分布式应用程序。

2.2 搭建 Eureka

2.2.1 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.9.RELEASE</version></parent><artifactId>eureka-service</artifactId><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><!-- SpringCloud版本号 --><spring-cloud.version>Hoxton.SR10</spring-cloud.version></properties><!-- 版本锁定: 并不是jar包导入 --><dependencyManagement><dependencies><!-- todo:2.导入springCloud父工程 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><!-- 打包方式为pom: 说明我们导入的是一个父工程 --><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies><build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2.2.2 yml

server:port: 10086
spring:application:name: eureka-server
eureka:# 给内置的客户端设置服务端地址client:service-url:defaultZone: http://127.0.0.1:10086/eurekaregister-with-eureka: false # 不注册自己fetch-registry: false #不拉取服务本eureka服务中的服务信息

2.2.3 启动类

@SpringBootApplication
// 开启Eureka服务端支持
@EnableEurekaServer
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}}

2.2.4 启动访问

在这里插入图片描述



2.3 将服务注册进 Eureka

给user服务和order服务分别引入依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

修改 user 和 order 的 yml 文件

server:port: 8081spring:datasource:url: jdbc:mysql://192.168.0.108:3306/cloud?useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverapplication:name: USER-SERVEReureka:client:service-url:defaultZone: http://127.0.0.1:10086/eurekainstance: # 在Eureka中显示服务的ip地址ip-address: 127.0.0.1 # 配置服务器ip地址prefer-ip-address: true # 更倾向于使用ip,而不是host名instance-id: ${eureka.instance.ip-address}:${server.port} # 自定义实例的id
server:port: 9091
spring:datasource:url: jdbc:mysql://192.168.0.108:3306/cloud?useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverapplication:name: ORDER-SERVEReureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka

重启服务。


在这里插入图片描述

服务就已注册进来了。


2.4 通过Eureka调用服务

回看我们之前 order 调用 user 时候的方式是直接通过 RestTemplate 调用的,这样耦合是有些大的,比如我们的 user 服务换了部署地址,就得去动 order 的源代码。实在不妥。
在这里插入图片描述

下来我们通过 Eureka 提供的注册发现服务去调用。

改造OrderController

 @GetMapping("/get/{id}")public Order get(@PathVariable("id") Long id){String user_server_name = "USER-SERVER";String url = "http://" + user_server_name + "/user/get/";Order order = orderMapper.selectById(id);User user = restTemplate.getForObject(url + order.getUserId(), User.class);order.setUser(user);return order;}

启动访问:


在这里插入图片描述


3. Eureka 原理


Eureka 采用了客户端-服务端的设计架构,分为 Eureka Server 和 Eureka Client 两部分。

在这里插入图片描述

Eureka Server 是一个基于 RESTful 的服务,用于管理和维护客户端节点的信息。每个 Eureka Client 向 Eureka Server 注册自己提供的服务,并定时通过心跳机制告知 Eureka Server 自己仍然存活。同时,Eureka Server 也会定期对注册在自己那里的每个 Eureka Client 进行监控,以确保它们正常运行。

Eureka Client 则是一个轻量级的 Java 客户端,用于将自己注册到 Eureka Server 并获取所依赖服务的信息。他们使用轮询来访问 Eureka Server 来达到负载均衡的目的。 另外,它还会缓存 Eureka Server 中的服务列表信息,当服务端不能访问时可以快速切换到本地缓存服务列表模式,尽可能降低系统的开销。
在这里插入图片描述

具体流程如下

Eureka Client 启动后,会向 Eureka Server 发送一个注册请求,包含了该客户端所提供的服务实例、IP 地址、端口号等元数据。
Eureka Server 接收到注册请求后,会将该客户端所提供的服务实例信息记录到自身的内存中,同时将变更信息广播给其他的 Eureka Server 节点,以实现服务注册中心的高可用和服务同步。

Eureka Client 通过 “心跳” 机制定期向 Eureka Server 发送请求,以更新服务健康状态、刷新缓存等操作。如果在一定时间内 Eureka Server 没有接收到“心跳”消息,则会将该客户端实例从注册列表中摘除。
Eureka Client 还可以通过发送 RESTful API 请求来查询可用的服务节点信息,以实现负载均衡等功能。

Eureka 的核心对象是服务实例,每个服务实例都可以作为提供者向 Eureka Server 注册自己,同时也可以作为消费者从 Eureka Server 中获取所需服务的信息,从而实现服务发现和调用。


4. 注意


Eurek 已经停止维护 2.x 版本!



在这里插入图片描述

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

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

相关文章

【Swing】Java Swing实现省市区选择编辑器

【Swing】Java Swing实现省市区选择编辑器 1.需求描述2.需求实现3.效果展示 系统&#xff1a;Win10 JDK&#xff1a;1.8.0_351 IDEA&#xff1a;2022.3.3 1.需求描述 在公司的一个 Swing 的项目上需要实现一个选择省市区的编辑器&#xff0c;这还是第一次做这种编辑器&#xf…

开源办公系统CRM管理系统

基于ThinkPHP6 Layui MySQL的企业办公系统。集成系统设置、人事管理、消息管理、审批管理、日常办公、客户管理、合同管理、项目管理、财务管理、电销接口集成、在线签章等模块。系统简约&#xff0c;易于功能扩展&#xff0c;方便二次开发。 服务器运行环境要求 PHP > 7.…

Mybatis Plus + Spring 分包配置 ClickHouse 和 Mysql 双数据源

目录 一、背景 二、各个配置文件总览&#xff08;文件位置因人而异&#xff09; 2.1 DataSourceConfig 2.2 MybatisClickHouseConfig &#xff08;ClickHouse 配置类&#xff09; 2.3 MybatisMysqlConfig&#xff08;Mysql 配置类&#xff09; 2.4 application.propertie…

《安富莱嵌入式周报》第334期:开源SEM扫描电子显微镜,自制编辑器并搭建嵌入式环境,免费产品设计审查服务,实用电子技术入门,USB资料汇总,UDS统一诊断

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1om411Z714/ 《安富莱嵌入式周报》第334期&#xff1a;开源SEM…

ABCDE联合创始人和普通合伙人BMAN确认出席Hack .Summit() 2024

ABCDE联合创始人和普通合伙人BMAN确认出席Hack .Summit() 2024&#xff01; ABCDE联合创始人和普通合伙人BMAN确认出席由 Hack VC 主办&#xff0c;并由 AltLayer 和 Berachain 联合主办&#xff0c;与 SNZ 和数码港合作&#xff0c;由 Techub News 承办的Hack.Summit() 2024区…

【Paper Reading】6.RLHF-V 提出用RLHF的1.4k的数据微调显著降低MLLM的虚幻问题

分类 内容 论文题目 RLHF-V: Towards Trustworthy MLLMs via Behavior Alignment from Fine-grained Correctional Human Feedback 作者 作者团队&#xff1a;由来自清华大学和新加坡国立大学的研究者组成&#xff0c;包括Tianyu Yu, Yuan Yao, Haoye Zhang, Taiwen He, Y…

VB播放器(动态服务器获取歌词)-183-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword183 VBASP vb动态从服务器读取歌词 VB asp交互 程序, 模式不一样, 与普通的MP3播放器不一样, 这个是可以实现歌词从服务器上查询功能的. 看好了在咨询 我可以給您演示 目  录 前  言 1 1 . 简述 2 1.1 开发…

阿里云国际DDoS高防接入配置最佳实践

业务接入DDoS高防产品后&#xff0c;可以将攻击流量引流到DDoS高防&#xff0c;有效避免业务在遭受大流量DDoS攻击时出现服务不可用的情况&#xff0c;确保源站服务器的稳定可靠。本文九河云的接入配置和防护策略最佳实践&#xff0c;在各类场景中使用DDoS高防更好地保护您的业…

Linux系统下基于VSCode和Cmake进行C++开发

目录 简介一、GCC编译器1.1创建cpp文件1.2编译过程1.3g重要编译参数 二、GDB调试器三、IDE-VScode3.1 VSCode常用快捷键3.2 swap测试 四、CMake4.1CMake介绍4.2 CMake语法特性介绍4.3 CMake重要指令和常用变量4.4 CMake编译流程4.5CMake代码实践 五、使用VSCode进行完整项目开发…

【JavaScript】面试手撕柯里化函数

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 引入柯里化定义实现快速使用柯里化的作用提高自由度bind函数 参考资料 引入 上周…

开源绘图工具 PlantUML 入门教程(常用于画类图、用例图、时序图等)

文章目录 一、类图二、用例图三、时序图 一、类图 类的UML图示 startuml skinparam classAttributeIconSize 0 class Dummy {-field1 : String#field2 : int~method1() : Stringmethod2() : void } enduml定义能见度&#xff08;可访问性&#xff09; startumlclass Dummy {-f…

ES6(一):let和const、模板字符串、函数默认值、剩余参数、扩展运算符、箭头函数

一、let和const声明变量 1.let没有变量提升&#xff0c;把let放下面打印不出来&#xff0c;放上面可以 <script>console.log(a);let a1;</script> 2.let是一个块级作用域,花括号里面声明的变量外面找不到 <script>console.log(b);if(true){let b1;}//und…

vscode插件开发-发布插件

安装vsce vsce是“Visual Studio Code Extensions”的缩写&#xff0c;是一个用于打包、发布和管理VS Code扩展的命令行工具。 确保您安装了Node.js。然后运行&#xff1a; npm install -g vscode/vsce 您可以使用vsce轻松打包和发布扩展&#xff1a; // 打包插件生成name…

一.java介绍和idea基础使用

java技术体系 Java技术体系说明Java SE(Java standard Edition):标准版Java技术的核心和基础Java EE(Java Enterprise Edition):企业版企业级应用开发的一套解决方案Java ME(Java Micro Edition):小型版针对移动设备应用的解决方案&#xff08;认可少&#xff0c;主要是安卓和…

目标跟踪SORT算法原理浅析

SORT算法 Simple Online and Realtime Tracking(SORT)是一个非常简单、有效、实用的多目标跟踪算法。在SORT中&#xff0c;仅仅通过IOU来进行匹配虽然速度非常快&#xff0c;但是ID switch依然非常严重。 SORT最大特点是基于Faster RCNN的目标检测方法&#xff0c;并利用卡尔…

Unity开发中Partial 详细使用案例

文章目录 **1. 分割大型类****2. 与 Unity 自动生成代码协同工作****3. 团队协作****4. 共享通用逻辑****5. 自定义编辑器相关代码****6. 配合 Unity 的 ScriptableObjects 使用****7. 多人协作与版本控制系统友好** 在 Unity 开发中&#xff0c; partial 关键字是 C# 语言提供…

【音视频开发】:RTSP服务器协议内容

一、什么是RTSP协议 RTSP是一个实时传输流协议&#xff0c;是一个应用层的协议。通常说的RTSP包括RTSP协议、RTP协议、RTCP协议。 RTSP协议&#xff1a;负责服务器与客户端之间的请求与相应RTP协议 &#xff1a;负责服务器与客户端之间传输媒体数据RTCP协议&#xff1a;负责提…

使用html+css制作一个发光立方体特效

使用htmlcss制作一个发光立方体特效 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Documen…

Acwing.4261 孤独的照片(贡献法)

题目 Farmer John 最近购入了 N 头新的奶牛&#xff0c;每头奶牛的品种是更赛牛&#xff08;Guernsey&#xff09;或荷斯坦牛&#xff08;Holstein&#xff09;之一。 奶牛目前排成一排&#xff0c;Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而&…

视觉信息处理与FPGA实现第三次作业-7人表决器

一、模块端口图 二、代码 timescale 1ns / 1nsmodule vote_7(person1,person2,person3,person4,person5,person6,person7,out); input person1,person2,person3,person4,person5,person6,person7 ; output out ; assi…