nginx详解(持续更新)

nginx定义

nginx安装

nginx目录

程序相关命令

服务相关命令

虚拟主机(server)

路由匹配(location)

  代理(proxy_pass)

   正向代理

   反向代理

   负载均衡(upstream)

    负载均衡策略

动静分离

跨域

https配置

nginx优化

nginx实例

nginx定义

Nginx是轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

Nginx最初仅仅主要被用于做反向代理,后来随着HTTP核心的成熟和各种HTTP扩展模块的丰富,Nginx越来越多被用来取代Apache而单独承担HTTP Server的责任,例如目前淘宝内各个部门正越来越多使用Nginx取代Apache.

nginx安装

安装nginx需要先安装其依赖组件以及c++环境,最后安装nginx;

组件包含:

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

  1. 组件下载

    wget http://nginx.org/download/nginx-1.10.2.tar.gz
    wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
    wget http://zlib.net/zlib-1.2.11.tar.gz
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz

  2. c++环境安装

    yum install gcc-c++

  3. 组件安装

    openssl安装

      tar zxvf openssl-fips-2.0.10.tar.gz
      cd openssl-fips-2.0.10
      ./config && make && make install

    pcre安装

      tar zxvf pcre-8.40.tar.gz
      cd pcre-8.40
      ./configure && make && make install

    zlib安装

      tar zxvf zlib-1.2.11.tar.gz
      cd zlib-1.2.11
      ./configure && make && make install

  4. nginx安装

    tar zxvf nginx-1.10.2.tar.gz
    cd nginx-1.10.2
    ./configure && make && make install

nginx目录

  1. linux目录

    目录 内容
    conf 存放配置文件
    html 类似于tomcat的webapps目录,存放网络访问的资源
    logs存放日志
    sbin存放nginx的启动文件
  2. windows目录

    在这里插入图片描述
    核心配置文件位置:
    在这里插入图片描述

程序相关命令

  1. linux系统

    安装完成后的路径为:/usr/local/nginx。nginx位于/usr/local/nginx/sbin,以下命令都是基于这个目录的
    (也可以将/usr/local/nginx/sbin添加到环境变量中)

    1. 启动服务

      • 普通启动服务:./nginx
      • 配置文件启动服务:./nginx -c /usr/local/nginx/conf/nginx.conf

    2. 停止服务

      • 暴力停止服务:./nginx -s stop
      • 优雅停止服务:./nginx -s quit

    3. 检查与重启服务

      • 检查配置文件:./nginx -t
      • 重新加载配置:./nginx -s reload

    4. 查看相关进程

      • 查看相关进程:ps -ef | grep nginx

服务相关命令

  1. linux系统

    #开机自动启动systemctl
    systemctl enable nginx
    
    #启动Nginx(x成功后可以直接访问主机IP,会展示Nginx默认页面)
    systemctl start nginx
    
    #停止Nginx
    systemctl stop nginx
    
    #重启Nginx
    systemctl restart nginx
    
    #重新加载Nginx
    systemctl reload nginx
    
    #查看Nginx运行状态
    systemctl status nginx
    

虚拟主机(server)

(服务器级别)nginx使用server容器定义一个虚拟主机。server容器没有严格区分基于IP和基于名称的虚拟主机,它们通过listen指令和server_name指令结合起来形成不同的虚拟主机。

# 基于IP地址的虚拟主机
server {
        listen 80;
        server_name 192.168.100.25;
        location / {
                root /www/longshuai/;
                index index.html index.htm;
        }
}
server {
        listen 80;
        server_name 192.168.100.26;
        location / {
                root /www/xiaofang/;
                index index.html index.htm;
        }
}

# 基于名称的虚拟主机
server {
        listen 80;
        server_name www.longshuai.com;
        location / {
                root /www/longshuai/;
                index index.html index.htm;
        }
}

server {
        listen 80;
        server_name www.xiaofang.com;
        location / {
                root /www/xiaofang/;
                index index.html index.htm;
        }
}

# 基于端口的虚拟主机
server {
        listen 80;
        server_name 192.168.100.25;
        location / {
                root /www/longshuai/;
                index index.html index.htm;
        }
}
server {
        listen 8080;
        server_name 192.168.100.25;
        location / {
                root /www/xiaofang/;
                index index.html index.htm;
        }
}

路由匹配(location)

->点击查看nginx实例

(请求级别)nginx根据用户请求的URI对应至server模块,然后依靠location块的匹配规则,选择进入对应location块进行处理。

修饰符匹配规则如下:

在这里插入图片描述

它们之间匹配优先级:精确匹配>左侧通配符匹配>右侧通配符匹配>正则表达式匹配

进入对应的location块后再通过root指令和index指令结合起来配置被访问的首页即可

指令内容
root配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
index配置首页文件的名称

写法如下:

location / {
    root html; 
    index index.html index.htm; 

}

正向代理

正向代理对我们是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。

在这里插入图片描述

反向代理

->点击查看nginx实例

以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端

举个栗子,我想在本地使用 www.mickey.com 的域名去访问 www.taobao.com。那么这个时候我们就可以通过nginx去实现。

在这里插入图片描述

nginx负载均衡

->点击查看nginx实例

  1. 负载均衡

    我们项目部署在不同的服务器上,但是通过统一的域名进入,nginx则对请求进行分发,减轻了各服务器的压力。

    负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种:

    负载种类成本内容
    硬件负载造价昂贵成本较高数据的稳定性安全性等等有非常好的保障
    软件负载均衡 利用现有的技术结合主机硬件实现的一种消息队列分发机制
  2. 负载均衡策略

    请求数量按照负载均衡策略进行分发到不同的服务器

负载均衡策略

->点击查看nginx实例

  1. 轮询策略(默认)

    每个请求按时间顺序,逐一分配到不同的后端服务器,这是默认的负载均衡策略。如果后端服务器down掉,能自动剔除。

    #动态服务器组
    upstream bobo{
    	server 192.168.64.1:9001; #tomcat 1
    	server 192.168.64.1:9002; #tomcat 2
    	server 192.168.64.1:9003; #tomcat 3
    	server 192.168.64.1:9004; #tomcat 4
    }
    
    
    location ~ .jps$ {
    	proxy_pass http://bobo
    	
    }
    
    

    轮询策略可以给不同的后端服务器设置一个权重值(weight),所谓权重就是按照比例来进行分配,如果有三次请求,2次在第一个机器上,1次在另外一个机器上。
    权重大小和访问比率成正比,该策略常用于后端服务器性能不均衡的情况下。

    #动态服务器组
    upstream dynamicserver {
    	server 192.168.64.1:9001  weight=2;                    #tomcat 1
    	server 192.168.64.1:9002;                              #tomcat 2
    	server 192.168.64.1:9003;                              #tomcat 3
    	server 192.168.64.1:9004;                              #tomcat 4
    }
    
    
  2. ip_hash策略

    (nginx版本1.3.1之前不能在ip_hash中使用权重)
    对每个请求访问的ip进行hash运算,再根据结果进行分配,这样每个访客固定访问一个后端服务器。
    这也在一定程度上解决了集群部署环境下session共享的问题。
    当有服务器需要剔除,必须手动down掉。

    upstream dynamicserver {
    	ip_hash;  #保证每个访客固定访问一个后端服务器
    	server 192.168.64.1:9001  weight=2;                   #tomcat 1
    	server 192.168.64.1:9002;                             #tomcat 2
    	server 192.168.64.1:9003;                             #tomcat 3
    	server 192.168.64.1:9004;                             #tomcat 4
    }
    
  3. fair

    智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块

  4. url_hash

    按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向代理服务器,反向代理了多台真实的业务处理服务器。

动静分离

->点击查看nginx实例

在说动静分离前,我们要知道为何要做动静分离以及他能解决啥问题,首先,我们常见的web系统中会有大量的静态资源文件比如掘金主页面刷新后的f12如下:

在这里插入图片描述

可以看到有很多静态资源,如果将这些资源都搞到后端服务的话,将会提高后端服务的压力且占用带宽增加了系统负载(要知道,静态资源的访问频率其实蛮高的)所以为了避免该类问题我们可以把不常修改的静态资源文件放到nginx的静态资源目录中去,这样在访问静态资源时直接读取nginx服务器本地文件目录之后返回,这样就大大减少了后端服务的压力同时也加快了静态资源的访问速度,何为静,何为动呢?

• 静: 将不常修改且访问频繁的静态文件,放到nginx本地静态目录(当然也可以搞个静态资源服务器专门存放所有静态文件)
• 动: 将变动频繁/实时性较高的比如后端接口,实时转发到对应的后台服务

接下来我们将构造一个html页面,然后点击按钮后发送get请求到后端接口,流程如下:

在这里插入图片描述

server {
	listen 9000;
	server_name localhost;
	
	location ~*.(jps|js|css|html|png|gif|map)$ {
		root /usr/local/web;
		expires 1d;
	
	}

	location ~.action$ {
		proxy_pass http:1.117.75.21:8080;
	
	}
	
}

跨域

->点击查看nginx实例

  1. 同源策略

    由于同源策略的原因产生了跨域问题,同源策略目的是为了保护用户信息安全,防止恶意网站窃取数据,目前所有浏览器都实现同源策略。

    同源策略主要是指三点相同即:协议 、域名、端口,这三点相同的两个请求则可以看作是同源的,如果其中任意一点不同,则代表两个不同源的请求,此时同源策略会限制不同源之间的资源交互。

  2. 场景

    web 领域开发中,经常采用前后端分离模式。这种模式下,前端和后端分别是独立的 web 应用程序,例如:后端是 Java 程序,前端是 React 或 Vue 应用。各自独立的 web app 在互相访问时,势必存在跨域问题。

  3. 解决跨域

    避免不同源可以解决跨域,将后端的代理放在前端的server(即统一使用一个端口),因为server支持多个location配置

https配置

  1. 前置条件

    • 服务器已经安装nginx并且通过http可以正常访问
    • 拥有ssl证书,没有的可以去阿里购买或者免费申请一年

  2. ssl模块安装

    一般情况下自己安装的nginx都是不存在ssl模块的

    1. 检查是否存在ssl模块

      进行Nginx安装目录的sbin目录下,输入:./nginx -V

      如果出现 (configure arguments: --with-http_ssl_module), 则已安装

  3. 配置ssl证书

    解压缩下载好的证书(证书一般是pem文件和key文件,这里名字可以随便改)

    将下载好的证书上上传到服务器,我将证书放在了root目录下的card文件夹

  4. 配置nginx.conf

    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
      server {
      	#监听443端口
        listen 443;
        #你的域名
        server_name huiblog.top; 
        ssl on;
        #ssl证书的pem文件路径
        ssl_certificate  /root/card/huiblog.top.pem;
        #ssl证书的key文件路径
        ssl_certificate_key /root/card/huiblog.top.key;
        location / {
         	proxy_pass  http://公网地址:项目端口号;
        }
      }
      server {
        listen 80;
        server_name huiblog.top;
        #将请求转成https
        rewrite ^(.*)$ https://$host$1 permanent;
      }
    }
    
    

nginx优化

  1. 安全优化(提升网站安全性配置)

  2. 性能优化(提升用户访问网站效率)

nginx实例

一些对安全性要求比较高的站点,可能会使用 HTTPS(一种使用ssl通信标准的安全HTTP协议),使用 nginx 配置 https 需要知道几点:
• HTTPS 的固定端口号是 443,不同于 HTTP 的 80 端口
• SSL 标准需要引入安全证书,所以在 nginx.conf 中你需要指定证书和它对应的 key

->模仿多个主机

->location匹配

->反向代理

->负载均衡

->动静分离

->跨域

  1. 模仿多个主机

    • (Linux服务器)修改nginx配置文件如下,并重启
    在这里插入图片描述
    • (客户机)修改hosts文件

    192.168.64.150 www.abc.com
    192.168.64.150 www.bbs.com
    
  2. location匹配

    1. 前缀匹配

      • 没有修饰符,修改配置文件如下,并重启nginx

      server {
          listen       80;
          server_name www.tangbb.com;
          location /abc {
              default_type text/html;
              echo "abc...";
          }
      }
      

      • 可匹配示例:

      www.tangbb.com/abc
      www.tangbb.com/abc/other
      www.tangbb.com/abc?.…

    2. 通用匹配

      • 一般nginx配置文件最后都会有一个通用匹配规则,当其他匹配规则均失效时,请求会被路由给通用匹配规则处理;如果没有配置通用匹配,并且其他所有匹配规则均失效时,nginx会返回 404 错误

      server {
          listen       80;
          server_name www.tangbb.com;
          location /{
              default_type text/html;
              echo "abc...";
          }
      }
      
    3. 精确匹配

      • 精确匹配使用 = 表示,nginx进行路由匹配的时候,精确匹配具有最高的优先级,请求一旦精确匹配成功nginx会停止搜索其他到匹配项

      server {
          listen       80;
          server_name www.tangbb.com;
          location = /abc {
              default_type text/html;
              echo "abc...";
          }
      }
      

      • 可匹配示例:

      www.tangbb.com/abc
      www.tangbb.com/abc?.…

      • 无法匹配示例:

      www.tangbb.com/abc/
      www.tangbb.com/abc/adcde

  3. 反向代理

    1. 打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页 面中

      • (Linux服务器-208.208.128.122)安装并启动tomcat,并对外开放8080端口
      • (客户机)浏览器验证访问208.208.128.122:8080
      • (客户机)更改host文件,添加一条DNS记录(208.208.128.122   www.123.com)
      • (Linux服务器-208.208.128.122)Nginx配置请求转发

      server {
      	listen 80;
      	server_name 208.208.128.122;
      	
      	location / {
      		root html;
      		proxy_pass http://127.0.0.1:8080
      		index index.html index.htm;
      	
      	}
      }
      

      测试:访问域名为 www.123.com,故访问该域名时会先到linux服务器,再转到本机127.0.0.1:8080路径

      在这里插入图片描述

    2. 简单示例

      • (后端服务器-172.30.128.64)tomcat启动Java项目,指定端口为8081

      在这里插入图片描述

      • (Nginx服务器-172.30.128.65)修改nginx.conf配置文件
        通过upstream指令块定义我们的上游服务器(即被代理的服务器)
        通过location指令块中的proxy_pass指令,指定该location要路由到哪个upstream

      在这里插入图片描述

        来了请求后会通过url路由到对应的location,然后nginx会将请求打到upstream定义的服地址中去

      • (Nginx服务器-172.30.128.65)重新加载nginx配置(nginx -s reload)

      • (Nginx服务器-172.30.128.65)关闭seLinux的限制(setenforce 0)

      • (客户机)更改host文件,添加一条DNS记录(www.proxytest.com),postman测试

      在这里插入图片描述

      • 流程分析
      在这里插入图片描述

    3. 根据访问路径跳转到不同端口的服务中
      要求:
        nginx监听端口8001
        访问http://127.0.0.1:8001/edu/ 直接跳转到 127.0.0.1:8081
        访问 http://127.0.0.1:8001/vod/ 直接跳转到 127.0.0.1:8082

      • 准备两个tomcat,一个8081端口,一个8082端口,具体如下:
      –>新建tomcat8081和tomcat8082两个文件夹
      –>将tomcat安装包分别存入并解压(需改对应配置文件),分别启动
      –>

  4. 负载均衡

    1. 轮询策略

      • (后端服务器)启动三个不同端口的服务,别分是8081、8082、8083

      在这里插入图片描述

      • (Nginx服务器)定义我们的上游服务器(即被代理的服务器),将三个ip + 端口放入upstream
      轮询是默认的,所以upstream不需要额外加参数

      在这里插入图片描述

      • (Nginx服务器)重新加载nginx配置(nginx -s reload)
      • (客户机)请求三次,可以看到是按upstream中的先后顺序来进行轮询的

      在这里插入图片描述

    2. 权重策略

      • (Nginx服务器)修改我们的上游服务器(即被代理的服务器)

      在这里插入图片描述

      • (客户机)发送四次请求,可以看到在一轮轮询中,8081命中1次,8082由于配置了 weight=2所以命中了2次,8083命中了1次。即配置了weight=2的8082服务,命中几率是8081或者8083的两倍

      在这里插入图片描述

    3. ip_hash策略

      • (Nginx服务器)修改我们的上游服务器(即被代理的服务器)

      在这里插入图片描述

      • (客户机)发送多次请求,可以看到,由于我的访问ip总是固定的宿主机的172.30.128.64 根据hash算法我的ip被匹配给了8083端口的服务,所以只要我不换ip 不管我请求多少次,请求都是被 转发到了8083的服务上了。

      在这里插入图片描述

    4. least_conn策略

      • (Nginx服务器)修改我们的上游服务器(即被代理的服务器)

      在这里插入图片描述

      最小连接数看不出啥效果,所以就不演示截图了,知道怎么配置最小连接数即可。

  5. 动静分离

    • 编写一个Html页面(index_page.html)并上传到虚拟机

    在这里插入图片描述

    • (Nginx服务器)配置俩location规则,一个( /frontend )是读取静态文件,一个(/backend)是转发到 我们配置的upstream服务中去。如下:

    在这里插入图片描述

    • (客户机)浏览器输入www.proxytest.com/frontend/ ,可以看到请求返回了一个html页面,其实就是我们刚才的 /usr/local/nginx/test/static/index_page.html文件

    在这里插入图片描述

    • (客户机)调用get请求

    在这里插入图片描述

  6. 跨域

    • nginx.conf 文件配置两个server,分别代表前后端,并且监听的端口以及域名名称都不一致,造成非"同源"场景(重启nginx)

    在这里插入图片描述

    • 修改index_page.html中的后端地址

    在这里插入图片描述

    • (客户机)更改host文件,添加一条DNS记录

    172.30.128.65 www.front.com
    172.30.128.65:90  www.backend.com
    

    • 浏览器复现

    在这里插入图片描述

    可以看到浏览器提示我们受同源规则影响我们不能跨域访问资源。造成的原因是我的两个域名解析出来的端口不一致 一个是80一个是90。不符合同源策略,所以必然会有跨域报错。
    • 修改配置文件,让一个server配置多个location(重启Nginx)

    在这里插入图片描述
    • 测试页面 www.xxxadminsystem.com/page/ (成功返回页面)

    在这里插入图片描述

    • 调用get请求(请求成功)

    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析之POWER Piovt的KPI设置

内容总结: 1.两个表格关联不上:需要添加辅助列,建立关联 2.添加辅助列后还关联不上:将虚线变为实线 3.根据需求要增加一些度量值 4.设置KPI后,绝对值选1后设定百分比 5.在透视表里面加入KPI状态 导入所关联的数据后建立…

关于Linux中的history命令

前言:本文内容为实操学习记录,不具有调研价值,仅供参考! 正文: 接触过Linux操作系统的朋友一般都知道history命令,直接输入history命令,会显示当前用户的历史输入记录。这个原理是linux会记录我…

python--os和os.path模块

>>> import os >>> #curdir #获取当前脚本的绝对路径 >>> os.curdir . >>> import os.path >>> #获取绝对路径 >>> os.path.abspath(os.curdir) C:\\Users\\GUOGUO>>> #chdir #修改当前目录 >&g…

深入理解指针(7)函数指针变量及函数数组(文章最后放置本文所有原码)

一、函数指针变量 什么是函数指针变量呢? 既然是指针变量,那么它指向的一定是地址,而且我们可以通过地址来调用函数的。 函数是否有地址呢?地址是什么? 经过上面的测试可以看到函数也是有地址的,而且其地…

如何准备科学海报

科学会议上的海报展示可以为早期职业研究人员提供宝贵的机会来练习他们的沟通技巧,获得有关他们研究的反馈,并扩大他们的网络。“通过与其他研究人员一对一地讨论我的工作,[我发现]我可以确定哪些工作做得好,哪些需要改进&#xf…

dnf手游:如何利用副本和任务快速积累泰拉财富?

DNF手游中,搬砖赚钱的方式多种多样,其中利用副本和任务是一种快速赚取泰拉的有效途径。本攻略将介绍如何通过参与副本和任务来获取泰拉,帮助玩家在游戏中获得更多的经济收益。 一、认识游戏中的泰拉 在DNF手游中,泰拉是一种主要的…

HarmonyOS 开发之应用/组件级配置

在开发应用时,需要配置应用的一些标签,例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。 应用包名配置 应用需要在工程的AppScope目录下的 app.json5配置文件 中配置bundleName标签,该标签用于标识应用…

Containerd 介绍、安装和使用

Containerd介绍、安装和使用 文章目录 Containerd介绍、安装和使用1.containerd是什么?2.Containerd安装2.1 主机初始化2.1.1 设置ip地址2.1.2 配置镜像源2.1.3 关闭防火墙2.1.4 禁用SELinux2.1.5 禁用swap2.1.6 设置时区 2.2 安装 containerd2.2.1 内核参数调整2.2…

基于SSM的高校普法系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的高校普法系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…

每天五分钟深度学习:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

Oracle-MNIST代码学习

一、网络结构 二、代码学习 2.1、x = F.relu(self.conv1(x)) # self.conv1 = nn.Conv2d(1, 20, 5, 1) ​​​​​ 1)Conv2d 详解参考:PyTorch nn.Conv2d - 知乎 2) relu pytorch学习线性回归与非线性回归,以及理解nn.linear()和ReLU激活函数_pytorch 非线性函数作用-C…

访学博后须知|携带手机等电子产品入境美国注意事项

美国对携带手机等电子产品入境有着严格的规定,因此知识人网小编提醒拟出国做访问学者、博士后或联合培养的博士生了解以下注意事项,尽量减少不必要的麻烦。 随着互联网的普及,手机等电子产品在人民生活中占有不可或缺的地位。因为研究和工作需…

AcWing刷题-空调

空调 差分: N int(input()) p list(map(int, input().split())) t list(map(int, input().split())) d,s[0]*100010,[0]*100010 for i in range(N):d[i] p[i]-t[i]for i in range(N):s[i] d[i]s[i1] - d[i] ans 0 for i in range(N1):if s[i]>0:ans s[i]…

大话设计模式之代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过代理对象控制对另一个对象的访问。代理对象充当客户端和实际对象之间的中介,客户端通过代理对象间接访问实际对象,从而可以在访问控制、缓存、延迟加载等方面提…

二维随机变量的条件分布-已知X概率密度,X条件下的Y概率密度求解y的概率密度

问题&#xff1a;设数X在区间(0,1)上随机地取值,当观察到Xx(0<x<1)时,数Y在区间(x,1)上随机地取值.求Y的概率密度f(y)&#xff1f; 求解&#xff1a; 首先&#xff0c;数X在区间(0,1)上均匀分布&#xff0c;因此其概率密度函数fX​(x)为&#xff1a; fX​(x)1 0<…

PLC_博图系列☞N:扫描操作数的信号下降沿

PLC_博图系列☞N&#xff1a;扫描操作数的信号下降沿 文章目录 PLC_博图系列☞N&#xff1a;扫描操作数的信号下降沿背景介绍N&#xff1a;扫描操作数的信号下降沿说明参数示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 N 背景介绍 这是一篇关于PLC编程的文章…

代码随想录算法训练营第二十四天| 理论基础,77. 组合

题目与题解 参考资料&#xff1a;回溯法理论基础 带你学透回溯算法&#xff08;理论篇&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 77. 组合 题目链接&#xff1a;​​​​​​​​​​​​​​77. 组合 代码随想录题解&#xff1a;77. 组合 视频讲解&#xff…

AI的“换脸“魔术,究竟是弊大于利还是利大于弊?

公众号&#xff1a;【可乐前端】&#xff0c;每天3分钟学习一个优秀的开源项目&#xff0c;分享web面试与实战知识&#xff0c;也有全栈交流学习摸鱼群&#xff0c;期待您的关注! 每天3分钟开源 hi&#xff0c;这里是每天3分钟开源&#xff0c;很高兴又跟大家见面了&#xff0…

知识图谱与大数据:区别、联系与应用

目录 前言1 知识图谱1.1 定义1.2 特点1.3 应用 2 大数据2.1 定义2.2 应用 3. 区别与联系3.1 区别3.2 联系 结语 前言 在当今信息爆炸的时代&#xff0c;数据成为了我们生活和工作中不可或缺的资源。知识图谱和大数据是两个关键概念&#xff0c;它们在人工智能、数据科学和信息…

C++入门知识(1)

命名空间的引入 C语言的缺陷以及C的解决。 看下面这个代码&#xff1a; 这里进行了报错。 这里包含rand所在的头文件&#xff0c;然后头文件会进行展开。然后头文件里的rand和全局变量rand就会发生冲突。 这个就叫做命名冲突。 因此C引入了一个解决办法 namespace&#x…