Nginx从入门到精通(超级详细)
文章目录
- 一、什么是Nginx
- 1、正向代理
- 2、反向代理
- 3、负载均衡
- 4、动静分离
- 二、centos7环境安装Nginx
- 1、安装依赖
- 2、下载安装包
- 3、安装
- 4、启动
- 5、停止
- 三、Nginx核心基础知识
- 1、nginx核心目录
- 2、常用命令
- 3、默认配置文件讲解
- 4、Nginx虚拟主机-搭建前端静态服务器
- 5、使用nignx搭建图片-文件服务器
- (1)root和alias的区别
- 四、挖掘accessLog日志
- 1、nginx访问日志的用处
- 2、Nginx统计站点访问量、高频url统计
- 3、自定义日志格式,统计接口响应耗时
- 五、nginx负载均衡
- 1、常见负载均衡策略
- (1)节点轮询(默认)
- (2)weight 权重配置
- (3)ip_hash(固定分发)
- 2、节点状态配置
- 六、Nginx探测后端节点可用性
一、什么是Nginx
- Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。使用C语言开发。
- Nginx专为性能优化而开发,性能是其重要的考量,实现上非常注重效率,能经受高负载的考验,能支持高达50000个并发连接数
1、正向代理
正向代理:代理的是客户端,隐藏的客户端。例如:VPN
- 客户端和目标服务器之间的服务器,客户端向代理发送一个请求指定目标服务器,然后代理向目标服务器请求并获得内容,并返回给客户端,平时说的代理服务器一般是正向代理服务器
- 核心:用户知道自己访问的目标服务器
- 场景:跳板机、访问原来无法访问的网站, 比如国外的一些站点
2、反向代理
反向代理:代理的是服务端,隐藏的是服务端。例如:Nginx
- 客户端和目标服务器之间的服务器,客户端向代理发送一个请求,然后代理向目标服务器请求并获得内容,并返回给客户端。反向代理隐藏了真实的服务器
- 核心:客户端不知道要访问的目标服务器是哪台服务器,代理会根据一定的策略选择一个真实的服务器进行请求
- 场景:访问淘宝,知道访问的域名是taobao.com, 但是后面提供数据的具体是什么域名或ip我们是不知道的
3、负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
4、动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力
二、centos7环境安装Nginx
1、安装依赖
nginx是使用C语言开发的,在安装Nginx前需要安装一些依赖。这些依赖可以给nginx增加很多应用。
这些依赖可以一个个分开安装,也可以一个命令全部搞定。如下:
$ sudo yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2、下载安装包
从官网上下载安装包,上传到服务器。或者结果通过wget命令下载到服务器。
我把它下载到了linux的 /usr/local/src/server目录下
$ sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
然后解压
$ sudo tar -zxvf nginx-1.18.0.tar.gz
3、安装
进入解压目录,检测、编译、安装
$ cd nginx-1.18.0
$ ./configure # 检测
$ make # 编译
$ make install # 安装
此次安装使用的是默认的配置安装。
默认安装路径:/usr/local/nginx
4、启动
进入sbin目录,启动
$ ./nginx
查看nginx进程
$ ps -ef | grep "nginx"
或者通过80端口就可以访问了。
5、停止
$ ./nginx -s stop
三、Nginx核心基础知识
1、nginx核心目录
conf #所有配置文件目录nginx.conf #默认的主要的配置文件nginx.conf.default #默认模板html # 这是编译安装时Nginx的默认站点目录50x.html #错误页面index.html #默认首页logs # nginx默认的日志路径,包括错误日志及访问日志error.log #错误日志nginx.pid #nginx启动后的进程idaccess.log #nginx访问日志sbin #nginx命令的目录nginx #启动命令
2、常用命令
$ ./nginx #默认配置文件启动
$ ./nginx -s reload #重启,加载默认配置文件
$ ./nginx -c /usr/local/nginx/conf/nginx.conf #启动指定某个配置文件
$ ./nginx -s stop #停止
#关闭进程,nginx有master process 和worker process,关闭master即可
$ ps -ef | grep "nginx" # 查看进程
$ kill -9 PID # 杀死进程
3、默认配置文件讲解
# 每个配置项由配置指令和指令参数 2 个部分构成
#user nobody; # 指定Nginx Worker进程运行以及用户组
worker_processes 1; # #error_log logs/error.log; # 错误日志的存放路径 和错误日志
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid; # 进程PID存放路径# 事件模块指令,用来指定Nginx的IO模型,Nginx支持的有select、poll、kqueue、epoll 等。不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,对于Linux系统,epoll工作模式是首选
events { use epoll;# 定义Nginx每个进程的最大连接数, 作为服务器来说: worker_connections * worker_processes,# 作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/2。因为反向代理服务器,每个 并发会建立与客户端的连接和与后端服务的连接,会占用两个连接worker_connections 1024;
}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" "$http_x_forwarded_for"';#access_log logs/access.log main;# 是否开启高效传输模式 on开启 off关闭sendfile on;#减少网络报文段的数量#tcp_nopush on;#keepalive_timeout 0;# 客户端连接保持活动的超时时间,超过这个时间之后,服务器会关闭该连接keepalive_timeout 65;#gzip on;# 虚拟主机的配置server {listen 80; # 虚拟主机的服务端口server_name localhost; #用来指定IP地址或域名,多个域名之间用空格分开#charset koi8-r;#access_log logs/host.access.log main;#URL地址匹配location / {root html; # 服务默认启动目录index index.html index.htm; #默认访问文件,按照顺序找}#error_page 404 /404.html; #错误状态码的显示页面# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one#location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm# }#}
}
4、Nginx虚拟主机-搭建前端静态服务器
什么是虚拟主机?
- 指在一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一个虚拟主机,每台虚拟主机都可以对外提供Web服务,并且互不干扰,就类似虚拟机
- 利用虚拟主机把多个不同域名的网站部署在同一台服务器上,节省了服务器硬件成本和相关的维护费用
虚拟主机的配置如下:
server {listen 80;server_name aabbcc.com;location / {# aabbcc.com会访问服务器的路径 aabbcc.com:80/t9101.htmlroot /usr/local/src/nginx/html;index youyou.html;}
}
server {listen 80;server_name aabbccdd.com;location / {# aabbccdd.com会访问nginx的root html;index youyou.html index.htm;}
}
这里需要在本机配置host域名:aabbcc.com和aabbccdd.com
我们开发的前端项目(例如:vue)就可以部署到这里。
5、使用nignx搭建图片-文件服务器
现在的项目中,是很少在javaweb项目中存放图片和文件。
公司一般会提供图片服务器(fastdfs)或者云厂商的CDN(阿里云的oss存储)
(1)root和alias的区别
Nginx指定文件路径有两种方式root和alias,这两者的用法区别在于对URI的处理方法不同。
区别:
- alias是一个目录别名的定义,root则是最上层目录的定义。
- 还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。而root则可有可无
# alias
location /i/{alias /usr/local/nginx/html/admin/;
}
#若按照上述配置的话,则访问/i/目录里面的文件时,nginx会自动去/usr/local/nginx/html/admin目录找文件。# root
location /i/ {root /usr/local/nginx/html/admin;
}
#若按照这种配置的话,则访问/i/目录下的文件时,nginx会去/usr/local/nginx/html/admin/i下找文件。
图片服务器配置:
server {listen 80;server_name aabbccdd.com;location /app/img {alias /usr/local/software/img/;}
}
图片的访问地址如下:http://aabbccdd.com:80/app/img/a.jpg
同一个请求地址,会有如下两种访问地址:
alias : /usr/local/software/img/a.jpg
root : /usr/local/software/img/app/img/a.jpg
四、挖掘accessLog日志
1、nginx访问日志的用处
access.log日志用处
- 统计站点访问ip来源、某个时间段的访问频率
- 查看访问最频的页面、Http响应状态码、接口性能
- 接口秒级访问量、分钟访问量、小时和天访问量
默认配置:
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
案例:
122.70.148.18 - - [04/Aug/2020:14:46:48 +0800] "GET /user/api/v1/product/order/query_state?product_id=1&token=xdclasseyJhbGciOJE HTTP/1.1" 200 48 "https://youyou.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
解析:
$remote_addr 对应的是真实日志里的122.70.148.18,即客户端的IP。$remote_user 对应的是第二个中杠“-”,没有远程用户,所以用“-”填充。[$time_local]对应的是[04/Aug/2020:14:46:48 +0800]。“$request”对应的是"GET /user/api/v1/product/order/query_state?product_id=1&token=xdclasseyJhbGciOJE HTTP/1.1"。$status对应的是200状态码,200表示正常访问。$body_bytes_sent对应的是48字节,即响应body的大小。“$http_referer” 来源,防盗链接。对应的是”https://youyou.com/“,若是直接打开域名浏览的时,referer就会没有值,为”-“。“$http_user_agent” 对应的是”Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0) Gecko/20100101 Firefox/56.0”。“$http_x_forwarded_for” 对应的是”-“或者空。
日志变量参考:https://www.cnblogs.com/wjoyxt/p/6178731.html
2、Nginx统计站点访问量、高频url统计
查看访问最频繁的前100个IP
awk '{print $1}' access_temp.log | sort -n |uniq -c | sort -rn | head -n 100
统计访问最多的url 前20名
cat access_temp.log |awk '{print $7}'| sort|uniq -c| sort -rn| head -20 | more
命令基础
awk 是文本处理工具,默认按照空格切分,$N 是第切割后第N个,从1开始
sort命令用于将文本文件内容加以排序,-n 按照数值排,-r 按照倒序来排案例的sort -n 是按照第一列的数值大小进行排序,从小到大,倒序就是 sort -rn
uniq 去除重复出现的行列, -c 在每列旁边显示该行重复出现的次数。
3、自定义日志格式,统计接口响应耗时
日志格式增加$request_time
从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间
$upstream_response_time:指从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间
$request_time一般会比upstream_response_time大,因为用户网络较差,或者传递数据较大时,前者会耗时大很多
配置自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" $request_time';
server {listen 80;server_name aabbcc.com;location / {root /usr/local/nginx/html;index xdclass.html;}#charset koi8-r;#access_log logs/host.access.log main;
}
统计耗时接口, 列出传输时间超过 2 秒的接口,显示前5条
cat time_temp.log|awk '($NF > 2){print $7}'|sort -n|uniq -c|sort -nr|head -5
备注:$NF 表示最后一列, awk '{print $NF}'
五、nginx负载均衡
负载均衡介绍
- 负载均衡(Load Balance)
- 分布式系统中一个非常重要的概念,当访问的服务具有多个实例时,需要根据某种“均衡”的策略决定请求发往哪个节点,这就是所谓的负载均衡,
- 原理是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,从而提高了数据的吞吐量
- 负载均衡的种类
- 通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但比较昂贵的
- 通过软件来进行解决,常见的软件有LVS、Nginx等,它们是基于Linux系统并且开源的负载均衡策略
- 目前性能和成本来看,Nginx是目前多数公司选择使用的
配置案例
upstream lbs {server 192.168.0.106:8080;server 192.168.0.106:8081;
}
server {listen 80;server_name aabbcc.com;location /api/ {proxy_pass http://lbs;proxy_redirect default;}
}
http://aabbcc.com:80/api/test/hello
访问流程如下:
浏览器输入:http://aabbcc.com:80/api/v1/getUser
匹配 域名 server_name aabbcc.com
匹配 端口 listen 80
匹配 资源路径 location api
默认轮询转发 服务列表 lbs
最终访问的地址:http://192.168.0.106:8080/api/v1/getUser 或者http://192.168.0.106:8081/api/v1/getUser
1、常见负载均衡策略
(1)节点轮询(默认)
- 简介:每个请求按顺序分配到不同的后端服务器
- 场景:会造成可靠性低和负载分配不均衡,适合静态文件服务器
(2)weight 权重配置
- 简介:weight和访问比率成正比,数字越大,分配得到的流量越高
- 场景:服务器性能差异大的情况使用
upstream lbs {server 192.168.159.133:8080 weight=5;server 192.168.159.133:8081 weight=10;
}
(3)ip_hash(固定分发)
- 简介:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器
- 场景:服务器业务分区、业务缓存、Session需要单点的情况
upstream lbs {ip_hash;server 192.168.159.133:8080;server 192.168.159.133:8081;
}
2、节点状态配置
upstream还可以为每个节点设置状态值
- down 表示当前的server暂时不参与负载
server 192.168.159.133:8080 down;
- backup 其它所有的非backup机器down的时候,会请求backup机器,这台机器压力会最轻,配置也会相对低
server 192.168.159.133:8080 backup;
六、Nginx探测后端节点可用性
- max_fails 允许请求失败的次数,默认为1.当超过最大次数时就不会请求
- fail_timeout : max_fails次失败后,暂停的时间,默认:fail_timeout为10s
- 参数解释
- max_fails=N 设定Nginx与后端节点通信的尝试失败的次数。
- 在fail_timeout参数定义的时间内,如果失败的次数达到此值,Nginx就这个节点不可用。
- 在下一个fail_timeout时间段到来前,服务器不会再被尝试。
- 失败的尝试次数默认是1,如果设为0就会停止统计尝试次数,认为服务器是一直可用的。
- 具体什么是nginx认为的失败呢
- 可以通过指令proxy_next_upstream来配置什么是失败的尝试。
- 注意默认配置时,http_404状态不被认为是失败的尝试。
upstream lbs {server 192.168.0.106:8080 max_fails=2 fail_timeout=60s;server 192.168.0.106:8081 max_fails=2 fail_timeout=60s;
}server {location /api/ {proxy_pass http://lbs;proxy_next_upstream error timeout http_500 http_503 http_404;}
}
相关文章:

Nginx从入门到精通(超级详细)
文章目录 一、什么是Nginx1、正向代理2、反向代理3、负载均衡4、动静分离 二、centos7环境安装Nginx1、安装依赖2、下载安装包3、安装4、启动5、停止 三、Nginx核心基础知识1、nginx核心目录2、常用命令3、默认配置文件讲解4、Nginx虚拟主机-搭建前端静态服务器5、使用nignx搭建…...

为何反射探针关闭Mipmap后变成了白图
1)为何反射探针关闭Mipmap后变成了白图 2)2021.3 Android从AssetBundle中加载视频播放失败问题 3)SBP是否可以解决打包时FBX等模型文件中额外的GameObject 4)Addressables加载已打包过的Prefab后Mono脚本丢失 这是第349篇UWA技术知…...

成都睿趣科技:抖音开网店前期的流程是什么
随着互联网的快速发展,电子商务成为了商业领域中的一大利器,而在电商领域中,抖音作为一个强大的平台,也吸引了众多商家的目光。然而,要在抖音上开设一家成功的网店,并不是一件简单的事情,需要经…...

机房安全之道:构筑坚固的网络防线
引言: 在数字化时代,机房成为了许多组织和企业的核心基础设施,承载着重要的数据和应用。然而,随着网络攻击日益猖獗,机房的安全性显得尤为重要。本文将深入探讨如何构建坚固的网络防线,保护机房免受攻击的方…...

使用GoLand进行远程调试
对部署进行配置 在此配置远程服务器地址,映射,是否自动上传(更新)等 选择SFTP类型 选择上传 另外给自动上传选项打钩 此时在本地修改某个文件,远程机器相应目录的文件,也会被同步修改 对远程调试进行配置 远程机器需要安装delve 而…...

C++通过JNI调用JAVA方法返回ArrayList对象
运行效果: JAVA实现: 获取系统已安装应用列表并返回List<String>对象 //使用系统API获取安装包列表public List<String> getAppList(MainActivity act) {List<String> packages = new ArrayList<String>();try {//取包信息列表List<PackageInf…...

.netcore grpc截止时间和取消详解
一、截止时间概述 截止时间功能让 gRPC 客户端可以指定等待调用完成的时间。 超过截止时间时,将取消调用。 设定一个截止时间非常重要,因为它将提供调用可运行的最长时间。它能阻止异常运行的服务持续运行并耗尽服务器资源。截止时间对于构建可靠应用非…...

React组件间数据传递(弹框和高阶组件(HOC)特性实现)
前言 在现代前端开发中,React 已经成为了最受欢迎的 JavaScript 库之一。而在复杂的应用中,不同组件之间的数据传递问题显得尤为关键。在本文中,我们将探讨一种高效的方法,即如何利用弹框和高阶组件特性来实现 React 组件间的数据…...

只考一门数据结构,计算机学硕复录比1:1的山东双非学校考情分析
青岛理工大学 考研难度(☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1420字,预计阅读:3分钟 2023考情概况 青岛理工…...

SpringMVC之异常处理器
文章目录 前言一、基于配置的异常处理二、基于注解的异常处理总结 前言 SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver。 HandlerExceptionResolver接口的实现类有:DefaultHandlerExceptionResolver&#x…...

【数据结构与算法篇】手撕八大排序算法之快排的非递归实现及递归版本优化(三路划分)
👻内容专栏: 《数据结构与算法篇》 🐨本文概括: 利用数据结构栈(Stack)来模拟递归,实现快排的非递归版本;递归版本测试OJ题时,有大量重复元素样例不能通过,导致性能下降࿰…...

docker network
docker network create <network>docker network connect <network> <container>docker network inspect <network>使用这个地址作为host即可 TODO:添加docker-compose...

回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测
回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现DBN-ELM深度置信网络结合极限学习机多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现DBN-ELM深度置信网络结合极限学习…...

新亮点!安防视频监控/视频集中存储/云存储平台EasyCVR平台六分屏功能展示
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

深入解析SNMP协议及其在网络设备管理中的应用
SNMP(Simple Network Management Protocol,简单网络管理协议)作为一种用于网络设备管理的协议,在实现网络设备的监控、配置和故障排除方面发挥着重要的作用。本文将深入解析SNMP协议的工作原理、重要概念和功能,并探讨…...

【SA8295P 源码分析】86 - AIS Camera Device 设备初始化 之 AisProcChainManager 模块初始化源码分析
【SA8295P 源码分析】86 - AIS Camera Device 设备初始化 之 AisProcChainManager 模块初始化源码分析 一、AisProcChainManager::CreateInstance()二、AisPProcIsp::Create()三、AisPProcGpu::Create()系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》 本文链接…...

十五、pikachu之CSRF
文章目录 一、CSRF概述二、CSRF实战2.1 CSRF(get)2.2 CSRF之token 一、CSRF概述 Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击…...

C语言网络编程:实现自己的高性能网络框架
一般生产环境中最耗时的其实是业务逻辑处理。所以,是不是可以将处理业务逻辑的代码给拆出来丢到线程池中去执行。 比如像下面这样: 我们事先创建好一堆worker线程,主线程accepter拿到一个连接上来的套接字,就从线程池中取出一个…...

hive表向es集群同步数据20230830
背景:实际开发中遇到一个需求,就是需要将hive表中的数据同步到es集群中,之前没有做过,查看一些帖子,发现有一种方案挺不错的,记录一下。 我的电脑环境如下 软件名称版本Hadoop3.3.0hive3.1.3jdk1.8Elasti…...

五、Kafka消费者
目录 5.1 Kafka的消费方式5.2 Kafka 消费者工作流程1、总体流程2、消费者组原理3、消费者组初始化流程4、消费者组详细消费流程 5.3 消费者API1 独立消费者案例(订阅主题)2 独立消费者案例(订阅分区)3 消费者组案例 5.4 生产经验—…...

类 中下的一些碎片知识点
判断下面两个函数是否能同时存在 void Print(); void Pirnt() const 答:能同时存在,因为构成函数重载(注意函数的返回值不同是不能构成函数重载的)。 const 对象能调用 非const 成员函数吗 答:不能,因为权…...

JVM第二篇 类加载子系统
JVM主要包含两个模块,类加载子系统和执行引擎,本篇博客将类加载子系统做一下梳理总结。 目录 1. 类加载子系统功能 2. 类加载子系统执行过程 2.1 加载 2.2 链接 2.3 初始化 3. 类加载器分类 3.1 引导类加载器 3.2 自定义加载器 3.2.1 自定义加载器实…...

火爆全网!HubSpot CRM全面集成,引爆营销业绩!
HubSpot CRM是什么?它是一款强大的客户关系管理工具,专为企业优化销售、服务和市场营销流程而设计。它在B2B行业中扮演着极为重要的角色,让我来告诉你为什么吧! HubSpot CRM不仅拥有用户友好的界面和强大的功能,还能够…...

远程调试环境
一、远程调试 1.安装vscode 2.打开vscode,下载插件Remote-SSH,用于远程连接 3.安装php debug 4.远程连接,连接到远端服务器 注:连接远程成功后,在远程依然要进行安装xdebug,刚才只是在vscode中进行的安装。 5.配置la…...

Java面试之用两个栈实现队列
文章目录 题目一、什么是队列和栈?1.1队列1.2栈 二、具体实现2.1 思路分析2.2代码实现 题目 用两个栈实现一个队列,实现在队列尾部插入节点和在队列头部删除节点的功能。 一、什么是队列和栈? 1.1队列 队列是一种特殊的线性表,…...

Python-实用的文件管理及操作
本章,来说说,个人写代码过程中,对于文件管理常用的几种操作。 三个维度 1、指定文件的路径拼接2、检查某文件是否存在3、配置文件的路径管理 1、指定文件的路径拼接 这个操作可以用来管理文件路径也就是上述中的第三点。但是,这里…...

Mysql 事物与存储引擎
MySQL事务 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中, 要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱, 文章等等。这样&#…...

java.lang.classnotfoundexception: com.android.tools.lint.client.api.vendor
Unity Android studio打包报错修复 解决方式 java.lang.classnotfoundexception: com.android.tools.lint.client.api.vendor 解决方式 在 launcherTemplate 目录下找到 Android/lintOptions 选项 加上 checkReleaseBuilds false lintOptions { abortOnError false checkRelea…...

pytest fixture夹具,@pytest.fixture
fixture 是pytest 用于测试前后进行预备,清理工作的代码处理机制 fixture相对于setup 和teardown: fixure ,命名更加灵活,局限性比较小 conftest.py 配置里面可以实现数据共享,不需要import 就能自动找到一些配置 setu…...

YOLOv7源码解析
YOLOv7源码解析 YAML文件 YAML文件 以yolov7 cfg/yolov7-w6-pose.yaml为例: # parametersnc: 1 # number of classes nkpt: 4 # number of key points depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple dw_conv_kpt:…...