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

SpringCloud和Nacos的基础知识和使用

1.什么是SpringCloud

​ 什么是微服务?

​ 假如我们需要搭建一个网上购物系统,那么我们需要哪些功能呢?商品中心、订单中心和客户中心等。

​ 当业务功能较少时,我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随着业务越来越多,每个模块需要实现的功能越来越多时,每个模块需要的开发人员就越来越多,这时如果再是一个项目就不太合适了(耦合度太高,并且开发人员对同一个项目进行操作容易出现问题)。这就需要将原先的系统进行拆分,可以按照功能模块拆分成多个服务,这就引出了另一个问题,服务之间如何完成通信。

​ 在实际的业务场景中,每个功能模块不可能是完全分离的,例如订单中心展示订单时可能需要获取商品的信息和客户的信息,这就需要调用商品中心模块和客户中心模块的接口。SpringCloud就支持我们将原有项目进行拆分,分成多个微服务,并支持微服务之间的通信。

1.1 SpringCloud简介

​ SpringCloud由五大组件构成:

1.注册中心Euraka(国内用的较多的是Nacos):负责服务注册和发现。
2.负载均衡Ribbon:负责服务实例的选择(同一个服务可能部署在多个服务器上)。
3.远程调用Feign:通过HTTP请求调用其他服务的接口。
4.熔断器Hystrix:容错管理工具,用于处理分布式系统中的延迟和故障。
5.API网关Zuul:用于路由、过滤和负载均衡。

​ 这五大组件的工作流程如下(绕不开的八股):

1.服务注册:只有一个服务注册到注册中心,才可能被其他服务发现并调用;
2.服务发现:即一个服务通过注册中心发现了其他服务
3.负载均衡:客户端维护一份从注册中心获取的Provider列表清单,根据自己配置的Provider负载均衡选择算法在客户端进行请求的分发;
4.服务调用:一个服务对另一个服务进行调用;
5.隔离、熔断与降级:通过Hystrix的线程池去访问服务,不同的服务通过不同的线程池,实现了不同的服务调度隔离;如果服务出现故障,通过服务熔断,避免服务雪崩的问题 ;并且通过服务降级,保证可以手动实现服务正常功能;
6.网关路由:如果前端调用后台系统,统一从网关进入,通过网关转发请求给对应的服务;

在这里插入图片描述

1.2 Eureka

​ 服务注册中心(Eureka server/Nacos server)像是整个微服务架构中的大脑,服务(Eureka client)需要注册到Eureka server以供其他服务(Eureka client)发现,如果要使用其他服务的功能也需要通过Eureka server来获得对应服务(Eureka client)的信息。

​ Eureka server的主要功能为服务注册表维护服务健康检查,Eureka client的主要功能为服务注册心跳续约健康状况查询。(是不是觉得很熟悉,有点像Redis的哨兵机制)

在这里插入图片描述

1.3 Ribbon

​ 在实际的生产环境中,某些模块访问量较高,单个服务器可能无法承载这些访问请求,需要将这个微服务同时部署到多台服务器上,当有服务请求打到Eureka server上时,Eureka server会返回该服务类型对应的所有Eureka client实例。因此客户端会获得多个服务实例,Ribbon会选择哪个实例去处理请求,选择的方式有多种,轮询、随机、权重等,主要目的是避免多次请求均打到同一个服务实例上。Ribbon的作用是负载均衡。

​ Ribbon可以获取Provider清单,并且通过IPing实例定期(如每10秒)向每个Provider实例发送“ping”,并且根据Provider是否有响应来判断该Provider实例是否可用。如果该Provider的可用性发生了改变,或者Provider清单中的数量和之前的不一致,就从注册中心更新或者重新拉取Provider服务实例清单。每次RPC请求到来时,由Ribbon的IRule负载均衡策略接口的某个实现类来进行负载均衡。

1.4 Feign

​ 在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问 HTTP 请求。Feign 整合了 Ribbon 和 Hystrix,具备负载均衡、隔离、熔断与降级功能。

1.5 Zuul

​ 微服务网关是微服务架构中不可或缺的部分,它统一解决Provider路由、均衡负载、权限控制等功能。具体可以参考博客:https://blog.csdn.net/itigoitie/article/details/125895899?spm=1001.2014.3001.5502

1.6 Hystrix

​ 隔离:通过Hystrix的线程池去访问服务,不同的服务通过不同的线程池,实现了不同的服务调度隔离;
​ 熔断:分布式架构中的熔断器主要用于RPC接口上,为接口安装上“保险丝”,以防止RPC接口出现拥塞时导致系统压力过大而引起的系统瘫痪,当RPC接口流量过大或者目标Provider出现异常时,熔断器及时切断故障可以起到自我保护的作用。
​ 降级:当服务不可用(服务正在等待、链接超时、网络延迟、服务器响应慢等),客户端一直等待时,调用fallback方法给客户端返回一个错误提示,不让客户端继续等待。

2.Nacos

​ Nacos是阿里的产品,它的功能要比Eureka更丰富,因此国内更倾向于使用Nacos,我们来简单介绍一下Nacos的安装和使用。

2.1 Nacos安装

​ Nacos官网:https://nacos.io/

在这里插入图片描述

在这里插入图片描述

​ 将压缩包下载到本地并解压(避免中文路径),进入到bin目录:

在这里插入图片描述

​ 接着在bin目录下打开cmd,输入如下命令来启动Nacos:

startup.cmd -m standalone

在这里插入图片描述

​ 在浏览器中打开:http://192.168.239.1:8848/nacos/index.html

在这里插入图片描述

​ 至此,Nacos安装就完成了,其实还挺简单的,接下来我们需要借助Nacos去搭建一个SpringCloud项目,下面将介绍如何单机搭建一个SpringCloud项目。

2.2 Nacos简单实践

2.2.1 IDEA搭建SpringCloud项目

2.2.1.1 数据库准备
CREATE TABLE USER (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
phone VARCHAR(15) NOT NULL,
address VARCHAR(50) NOT NULL
);INSERT INTO USER VALUES (1, "ayanokoujimonki", 13299075426, "湖北省孝感市")
INSERT INTO USER(NAME, phone, address) VALUES ("二哈很六", 18834267011, "江苏省苏州市")
INSERT INTO USER(NAME, phone, address) VALUES ("陈大龟", 12481076533, "汉川市榔头村")
CREATE TABLE orders (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) NOT NULL,
price INT NOT NULL,
user_id INT NOT NULL REFERENCES USER(id)
)INSERT INTO orders VALUES (1, "可乐鸡翅", 32, 1);
INSERT INTO orders(NAME, price, user_id) VALUES("冰镇啤酒", 12, 1);
INSERT INTO orders(NAME, price, user_id) VALUES("草莓冰激凌", 8, 2);
INSERT INTO orders(NAME, price, user_id) VALUES("狼牙土豆", 10, 3);
2.2.1.2 创建父项目

​ 1.首先创建父项目:

在这里插入图片描述

​ 2.选择Spring Web依赖:

在这里插入图片描述

​ 3.等到依赖下载好后,删除src目录及mvnw目录,正常情况下一般不会直接在父项目下直接编写代码:

在这里插入图片描述

​ 4.修改pom文件,添加packaging标签和SpringCloud版本,并修改SpringBoot版本:

在这里插入图片描述

​ 5.引入mysql和mybatis依赖:

在这里插入图片描述

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version>
</dependency>
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>

​ 6.添加SpringCloud依赖库,后续子模块使用的时候就不需要再指定版本了

在这里插入图片描述

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.9.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>
2.2.1.3 创建子项目
	1.在父级项目上新建模块(user_client),并修改子项目的pom文件引入父项目的坐标

在这里插入图片描述

在这里插入图片描述

​ 2.为了将子项目作为Nacos的client,需要引入如下依赖:

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

在这里插入图片描述

​ 3.编写application.yml文件

在这里插入图片描述

#服务端口,随便起
server:port: 8082
#服务名称
spring:application:name: userclientdatasource:url: jdbc:mysql://localhost:3306/userusername: rootpassword: cmq123driver-class-name: com.mysql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: localhost:8848

​ 4.同样的步骤创建另一个子项目(orders_client)

在这里插入图片描述

2.2.1.5 编写简单的业务代码

​ 其实这时我们启动服务就可以看到服务注册到Nacos上了,只不过我们没有编写业务代码因此每个微服务不具备具体功能,为了将我们的服务能够被Nacos发现,需要在启动类上加上@EnableDiscoveryClient注解:

在这里插入图片描述

​ 浏览器中打开Nacos地址就可以看到我们注册的实例了:http://192.168.239.1:8848/nacos/index.html

在这里插入图片描述

​ 为了进一步验证服务之间能够通信,我们编写简单的业务代码,首先是userclient,我们编写pojo、controller、service和mapper:

在这里插入图片描述

​ 其中UserService代码如下:

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User findById(Integer id){System.out.println("UserService: "+ id);return userMapper.find(id);}
}

UserController代码如下:

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User findUserById(@PathVariable("id") Integer id){return userService.findById(id);}}

UserMapper代码如下:

@Mapper
public interface UserMapper {@Select("select * from user where id=#{id}")User find(Integer id);
}

User代码如下:

public class User {private int id;private String name;private String password;private String address;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +", address='" + address + '\'' +'}';}
}

​ 同理我们继续编写ordersclient的代码,项目结构保持相同:

在这里插入图片描述

User代码于userclient保持一致,Order代码如下:

public class Order {private int id;private String name;private int price;private int userId;private User user;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic String toString() {return "Order{" +"id=" + id +", name='" + name + '\'' +", price=" + price +", userId=" + userId +", user=" + user +'}';}
}

OrderMapper代码如下:

@Mapper
public interface OrderMapper {@Select("select * from orders where id= #{id}")Order find(Integer id);
}

OrderService代码如下:

@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public Order findById(Integer id){Order order = orderMapper.find(id);String url = "http://userclient/user/" + order.getUserId();User user = restTemplate.getForObject(url, User.class);order.setUser(user);return order;}}

OrderController代码如下:

@RestController
@RequestMapping("/order")
public class OrderController {@Autowiredprivate OrderService orderService;@GetMapping("/{id}")public Order findById(@PathVariable("id") Integer id){Order byId = orderService.findById(id);return byId;}
}

​ 启动类代码如下:

@EnableDiscoveryClient
@SpringBootApplication
public class OrdersClientApplication {public static void main(String[] args) {SpringApplication.run(OrdersClientApplication.class, args);}/**** 定义一个RestTemplate Bean,用于发送HTTP请求* @return*/@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}

​ 为了将我们实体类和数据库中的字段对应,我们需要在application.yml文件中开启驼峰命名:

mybatis:type-aliases-package: com.ayanokouji.ordersclient.pojo.Orderconfiguration:map-underscore-to-camel-case: true

​ 我们再次启动这两个client,并在浏览器输入:localhost:8083/order/1

在这里插入图片描述

​ 可以看到这两个服务确实完成了通信(虽然不是很优雅)。

​ 这就是一个极致简单的SpringCloud项目,可以看到代码中我们并未显示地使用负载均衡,通信也是使用RestTemplate而不是Feign,关于负载均衡和Feign会在后面的博客中介绍(如果有时间的话,最近公司的活也有点多)。

参考博客

Nacos 注册中心下载到搭建详细步骤【微服务】_nacos下载-CSDN博客

IDEA 搭建 SpringCloud 项目【超详细步骤】_idea创建springcloud工程-CSDN博客

Spring Cloud 五大组件_springcloud五大组件-CSDN博客

相关文章:

SpringCloud和Nacos的基础知识和使用

1.什么是SpringCloud ​ 什么是微服务&#xff1f; ​ 假如我们需要搭建一个网上购物系统&#xff0c;那么我们需要哪些功能呢&#xff1f;商品中心、订单中心和客户中心等。 ​ 当业务功能较少时&#xff0c;我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随…...

一行一行出字的视频怎么做?简单的操作方法

在视频制作中&#xff0c;逐行出现的字幕效果不仅能够增强视觉冲击力&#xff0c;还能让观众更加专注于内容&#xff0c;特别适合用于教育视频、书单推荐、诗歌朗诵等多种场景。下面&#xff0c;我们将详细介绍如何影忆&#xff0c;来制作这种逐行出字的视频效果。 1.字幕逐行…...

鸿蒙NEXT开发案例:颜文字搜索器

【引言】 本文将介绍一个名为“颜文字搜索器”的开发案例&#xff0c;该应用是基于鸿蒙NEXT平台构建的&#xff0c;旨在帮助用户快速查找和使用各种风格的表情符号。通过本案例的学习&#xff0c;读者可以了解如何在鸿蒙平台上进行数据处理、UI设计以及交互逻辑的实现。 【环…...

python在纯文本程序里面藏一张图

思路base64编码是纯文本的,base64是以字符串的形式存在,包括但不限于python,js,C#,C/Cpp. 这里给出python示例:运行后可以显示一张opencv的官方例程图. 废话不说,上程序. import os,sys,time,cv2,base64,requests from PIL import Image from io import BytesIO import nump…...

Java 身份证校验工具类(15位校验、18位校验与15转18)

文章目录 身份证简介&#xff08;一&#xff09;身份证号码的组成&#xff08;二&#xff09;一代和二代身份证一代身份证二代身份证 检验思路分析&#xff08;一&#xff09;15位身份证号码&#xff08;二&#xff09;18位身份证号码&#xff08;三&#xff09;校验算法示例&a…...

The Past, Present and Future of Apache Flink

摘要&#xff1a;本文整理自阿里云开源大数据负责人王峰&#xff08;莫问&#xff09;在 Flink Forward Asia 2024上海站主论坛开场的分享&#xff0c;今年正值Flink开源项目诞生的第10周年&#xff0c;借此时机&#xff0c;王峰回顾了Flink在过去10年的发展历程以及 Flink社区…...

不能通过 ip 直接访问 共享盘 解决方法

from base_config.config import OpenSMB, SMB import os, time, calendar, requests, decimal, platform, fs.smbfsinfo_dict SMB.EPDI_dict info_dict[host] (FS03,10.6.12.182) info_dict[direct_tcp] True# smb OpenSMB(info_dict)print(ok)# 根据 ip 查询电脑名 impor…...

IDEA方法注释模板设置

目录 创建模板 新建模板&#xff1a;命名为* 设置模板内容-IDEA格式模板 设置模板应用场景 设置参数 创建模板 /**Enter这里我们也按照这种习惯来设置IDEA的方法注释&#xff1a;File-->Settings-->Editor-->Live Templates 先新建模板组&#xff0c;然后在模板组中…...

组件缓存keep-alive

希望点击面经详情回来之后该1面经详情停留在滚动条停止的位置 有些 组件是不需要缓存的&#xff0c;例如详情页不需要缓存。解决方法是keep-alive的三个属性 include:组件名数组&#xff0c;只有匹配的组件会被缓存exclude:组件名数组&#xff0c;任何匹配的组件都不会被缓存ma…...

【经验分享】搭建本地训练环境知识点及方法

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…...

Ant Design of Vue之带select控件,单元格编辑功能的表格EditableCell组件

效果图 功能 表格里面某一行或者某一个单元格支持select复选框可以编辑&#xff0c;新增一行数据&#xff0c;删除一行数据&#xff0c;并且有校验规则 源码 editablecell组件源码 参考自 源码...

etcd节点扩/缩容

etcd集群节点数越多越好吗&#xff1f; etcd 集群是一个 Raft Group&#xff0c;没有 shared。所以它的极限有两部分&#xff0c;一是单机的容量限制&#xff0c;内存和磁盘&#xff1b;二是网络开销&#xff0c;每次 Raft 操作需要所有节点参与&#xff0c;每一次写操作需要集…...

FFmpeg功能使用

步骤&#xff1a;1&#xff0c;安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev&#xff1b;如下图 会跳到另外的下载界面&#xff1a; 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip&#xff1a; 即可下载到FFmpeg&#xff1b; 使用&#…...

动手学深度学习-线性神经网络-7softmax回归的简洁实现

目录 初始化模型参数 重新审视Softmax的实现 优化算法 训练 小结 在 线性回归的实现中&#xff0c; 我们发现通过深度学习框架的高级API能够使实现 线性回归变得更加容易。 同样&#xff0c;通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上一节…...

GenAI + 3D:开启4D场景重建的新纪元

近日,一项激动人心的研究成果在《GenAI + 3D》方向取得了重大进展,它提出了一种创新的方法,能够将普通的2D视频转换为完整的4D场景。想象一下,《黑客帝国》中的"子弹时间"效果——现在你不仅可以停留在一个特定的时刻来改变视角,还可以自由地在空间和时间中移动…...

记一个framebuffer显示混乱的低级错误

记一个framebuffer显示混乱的低级错误 由于framebuffer的基础知识不扎实&#xff0c;这个任务上我多卡了两天&#xff0c;差点把我搞死&#xff0c;于此记录为后鉴。 打算用awtk做一个多进程项目&#xff0c;计划把framebuffer的内容通过websocket输出到浏览器上去显示画面, …...

网络安全教学博客(二):常见网络安全威胁剖析

在上一篇博客中&#xff0c;我们了解了网络安全的基础概念和重要性。今天&#xff0c;让我们深入探讨一下常见的网络安全威胁&#xff0c;以便我们能够更好地识别和防范它们。 恶意软件&#xff08;Malware&#xff09; 病毒&#xff08;Virus&#xff09;&#xff1a;病毒是一…...

【ZYNQ开发】Vitis下保存与快速加载BSP配置的方法

在使用Xilinx的Vitis进行ZYNQ PS端开发时&#xff0c;常常涉及到对于BSP的设置&#xff0c;比较典型的像是使用lwip时&#xff0c;需要对DHCP、memory以及send_buffer等进行一些自定义的修改。在设计到硬件描述文件需要进行更换&#xff08;PL端更改程序&#xff09;重新加载工…...

go开发中interface和方法接收器的使用

Go 语言中的接口和方法接收器学习 Go 中的 interface 就像是一个神奇的魔法杖&#xff0c;能让你轻松地将不同的类型拉到同一个阵营里。与其他语言的接口不同&#xff0c;Go 的接口无需显式声明“我实现了你”&#xff0c;只要你满足了接口规定的方法&#xff0c;Go 就会自动认…...

【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系

起因&#xff1a; https://www.hiascend.com/document/detail/zh/Atlas%20200I%20A2/23.0.0/re/npu/npusmi_013.html npu-smi info -l查询所有NPU设备&#xff1a; [naienotebook-npu-bd130045-55bbffd786-lr6t8 DCNN]$ npu-smi info -lTotal Count : 1NPU…...

景联文科技提供高质量文本标注服务,驱动AI技术发展

文本标注是指在原始文本数据上添加标签的过程&#xff0c;这些标签可以用来指示特定的实体、关系、事件等信息&#xff0c;以帮助计算机理解和处理这些数据。 文本标注是自然语言处理&#xff08;NLP&#xff09;领域的一个重要环节&#xff0c;它通过为文本的不同部分提供具体…...

【Spark】Spark Join类型及Join实现方式

如果觉得这篇文章对您有帮助&#xff0c;别忘了点赞、分享或关注哦&#xff01;您的一点小小支持&#xff0c;不仅能帮助更多人找到有价值的内容&#xff0c;还能鼓励我持续分享更多精彩的技术文章。感谢您的支持&#xff0c;让我们一起在技术的世界中不断进步&#xff01; Sp…...

docker安装、升级、以及sudo dockerd --debug查看启动失败的问题

1、docker安装包tar下载地址 Index of linux/static/stable/x86_64/ 2、下载tgz文件并解压 tar -zxvf docker-24.0.8.tgz 解压后docker文件夹下位docker相关文件 3、将老版本docker相关文件&#xff0c;备份 将 /usr/bin/docker下docker相关的文件&#xff0c;mv到备份目录…...

做T和做T+0有什么区别

做T和做T0在股市中实际上有紧密的联系&#xff0c;但也有所区别。以下是对两者的详细比较&#xff1a; 一、定义与原理 做T&#xff1a; 广义上&#xff0c;做T指的是一种通过低买高卖或高卖低买来赚取差价的交易策略。这种策略可以应用于不同的交易周期&#xff0c;包括日内交…...

【JAVA项目】基于ssm的【美食推荐管理系统】

【JAVA项目】基于ssm的【美食推荐管理系统】 技术简介&#xff1a;采用JSP技术、B/S架构、SSM框架、MySQL技术等实现。 系统简介&#xff1a;美食推荐管理系统&#xff0c;在系统首页可以查看首页、热门美食、美食教程、美食店铺、美食社区、美食资讯、我的、跳转到后台等内容。…...

从零开始学docker(五)-可用的docker镜像

最近docker镜像都不能访问&#xff0c;目前亲测可用的docker镜像可用&#xff0c;并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表&#xff0c;只能手动查询索引目录&#xff08;解决方案在最后&#xff09;。 linux服务器vim打开镜像文件daemon.json vim /e…...

repmgr集群部署-PostgreSQL高可用保证

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…...

2020数字中国创新大赛-虎符网络安全赛道丨Web Writeup

本文是i春秋论坛作家「OPLV1H」表哥参加2020数字中国创新大赛-虎符网络安全赛道线上初赛的赛后总结&#xff0c;关于Web的Writeup记录&#xff0c;感兴趣的小伙伴快来学习吧。 1、hash_file — 是使用给定文件的内容生成哈希值&#xff0c;和文件名称无关。 2、jwt令牌结构和j…...

手动部署前后端项目到LInux上面

一&#xff1a;部署后端工程 在本地的idea中先启动当前的工程&#xff0c;然后访问一下&#xff0c;看看工程是否正常访问。 执行package指令&#xff0c;进行打包操作&#xff0c;将当前的springboot项目&#xff0c;打成一个jar包。 <!-- SpringBoot应用打包插件--> …...

【一本通】intervals

【一本通】intervals &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给出n个闭区间[ai,bi]和n个整数c1,……,cn。令Z表示一个整数集合&#xff0c;Z集合中最少要包含多少个整数可以使得每个区[ai,bi]都至少有ci个整数位于Z集合中。 输入 …...

测试脚本并发多进程:pytest-xdist用法

参考&#xff1a;https://www.cnblogs.com/poloyy/p/12694861.html pytest-xdist详解&#xff1a; https://www.cnblogs.com/poloyy/p/14708825.html 总 https://www.cnblogs.com/poloyy/category/1690628.html...

ALOHA 协议详解

注&#xff1a;本文为 “ALOHA 协议” 相关文章合辑。 未去重整理。 动态分配信道&#xff08;ALOHA 协议、CSMA 协议&#xff09; QuantumYou 于 2021-07-27 09:32:04 发布 ALOHA 协议 纯 ALOHA 协议 -纯 ALOHA 协议思想&#xff1a;不监听信道&#xff0c;不按时间槽发送…...

ios h5中在fixed元素中的input被focus时,键盘遮挡input (van-popup、van-feild)

问题描述&#xff1a; 前提&#xff1a;我使用的是vant组件库&#xff0c;其中一个页面中有一个van-popup组件&#xff0c;van-popup组件中又嵌套了一个van-field组件预期结果&#xff1a;当点击van-feild输入框时&#xff0c;键盘弹起&#xff0c;输入框显示在键盘上方实际结…...

【Mysql】索引下推、索引合并详解

文章目录 1. 索引下推&#xff08;Index Condition Pushdown, ICP&#xff09;定义工作机制实现过程优化的典型场景 2. 索引合并&#xff08;Index Merge&#xff09;定义索引合并方式使用限制 3. 对比与应用场景选用建议 这篇文章就简单的给大家介绍下索引下推、索引合并 1. 索…...

简易记事本项目—基于SSM+Vue前后端分离

&#x1f308;&#x1f308;&#x1f308;今天给大家分享的是&#xff1a;基于SSMVue的简易记事本项目 目录 引言 技术栈介绍 项目概述 1. 用户注册 2. 用户登录 3. 用户退出 4. 事件分类 5. 事件管理 项目主要图片 引言 在快节奏的现代生活中&#xff0c;我们常常被…...

Java转C之C/C++ 的调试和内存分析

C/C 的调试和内存分析工具非常丰富&#xff0c;这些工具可以帮助开发者定位错误、分析程序行为&#xff0c;以及检测内存问题&#xff08;如内存泄漏、非法访问等&#xff09;。下面将详细介绍常见的调试器和内存分析工具&#xff0c;并进行分类讲解。 一、调试器 1. GDB (GNU…...

Python 面向对象编程全面解析与深度探索

目录 类和对象的概念 类&#xff08;Class&#xff09; 对象&#xff08;Object&#xff09; (一&#xff09;属性&#xff08;Attributes&#xff09; &#xff08;a).实例属性&#xff08;Instance Attributes&#xff09; &#xff08;b).类属性&#xff08;Class Att…...

零配置打包工具 Parcel 的详细使用指南

前言 在前端开发中&#xff0c;选择一个高效且易用的打包工具至关重要。Parcel 作为一款零配置的 Web 应用打包工具&#xff0c;凭借其卓越的性能和简单的使用体验&#xff0c;赢得了众多开发者的青睐。它不仅能够自动处理依赖关系和代码打包&#xff0c;还支持热模块替换和多…...

批量查找文件关键字-工具

string find...

freeswitch(开启支持MCU视频会议,使用mod_av模块)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install...

Quant connect的优势和不足,学习曲线难

Quant connect的优势和不足 Quant connect作为一个成熟的算法交易平台&#xff0c;具有许多优势&#xff0c;包括&#xff1a; 强大的回测功能&#xff1a;Quant connect提供了丰富的数据源和回测功能&#xff0c;可以对各种交易策略进行全面的回测和分析。 容易上手&#xf…...

对rust的全局变量使用drop方法

文章目录 rust处理全局变量的策略方法1&#xff1a;在main中自动Drop全局变量 参考 rust处理全局变量的策略 Rust 的静态变量不会在程序退出时自动调用 Drop&#xff0c;因为它们的生命周期与进程绑定。 use std::sync::OnceLock;struct GlobalData {content: String, }impl …...

使用FastGPT制做一个AI网站日志分析器

越来越的多网站面临每天上千次的扫描和各类攻击&#xff0c;及时发现攻击IP&#xff0c;并有效的屏蔽不良访问成为网站安全的重要保障&#xff0c;这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器&#xff0c;下面就开始&#xff1a; …...

无限次使用 cursor pro

github地址 cursor-vip 使用方式 在 MacOS/Linux 中&#xff0c;请打开终端&#xff1b; 在 Windows 中&#xff0c;请打开 Git Bash。 然后执行以下命令来安装&#xff1a; 部分电脑可能会误报毒&#xff0c;需要关闭杀毒软件/电脑管家/安全防护再进行 方式1&#xff1a;通过…...

vuex 作用及五大组成部分

Vuex 是 Vue.js 的官方状态管理库&#xff0c;旨在帮助开发者构建大型应用时更好地管理和共享全局状态。它提供了一种集中式存储和管理应用所有组件的状态的方式&#xff0c;并且遵循单一状态树的原则。通过 Vuex&#xff0c;可以更容易地实现状态的可预测性和调试。 一、Vuex…...

Centos7上Jenkins+Docker+Git+SpringBoot自动化部署

文章目录 1.宿主机安装maven2.安装jenkins3.配置Jenkins4.Jenkins脚本自动安装JDK&#xff08;可选&#xff09; 1.宿主机安装maven wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz mv apache-maven-3.9.9-bin.tar.gz /usr/local…...

MATLAB图卷积神经网络GCN处理分子数据集节点分类研究

全文链接&#xff1a;https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络&#xff08;GCN&#xff09;对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节&#xff0c;通过对分子数据集的操作实践&#xff0c;展示了完整的节点分类流程&#…...

高级Python游戏开发:创建一款多人对战坦克大战

在本教程中,我们将用Python的Pygame库开发一款高级的坦克大战游戏。这款游戏支持多人对战、碰撞检测、子弹射击以及地图障碍生成,适合作为学习Python高级游戏开发的练习项目。 一、游戏功能概述 多人对战模式:玩家可以操作坦克,在同一屏幕上互相攻击。子弹射击:坦克可以发…...

网站访问的基础-HTTP超文本传输协议

BS架构 浏览器Browser⬅➡服务器Server 浏览器和服务器之间通过 IP 地址进行通信&#xff0c;实现数据的请求和传输。 例如&#xff0c;当用户在浏览器中访问一个网站时&#xff0c;浏览器会根据用户输入的网址&#xff08;通过 DNS 解析得到服务器 IP 地址&#xff09;向服…...

使用Hydra库简化配置管理

使用Hydra库简化配置管理 简介 在现代软件开发中&#xff0c;配置管理是至关重要的。应用程序的灵活性和可维护性很大程度上取决于其如何处理配置。Hydra是一个由Facebook AI Research (FAIR) 开发的Python库&#xff0c;它旨在简化复杂应用的配置过程。Hydra使得开发者可以轻…...