Nginx 性能优化实践
Nginx 的系统结构
Nginx 包含一个单一的 master 进程和多个 worker 进程。所有的这些进程都是单线程,并且设计为同时处理成千上万个连接。worker 进程是处理连接的地方,它用于处理客户端请求。master 进程负责读取配置文件、处理套接字、派生 worker 进程、打开日志文件等。总之, master 进程是一个可以通过处理信号响应来管理请求的进程。更多内容请查看《Nginx 核心模块与配置实践》。
Nginx 性能参数调优
常规参数讲解
进入 /etc/nginx 文件夹,编辑 nginx.conf ,可以看到下面的参数。简单介绍下:
# nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数。
worker_processes 8;# 每个worker 进程的最大连接数
worker_connections 1024#为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;# 作用于event的I/O多路复用模型
use epoll;#收到新连接通知后接受尽可能多的连接,作用于event
multi_accept on;
epoll 接口作为 poll 接口的变体在 Linux 内核 2.5 中被引入。相比 select 实现的多路复用 I/O 模型,epoll 最大的好处在于它不会随着被监控描述符数目的增长而导致效率急速下降。
worker_processes number;
每个worker进程都是单线程的进程,它们会调用各个模块以实现多种多样的功能。如果这些模块确认不会出现阻塞式的调用,那么,有多少CPU内核就应该配置多少个进程;反之,如果有可能出现阻塞式调用,那么需要配置稍多一些的worker进程。例如,如果业务方面会致使用户请求大量读取本地磁盘上的静态资源文件,而且服务器上的内存较小,以至于大部分的请求访问静态资源文件时都必须读取磁盘(磁头的寻址是缓慢的),而不是内存中的磁盘缓存,那么磁盘I/O调用可能会阻塞住worker进程少量时间,进而导致服务整体性能下降。
每个worker 进程的最大连接数
语法:worker_connections number;
默认:worker_connections 1024
worker_cpu_affinity cpumask[cpumask……]
绑定Nginx worker进程到指定的CPU内核
为什么要绑定worker进程到指定的CPU内核呢?假定每一个worker进程都是非常繁忙的,如果多个worker进程都在抢同一个CPU,那么这就会出现同步问题。反之,如果每一个worker进程都独享一个CPU,就在内核的调度策略上实现了完全的并发。
例如,如果有4颗CPU内核,就可以进行如下配置:
worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;
注意 worker_cpu_affinity配置仅对Linux操作系统有效。
查看当前机器cpu
查看当前机器物理cpu数量
cat /proc/cpuinfo|grep “physical id”|sort|uniq|wc -l
1
查看当前机器物理cpu核心数量
cat /proc/cpuinfo|grep “cpu cores”|uniq
#cpu cores : 2
> ### #### Nginx worker 进程优先级设置****语法****:worker_priority nice;
****默认****:worker_priority 0;
优先级由静态优先级和内核根据进程执行情况所做的动态调整(目前只有±5的调整)共同决定。nice值是进程的静态优先级,它的取值范围是–20~+19,–20是最高优先级,+19是最低优先级。因此,如果用户希望Nginx占有更多的系统资源,那么可以把nice值配置得更小一些,但不建议比内核进程的nice值(通常为–5)还要小#### Nginx worker进程可以打开的最大句柄描述符个数****语法****: worker_rlimit_nofile limit;
****默认:****空
更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。#### 是否打开accept锁****语法****:accept_mutex[on|off]
****默认****:accept_mutext on;
accept_mutex是Nginx的负载均衡锁,当某一个worker进程建立的连接数量达到worker_connections配置的最大连接数的7/8时,会大大地减小该worker进程试图建立新TCP连接的机会,accept锁默认是打开的,如果关闭它,那么建立TCP连接的耗时会更短,但worker进程之间的负载会非常不均衡,因此不建议关闭它。#### 使用accept锁后到真正建立连接之间的延迟时间**语法**:accept_mutex_delay Nms;
**默认**:accept_mutex_delay 500ms;
在使用accept锁后,同一时间只有一个worker进程能够取到accept锁。这个accept锁不是堵塞锁,如果取不到会立刻返回。如果只有一个worker进程试图取锁而没有取到,他至少要等待accept_mutex_delay定义的时间才能再次试图取锁。## Nginx 高速缓存实战### 案例分析某电商平台商品详情页需要实现 700+ QPS,如何着手去做?
![image.png](//p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/24e89b9bfb3d4aa3ad1ae190f42f9da3~tplv-k3u1fbpfcp-zoom-1.image)****对于商品详情页涉及了如下主要服务: ****- 商品详情页HTML页面渲染
- 价格服务
- 促销服务
- 库存状态/配送至服务
- 广告词服务
- 预售/秒杀服务
- 评价服务
- 试用服务
- 推荐服务
- 商品介绍服务
- 各品类相关的一些特殊服务****解决方案:****
1. 采用Ajax 动态加载 价格、广告、库存等服务
2. 采用key value 缓存详情页主体html。**方案架构:**
![image.png](//p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e2dee766740a4c4b96c7c6cf2c3b1019~tplv-k3u1fbpfcp-zoom-1.image)****问题:****当达到500QPS 的时候很难继续压测上去。****分析原因****:一个详情页html 主体达平均150 kb 那么在500QPS 已接近千M局域网宽带极限。必须减少内网通信。****基于Nginx 静态缓存的解决方案:****
![image.png](//p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/25835c7438ef4f2bb91264f2238df417~tplv-k3u1fbpfcp-zoom-1.image)### 缓存配置#### 配置步骤- 客户端、代理请求缓存
- 设置缓存空间,存储缓存文件
- 在 location 中使用缓存空间
- 打开文件的缓存配置
```nginx
#客户端请求主体的缓冲区大小
client_body_buffer_size 512k;
#客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置
client_header_buffer_size 4k;
client_max_body_size 512k;
large_client_header_buffers 2 8k;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
#指定在何种情况下一个失败的请求应该被发送到下一台后端服务器
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;#设置缓存空间,存储缓存文件
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=nginx-cache:20m max_size=50g inactive=168h;#在location中使用缓存空间,pathname是项目的目录,请自定义
location /pathname { proxy_set_header X-Real-IP $remote_addr;proxy_cache nginx-cache;proxy_cache_valid 200 304 302 5d;proxy_cache_valid any 5d;proxy_cache_key '$host:$server_port$request_uri';add_header X-Cache '$upstream_cache_status from $host';proxy_set_header X-Real-IP $remote_addr;proxy_pass http://localhost/pathname;
}#打开文件的缓存配置
#为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=65535 inactive=60s;#文件描述符一直是在缓存中打开的,如果有一个文件在inactive时间内一次没被使用,它将被移除。
open_file_cache_min_uses 1;#指定多长时间检查一次缓存的有效信息。
open_file_cache_valid 80s;
缓存参数详细说明
父元素 | 名称 | 描述 |
---|---|---|
http | proxy_cache_path | 指定缓存区的根路径 |
levels | 缓存目录层级最高三层,每层1~2个字符表示。如1:1:2 表示三层。 | |
keys_zone | 缓存块名称 及内存块大小。如 cache_item:500m 。表示声明一个名为cache_item 大小为500m。超出大小后最早的数据将会被清除。 | |
inactive | 最长闲置时间 如:10d 如果一个数据被闲置10天将会被清除 | |
max_size | 缓存区硬盘最大值。超出闲置数据将会被清除 | |
location | proxy_cache | 指定缓存区,对应keys_zone 中设置的值 |
proxy_cache_key | 通过参数拼装缓存key 如:uriargs 则会以全路径md5值做做为Key | |
proxy_cache_valid | 为不同的状态码设置缓存有效期 |
查看缓存目录
上述配置的结果,重启生效后,我们可以看到生成了很多缓存文件在 缓存存储路径为:/usr/local/nginx/cache,levels=1:2代表缓存的目录结构为2级目录
如下图,缓存会在/usr/local/nginx/cache目录下生成,包含2级目录,在之下就是缓存文件,测试的时候可以到该目录下查看缓存文件是否生成。
我们打开其中一个文件看看,会发现一些蹊跷,这里存储了请求头的信息。当我们处理一个 HTTP 请求的时候,它会先从这里读取。
缓存的清除
该功能可以采用第三方模块 ngx_cache_purge 实现。为nginx 添加 ngx_cache_purge 模块
#下载ngx_cache_purge 模块包 ,这里nginx 版本为1.6.2 purge 对应2.0版
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
#查看已安装模块
./sbin/nginx -V
#进入nginx安装包目录 重新安装 --add-module为模块解压的全路径
./configure --prefix=/root/svr/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/svr/nginx/models/ngx_cache_purge-2.0
#重新编译
make
#拷贝 安装目录/objs/nginx 文件用于替换原nginx 文件
#检测查看安装是否成功
nginx -t
清除配置:
location ~ /clear(/.*) {#允许访问的IPallow 127.0.0.1;allow 192.168.0.193;#禁止访问的IPdeny all;#配置清除指定缓存区和路径(与proxy_cache_key一至)proxy_cache_purge cache_item '$host:$server_port$request_uri';
}
配置好以后 直接访问 :
这里 192.168.0.193 域名设置为 www.test.com
# 访问生成缓存文件
http://www.test.com/?a=1
# 清除生成的缓存,如果指定缓存不存在 则会报404 错误。
http://www.testcom/clear/?a=1
指定不缓存页面
配置语法:
proxy_no_cache | |
---|---|
语法 | proxy_no_cache string … |
默认 | — |
作用域 | http,server,location |
备注 |
例子:
...# 判断当前路径是否是指定的路径
if($request_uri ~ ^/(url3|login|register|password\/reset)) {#设置一个变量用来存储是否是需要缓存set $cookie_nocache 1;
}location / {...proxy_no_cache $cookie $arg_nocache $arg_comment;...
}...
缓存命中分析
在http header上增加命中显示
**
Nginx 提供了 $upstream_cache_status
这个变量来显示缓存的状态,我们可以在配置中添加一个http头来显示这一状态,达到类似squid的效果。
location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 180;proxy_send_timeout 180;proxy_read_timeout 180;proxy_buffer_size 128k;proxy_buffers 4 128k;proxy_busy_buffers_size 128k;proxy_temp_file_write_size 128k;proxy_cache cache;proxy_cache_valid 200 304 1h;proxy_cache_valid 404 1m;proxy_cache_key '$host:$server_port$request_uri';add_header Nginx-Cache "$upstream_cache_status";proxy_pass http://backend;}
而通过curl或浏览器查看到的header如下:
HTTP/1.1 200 OK
Date: Mon, 22 Apr 2013 02:10:02 GMT
Server: nginx
Content-Type: image/jpeg
Content-Length: 23560
Last-Modified: Thu, 18 Apr 2013 11:05:43 GMT
Nginx-Cache: HIT
Accept-Ranges: bytes
Vary: User-Agent
$upstream_cache_status
包含以下几种状态:
- MISS 未命中,请求被传送到后端
- HIT 缓存命中
- EXPIRED 缓存已经过期请求被传送到后端
- UPDATING 正在更新缓存,将使用旧的应答
- STALE 后端将得到过期的应答
Nginx cache命中率统计
即然nginx为我们提供了$upstream_cache_status
函数,自然可以将命中状态写入到日志中。具体可以如下定义日志格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"''"$upstream_cache_status"';
命中率统计方法:用HIT的数量除以日志总量得出缓存命中率:
了解了原理以后,也可以通过crontab脚本将每天的命中率统计到一个日志中,以备查看。
# crontab -l
1 0 * * * /opt/<a href="http://www.test.com/" title="shell"target="_blank">shell</a>/nginx_cache_hit >> /usr/local/nginx/logs/hit
访脚本的内容为:
#!/bin/bash
LOG_FILE='/usr/local/nginx/logs/access.log.1'
LAST_DAY=$(date +%F -d "-1 day")
awk '{if($NF==""HIT"") hit++} END {printf "'$LAST_DAY': %d %d %.2f%n", hit,NR,hit/NR}' $LOG_FILE
Nginx 其他优化措施
动静分离
将静态文件存储到 /usr/share/nginx/html 文件夹中,配置静态文件拦截规则。单个项目可以直接放在 /usr/share/nginx/html 根目录下,如果是多个项目,则要根据项目的根目录创建文件夹来保存静态文件。
配置拦截规则如下:
location ~ .*\.(eot|svg|ttf|woff|jpg|jpeg|gif|png|ico|cur|gz|svgz|mp4|ogg|ogv|webm) {#所有静态文件直接读取硬盘root /usr/share/nginx/html;expires 30d; #缓存30天
}location ~ .*\.(js|css)?${#所有静态文件直接读取硬盘root /usr/share/nginx/html;expires 12h;
}
结果:整个网站的访问速度都会减少,大部分内容都将从静态文件目录或者硬盘中读取。
连接超时
长时间占着连接资源不释放,最终会导致请求的堆积,Nginx 处理请求效率大大降低。所以我们对连接的控制都要注意设置超时时间,通过超时机制自动回收资源、避免资源浪费。
#客户端、服务端设置
server_names_hash_bucket_size 128;
server_names_hash_max_size 512;
# 长连接超时配置
keepalive_timeout 65;
client_header_timeout 15s;
client_body_timeout 15s;
send_timeout 60s;#代理设置
#与后端服务器建立连接的超时时间。注意这个一般不能大于75秒
proxy_connect_timeout 30s;
proxy_send_timeout 120s;
#从后端服务器读取响应的超时
proxy_read_timeout 120s;
GZIP 压缩
在我们进行 gzip 打包压缩之前,最好将一些静态文件先进行压缩为 min 文件,请求的时候合并为同一文件。再通过 gzip 压缩后,你会发现网站加载又加速了。
#开启gzip,减少我们发送的数据量
gzip on;
#允许压缩的最小字节数
gzip_min_length 1k;
#4个单位为16k的内存作为压缩结果流缓存
gzip_buffers 4 16k;
#设置识别HTTP协议版本,默认是1.1
gzip_http_version 1.1;
#gzip压缩比,可在1~9中设置,1压缩比最小,速度最快,9压缩比最大,速度最慢,消耗CPU
gzip_comp_level 4;
#压缩的类型
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
#给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
gzip_vary on;
#禁用IE6以下的gzip压缩,IE6的某些版本对gzip的压缩支持很不好
gzip_disable "MSIE [1-6].";
访问限流
我们构建网站是为了让用户访问它们,我们希望用于合法访问。所以不得不采取一些措施限制滥用访问的用户。这种滥用指的是从同一IP每秒到服务器请求的连接数。因为这可能是在同一时间内,世界各地的多台机器上的爬虫机器人多次尝试爬取网站的内容。
#限制用户连接数来预防DOS攻击
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
#限制同一客户端ip最大并发连接数
limit_conn perip 2;
#限制同一server最大并发连接数
limit_conn perserver 20;
#限制下载速度,根据自身服务器带宽配置
limit_rate 300k;
高效数据传输配置
#开启文件的高效传输模式。tcp_nopush和tcp_nodelay可防止网络及磁盘i/o阻塞,提升nginx工作效率;
sendfile on;
#数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。
tcp_nopush on;
#只要有数据包产生,不管大小多少,就尽快传输
tcp_nodelay on;
内核参数的优化
编辑 /etc/sysctl.conf 文件,根据需要调整参数配置。
#如果想把timewait降下了就要把tcp_max_tw_buckets值减小,默认是180000
net.ipv4.tcp_max_tw_buckets = 5000#开启重用功能,允许将TIME-WAIT状态的sockets重新用于新的TCP连接
net.ipv4.tcp_tw_reuse = 1#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击
net.ipv4.tcp_max_orphans = 262144#当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。我们可以调短时间跨度
net.ipv4.tcp_keepalive_time = 30
日志配置
日志文件对于我们日常运维至关重要,如果没有日志排查问题,你将很难判断异常的所在,要解决问题无异于大海捞针。日志的保存时必要的,不可缺少的,我们来看下怎么配置有利于排查问题?
- 关键字:其中关键字 access_log,error_log 不能改变
- error_log 错误日志级别:[debug | info | notice | warn | error | crit | alert | emerg],级别越高记录的信息越少。不要配置 info 等级较低的级别,会带来大量的磁盘 I/O 消耗。
error_log 生产场景一般是 warn | error | crit 这三个级别之一
#定义日志模板
log_format 日志模板名称 日志格式;#访问日志
access_log path format gzip[=level] [buffer=size] [flush=time];
关键字 存放的路径 日志格式模板 gzip压缩,level指压缩级别 存放缓存日志的缓存大小 保存在缓存中的最长时间#错误日志
error_log <FILE> <LEVEL>;
关键字 日志文件 错误日志级别#示例
log_format main '$remote_addr - $remote_user [$time_local] "$request"''$status $body_bytes_sent "$http_referer"''"$http_user_agent" "$http_x_forwarded_for"';
部分图片来源于网络,版权归原作者,侵删。
以上谢谢大家,求赞求赞求赞!
💗 大佬们随手关注下我的wx公众号【一角钱小助手】和 掘金专栏【一角钱】 更多题解干货等你来~~
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- FFMPEG之海康实时回调出来的PS流格式
FFMPEG之海康实时回调出来的PS流格式 参考博客:PS流格式解析 PES包码流分析提供 前言: 我们知道,利用海康的实时预览接口可以实时监控,并且可以设置回调函数取出码流数据。而根据海康的参考文档中,回调函数的数据类型有三种,一个是系统头;一个是码流数据;另一个是其它数…...
2024/4/15 6:42:10 - 快乐项目:基于阿里云服务器的JAVA发送短信验证码服务
目录前言:准备条件1、登录阿里云2、添加用户组 (1)创建用户组,分配权限 (2)创建用户组注意细节:3、给用户组添加权限 (1)点击新建的用户组 (2)添加权限: (3)搜索以下三个权限,其中DysmsFullAccess就是短信验证服务: (4)添加成功后显示4、添…...
2024/3/16 4:47:42 - 实验室学习笔记(含作业)
python的初步学习 1.操作系统/虚拟机 2.初度了解 3.注释、变量,认识bug,Debug工具 4.数据类型,输出,拓展 5.输出的转义字符,输出的结束字符,输入的语法 6.交互式开发,运算符 7.条件语句if,多重判断,if嵌套,三目运算符 8.循环语句:while语句,break,continue,while嵌…...
2024/4/24 19:41:34 - 学习笔记(17):零基础掌握 Python 入门到实战-循环语句,周而复始(三)
立即学习:https://edu.csdn.net/course/play/26676/338787?utm_source=blogtoedubreak 从这个位置开始中断循环 >>> a=0 >>> while a<3:s=input(input your lang:)if s=="python":pring("your lang is{0}".format(s))breakelse:a+=1…...
2024/3/16 3:54:18 - Cocos2d-x中的BMFont(Fnt)字体改名
客户端如果需要使用特殊字体时,美术一般会给程序BMFont字体。但是美术一般都是随意命名的,按照下图就能将BMFont字体改成我们想要的名字了。以下4处改为同样名字即可。关注公众号:《码之有道》,一起聊游戏全栈开发!1、公众号回复:【教程】获取零基础游戏开发客户端+服务端…...
2024/4/27 15:12:49 - 第二章--Java泛型 第一节--泛型入门
问题:集合:用于存放多个(不同类型)的对象---- 容易出现转型错误 ClassCastException上面的ArrayList对象没有限定放什么类型的数据,所以我们就往里面放东西了(int型和字符串)解决方法: 集合:存放多个对象(限定为一种类型)---- 不需要转型,没有转型错误泛型(1):泛…...
2024/4/22 4:35:23 - Sonar扫描java项目
使用sonar完成对例子maven项目的扫描 示例代码下载 https://github.com/SonarSource/sonar-scanning-examples/tree/master/sonarqube-scanner-mavenclone到本地之后,进入项目目录 以本代码为例 cd /software/example_02/sonar/sonarqube-scanner-maven/maven-basic首先需要获…...
2024/4/26 5:13:06 - squid代理介绍----传统代理 和 透明代理 (配置案例)
文章目录一、suqid的介绍二、squid的代理类型三、squid传统代理的部署3.1、 案例介绍3.2 具体参数配置1、解压squid的安装包2、修改配置文件,编写脚本优化服务启动项3、配置squid传统模式4、配置web服务器5. 在客户端浏览器,设置代理,并访问测试6.查看日志确认访问来源IP四.…...
2024/3/27 1:02:03 - 【信息安全】编码、加密和摘要
一、概述 在平时生活中或者开发工作中只要遇到涉及信息安全的话题永远也离不开这几个术语“编码”,“加密”和“摘要”。我在刚接触的时候会很迷惑这几个名词究竟有什么区别呢?它们的内涵又是什么?下面就来梳理一下。 二、编码(Encoding) 关于编码维基百科给出了如下的定义…...
2024/4/25 11:34:28 - Kubernetes集群搭建
前言kubernetes简称K8S,是由Google在2014年开源的生产级别的容器编排系统,虽说14年才开源,但目前已成为业界主流的容器编排标准。如果说Docker是驮着集装箱的鲸鱼,那么K8S就是一个船舵,引领着Docker(或者说容器技术)走向远方。学习K8S已成为一个趋势,俗话说得好,纸上得…...
2024/4/16 5:09:32 - 从大一到大三的编程之路,我所知道的网站和软件,全都是宝藏!
今天我就将我珍藏已久的宝贝网站分享给大家,希望大家能在学习编程的道路上越走越远!视频学习篇1.B站B站用的好,就像获得宝从前,我以为B站只是个看番,追剧,看鬼畜的网站,直到我发现了它上面的学习资料,B站上面真的有好多好多学习的视频资料,比如想入门,又不想看文档,…...
2024/3/16 6:01:42 - 学习笔记(5):IDEA开发工具+Maven使用详解视频课程(适合初学者的教程)-Maven简介及安装
立即学习:https://edu.csdn.net/course/play/7907/162049?utm_source=blogtoedumaven作用:①管理项目之间的依赖关系②jar包管理。管理jar包依赖关系,解决jar包冲突自动下载jar包③自动化构建工具术语:中央仓库:网络仓库,存储jar包和插件。地址:repo.maven.apache.org/m…...
2024/3/19 1:06:51 - 学习笔记(4):IDEA开发工具+Maven使用详解视频课程(适合初学者的教程)-Maven简介及安装...
立即学习:https://edu.csdn.net/course/play/7907/162049?utm_source=blogtoedumaven作用:①管理项目之间的依赖关系②jar包管理。管理jar包依赖关系,解决jar包冲突自动下载jar包...
2024/3/29 1:55:45 - 学习笔记(3):MySQL数据库从入门到实战课-DDL之数据表
立即学习:https://edu.csdn.net/course/play/27328/362519?utm_source=blogtoedushow engines;create table contacts(id int not null AUTO_INCREMENT primary key; name)show tables;...
2024/3/16 3:30:05 - 【CV-Paper 13】图像分割 02:U-Net-2015
论文原文:点击此处 论文下载:点击此处 论文被引:12052(08/03/2020) 论文年份:2015文章目录U-Net: Convolutional Networks for Biomedical Image SegmentationAbstract1 Introduction2 Network Architecture3 Training3.1 Data Augmentation4 Experiments5 ConclusionU-Ne…...
2024/4/25 10:40:00 - python读取数据可能出现的故障
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是…...
2024/4/23 13:56:29 - Springboot集成EasyExcel实现导入导出
前言: 之前写过一篇springboot集成poi导出表格的文章,但是当数据量变大后发现,有jvm内存溢出的现象,导致服务宕机;就此现象,必定要做出相应的解决方案才行,这时发现了阿里巴巴提供的easyexcel工具类,github地址:https://github.com/alibaba/easyexcel 本篇文章只讲解e…...
2024/4/28 1:44:16 - 7909:统计数字——map
描述某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入包含n+1行: 第一行是整数n,表示自然数的个数; 第2~n+1每行一个自然数。 40%的…...
2024/3/16 2:19:02 - webgl动画纹理
动画纹理 绘制动画纹理和图片纹理的基本过程是一致的,只是以视频作为纹理数据来源; 视频的本质是由一系列的图片序列构成,因此本质上动画纹理和图片纹理并没有区别 使用图片纹理时,我们需要等待图片加载完成然后将图形信息绘制到纹理;同理,绘制动画纹理时,我们需要获取到…...
2024/4/22 23:28:00 - Leetcode--107. 二叉树的层次遍历 II
Leetcode–107. 二叉树的层次遍历 II [9/6/2020] 前言这是我做leetcode的第一题,其实比较简单,主要也是为了熟悉leetcode这个平台,以及相关的答题规范。 本题是hot 100 的第一题,是一个二叉树层次遍历问题,可以运用BFS的手段进行逐行遍历,获取隔行向量,然后自底向上的输…...
2024/4/25 16:34:06
最新文章
- 2024OD机试卷-字符串变换最小字符串 (java\python\c++)
题目:字符串变换最小字符串 题目描述 给定一个字符串只s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典席进行比较) 变换规则:交换字符串中任意两个不同位置的字符。 备注 s是都是小写字符组成 。1≤s.length≤ 1000 输入描述 一串小写字母组成的字符串S…...
2024/4/28 2:10:03 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Linux mount用法
在Linux系统中,系统自动挂载了以下挂载点: /: xfs文件系统,根文件系统, 所有其他文件系统的挂载点。 /sys: sysfs文件系统,提供内核对象的信息和接口。 /proc: proc文件系统,提供进程和系统信息。 /dev: devtmpfs文件系…...
2024/4/24 0:39:01 - 【C++】map set 底层刨析
文章目录 1. 红黑树的迭代器2. 改造红黑树3. map 的模拟实现4. set 的模拟实现 在 C STL 库中,map 与 set 的底层为红黑树,那么在不写冗余代码的情况下使用红黑树同时实现 map 与 set 便是本文的重点。 1. 红黑树的迭代器 迭代器的好处是可以方便遍历&…...
2024/4/25 6:15:29 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/4/27 1:53:53 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/4/27 3:39:11 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/4/27 12:24:35 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/4/27 12:24:46 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/4/27 3:39:08 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/4/27 3:39:07 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/4/27 3:39:07 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/4/27 12:44:49 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/4/27 21:08:20 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/4/26 22:35:59 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/4/27 18:40:35 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/4/27 3:39:03 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/4/27 13:52:15 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/4/27 13:38:13 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/4/27 1:03:20 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/4/27 3:22:12 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/4/27 22:51:49 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/4/27 3:39:00 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/4/26 23:53:24 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/4/27 20:28:35 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57