Linux服务——http协议及nginx服务

2023-11-10

目录

一、HTTP协议

1、跨网络的主机间通讯方式

套接字相关的系统调用

2、HTTP协议访问网站的过程

3、http协议状态码分类

常见的http协议状态码

4、MIME

5、URL组成

6、HTTP协议版本

7、系统处理http请求的工作模式

8、apache与nginx的区别

 二、I/O模型

I/O模型相关概念

事件驱动模型

三、Nginx服务

1、nginx模块

2、安装nginx

yum安装nginx

编译安装nginx

3、nginx信号

4、nginx服务调优

1)根据cpu数量配置master有多少个worker子进程

2) 关闭或修改版本

3)cpu与work进程绑定

4)nginx进程的优先级(work进程的优先级) 

5)设置nginx可打开的文件个数 


一、HTTP协议

1、跨网络的主机间通讯方式

跨网络的主机间通讯方式:套接字

套接字Socket是进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换,SocketAPI出现于1983年 BSD 4.2实现在建立通信连接的每一端,进程间的传输要有两个标志:IP地址和端口号,合称为套接字地址 socket address

  • 客户机套接字地址定义了一个唯一的客户进程

  • 服务器套接字地址定义了一个唯一的服务器进程

套接字相关的系统调用

  • socket() 创建一个套接字

  • bind() 绑定IP和端口

  • listen() 监听

  • accept() 接收请求

  • connect() 请求连接建立

  • write() 发送

  • read() 接收

  • close() 关闭连接

2、HTTP协议访问网站的过程

建立连接---->接收请求---->处理请求---->访问资源---->构建响应报文---->发送响应报文---->记录日志

3、http协议状态码分类

1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误

常见的http协议状态码

200: 成功,请求数据通过响应报文的entity-body部分发送;OK
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
302: 响应报文Location指明资源临时新位置 Moved Temporarily
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
307:  浏览器内部重定向
401: 需要输入账号和密码认证方能访问资源;Unauthorized
403: 请求被禁止;Forbidden
404: 服务器无法找到客户端请求的资源;Not Found(客户端的错误,如dns找不到网页,网址输入错误等)
500: 服务器内部错误;(大概率服务器宕机了)
502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
503: 服务不可用,临时服务器维护或过载,服务器无法处理请求,比如:php服务停止,无法处理php程序
504: 网关超时

4、MIME

MIME : Multipurpose Internet Mail Extensions 多用途互联网邮件扩展

文件 /etc/mime.types ,来自于mailcap包

MIME格式:type/subtype

如果你访问的文件类型在文件/etc/mime.type内,可以直接打开访问,若不在则是下载。 

5、URL组成

URL:Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置

URN:Uniform Resource Naming,统一资源命名

二者区别:URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址。

URL组成:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

scheme:方案,访问服务器以获取资源时要使用哪种协议
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔

6、HTTP协议版本

主要介绍http/0.9版本、http/1.0版本以及http/1.1版本的区别

版本 区别
http/0.9 只有个GET命令,即下载命令
http/1.0 不仅有GET命令,还有POST命令,即上传命令
http/1.1 除了1.0版本有的,还支持长连接

长连接(持久连接):一次三次握手,多次四次挥手。简单理解就是,建立一个进程,可以有多次请求,用完继续使用,绿色又环保;但是可以设置默认超时时间,一般默认超时时间是15秒。

7、系统处理http请求的工作模式

工作模式有:prefork、worker、event

prefork:多进程I/O模型,每个进程响应一个请求。简单理解就是,来一个请求,开一个进程,来一个,开一个,很浪费系统资源。

worker:复用的多进程I/O模型,多进程多线程。有一个主进程,生成多个子进程,子进程生成多个线程,每个线程响应一个请求,并发送响应请求;每个请求完成后,不主动向父进程反馈自己已完成,得等到超时之后,才返回。

event:事件驱动模型(worker的变种),centeos8的默认模型。在worker模式的基础上,添加了一个监工线程,专门监视线程是否已完成响应,完成后,为其分配其他请求。

工作模式 优点 缺点
prefork 稳定 速度慢,占用资源,不适用于高并发场景
worker 相对于prefork占用内存较少,可以同时处理更多请求 使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。
event 单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放 没有线程安全控制

8、apache与nginx的区别

nginx:

  • 轻量级,采用c进行编写,同样的web服务,会占用更少的内存及资源
  • 抗并发,处理请求是异步非阻塞的,负载能力比apache高很多,在高并发下能保持低资源低消耗高性能
  • 处理静态文件的性能好,静态处理性能比apache高三倍以上
  • 设计高度模块化,编写模块相对简单
  • 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用-t测试配置是否有问题
  • 支持7层负载均衡,7层负载均衡可以有效防止ddos攻击
  • nginx本身就是一个反向代理服务器,也可以用来做邮件代理服务器使用,但基本上不用其做邮件代理服务器

apache:

  • apache的重写功能(rewrite)比nginx强大
  • 模块多
  • 更为成熟,bug少
  • 对php支持比较简单,nginx需要配合其他后端用
  • 处理动态请求有优势

两者最核心的区别:apache是同步多进程模型,一个连接对应一个进程;nginx是异步非阻塞模型,多个连接可以对应一个进程(万级别)

 二、I/O模型

Linux的 I/O

磁盘I/O:磁盘I/O是进程向内核发起系统调用,请求磁盘上的某个资源比如是html 文件或者图片,然后内核通过相应的驱动程序将目标文件加载到内核的内存空间,加载完成之后把数据从内核内存再复制给进程内存,如果是比较大的数据也需要等待时间。

网络I/O:一切皆文件,本质为对socket文件的读写。网络通信就是网络协议栈到用户空间进程的IO就是网络IO

网络请求的过程:

1、客户端发起请求,先发送到服务器的网卡,服务器网卡接收客户端的请求

2、服务器网卡将收到的报文复制到内核空间中,进行解析,然后调用用户空间

3、再将报文复制到用户空间,再次对报文进行解析,解析出客户端请求的内容

4、解析完之后,将需求反馈给内核空间,再通过内核去磁盘找所需文件,因为应用程序没有权限从磁盘直接读取文件

5、再磁盘找到文件之后,将文件加载到内核中,通过内核复制给用户空间

6、用户空间再将文件构建成响应报文,交给内核,通过内核复制给网卡

7、最后通过网卡发送响应报文给客户端

整体过程,来回在内核空间——用户空间——内核空间切换复制,很消耗系统资源,可以对其进行优化处理。

I/O模型相关概念

同步,异步,阻塞和非阻塞

同步:被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成。就例如,公司领导让你做一件事,你做完之后,不给领导反馈你做完了,直到领导过来问你做没做完,你这才回答你做完了。

异步:被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态。与同步正好相反,你做完了就会反馈做完了,不需要领导来问你。

阻塞:指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。

非阻塞:指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。

事件驱动模型

事件驱动模型
select poll epoll
操作方式 遍历 遍历 回调
底层实现 数组 链表 哈希表
IO效率 每次调用都进行线性遍历,时间复杂度O(n) 每次调用都进行线性遍历,时间复杂度O(n) 事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,时间按复杂度O(1)
最大连接数

1024(x86)

2048(x64)

无上限 无上限
fd拷贝 每次调用select都需要把fd集合从用户拷贝到内核态 每次调用poll都需要把fd集合从用户态拷贝到内核态 调用epoll_ctl 时拷贝进内核并保存,之后每次epoll_wait不拷贝

三、Nginx服务

Nginx 功能介绍

  • 静态的web资源服务器html,图片,js,css,txt等静态资源

  • http/https协议的反向代理 7层

  • 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求

  • tcp/udp协议的请求转发(反向代理) 4层

基础特性

  • 模块化设计,较好的扩展性

  • 高可靠性

  • 支持热部署:不停机更新配置文件,升级版本,更换日志文件

  • 低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存

  • event-driven,aio,mmap,sendfile

Web 服务相关的功能

  • 虚拟主机(server)

  • 支持 keep-alive 和管道连接(利用一个连接做多次请求)

  • 访问日志(支持基于日志缓冲提高其性能)

  • url rewirte

  • 路径别名

  • 基于IP及用户的访问控制

  • 支持速率限制及并发数限制

  • 重新配置和在线升级而无须中断客户的工作进程

1、nginx模块

  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能

  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等

  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持

  • Stream服务模块: 实现反向代理功能,包括TCP协议代理

  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

核心模块:core module
标准模块:
 HTTP 模块: ngx_http_*
 HTTP Core modules   #默认功能
 HTTP Optional modules #需编译时指定
 Mail 模块: ngx_mail_*
 Stream 模块 ngx_stream_*
第三方模块

2、安装nginx

yum安装nginx

1)先安装epel-release源

yum install -y epel-release

2)安装nginx

yum install nginx -y

编译安装nginx

1)安装环境依赖包,并创建nginx用户管理nginx

yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel

#安装环境依赖包

useradd -M -s /sbin/nologin nginx

#新建nginx用户

2)下载nginx源码包

cd /opt/                #切换到/opt目录下

wget http://nginx.org/download/nginx-1.18.0.tar.gz                #官网下载安装包

 3)解压安装包,创建一个安装nginx的安装目录

tar xf nginx-1.18.0.tar.gz         #解压安装包
cd nginx-1.18.0/                #进入解压的安装包中

mkdir /apps/nginx -p        #创建安装目录

4)检测安装环境,编译安装

./configure 
--prefix=/apps/nginx \        #指定安装目录
--user=nginx \        #指定用户
--group=nginx \        #指定用户组
#以下全是安装的功能模块
--with-http_ssl_module \    
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module


5)修改权限

chown -R nginx.nginx /apps/nginx        #将nginx的安装目录修改属主和属组

 安装好后的,安装目录中的配置文件功能

 启动nginx服务

方法一:使用绝对路径启动
/apps/nginx/sbin/nginx

方法二:创建软连接后,直接nginx启动
ln -s /apps/nginx/sbin/nginx  /usr/sbin/
nginx    #直接输入nginx启动

方法三:创建nginx的service文件,使用systemd管理
vim /usr/lib/systemd/system/nginx.service

#建立文件
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target

 使用第三种方法创建service文件为例

vim /usr/lib/systemd/system/nginx.service

 重新加载配置

systemctl   daemon-reload        #重新加载system配置文件

systemctl     start    nginx        #启动nginx服务

3、nginx信号

nginx 命令支持向其发送信号,实现不同功能

nginx 当做单独命令使用有以下选项

编译安装nginx,使用nginx命令前,需要将安装包中的nginx创建软连接至PATH环境下,或者将安装包中的/sbin/nginx拷贝到/usr/sbin/下

ln -s /apps/nginx/sbin/nginx  /usr/sbin/

 nginx  -v        显示nginx版本

 nginx   -V        显示编译安装的详细情况

 可以使用man手册来查看详细的信号 如果没安装,去源码包里找到man文件

 nginx  -s   信号(stop、quit、reload、reopen) 

nginx -s   stop   #立即关闭nginx
nginx -s   quit   #优雅退出   不影响业务的状态下退出
nginx -s   reload #重新加载
nginx -s   reopen #重新加载配置文件

nginx  -t      检查语法格式 

nginx -g 指定配置 不已配置文件中的为准

nginx -g 'user zhangsan;'   已张三身份运行,默认是以nginx身份
nginx -g 'daemon off;'    前台运行命令

4、nginx服务调优

1)根据cpu数量配置master有多少个worker子进程

全局配置文件/apps/nginx/conf/nginx.conf中修改:work_processes auto(表示根据cpu数量决定个数)。

2) 关闭或修改版本

关闭版本

修改版本,需要修改安装目录下的/src/core/nginx.h文件

vim /opt/nginx-1.18.0/src/core/nginx.h        #在源码包中

vim /opt/nginx-1.18.0/src/http/ngx_http_header_filter_module.c        #在源码包中


 然后重新编译安装,才算修改完成
注意:重新编译安装,如果nginx服务没有关,重新编译安装了,需要重启nginx服务,才能生效

3)cpu与work进程绑定

 将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。

修改安装目录文件下的nginx的配置文件

vim /apps/nginx/conf/nginx.conf


4)nginx进程的优先级(work进程的优先级) 

 当你想将nginx的work进程的优先级调高 可以使用nice设置,优先级范围是 -20到19,数值越小,优先级越高


5)设置nginx可打开的文件个数 

所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制.最好与ulimit -n 或者limits.conf的值保持一致,所以需要联合ulimit.conf文件一起设置。


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux服务——http协议及nginx服务 的相关文章

  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • linux-x64 二进制文件无法在 linuxmusl-x64 平台上使用错误

    我正在安装Sharp用于使用 package json 的 Nodejs 项目的 docker 映像上的映像压缩包 当我创建容器时 我收到有关 Sharp 包的以下错误 app node modules sharp lib libvips
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 使用非规范地址检索内存数据会导致 SIGSEGV 而不是 SIGBUS

    我无法使用以下汇编代码产生 总线错误 这里我使用的内存地址不是合法的 规范地址 那么 我怎样才能触发该错误呢 我在带有 NASM 2 14 02 的 Ubuntu 20 04 LTS 下运行这段代码 但它会导致负载出现 SIGSEGV 分段
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并

随机推荐

  • Python 字符串的常用方法

    视频版教程 Python3零基础7天入门实战视频教程 下标索引操作和前面的列表 元组用法一样 虽然字符串不能被修改 但是返回一个操作过的新字符串 所以方法还不少 我先学习下常用方法 1 index 元素 方法 查找字符串中指定元素的下标 不
  • Java语言 设计一个动物声音“模拟器”(用接口实现)

    设计一个动物声音 模拟器 希望模拟器可以模拟许多动物的叫声 要求如下 编写接口Animal Animal接口有两个抽象方法cry 和getAnimalName 即要求实现该接口的各种具体的动物类给出自己的叫声和种类名称 编写模拟器类Simu
  • BOX2D 第十章 世界类

    第十章 世界类 Dec 2nd 2012 Comments 声明 此文章翻译自Box2D v2 2 0用户手册 仅供学习参考 关于 About b2World类包含了物体和连接器 它管理了模拟相关的所有方面并且允许异步需求 像AABB需求和
  • kakfa 常见错误(长期更新 2023.09.05)

    kafka版本 2 13 3 40 一 消费者相关 1 1 消费组 1 1 1 查看消费组命令找不到消费组 1 2 消费者 1 2 1 This error handler cannot process org apache kafka c
  • VGGNet网络结构学习

    前言 VGG是Oxford的Visual Geometry Group的组提出的 大家应该能看出VGG名字的由来了 该网络是在ILSVRC 2014上的相关工作 主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能 VGG有两种
  • 查看OpenStack的版本

    show openstack version root localhost openstack version openstack 4 0 2 Using openstack version will only give you the v
  • Linux中如何快速查找并执行之前执行过的命令

    history grep 命令 history 显示的记录行号 回车执行 Ctrl R 输入若干字符 关键词 会搜索包含所输入关键词的历史命令 继续按Ctrl R则会继续向前搜索包含关键词的历史命令 找到目标命令后 可以直接按enter键执
  • windows中将sqlmap添加到环境变量中

    在windows下每次使用sqlmap进行sql注入测试时 都要先进到sqlmap py的目录中 然后执行python sqlmap py url 而作为未来的渗透大佬 怎么能够允许这么low的事情出现 1 添加环境变量 电脑右键属性 高级
  • IDEA 自定义注解(类注释、方法注释)

    文章目录 一 生成类注释 1 打开设置位置 2 将自定义的类注解规则 复制到Class中 3 使用 新建类的时候会自动加上注解 二 自定义方法注解 1 打开设置 2 添加自定义注解模板组 3 添加自定义注解模板 4 设置模板的作用范围 5
  • Python Flask 建站框架入门课程-微课学习-第三章 进阶

    上传文件 用 Flask 处理文件上传很简单 只要确保你没忘记在 HTML 表单中设置 enctype multipart form data 属性 不然你的浏览器根本不会发送文件 已上传的文件存储在内存或是文件系统中一个临时的位置 你可以
  • Tkinter实现模拟鼠标单击四位数字验证码自动刷新功能

    目标 用Tkinter实现一个用鼠标点击验证码后自动刷新验证码的功能 分四步实现的思路 第一步 创建Tkinter窗口 放置一个Label标签和一个Button按钮 第二步 写一组4位的纯数字验证码 打印并在Label标签中显示出来 第三步
  • 算法:二叉树前序,中序,后序,知二求一(Java代码)

    算法 二叉树前序 中序 后序 知二求一 Java代码 注意 通过前序和中序 后序和中序都可以得到唯一一个确定的二叉树 而只知道前序和后序遍历的结果是没办法确定唯一一个二叉树的 因为可能有多种情况 所以这里为了简化问题 暂时提出一个限制条件
  • se网站服务器,www.se8088.com服务器iP

    2021 07 23 2021 08 10 101 32 211 103 2021 07 02 2021 07 24 154 13 30 10 2021 06 30 2021 07 23 154 13 30 8 2021 07 09 202
  • MySql事务隔离级别

    1 读未提交 介绍 顾名思义 读到了未提交的事务 问题 读到了脏数据 脏读 解决 读已提交的数据 2 读已提交 介绍 顾名思义 读取已提交的事务 问题 必须等到提交后才能读 不可以重复读 解决 重复读 3 重复读 介绍 可以重复读 中间过程
  • 基于卷积神经网络-双向门控循环单元结合注意力机制(CNN-BIGRU-Attention)时间序列预测,matlab代码,2020版本及以上。评价指标包括:R2、MAE、MSE、RMSE和MAPE

    清空环境变量 warning off 关闭报警信息 close all 关闭开启的图窗 clear 清空变量 clc 清空命令行 restoredefaultpath tic 加载数据与数据集划分 导入数据 data xlsread 数据集
  • 青龙面板 脚本合集 20221017

    以往教程脚本大都失效 网上脚本合集 收集供下载 下载 https www lanzouy com ilnLn0dyv3qd 密码 qlbh 脚本内容
  • 验证日期的正则表达式加入闰年的判断以及思路分析

    进入正题之前 我们需要澄清两个概念 一 什么是合法的日期范围 对于不同的应用场景 这个问题有不同的解释 这里采纳MSDN中的约定 DateTime 值类型表示值范围在公元 基督纪元 0001 年 1 月 1 日午夜 12 00 00 到公元
  • 《tensorflow:实战google深度学习框架》9.3.2机器翻译文本数据的预处理

    这一节以一个较小的IELST TED演讲数据集作为示例 讲解如何由文本数据集制作词汇表 并将文本中的字符转译为词汇表中对应词汇的编号 方便后续处理 一 准备数据集 数据集的下载地址是 https wit3 fbk eu mt php rel
  • 关于MySQL : CREATE TABLE if not exists xxx/ALTER TABLE xxx ADD COLUMN IF NOT EXISTS xxx语法使用注意

    背景 在测试程序时 对于你新建的表 并且额外插入了其他新的列字段 当你再次插入时 报错 表名或者列名重复 导致的结果 导致的结果就是你的程序运行不下去 因为在你周期调度 或者再次调度时 逻辑上需要再次创建此表时 就会报错 程序崩溃 解决 解
  • Linux服务——http协议及nginx服务

    目录 一 HTTP协议 1 跨网络的主机间通讯方式 套接字相关的系统调用 2 HTTP协议访问网站的过程 3 http协议状态码分类 常见的http协议状态码 4 MIME 5 URL组成 6 HTTP协议版本 7 系统处理http请求的工