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

Nginx网站服务

Nginx概述

Nginx 是开源、高性能、高可靠、低资源消耗的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求

Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器

Nginx和Apache的差异

Apache: 创建多个进程或线程,而每个进程或线程都会为其分配cpu和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会榨干服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx 支持更高的并发

1)nginx相对于apache的优点∶

  • 轻量级,同样起web服务,比apache占用更少的内存及资源
  • 抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能
  • 高度模块化的设计,编写模块相对简
  • 支持热部署,平滑升级

2)apache相对于nginx的优点∶

  • Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)
  • 模块多,基本想到的都可以找到
  • 少bug, nginx的bug相对较多
  • 超稳定
  • Nginx处理动态请求是弱项,动态请求要Apache去做。

总结:一般来说,需要性能的web服务,用Nginx. 如果不需要性能只求稳定,那就Apache。Nginx处理动态请求是弱项,一般动态请求要Apache去做,Nginx只适处理静态网页或反向代理

Nginx的进程

Apache和Nginx的默认端口都是80,如果其中一个已经启动了,那么再启动另一个会报错。如果想要同时使用,可以修改其中一个的端口号

Nginx有两个进程

1)master process:主进程(守护进程),用来管理工作进程

2)worker process:工作进程,用来处理用户的请求

编译安装nginx服务

1 关闭防火墙,将nginx所需压缩包上传到/opt目录下

 [root@zy2 ~]# systemctl stop firewalld[root@zy2 ~]# setenforce 0[root@zy2 ~]# ls /opt/nginx-1.18.0.tar.gz  rh

2 安装依赖包

[root@zy2 ~]# yum install -y pcre-devel zlib-devel openssl-devel gcc gcc-c++ make​#各程序作用解释如下:gcc                     #C语言的编译器gcc-c++                 #C++的编译器make                    #源代码编译器(源代码转换成二进制文件)pcre-devel              #perl的接口开发包,提供正则表达式zlib-devel              #提供压缩功能

3 创建运行用户和组,便于管理

[root@zy2 ~]# useradd -M -s /sbin/nologin nginx
#创建Nginx程序用户,不生成家目录,不允许登录系统;Nginx服务程序默认nobody身份运行,建议为期创建专门的用户账号,以便更准确的控制其访问权限,

4 解压软件包,编译安装nginx

 [root@zy2 ~]# cd /opt[root@zy2 opt]# lsnginx-1.18.0.tar.gz  rh[root@zy2 opt]# tar xf nginx-1.18.0.tar.gz[root@zy2 opt]# lsnginx-1.18.0  nginx-1.18.0.tar.gz  rh​#切换到源码目录,运行configure脚本,指定安装路径和安装模块等。[root@zy2 opt]# cd nginx-1.18.0/[root@zy2 nginx-1.18.0]# ./configure \--prefix=/usr/local/nginx \       #指定nginx的安装路径--user=nginx \                    #指定用户名(运行用户)--group=nginx \                   #指定组名--with-http_stub_status_module    #启用http_stub_status_module模块以支持状态统计​#开2核同时编译,之后安装[root@zy2 nginx-1.18.0]# make -j2 && make install

5 将nginx的操作指令放入环境变量PATH的目录下

[root@zy2 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/    #让系统识别nginx的操作指令

6 检查、启动、重启、停止nginx服务

#检查配置文件是否配置正确[root@zy2 ~]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful​#启动nginx服务[root@zy2 ~]# nginx      

多种方式查看nginx的PID号

logs目录下的文件nginx.pid,存放nginx的工作进程号。

nginx有两个进程:主进程和工作进程

[root@zy2 ~]# pgrep nginx -l
54266 nginx
55351 nginx
[root@zy2 ~]# cat /usr/local/nginx/logs/nginx.pid 
54266
[root@zy2 ~]# netstat -nltp | grep nginx  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      54266/nginx: master 
[root@zy2 ~]# ss -nltp | grep nginx  
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=55351,fd=6),("nginx",pid=54266,fd=6))
[root@zy2 ~]# lsof -i :80
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   54266  root    6u  IPv4 142567      0t0  TCP *:http (LISTEN)
nginx   55351 nginx    6u  IPv4 142567      0t0  TCP *:http (LISTEN)

停止nginx服务

注意:nginx有主进程和工作进程,一定要杀死主进程(即父进程)

[root@zy2 ~]# kill -3 54266    #通过主进程的PID号杀死nginx进程
[root@zy2 ~]# netstat -ntap | grep nginx   #此时已查不到进程​#杀死nginx进程的多种方式kill -3 <PID号>             #"kill -3"杀死进程时可以记录事故现场的信息(打印进程各个线程的堆栈信息)kill -s QUIT <PID号>         #-s 指定信号killall -3 nginxkillall -3 QUIT <PID号>

重载nginx服务

[root@zy2 ~]# nginx   #一般用绝对路径启动:/usr/local/nginx/sbin/nginx
[root@zy2 ~]# netstat -natp |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      56272/nginx: master 
[root@zy2 ~]# cat /usr/local/nginx/logs/nginx.pid 
56272
[root@zy2 ~]# kill -1 56272
[root@zy2 ~]# netstat -natp |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      56272/nginx: master ​​#重载nginx服务的多种方式kill -1 <PID号>kill -s HUP <PID号>killall -1 nginxkillall -s HUP <PID号>

日志分割(移走原有日志,重新打开日志文件):kill -USR1 <PID号>

 [root@zy2 ~]# cd /usr/local/nginx/logs   #切换到日志目录[root@zy2 logs]# lsaccess.log  error.log  nginx.pid[root@zy2 logs]# mkdir log.bak[root@zy2 logs]# mv *.log log.bak      #将原有日志移走[root@zy2 logs]# lslog.bak  nginx.pid[root@zy2 logs]# kill -USR1 56272       #重新生成日志文件[root@zy2 logs]# lsaccess.log  error.log  log.bak  nginx.pid

升级nginx服务

 #平滑升级:kill -USR2 <PID号>​#新版本升级:#先进入官网下载最新版本的Nginx 然后解压tar xf nginx-1.22.0.tar.gz       #1.22.0代表新版本号cd nginx-1.22.0./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_stub_status_module \--with-http_ssl_module​#重新编译:make -j2    #注意:不要make install,此时会在/nginx-1.22.0/objs/生成nginx二进制文件mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx_old  #备份旧文件,方便回滚cp objs/nginx /usr/local/nginx/sbin/nginx             #将新的运行文件放入安装的运行目录make upgrade     #编译升级或者 kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`#或者先 killall -3 nginx ,再 /usr/local/nginx/sbin/nginx   开启新的nginx最后nginx -v 检查nginx版本是否为新版本

添加nginx系统服务,通过systemctl 来管理nginx

方法一:将nginx命令加入服务,编写/lib/systemd/system/nginx.service文件

 [root@zy2 ~]# cd /usr/lib/systemd/system/[root@zy2 system]# vim nginx.service[Unit]Description=nginx    #描述服务After=network.target   #表示依赖于network.target启动之后再启动自定义服务[Service]Type=forking    #后台运行PIDFile=/usr/local/nginx/logs/nginx.pidExecStart=/usr/local/nginx/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true   #表示给服务分配独立的临时空间[Install]WantedBy=multi-user.target​[root@zy2 system]# systemctl daemon-reload      //重载配置[root@zy2 system]# netstat -natp |grep nginxtcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      57716/nginx: master [root@zy2 system]# kill -3 57716[root@zy2 system]# netstat -natp |grep nginx[root@zy2 system]# systemctl start nginx[root@zy2 system]# netstat -natp |grep nginxtcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      57899/nginx: master[root@zy2 system]# systemctl stop  nginx[root@zy2 system]# netstat -natp |grep nginx​#之后可以使用systemctl start|stop|restart|enable nginx 来管理服务

方法二:在 /etc/init.d/中创建脚本,再用chkconfig加入到chkconfig列表中,用service nginx来管理nginx

 [root@zy2 ~]# vim /etc/init.d/nginx#!/bin/bash#chkconfig: 35 20 99    #35:在第三第五个运行级别中开机自动启动   20:第二十个启动 
99:第九十九个关闭   '-'表示在所有运行级别在不做开机自启动#description:This is nginx control scriptRUN="/usr/local/nginx/sbin/nginx"PID=`cat /usr/local/nginx/logs/nginx.pid`case "$1" instart)$RUN;;stop)kill -3 $PID;;restart)kill -3 $PID          #或者 $0 stop  #$0表示脚本本身 $RUN                  #$0 start;;reload)kill -1 $PID;;status)if ss -lntp | grep nginx &> /dev/nullthenecho 'nginx is running!'  #注意:这里有‘!’,用双引号会被视为取反,所以只能用单引号elseecho 'nginx is not running!'fi    ;;*)echo "正确用法为:$0 {start|stop|restart|reload|status}"exit 1    #返回值非0esacexit 0​[root@zy2 ~]# chomod +x nginx          //给nginx赋予权限[root@zy2 ~]# chkconfig --add nginx    //将nginx加入chkconfig[root@zy2 ~]# chkconfig --list         //查看chkconfig列表​[root@zy2 ~]# service nginx start       //开启服务,或 systemctl start nginx [root@zy2 ~]# ss -natp | grep nginx     //查看服务

Nginx服务的主配置文件

主配置文件位置:/usr/local/nginx/conf/nginx.conf 

/usr/local/nginx/conf/ 目录下:nginx.conf 是主配置文件;nginx.conf.default 是主配置文件的备份文件

主配置文件中有六个主要模块:

1、全局块:全局配置,对全局生效。

2、events块:配置影响Nginx服务器与用户的网络连接。

3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。

4、server块:配置虚拟主机的相关参数,一个http块中可以有多个server 块。每个 server 块就相当于一个虚拟主机。。

5、location块:用于配置匹配的url,一个server块中可以有多个location块。

6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分

全局块(全局配置)

就是配置文件从头开始到 events 块之间的内容,主要设置的是影响nginx服务器整体运行的配置指令。比如 worker_process,值越大,可以支持的并发处理量也越多,但是还是和服务器的硬件相关。

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

 #user  nobody;                  //运行用户,若编译时未指定则默认为nobody,若编译指定了用户则会写到二进制程序里变成默认配置。此前编译时指定了"--user=nginx",所以现在二进制程序中的运行用户为nginxworker_processes  1;            //工作进程数量,一般设置为和CPU核数一样,所以也可以设置为auto,让nginx自动根据cpu数量进行设置#error_log  logs/error.log;     //错误日志文件的位置#pid  logs/nginx.pid;           //PID文件的位置

events块( I/O 事件配置)

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

 events  {use epoll;    //使用epoll模型。2.6及以上版本的系统内核,建议使用epo11模型以提高性能,实现I/O多路复用,异步非阻塞worker_connections  4096;  //每个工作进程处理4096个连接。默认值为1024。一般设置为2的次方}#如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大
文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打
开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是个
文件句柄)。
#可使用"ulimit -a"命令查看系统允许当前用户进程打开的文件数限制
#epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强
版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

查看Nginx支持的最大并发量(软件支持、系统支持、CPU性能):

1.软件配置支持多少并发量,由主配置文件nginx.conf决定:理论上支持的并发量=工作进程数量×每个工作进程处理的连接数

2.系统会限制本地每个用户进程可以同时打开的最大文件数量(默认连接数最大1024),即系统会限制每个进程的连接数

使用"ulimit -a"或 '"ulimit -n"可查看系统允许当前用户进程打开的文件数限制

  • “ulimit -n 最大文件数”命令可临时修改本地每个用户进程可以同时打开的最大文件数。
  • vim /etc/security/limits.conf,编辑该文件可永久修改

 修改完需要重启系统

注:#第一列为用户和组  #第二列为磁盘限额,软硬限制。hard表示硬限制。  #第三列为项目。nofile表示最大可打开文件数量。  #第四列为相应项目的数量

3.实际工作中还要进行压测,测试CPU性能能否支持这个最大并发量

http块(HTTP 配置)

http块:包括 http 全局块,以及多个 server 块。

http {##文件扩展名与文件类型映射表include  mime.types;##默认文件类型default_type  application/octet-stream;##日志格式设定#log_format main '$remote_addr - $remote_user [$time_local] "$request" '#      '$status $body_bytes_sent "$http_referer"#     '"$http_user_agent" "S$http_x_forwarded_for"' ;##访问日志位置#access_log logs/access.1og main;##开启文件传输模式sendfile  on;##减少网络报文段的数量#tcp_nopush  on;##连接保持超时时间,单位是秒#keepalive_timeout 0;keepalive_timeout 65;##gzip模块设置,设置是否开启gzip压缩输出#gzip  on;##Web服务的监听配置server {##监听地址及端口listen 80;##站点域名,可以有多个,用空格隔开server_name www.yuji.com;##网页的默认字符集charset utf-8;##根目录配置location / {##网站根目录的位置/usr/1ocal/nginx/htmlroot html ;##默认首页文件名index index.html index.php;}##内部错误的反馈页面error_page 500 502 503 504 /50x.html;##错误页面配置location = /50x.html {root html ;}}}

日志格式设定:  $remote_addr与$http_x_forwarded_for 用以记录客户端的ip地址。  $remote_addr:记录上一个请求消息发送端的IP(代理服务器的IP)。  $http_x_forwarded_for :会记录所有经过的服务器的IP地址。  $remote_user:用来记录客户端用户名称。  $time_local:用来记录访问时间与时区。  $request:用来记录请求的url与http协议。  $status:用来记录请求状态;成功是200。  $body_bytes_sent:记录发送给客户端文件主体内容大小。  $http_referer:用来记录从哪个页面链接访问过来的。  $http_user_agent: 记录客户浏览器的相关信息。  ​  通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

访问状态统计配置

1.查看nginx的安装模块,是否包含 HTTP_STUB_STATUS 模块

先使用命令 /usr/local/nginx/sbin/nginx -V 查看已安装的nginx是否包含 HTTP_STUB_STATUS 模块

 nginx -v    #查看nginx的版本。此前已将nginx的可执行文件放入PATH的目录中,所以可以直接使用nginx命令​nginx -V    #查看nginx的版本,以及编译安装时的配置参数​cat /opt/nginx-1.12.0/auto/options   #查看nginx已安装和未安装的模块,with表示已安装,without表示未安装​cat /opt/nginx-1.12.0/auto/options | grep "YES"   #查看nginx已安装的所有模块

查看 HTTP_STUB_STATUS 模块是否已安装:cat /opt/nginx-1.12.2/auto/options | grep "HTTP_STUB_STATUS"

2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置

 [root@zy2 ~]# cd /usr/local/nginx/conf[root@zy2 conf]# cp nginx.conf nginx.conf.bak    //备份原配置文件[root@zy2 conf]# vim nginx.conf    //编辑配置文件..........http {..........server {listen   80;server_name   www.kgc.com;charset   utf-8;location / {root   html;index   index.html   index.php;}##添加 stub_status 配置location / status {         #访问位置为/statusstub_status   on;   #打开状态统计功能            access_log   off;   #关闭此位置的日志记录}}}

3. 重启服务,访问测试

 [root@zy2 conf]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@zy2 conf]# systemctl restart nginx

浏览器访问:192.168.126.22/status

相关文章:

Nginx网站服务

Nginx概述 Nginx 是开源、高性能、高可靠、低资源消耗的 Web 和反向代理服务器&#xff0c;而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启动&#xff0c;还能在不间断服务的情况下对软件版本进行热更新。对HTTP并发…...

第八篇 Spring 集成JdbcTemplate

《Spring》篇章整体栏目 ————————————————————————————— 【第一章】spring 概念与体系结构 【第二章】spring IoC 的工作原理 【第三章】spring IOC与Bean环境搭建与应用 【第四章】spring bean定义 【第五章】Spring 集合注入、作用域 【第六章】…...

双塔模型:微软DSSM模型浅析

1.背景 DSSM是Deep Structured Semantic Model (深层结构语义模型) 的缩写&#xff0c;即我们通常说的基于深度网络的语义模型&#xff0c;其核心思想是将query和doc映射到到共同维度的语义空间中&#xff0c;通过最大化query和doc语义向量之间的余弦相似度&#xff0c;从而训…...

DAY 44 Apache网页优化

Apache网页优化 概述 在企业中&#xff0c;部署Apache后只采用默认的配置参数&#xff0c;会引发网站很多问题&#xff0c;换言之默认配置是针对以前较低的服务器配置的&#xff0c;以前的配置已经不适用当今互联网时代 为了适应企业需求&#xff0c;就需要考虑如何提升Apach…...

移动端手机网页适配iPad与折叠屏设备

采用的网页适配方案&#xff1a;移动端页面px布局适配方案&#xff08;viewport&#xff09; 产生此问题的原因 由于手机与平板等设备宽高比差异导致页面展示不全或者功能按钮展示在视口之外点击不到。 简单来说就是我们的页面都是瘦长(即高大于宽)的&#xff0c;而折叠屏等设…...

深入剖析 Qt QMap:原理、应用与技巧

目录标题 引言&#xff1a;QMap 的重要性与基本概念QMap 简介&#xff1a;基本使用方法&#xff08;QMap Basics: Concepts and Usage&#xff09;QMap 迭代器&#xff1a;遍历与操作键值对&#xff08;QMap Iterators: Traversing and Manipulating Key-Value Pairs&#xff0…...

SpringBoot使用Hbase

SpringBoot使用Hbase 文章目录 SpringBoot使用Hbase一&#xff0c;引入依赖二&#xff0c;配置文件添加自己的属性三&#xff0c;配置类注入HBASE配置四&#xff0c;配置Hbase连接池五&#xff0c;配置操作服务类 一&#xff0c;引入依赖 <dependency><groupId>org…...

SQL优化总结

SQL优化总结 1. MySQL层优化五个原则2. SQL优化策略2.1 避免不走索引的场景 3. SELECT语句其他优化3.1 避免出现select *3.2 避免出现不确定结果的函数3.3 多表关联查询时&#xff0c;小表在前&#xff0c;大表在后。3.4 使用表的别名3.5 调整Where字句中的连接顺序 附录 1. My…...

【python学习】基础篇-字典的基本操作 获取当前日期时间

1.字典的定义与创建 定义字典时&#xff0c;每个元素都包含两个部分“键”和“值”&#xff0c;在“键”和“值”之间使用冒号(:)分隔&#xff0c;相邻两个元素使用逗号分隔&#xff0c;所有元素放在一个大括号“{}”中。语法格式如下: dictionary (‘key1’:‘value1’, &quo…...

Python FreeCAD.Vector方法代码示例

Python FreeCAD.Vector方法代码示例 本文整理汇总了Python中FreeCAD.Vector方法的典型用法代码示例。如果您正苦于以下问题&#xff1a;Python FreeCAD.Vector方法的具体用法&#xff1f;Python FreeCAD.Vector怎么用&#xff1f;Python FreeCAD.Vector使用的例子&#xff1f;那…...

HDFS 梳理

HDFS客户端 客户端作用 管理文件目录文件系统操作读写 客户端生成 配置项 配置 客户端状态 缓冲相关参数&#xff0c;读写缓冲 失败切换操作 推测执行?? NN引用 NNProxy 客户端关闭 关闭IO流 修改状态 关闭RPC连接 是否有多个RPC连接&#xff1f; HDFS读 打开文件构…...

ChatGPT团队中,3个清华学霸,1个北大学霸,共9位华人

众所周知&#xff0c;美国硅谷其实有着众多的华人&#xff0c;哪怕是芯片领域&#xff0c;华为也有着一席之地&#xff0c;比如AMD 的 CEO 苏姿丰、Nvidia 的 CEO 黄仁勋 都是华人。 还有更多的美国著名的科技企业中&#xff0c;都有着华人的身影&#xff0c;这些华人&#xff…...

通过工具生成指定 类型 大小 文件

今天给大家介绍一个神器 首先 大家在开发过程中或许经常需要涉及到文件上传类的功能 需要测试文件过大 空文件等等清空 不同大小的文件 而这种文件大小是比较不好控制的 但大家可以下载我的资源 文件生成工具(可生成指定大小 类型文件) 下载下来里面就有一个 fileGeneration…...

超外差收音机的制作-电子线路课程设计-实验课

超外差收音机的制作 一、原理部分&#xff1a; 超外差收音机&#xff1a;超外差式收音机是将接收到的不同频率的高频信号全部变成一个固定的中频信号进行放大&#xff0c;因而电路对各种电台信号的放大量基本是相同的&#xff0c;这样可以使中放电路具有优良的频率特性。 超…...

TensorFlow 深度学习实战指南:1~5 全

原文&#xff1a;Hands-on Deep Learning with TensorFlow 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…...

【数据结构】队列的实现

白日去如箭&#xff0c;达者惜今阳。 --朱敦儒目录 &#x1f681;前言&#xff1a;​ &#x1f3dd;️一.队列的概念及结构 &#x1f33b;二.队列各种功能的实现 &#x1f34d;1.队列的初始化 &#x1f3dd;️2.队列…...

【数据库】— 无损连接、Chase算法、保持函数依赖

【数据库】— 无损连接、Chase算法 Chase算法Chase算法举例一种简便方法&#xff1a;分解为两个模式时无损连接和函数依赖的一个简单例子 Chase算法 形式化定义&#xff1a; 构造一个 k k k行 n n n列的表格&#xff0c;每行对应一个模式 R i ( 1 ≤ i ≤ k ) Ri (1≤i ≤ k)…...

用英语翻译中文-汉字英文翻译

中文转英语翻译 作为一款高效、准确的中文转英语翻译软件&#xff0c;我们的产品可以帮助全球用户更好地沟通和合作&#xff0c;实现跨文化交流。 在全球化的今天&#xff0c;中英文翻译已经成为商务、学术、娱乐等各个领域不可或缺的一部分。我们的中文转英语翻译软件是为了…...

瑞吉外卖项目——缓存优化

用户数量多&#xff0c;系统访问量大 频繁访问数据库&#xff0c;系统性能下降&#xff0c;用户体验差 环境搭建 maven坐标 在项目的pom.xml文件中导入spring data redis的maven坐标: <dependency><groupId>org.springframework.boot</groupId><arti…...

从头创建一个新的浏览器,这合理吗?

从头构建一个新浏览器&#xff1f;这如果是不是个天大的“伪需求”&#xff0c;便是一场开发者的噩梦&#xff01; 要知道&#xff0c;如果没有上百亿的资金和数百名研发工程师的投入&#xff0c;从头开始构建一个新的浏览器引擎&#xff0c;几乎是不可能的。然而SerenityOS系统…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...