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

Nginx+Tomcat(负载均衡、动静分离)

目录

一、Nginx概述

1.Nginx应用

二、正向代理和反向代理

1.正向代理

1.1主要作用 

1.2工作原理 

2.反向代理 

2.1主要作用 

2.2工作原理

三、负载均衡模式

1.轮询

2.最少连接数

3.IP 哈希

4.加权轮询

5.最少时间算法

6.一致性哈希

四、规划部署负载均衡和反向代理

1.部署Nginx负载均衡器

1.1安装所需的依赖包

1.2创建Nginx用户

1.3下载并解压Nginx源码

1.4创建软链接

1.5创建Nginx服务文件

1.6设置权限并启动Nginx

2.部署2台Tomcat应用服务器

2.1安装JDK 

2.2配置环境变量

2.3安装并启动Tomcat

3.动静分离配置

3.1Tomcat1服务器配置

3.2Tomcat2服务器配置

4.Nginx服务器配置 

1.准备静态页面和静态图片

2.修改Nginx配置文件

3.测试 


一、Nginx概述

1.Nginx应用

Nginx是一款非常优秀的HTTP服务器软件,广泛应用于大型网站的后端,它支持高达50000 个并发连接,并拥有强大的静态资源处理能力

Nginx的运行非常稳定,系统资源(如内存和 CPU)的消耗也非常低。因此,许多大型网站选择 Nginx 作为反向代理服务器和负载均衡器,以提升整个站点的负载并发能力

二、正向代理和反向代理

1.正向代理

正向代理:

是指代理服务器替客户端访问目标服务器,以加快访问速度或突破访问限制。客户端可以访问代理服务器,而代理服务器再去访问目标服务器,并将返回数据传递给客户端。目标服务器只知道请求来自代理服务器,但不清楚实际客户端的地址,因此正向代理可以隐藏客户端的信息

正向代理的工作原理类似于“跳板”:当用户无法直接访问某个网站时,用户可以先连接到能够访问该网站的代理服务器,由代理服务器代为获取网站内容,再将内容返回给用户。目标网站只能记录代理服务器的访问,而不一定知道是用户的请求,这取决于代理服务器是否向网站透露用户信息

1.1主要作用 

1.隐私保护
隐藏用户 IP 地址:正向代理可以隐藏客户端的真实 IP 地址,对目标服务器只暴露代理服务
器的 IP 地址,从而保护用户的隐私
2.绕过地理限制

访问受限内容:正向代理可以帮助用户访问被地理位置限制或被网络过滤器屏蔽的网站和服
务。例如,用户可以通过代理服务器访问在其所在国家或地区被禁止的网站
3.内容过滤和监控
访问控制:企业或机构可以通过正向代理实施访问控制,限制员工访问特定网站或内容,或
监控用户的上网行为
4.缓存和加速
减少延迟和带宽消耗:正向代理可以缓存请求的内容,减少对原始服务器的重复请求,从而
提高访问速度和减少带宽消耗
5.网络安全
安全隔离:通过将客户端请求通过代理服务器转发,可以减少直接暴露到目标服务器的风
险,提高网络安全性
6.数据压缩和优化
减小数据量:正向代理可以对传输的数据进行压缩,减少数据传输量,从而提高网络效率
7.绕过审查和防火墙
突破网络限制:在一些网络受限的环境中,如学校或工作场所的防火墙,通过正向代理可以
访问被封锁的资源或服务

1.2工作原理 

1.客户端请求
客户端(如浏览器)发出请求,目标是访问互联网资源(例如一个网站)
2.请求发送到正向代理
客户端将请求发送到正向代理服务器,而不是直接发送到目标服务器。此时,客户端的请求
头中会包含代理服务器的地址,而目标服务器并不会直接接收到请求
3.正向代理处理请求
正向代理服务器接收到请求后,会处理请求的相关信息,包括解析目标URL、处理请求头等
4.请求转发到目标服务器
正向代理将请求转发到目标服务器。这时,目标服务器只会看到正向代理服务器的IP地址而无法看到客户端的真实 IP 地址
5.目标服务器响应
目标服务器处理请求,并生成响应数据,然后将响应发送回正向代理服务器
6.响应转发到客户端
正向代理服务器收到来自目标服务器的响应数据,并将其转发给原始的客户端
7.客户端接收响应
客户端从正向代理服务器接收响应数据,并对其进行处理和显示

2.反向代理 

反向代理:

则是代理服务器替服务器端处理客户端请求,通常用于负载均衡。反向代理屏蔽了后端服务器的信息,常用于多台服务器的分布式部署。对于访问量大的网站,反向代理服务器可以根据一定规则将客户端的请求分发到不同的后端服务器,客户端无需知道具体是哪台服务器处理了请求

2.1主要作用 

1.负载均衡
分配请求:反向代理可以将客户端的请求分发到多个后端服务器,从而实现负载均衡。这样
可以提高系统的处理能力和响应速度,避免单一服务器的过载
2.缓存加速
提高性能:反向代理可以缓存常见的响应内容,减少对后端服务器的重复请求,从而提高访
问速度和降低带宽消耗
3. SSL/TLS 终端
处理加密:反向代理可以处理 SSL/TLS 加密和解密(即 HTTPS 终端),将加密处理从后端服务器中剥离,提高后端服务器的性能和安全性
4.安全性增强
隐藏内部结构:反向代理可以隐藏后端服务器的真实 IP 地址和架构,对外只暴露代理服务器
的 IP 地址,从而提高系统的安全性
5.集中管理和监控
统一入口:通过反向代理,可以集中管理和监控所有流量,提供统一的访问日志和流量统
计,简化运维和监控工作
6.内容重写和路由
动态路由:反向代理可以根据请求的 URL、主机名或其他请求信息,动态地将请求路由到不
同的后端服务器或应用,从而支持复杂的应用场景和需求
7.应用层防火墙
增强防护:反向代理可以充当应用层防火墙,过滤恶意请求和攻击,提供额外的安全防护层
8.跨域支持
解决跨域问题:在某些情况下,反向代理可以帮助解决跨域请求问题,使得不同域名的资源
能够在同一个应用中进行交互

2.2工作原理

1.客户端请求发送到反向代理服务器
客户端向某个域名或IP 地址发送请求(例如`www.example.com'),这个地址指向反向代理服务器,而不是实际的后端服务器
2.反向代理服务器接收请求
反向代理服务器接收到客户端的请求,解析该请求,确定需要转发给哪个后端服务器。此
时,客户端并不知道实际的后端服务器的地址
3.反向代理转发请求至后端服务器
反向代理服务器根据配置,将请求转发到适当的后端服务器进行处理。它可以根据不同的策
略(如负载均衡、内容路由等)选择合适的后端服务器
4.后端服务器处理请求并生成响应
后端服务器接收到从反向代理转发的请求后,处理该请求,并生成响应(例如,返回 HTML
页面、API数据等)
5.反向代理接收后端服务器的响应
反向代理服务器接收到后端服务器的响应后,它可以选择缓存这些响应以提高后续的请求速
度,或者对响应内容进行处理(如数据压缩、内容修改等)
6.反向代理将响应返回给客户端
反向代理服务器将处理后的响应返回给客户端。客户端感知到的服务器就是反向代理服务
器,而不是实际处理请求的后端服务器

三、负载均衡模式

1.轮询

轮询算法:

是 Nginx 的默认分流算法。它按顺序将请求依次分配给每一台后端服务器,直到最后一台服务器,然后重新从第一台服务器开始。这种方法简单且均匀地分配了流量

数据流向:

每个请求依次被分配到下一个服务器。假设有三台服务器(ServerA、ServerB、ServerC)第一个请求被分配到 Server A,第二个请求分配到 Server B,第三个请求分配到 Server C,第四个请求又回到 Server A,依此类推
特点:

请求均匀分布,无视服务器的当前负载和响应时间

配置示例upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

2.最少连接数

最少连接数算法:

将请求分配给当前活动连接数最少的服务器。这种算法适用于请求处理时间不均匀的情况,可以有效平衡服务器的负载

数据流向:

每个请求被分配到当前连接数最少的服务器。例如,Server A 有 2 个连接,Server B 有 5 个连接,新的请求会被分配到 Server A
特点:

动态均衡负载,适用于请求处理时间不一的场景

配置示例upstream backend {least_conn;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

3.IP 哈希

IP 哈希算法:

通过计算客户端 IP 地址的哈希值,将请求始终分配给同一台服务器。适用于需要将特定客户端的请求固定在同一台服务器上的场景

数据流向:

每个客户端的 IP 地址被哈希计算,然后根据哈希值将请求固定分配到某一台服务器。假设客户端 X 的哈希值指向 Server A,客户端 Y 的哈希值指向 Server B,则无论多少次请求,X 的请求总是流向 Server A,Y 的请求总是流向 Server B
特点:

同一个客户端总是被分配到同一台服务器,有助于会话保持

配置示例upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

4.加权轮询

加权轮询算法:

允许为每台服务器设置权重,权重越大的服务器将会获得更多的请求。适用于服务器性能不均衡的情况

数据流向:

根据服务器设置的权重值分配请求。假设 Server A 权重为 3,Server B 权重为 1,则 4 个请求中,3 个会被分配到 Server A,1 个会被分配到 Server B
特点:

高权重服务器接收更多的请求,适用于服务器性能差异较大的场景

配置示例upstream backend {server backend1.example.com weight=3;server backend2.example.com weight=1;server backend3.example.com weight=2;
}

5.最少时间算法

最少时间算法:

基于请求的响应时间,将请求分配给响应时间最短的服务器。这种算法适用于需要最大化响应速度的场景,在 Nginx 1.15.3 及以后版本中可用

数据流向:

每个请求分配到响应时间最短或平均连接时间最短的服务器。假设 Server A 的响应时间较快,Server B 较慢,则新的请求更可能流向 Server A
特点:

进一步优化了最少连接算法,适用于高负载环境下的动态负载均衡

配置示例upstream backend {least_time header;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

6.一致性哈希

一致性哈希算法:

可以保证当集群中某台服务器故障时,只有部分请求会重新分配到其他服务器,而不是全部重新分配。这在缓存等场景中非常有用

数据流向:

根据请求的某个特定参数(如 URL、Cookie 或其他 Header),进行哈希计算,将请求分配到哈希值对应的服务器。假设 Server A 和 Server B,参数 "foo" 的哈希值指向 Server A,参数 "bar" 的哈希值指向 Server B,则 "foo" 请求总是流向 Server A,"bar" 请求总是流向 Server B
特点:

适应服务器节点变动,减少请求的重新分配,适合缓存敏感的场景

配置示例upstream backend {hash $request_uri consistent;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}

四、规划部署负载均衡和反向代理

1.部署Nginx负载均衡器

关闭防火墙和临时防护systemctl stop firewalld
setenforce 0

1.1安装所需的依赖包

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

1.2创建Nginx用户

useradd -M -s /sbin/nologin nginxtail -2 /etc/passwd

1.3下载并解压Nginx源码

解压
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/编译安装
cd nginx-1.20.2/./configure --prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-file-aio \--with-http_stub_status_module \--with-http_gzip_static_module \--with-http_flv_module \--with-http_ssl_module \--with-streammake && make install

1.4创建软链接

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

1.5创建Nginx服务文件

vim /lib/systemd/system/nginx.service[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target

1.6设置权限并启动Nginx

chmod 777 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

2.部署2台Tomcat应用服务器

停止防火墙并禁用SELinuxsystemctl stop firewalld
setenforce 0

2.1安装JDK 

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

2.2配置环境变量

vim /etc/profileexport JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH加载环境变量
source /etc/profile

2.3安装并启动Tomcat

tar zxvf apache-tomcat-8.5.16.tar.gz
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh检查端口
netstat -ntap | grep 8080

3.动静分离配置

3.1Tomcat1服务器配置

创建JSP页面
mkdir /usr/local/tomcat/webapps/testvim /usr/local/tomcat/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>修改server.xml
vim /usr/local/tomcat/conf/server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
</Host>重启Tomcat服务
/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

3.2Tomcat2服务器配置

创建JSP页面
mkdir /usr/local/tomcat/tomcat1/webapps/testvim /usr/local/tomcat/tomcat1/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>修改server.xml
vim /usr/local/tomcat/tomcat1/conf/server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>重启Tomcat服务
/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh 

4.Nginx服务器配置 

1.准备静态页面和静态图片

echo '<html><body><h1>汪铭是帅哥</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/img

2.修改Nginx配置文件

vim /usr/local/nginx/conf/nginx.confhttp {...upstream tomcat_server {server 172.16.58.10:8080 weight=1;server 172.16.58.20:8080 weight=1;server 172.16.58.30:8080 weight=1;}server {listen 80;server_name www.kgc.com;charset utf-8;location ~ .*\.jsp$ {proxy_pass http://tomcat_server;proxy_set_header HOST $host;   proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img;expires 10d;}location / {root html;index index.html index.htm;}}...
}

3.测试 

测试静态页面

浏览器访问:http://172.16.58.40

浏览器访问:http://172.16.58.40/game.jpg

测试负载均衡效果

浏览器访问:http://172.16.58.40/index.jsp

相关文章:

Nginx+Tomcat(负载均衡、动静分离)

目录 一、Nginx概述 1.Nginx应用 二、正向代理和反向代理 1.正向代理 1.1主要作用 1.2工作原理 2.反向代理 2.1主要作用 2.2工作原理 三、负载均衡模式 1.轮询 2.最少连接数 3.IP 哈希 4.加权轮询 5.最少时间算法 6.一致性哈希 四、规划部署负载均衡和反向…...

前端分段式渲染较长文章

实现思路&#xff1a; 1. 后端返回整篇文章。 2. JavaScript 分段处理&#xff1a;将文章按一定的字符或段落长度分割&#xff0c;然后逐步将这些段落追加到页面上。 3. 定时器或递归调用&#xff1a;使用 setInterval 或 setTimeout 来控制段落的逐步渲染。 代码实现示例 …...

C#程序员的堕落从nuget开始:将自己的代码发布到nuget

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

【C/C++语言系列】malloc、calloc和realloc区别和用法

这三个函数都是在堆区分配内存的函数&#xff0c;头文件都是&#xff1a; #include<stdlib.h>下面分别介绍这三个函数&#xff1a; malloc&#xff1a; 函数原型&#xff1a; void *malloc(unsigned int num_bytes);功能&#xff1a;堆区开辟一段内存空间 num_nytes&…...

【Linux】POSIX信号量与、基于环形队列实现的生产者消费者模型

目录 一、POSIX信号量概述 信号量的基本概念 信号量在临界区的作用 与互斥锁的比较 信号量的原理 信号量的优势 二、信号量的操作 1、初始化信号量&#xff1a;sem_init 2、信号量申请&#xff08;P操作&#xff09;&#xff1a;sem_wait 3、信号量的释放&#xff08…...

Spring Boot-消息队列相关问题

Spring Boot 消息队列相关问题及解决方案 消息队列&#xff08;Message Queue, MQ&#xff09;在分布式系统中的应用越来越广泛&#xff0c;尤其是在解耦系统、异步通信、负载均衡等场景中起到了至关重要的作用。消息队列为不同的服务提供了一种异步通信的机制&#xff0c;使得…...

[数据集][目标检测]岩石种类检测数据集VOC+YOLO格式4766张9类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4766 标注数量(xml文件个数)&#xff1a;4766 标注数量(txt文件个数)&#xff1a;4766 标注…...

图像分割基本知识

计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割 图像分割 一、目标分割1.1 图像分割的定义1.2 任务类型1.2.1 任务描述1.2.2 任务类型 二、语义分割2.1 FCN网络2.1.1网络结构 2.2 Unet网络 三、UNet案例3.1 数据集获取3.1.1 设置相关信息3.1.2 图像…...

LIN总线CAPL函数——干扰LIN帧响应段(linInvertRespBit )

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…...

【30天玩转python】网络编程基础

网络编程基础 网络编程是指编写能够在网络上进行通信的程序&#xff0c;通过网络进行数据的发送与接收。Python 提供了许多库和工具来进行网络编程&#xff0c;如 socket、urllib 和 requests。在这篇文章中&#xff0c;我们将介绍网络编程的基础知识&#xff0c;并演示如何使…...

【PCB工艺】如何实现PCB板层间的互连

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言①、什么是通孔②、通孔是怎样产生的③、通孔种类④、盘中孔⑤、设计建议 前言 送给大学毕业后找不到奋斗方向的你…...

FastAPI--如何自定义Docs UI,包括多个APP、静态资源、元数据等

如何mount 一个FastAPI Application? “Mounting” means adding a completely “independent” application in a specific path, that then takes care of handling everything under that path, with the path operations declared in that sub-application. 示例代码 主…...

【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

一. XDMA IP核两种模式 Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中&#xff0c;支持普通的XDMA模式&#xff0c;但是这种模式只允许主机端发起PCIe 读写请求&#xff0c;FPGA内部无法主动发起读写请求&#xff0c;也即FPGA无法主动读写HOST的内存。 而该IP核的另…...

嵌入式-QT学习-小练习

1. 实现多窗口 2. 给按键增加图标 3. 动图展示 结果演示&#xff1a; Mul_Con main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }一、第一个窗口展示 …...

使用 Flask-Limiter 和 Nginx 实现接口访问次数限制

在现代 Web 应用中&#xff0c;针对敏感接口&#xff08;如短信验证码、登录接口等&#xff09;的访问次数限制至关重要。通过设置合理的限流策略&#xff0c;可以有效防止接口滥用&#xff0c;避免过多的资源消耗&#xff0c;并提升安全性。本文将通过 Nginx 和 Flask-Limiter…...

【数据结构】排序算法---冒泡排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 结语 1. 定义 冒泡排序&#xff08;英语&#xff1a;Bubble sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的…...

mysql数据库中事务锁的机制

读锁又称为共享锁&#xff0c;简称S锁&#xff0c;共享锁就是多个事务对于同一数据可以共享一把锁&#xff0c;都能访问到数据&#xff0c;但是只能读不能修改。 写锁又称为排他锁&#xff0c;简称X锁&#xff0c;排他锁就是不能与其他所并存&#xff0c;如一个事务获取了一个…...

并发工具类-CountDownLatch

CountDownLatch 是 Java 中提供的一种非常有用的并发工具类&#xff0c;位于 java.util.concurrent 包中。它可以使一个或多个线程等待其他线程完成一组特定的操作后再继续执行。CountDownLatch 通过维护一个计数器来实现这一点&#xff0c;计数器的初始值由构造函数设定。每当…...

进程的重要函数

进程的重要函数: fork函数 了解fork函数 通过调用fork()函数&#xff0c;则会产生一个新的进程。调用fork()函数的进程叫做 父进程&#xff0c;产生的新进程则为子进程。 其编码过程: 1.函数功能: 函数头文件 #include <sys/types.h> #include <unistd.h> 函数…...

python 实现average median平均中位数算法

average median平均中位数算法介绍 平均&#xff08;Mean&#xff09;和中位数&#xff08;Median&#xff09;是统计学中常用的两个概念&#xff0c;用于描述一组数据的中心趋势&#xff0c;但它们并不是算法&#xff0c;而是数据处理的结果。不过&#xff0c;我可以解释如何…...

HTML概述

1. HTML概述 1.1 HTML定义 HTML超文本标记语言&#xff0c;其中超文本是链接&#xff0c;标记也叫标签&#xff08;即带尖括号的文本&#xff09;。 1.2 HTML基本骨架 HTML基本骨架是网页模板。 <html><head><title>网页的标题</title></head&…...

【FFT】信号处理——快速傅里叶变换【通俗易懂】

快速傅里叶变换&#xff08;Fast Fourier Transform, FFT&#xff09;是一种用于将信号从时间域转换到频率域的算法。 傅里叶变换的核心思想是&#xff1a;任何周期性信号都可以分解成多个不同频率的正弦波或余弦波的叠加。 简单来说&#xff0c;FFT可以帮助我们理解一个信号…...

电脑升级WIN11之后需要注意哪些东西

1.记事本&#xff0c;在前单位时&#xff0c;电脑升级后&#xff0c;记事本会需要手动更新&#xff0c;或手动安装 2.任务栏&#xff0c;WIN11默认任务栏在中间位置&#xff0c;想要调成WIN10一样的位置&#xff0c;分享两个方法 拖拽法&#xff08;适用于Windows 11 2022年1…...

GEE 教程:利用sentinel-5p数据进行长时序CO一氧化碳的监测分析并结合夜间灯光数据分析

目录 简介 数据 哨兵5号 NOAA/VIIRS/DNB/MONTHLY_V1/VCMCF 函数 ui.Chart.image.series(imageCollection, region, reducer, scale, xProperty) Arguments: Returns: ui.Chart 代码 结果 简介 利用sentinel-5p数据进行长时序CO一氧化碳的监测分析并结合夜间灯光数据…...

【教程】鸿蒙ARKTS 打造数据驾驶舱---前序

鸿蒙ARKTS 打造数据驾驶舱 ​ 前面2章我介绍了如何通过定义View绘制箭头以及圆形进度&#xff0c;初步了解了鸿蒙如何进行自定义View。接下来我将通过我最近在带的一个VUE的项目&#xff0c;简单实现了几个鸿蒙原生页面。帮助大家快速上手纯血鸿蒙开发. 本项目基于Api11Stage模…...

Html css样式总结

1.Html css样式总结 CSS 定义 中文名称&#xff1a;层叠样式表 。 英文全称&#xff1a;Cascading Style Sheets &#xff0c;简称CSS。在网页制作时采用CSS技术&#xff0c;可以有效地对页面的布局、字体、颜色、背景和其它效果实现更加精确的控制。 &#xff08;1&#xff09…...

决策树基础概论

1. 概述 在机器学习领域&#xff0c;决策树&#xff08;Decision Tree&#xff09; 是一种高度直观且广泛应用的算法。它通过一系列简单的是/否问题&#xff0c;将复杂的决策过程分解为一棵树状结构&#xff0c;使得分类或回归问题的解决过程直观明了。决策树的最大特点在于可…...

Spring Boot集成Akka Cluster快速入门Demo

1.什么是Akka Cluster&#xff1f; Akka Cluster将多个JVM连接整合在一起&#xff0c;实现消息地址的透明化和统一化使用管理&#xff0c;集成一体化的消息驱动系统。最终目的是将一个大型程序分割成若干子程序&#xff0c;部署到很多JVM上去实现程序的分布式并行运算&#xf…...

django学习入门系列之第十点《A 案例: 员工管理系统10》

文章目录 12 管理员操作12.4 密码加密12.5 获取对象&#xff08;防止id错误--编辑界面等&#xff09;12.6 编辑管理员12.7 重置密码 往期回顾 12 管理员操作 12.4 密码加密 密码不应该以明文的方式直接存储到数据库&#xff0c;应该加密才放进去 定义一个md5的方法&#xff…...

Unity实战案例全解析:PVZ 植物卡片状态分析

Siki学院2023的PVZ免费了&#xff0c;学一下也坏 卡片状态 卡片可以有三种状态&#xff1a; 1.阳光足够&#xff0c;&#xff08;且cd好了可以种植&#xff09; 2.阳光不够&#xff0c;&#xff08;cd&#xff1f;好了&#xff1a;没好 &#xff08;三目运算符&#xff09;&…...