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

Web服务器——————nginx篇

一.What is Web服务器 

Web服务器介绍 

Web服务器(Web Server)是指驻留于因特网上某种类型计算机的程序,该程序可以向Web浏览器(如Chrome、Firefox、Safari等)等客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。

Web服务器的工作原理可以简单概括为:客户端(如浏览器)通过HTTP(超文本传输协议)向服务器发送请求,服务器接收到请求后,根据请求的内容进行相应的处理(如读取文件、执行程序等),然后将处理结果(如HTML页面、图片、视频等)通过HTTP响应发送给客户端。

Web服务器的主要功能包括:

  1. 提供网页服务:Web服务器最基本的功能就是提供网页服务,即当用户通过浏览器访问网站时,Web服务器会返回相应的HTML页面给浏览器进行展示。

  2. 处理HTTP请求:Web服务器能够解析HTTP请求,并根据请求的内容进行相应的处理。例如,当用户请求一个网页时,Web服务器会找到对应的HTML文件并发送给客户端;当用户请求一个图片时,Web服务器会找到对应的图片文件并发送给客户端。

  3. 管理网站资源:Web服务器负责管理网站上的各种资源,如HTML文件、CSS文件、JavaScript文件、图片、视频等。它可以根据请求的内容,从服务器上找到对应的资源并发送给客户端。

  4. 支持动态内容:除了静态内容(如HTML文件、图片等)外,Web服务器还可以支持动态内容(如PHP、ASP.NET、JSP等脚本语言生成的页面)。当客户端请求动态内容时,Web服务器会执行相应的脚本程序,并将生成的页面发送给客户端。

  5. 支持多种协议:除了HTTP协议外,Web服务器还可以支持其他协议,如HTTPS(安全的HTTP)、FTP(文件传输协议)等。这些协议可以提供更安全或更灵活的数据传输方式。

  6. 负载均衡和集群:在高并发场景下,单个Web服务器可能无法处理所有请求。此时,可以通过负载均衡器将请求分发到多个Web服务器上,形成服务器集群。这样可以提高系统的可用性和扩展性。

常见的Web服务器软件包括Apache、Nginx、IIS(Internet Information Services)等。这些软件各有特点,适用于不同的应用场景和需求。例如,Apache是开源的Web服务器软件,具有高度的可配置性和可扩展性;Nginx则以其高性能和轻量级著称,特别适合于处理高并发请求的场景;IIS则是微软开发的Web服务器软件,与Windows操作系统紧密集成。

 Web服务器————Nginx

What  is  Nginx???

Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,由俄罗斯的程序设计师Igor Sysoev使用C语言开发。Nginx以其高效的处理能力、低资源消耗和强大的并发能力而闻名,是许多高流量网站的首选服务器之一。以下是对Nginx的详细介绍:

一、Nginx的特点
  1. 高性能:Nginx可以处理大量的并发请求,官方测试表明其能够支持高达5万个并发连接,这得益于其高效的内存管理和缓存机制。
  2. 轻量级:Nginx的安装包较小,运行时占用的系统资源也非常少,适合在资源有限的服务器上部署。
  3. 高并发:Nginx采用事件驱动的异步架构,能够处理大量并发连接,特别适合处理高并发访问的场景。
  4. 稳定性:Nginx的运行非常稳定,即使在长时间高负载运行的情况下,也很少出现宕机的情况。
  5. 可扩展性:Nginx支持模块化架构,用户可以根据需要安装和管理自定义模块,以实现特定的功能和性能优化。
  6. 配置灵活:Nginx的配置文件非常灵活,用户可以根据需要定制许多方面,如代理、负载均衡、缓存、日志记录等。
二、Nginx的功能
  1. HTTP服务器:Nginx可以作为独立的HTTP服务器,提供静态文件服务、动态内容处理和索引文件等功能。
  2. 反向代理:Nginx支持反向代理功能,可以将请求转发到后端服务器,并处理中间代理和缓存等操作。
  3. 负载均衡:Nginx可以作为负载均衡器使用,将请求分发到多个后端服务器上,从而实现高可用性和可扩展性。
  4. 邮件代理:Nginx同时也是一个非常优秀的邮件代理服务器,支持IMAP/POP3/SMTP服务。
三、Nginx的应用场景
  1. 静态资源服务器:Nginx可以部署为静态资源服务器,提供图片、视频、CSS、JS等静态文件的访问服务。
  2. 负载均衡器:在分布式系统中,Nginx可以作为负载均衡器,将用户请求分发到多个后端服务器上,以提高系统的可用性和扩展性。
  3. 反向代理:Nginx可以作为反向代理服务器,将用户请求转发到内部网络中的Web服务器上,同时提供缓存、压缩等优化功能。
  4. API网关:Nginx可以作为API网关,对外部请求进行鉴权、限流、转发等处理,保护内部服务的安全和稳定。
四、Nginx的安装与配置

Nginx可以在大多数Unix、Linux和Windows系统上安装和配置。安装方式包括使用系统的包管理器(如yum、apt等)进行安装,以及从Nginx官网下载源代码进行编译安装。配置Nginx时,用户需要编辑Nginx的配置文件(通常为nginx.conf),设置服务器监听的端口、请求处理的规则、日志记录的方式等。

五、Nginx的版本与更新

Nginx是一个开源项目,其源代码以类BSD许可证的形式发布。Nginx的开发团队会定期发布新的版本,包括稳定版和主线版。对于新建站点,建议使用最新稳定版作为生产版本;对于已有站点,可以根据实际情况选择是否升级到新版本。

综上所述,Nginx是一款功能强大、性能卓越、配置灵活的Web服务器和反向代理服务器,广泛应用于各种高并发、高性能的Web应用场景中。

How to use  Nginx??

一.下载安装 
 1.准备工作
  • 打开虚拟机,使用finallshell链接Linux操作系统

nginx下载地址icon-default.png?t=N7T8https://nginx.org/点击链接选择版本进行下载 

先安装其依赖软件,最后安装nginx。
依赖工具:pcre-8.3.7.tar.gz       openssl-1.0.1t.tar.gz      zlib-1.2.8.tar.gz       nginx-1.11.1.tar.gz
nginx的http模块使用pcre来解析正则表达式,需要在linux上安装pcre库
nginx使用zlib对http包的内容进行gzip,需要在linux上安装安装zlib库
安装openssl库,让 nginx 支持 https(即在ssl协议上传输http)

2.开始安装 

安装pcre
方式一、wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz 。
方拾二、上传源码压缩包,解压、编译、安装 三部曲。
1)、解压文件, 进入pcre目录,
2)、./configure 完成后,
3)、执行命令: make && make install
安装 openssl
下载OpenSSL的地址:
http://distfiles.macports.org/openssl/
1)、解压文件, 回到 openssl目录下,
2)、./configure 完成后,
3)、执行命令: make && make install
安装 zlib
1)、解压文件, 回到 zlib 目录下,
2)、./configure 完成后,
3)、执行命令: make && make install
安装 nginx 
1)、解压文件, 回到 nginx 目录下,
2)、./configure 完成后,
3)、执行命令: make && make install

 3.运行nginx
  • 安装完nginx后,会在 路径 /usr/local 下自动生成 nginx 文件夹。这是自动生成的。
  • 进入这个目录:
cd /usr/local/nginx

  • 进入sbin文件夹,里面有两个文件:nginx 和 nginx.old
  • 执行命令:./nginx 即可执行
  • 测试启动: ps -ef | grep nginx

查看nginx默认端口(默认为80),使用网页的形式测试,
进入目录查看端口:cd /usr/local/nginx/conf 下的 nginx.conf文件。这个文件也是nginx的配置文件。vim 下: 

4.防火墙 

在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题 (1)关闭防火墙(2)开放访问的端口号,80 端口 
查看开放的端口号

firewall-cmd --list-all 

设置开放的端口号

firewall-cmd --add-service=http –permanent 
firewall-cmd --add-port=80/tcp --permanent 

重启防火墙

firewall-cmd –reload 
 二.nginx的平滑升级
1. 为什么要对 nginx 平滑升级

随着 nginx 越来越流行,并且 nginx 的优势也越来越明显,nginx 的版本迭代也来时加速模式,1.9.0版本的nginx更新了许多新功能,例如 stream 四层代理功能,伴随着 nginx 的广泛应用,版本升级必然越来越快,线上业务不能停,此时 nginx 的升级就是运维的工作了 
nginx 方便地帮助我们实现了平滑升级。其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程。 (2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。 (3)新进程接受新请求。 (4)老进程处理完所有请求,关闭所有连接后,停止。 这样就很方便地实现了平滑升级。一般有两种情况下需要升级 nginx,一种是确实要升级 nginx 的版本,另一种是要为 nginx 添加新的模块。

2. Nginx 平滑升级原理

多进程模式下的请求分配方式 

nginx 默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。

信号的接收和处理

nginx 主进程在启动完成后会进入等待状态,负责响应各类系统消息,如SIGCHLD、SIGHUP、SIGUSR2等。

Nginx信号简介

主进程支持的信号

  • TERM, INT: 立刻退出
  • QUIT: 等待工作进程结束后再退出
  • KILL: 强制终止进程
  • HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
  • USR1: 重新打开日志文件
  • USR2: 启动新的主进程,实现热升级
  • WINCH: 逐步关闭工作进程

工作进程支持的信号

  • TERM, INT: 立刻退出
  • QUIT: 等待请求处理结束后再退出
  • USR1: 重新打开日志文件
3.实验准备 

准备一台初始化的虚拟机

localhostRocky_linux9.4192.168.226.20

关闭防火墙和SElinux 

虚拟机基础配置脚本如下进行步骤前,先跑一遍 

#!/bin/bash
# **********************************************************
# * File Name     : rocky_linux
# * Author        : Elk
# * Email         : zzdict@gmail.com / elk_deer@foxmail.com
# * Create time   : 2024-06-15 20:12
# * Description   : 
# **********************************************************
# 检查是否以 root 用户运行脚本
if [ "$(id -u)" -ne 0 ]; thentput boldtput setaf 1tput setaf 3echo "请以 root 用户运行此脚本。"tput sgr0exit 1
fi# 启用网络接口
enable_network_interface() {local interface=$1if ip link set "$interface" up; thentput boldtput setaf 2echo "网络接口 $interface 已启用。"tput sgr0elsetput boldtput setaf 1echo "无法启用网络接口 $interface,请检查接口名称。"tput sgr0exit 1fi
}# 配置 YUM 源
configure_yum_repos() {sed -e 's|^mirrorlist=|#mirrorlist=|g' \-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \-i.bak \/etc/yum.repos.d/Rocky-*.repo	  tput boldtput setaf 2echo "YUM 源配置已更新。"tput sgr0dnf makecacheyum -y install epel-release
}# 停止和禁用防火墙,禁用 SELinux
configure_security() {systemctl stop firewalld && systemctl disable firewalldfirewall-cmd --reloadtput boldtput setaf 2echo "防火墙已停止并禁用。"tput sgr0sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configtput boldtput setaf 2echo "SELinux 已禁用。"tput sgr0
}# 检查并安装chrony,进行时间同步
function install_and_sync_time_with_chrony() {# 检查是否已经安装chronyif ! command -v chronyd &>/dev/null; thensudo dnf install -y chrony &> /dev/null# 检查安装是否成功if ! command -v chronyd &>/dev/null; thentput boldtput setaf 1echo "安装 chrony 失败。请检查您的包管理器并重试。"tput sgr0exit 1elsetput boldtput setaf 2echo "chrony 安装成功。"tput sgr0fielsetput boldtput setaf 2echo "chrony 已安装。"tput sgr0fi# 确保安装其他必要的软件包sudo dnf install -y vim wget unzip tar lrzsz &> /dev/nullif [ $? -eq 0 ]; thentput boldtput setaf 2echo "其他软件包安装成功。"tput sgr0elsetput boldtput setaf 1echo "安装其他软件包失败。"tput sgr0exit 1fi
}# 启动 chronyd 服务并启用开机启动if sudo systemctl start chronyd && sudo systemctl enable chronyd; thentput boldtput setaf 2echo "chronyd 服务已成功启动并设置为开机启动。"tput sgr0elsetput boldtput setaf 1echo "启动或启用 chronyd 服务失败。请检查 systemctl 状态。"tput sgr0exit 1fi# 强制同步时间sudo chronyc -a makesteptput boldtput setaf 2echo "时间同步已成功完成。"tput sgr0
}# 自定义 IP 地址
configure_ip_address() {tput boldtput blinktput setaf 1read -p "******输入你要设置的IP >>>  : " ip_atput sgr0tput boldtput blinktput setaf 6read -p "******输入你要设置的网关>>> : " gattput sgr0tput boldtput blinktput setaf 3read -p "******输入你要设置的DNS>>>  : " dnnstput sgr0# 判断当前连接的名字connection_name=$(nmcli -t -f NAME,DEVICE con show --active | grep -E "ens33|Wired connection 1" | cut -d: -f1)if [[ "$connection_name" == "ens33" ]]; then# 针对 ens33 连接进行配置nmcli con mod "ens33" ipv4.method manual ipv4.addresses "${ip_a}/24" ipv4.gateway "${gat}" ipv4.dns "${dnns}" autoconnect yeselif [[ "$connection_name" == "Wired connection 1" ]]; then# 针对 Wired connection 1 连接进行配置nmcli con mod "Wired connection 1" ipv4.method manual ipv4.addresses "${ip_a}/24" ipv4.gateway "${gat}" ipv4.dns "${dnns}" autoconnect yeselsetput boldtput setaf 1echo "无法识别的网络连接名称:$connection_name"tput sgr0return 1fitput setab 5tput setaf 15tput boldecho "IP 地址配置成功,即将重启系统。"tput sgr0nmcli con up "$connection_name"reboot
}# 主函数
main() {local interface="ens33"enable_network_interface "$interface"configure_yum_reposconfigure_securityinstall_and_sync_time_with_chronyconfigure_ip_address "$interface"
}# 调用主函数
main

来到官网下载两个不同的版本 
nginx官网icon-default.png?t=N7T8https://nginx.org/

将下载好的两个安装包上传到虚拟机中

[root@localhost ~]# ll
total 2268
-rw-------. 1 root root     815 Jun  6 14:00 anaconda-ks.cfg
-rw-r--r--  1 root root 1062124 Jun 22 00:38 nginx-1.20.2.tar.gz
-rw-r--r--  1 root root 1244738 Jun 21 21:19 nginx-1.26.1.tar.gz
-rw-r--r--  1 root root    4251 Jun 17 23:50 rocky_linux.sh
4.模拟实验 

安装依赖工具  

[root@localhost ~]# yum install -y gcc gcc-c++ pcre-devel openssl-devel zlib-devel

解压1.20.2版本安装包

[root@localhost ~]# ls
anaconda-ks.cfg  nginx-1.20.2.tar.gz  nginx-1.26.1.tar.gz  rocky_linux.sh
[root@localhost ~]# tar -zxf nginx-1.20.2.tar.gz 

进入解压后的目录

[root@localhost ~]# ls
anaconda-ks.cfg  nginx-1.20.2  nginx-1.20.2.tar.gz  nginx-1.26.1.tar.gz  rocky_linux.sh
[root@localhost ~]# cd nginx-1.20.2
[root@localhost nginx-1.20.2]# ls
CHANGES  CHANGES.ru  LICENSE  README  auto  conf  configure  contrib  html  man  src

预编译 

在这里面,是少两个模块,没写进代码里,用来模拟这样少模块的场景,便于后面升级来扩展。 

[root@localhost nginx-1.20.2]# ./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module

编译安装

[root@localhost nginx-1.20.2]# make && make install

创建一个nginx的系统用户

[root@localhost nginx-1.20.2]# useradd --system --no-create-home --shell /sbin/nologin nginx

创建目录用于临时存储客户端请求数据和缓存文件 

[root@localhost nginx-1.20.2]# mkdir -p /tmp/nginx/client_body

启动nginx

[root@localhost nginx-1.20.2]# /usr/local/nginx/sbin/nginx

验证nginx正常工作

[root@localhost nginx-1.20.2]# curl -Ik 192.168.226.20
HTTP/1.1 200 OK
Server: nginx/1.20.2
Date: Sat, 22 Jun 2024 05:16:03 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 22 Jun 2024 01:00:47 GMT
Connection: keep-alive
ETag: "6676223f-264"
Accept-Ranges: bytes

或者浏览器打开访问改主机IP地址 

三.nginx的常用命令和配置文件 
1. Nginx常用命令 

使用nginx操作命令前提:必须进入到nginx的自动生成目录的下/sbin文件夹下。
nginx有两个目录:
第一个:安装目录

/usr/feng/

第二个:自动生成目录:

/usr/local/nginx/

查看 nginx 的版本号

./nginx -v

启动 nginx

./nginx

关闭nginx

./nginx -s stop

重新加载 nginx 

在目录:/usr/local/nginx/sbin 下执行命令,不需要重启服务器,自动编译。

./nginx -s reload

其他常用命令

cd /usr/local/nginx/sbin/
./nginx  # 启动# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s stop# 平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s quit# 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reload# 重新打开日志文件
nginx -s reopen# 为 Nginx 指定一个配置文件,来代替缺省的
nginx -c filename# 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -t#  显示 nginx 的版本
nginx -v# 显示 nginx 的版本,编译器版本和配置参数
nginx -V# 格式换显示 nginx 配置参数
2>&1 nginx -V | xargs -n1
2>&1 nginx -V | xargs -n1 | grep lua
2. Nginx配置文件 

 配置文件位置

/usr/local/nginx/conf/nginx.conf

nginx 的组成部分 

配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的 内容如下:

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

nginx 配置文件有三部分组成

第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:

worker_processes  1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

第二部分:events块

比如上面的配置:

events {worker_connections  1024;
}

events 块涉及的指令**主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。**
上述例子就表示每个 work process 支持的最大连接数为 1024.

第三部分:

http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http全局块、server 块。

http全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

四.nginx的反向代理 负载均衡
1. 实现效果

浏览器地址栏输入地址 http://208.208.128.122/edu/a.html,负载均衡效果,平均 8081 和 8082 端口中 

2.在 nginx 的配置文件中进行负载均衡的配置
    upstream myserver {server 208.208.128.122:8081;server 208.208.128.122:8082;}server {listen       80;server_name  208.208.128.122;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;proxy_pass   http://myserver;#proxy_pass   http://127.0.0.1:8081;index  index.html index.htm;}
 3.最终测试 
http://208.208.128.122/edu/a.html

相关文章:

Web服务器——————nginx篇

一.What is Web服务器 Web服务器介绍 Web服务器(Web Server)是指驻留于因特网上某种类型计算机的程序,该程序可以向Web浏览器(如Chrome、Firefox、Safari等)等客户端提供文档,也可以放置网站文件&#…...

【实战教程】一键升级CentOS 7.9.2009至OpenSSL 1.0.2u:加固你的Linux服务器安全防线!

文章目录 【实战教程】一键升级CentOS 7.9.2009至OpenSSL 1.0.2u:加固你的Linux服务器安全防线!一、 背景二、 升级步骤2.1 检查 OpenSSL 版本2.2 安装 OpenSSL 依赖包2.3 下载 OpenSSL 的新版本2.4 解压缩下载的文件2.5 编译并安装 OpenSSL2.5.1 切换到…...

React 使用ref属性调用子组件方法(也可以适用于父子传参)

注意:①需使用hooks函数组件 ②使用了antDesign组件库(可不用) 如何使用 父组件代码 import React, { useState, useRef, useEffect } from react; import { Button } from antd; import Child from ./components/child;export defau…...

Linux CentOS java JDK17

1. 下载 cd /usr/local/ wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2. 解压 tar -zxf jdk-17_linux-x64_bin.tar.gz 3.配置环境变量 vim /etc/profile // 在末尾处添加 export JAVA_HOME/usr/local/jdk-17.0.12 #你安装jdk的路径&…...

迭代与递归

算法中会经常遇见重复执行某个任务,那么如何实现呢,本文将详细介绍两种实现方式,迭代与递归。 本文基于 Java 语言。 一、迭代 迭代(iteration),就是说程序会在一定条件下重复执行某段代码,直…...

wo是如何克服编程学习中的挫折感的?

你是如何克服编程学习中的挫折感的? 编程学习之路上,挫折感就像一道道难以逾越的高墙,让许多人望而却步。然而,真正的编程高手都曾在这条路上跌倒过、迷茫过,却最终找到了突破的方法。你是如何在Bug的迷宫中找到出口的…...

vue3基础ref,reactive,toRef ,toRefs 使用和理解

文章目录 一. ref基本用法在模板中使用ref 与 reactive 的区别使用场景 二. reactive基本用法在模板中使用reactive 与 ref 的区别使用场景性能优化 三. toRef基本用法示例在组件中的应用主要用途对比 ref 和 toRef 四. toRefs基本用法示例在组件中的应用主要用途对比 ref 和 t…...

【Python机器学习】NLP的部分实际应用

自然语言处理在现实中非常多的应用,下表是其中的一些例子: 应用示例1示例2示例3搜索web文档自动补全编辑拼写语法风格对话聊天机器人助手行程安排写作索引用语索引目录电子邮件垃圾邮件过滤分类优先级排序文本挖掘摘要知识提取医学诊断法律法律断案先例…...

LLM 压缩之二: ShortGPT

0. 资源链接 论文: https://arxiv.org/pdf/2403.03853 项目代码: 待开源 1. 背景动机 现有的大语言模型 LLM 推理存在以下问题: LLM 模型因为 scale law 极大的提高模型的预测能力,但是同样带来较大的推理延时;对于 LLM 应用部署带来较大…...

EmguCV学习笔记 VB.Net 5.2 仿射变换

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...

Fink初识

文章目录 1. Flink核心组件2. Flink核心概念3. 执行应用程序的三种模式3.1 session mode3.2 per-job mode3.3 application mode 4. Job Manager4.1 Resource Manager4.2 Dispatcher4.3 Job Master 5. Watermark6. State7.时间属性7.1 处理时间 processing time7.2 事件时间 Eve…...

PyTorch的torchvision内置数据集使用,transform+pytorch联合使用

一、PyTorch的torchvision内置数据集介绍 我们前面的文章里谈到的数据集是我们自己找的一些自定义数据集。那么在Pytorch中存在2种数据集(Dataset),即内置数据集(Built-in dataset)和自定义数据集(Custom d…...

MT1619 (A/B/C对应18W/22W/25W)如何避免温度高、电磁干扰

MT1619系列是一款开关电源芯片,其内部集成了一颗高集成度、高性能的电流模式 PWM 控制器和一颗功率 MOSFET。MT1619 具有恒功率功能,特别适用于 PD 充电器、电源适配器等中小功率的开关电源设备。极低的启动电流与工作电流、以及轻载或者无负载情况下的 …...

Hadoop 的基本 shell 命令

Hadoop 的基本 shell 命令主要用于与 Hadoop 分布式文件系统(HDFS)和 MapReduce 进行交互。以下是一些常用的 Hadoop shell 命令: 一、 HDFS 命令 1. 查看 HDFS 状态 hdfs dfsadmin -report: 显示 HDFS 的健康状态和容量信息。 2. 文件系统操…...

HCIP-交换实验

根据实验要求,完成实验内容: 实验拓扑图如下所示 : 搭建拓补图: LSW1,LSW2: [LS1]interface Eth-Trunk 0 [LS1-Eth-Trunk0]q [LS1]interface g0/0/3 [LS1-GigabitEthernet0/0/3]eth-trunk 0 [LS1]interf…...

Windows下线程的创建与使用(win32-API)

一、前言 线程是比进程更轻量级的执行单元,允许在一个进程中并发执行多个控制流。每一个线程都有自己的程序计数器、寄存器集和栈空间,但它们共享所属进程的全局数据和资源。这种共享内存模型使线程间的通信比进程间通信更为高效,同时也带来…...

华为OD机试(C卷,100分)- 游戏分组

题目描述 部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。 每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为示例尽量相近的两队。 一队的实力可以表示为这一队 5 名队员的评分总和。 现在给你…...

centos7.9系统按cloudpods

1. 简介: Cloudpods 是一款简单、可靠的企业IaaS资源管理软件。帮助未云化企业全面云化IDC物理资源,提升企业IT管理效率。 Cloudpods 帮助客户在一个地方管理所有云计算资源。统一管理异构IT基础设施资源,极大简化多云架构复杂度和难度&…...

android apk 加固后的地图加载异常及重新签名

1.首先根据需求将打包生成后的APK进行加固,可以使用360、阿里、腾讯加固等。 2.加固后的APK无法直接安装,需要重新进行签名。 3.首先找到sdk的位置,进入build-tools目录。 4.根据gradle文件选择版本目录。 5.将加固后的APK放至该目录下。在…...

手把手搭建私人在线备份系统

对于打工人来说,什么文件最重要? 那就是——打不开的文件最重要! 那么,如何才能避免这样的事情发生呢?这时候就需要使出我们的大杀器——文件备份! 文件备份怎么搞才最合适呢? 是使用移动硬盘&a…...

数据分析实操案例分享:如何对人事数据进行BI分析?

在数据驱动时代,数据分析已经成为企业和个人获取竞争优势的关键技能。特别是在人力资源管理领域,数据分析的应用正变得越来越重要。通过对在职和离职数据的深入分析,企业不仅能够洞察员工的动态,揭示员工流动的模式、预测人才需求…...

谷粒商城实战笔记-228-商城业务-认证服务-自定义SpringSession完成子域session共享

文章目录 一,228-商城业务-认证服务-自定义SpringSession完成子域session共享1. cookieSerializer()2. springSessionDefaultRedisSerializer() 一,228-商城业务-认证服务-自定义SpringSession完成子域session共享 前面弄清楚了分布式服务中的两个问题&…...

Elasticsearch核心

一、几个核心概念 1、节点:一个节点(Node)就是一个es进程,一个服务器可以部署多个节点 查询节点以及节点信息: http://127.0.0.1:9200/_cat/nodes?v 2、角色,是指节点在集群中担任什么角色&#xff1a…...

Python.NET:打开Python与.NET世界互通的大门

Python.NET 是一个强大的工具,它为 Python 程序员提供了一种与 .NET 公共语言运行时 (CLR) 无缝集成的途径。它就像一座桥梁,将 Python 的灵活性与 .NET 的强大功能连接起来,为开发者提供了前所未有的自由和可能性。 1. Python.NET 的核心价值…...

uniapp - plugins的组件配置使用

点击进入到uniapp中mp-weixin的配置中 点击进入小程序的plugin的配置 在项目中,我们可引用插件的使用,例如一些快递100,点餐插件的业务引入 添加插件 在使用插件前,首先要在小程序管理后台的“设置-第三方服务-插件管理”中添加…...

Microsoft Edge WebView2 截图

使用工具可以保存可见区域 CallDevToolsProtocolMethodAsync("Page.captureScreenshot", Params) always returns only visible part of html page including scrollbars. I tried all possible combinations of "fromSurface" and "captureBeyondVi…...

[word] 复杂文本如何仅全选word中的表格 (简单跟做即可)

问题描述 在word文档中,有各种形式的文本,有纯文本,有表格,有图片或者更多其它形式参杂在一起,本篇记录解决如何只全选中文档中的所有表格形式的部分,从而方便对表格进行批量修改和操作 环境说明 word版…...

Aop切面编程

学习视频 一、定义模型:订单保存模型,订单更新模型,业务层,日志模型 订单保存模型 /*** author durunwu* date 2024-08-20-21:04*/ Data public class SaveOrder {private Long id; }订单更新模型 /*** author durunwu* date …...

目标检测 | yolov9 原理和介绍

相关系列: 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…...

如何在不格式化的情况下解锁Android智能手机密码

如果您忘记了密码,您的 Android 移动设备会将您锁定。发生这种情况时,通常可以通过执行恢复出厂设置来重新获得对设备的访问权限。可悲的是,这将导致所有数据的丢失。下面列出了在不丢失任何个人数据的情况下解锁锁定的Android 手机的有效方法…...