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

Day54-nginx限速-访问日志-错误日志精讲

Day54-nginx限速-访问日志-错误日志精讲

  • 测试请求限制
  • 连接限制(limit_conn)
  • 下载速度限制(limit_rate) ngx_http_core_module
  • 综合配置
  • 1.Nginx状态监控
    • 1.1 Nginx status介绍
    • 1.2 Nginx status配置
    • 1.3 基本状态数据如下所示:(注意本地解析域名)
    • 1.4 状态信息说明
  • 2.Nginx location
    • 2.1 location作用
    • 2.2 location语法
    • 2.3 location优先级示例
    • 2.4 匹配顺序实践:
    • 2.5 location02 @name,这样的location02不用于常规请求处理,而是用于重定向。
  • 3.Nginx 日志模块
    • 3.1 Nginx日志格式
    • 3.2 Nginx访问日志
      • 3.2.1 access_log日志配置语法。
      • 3.2.2 Nginx访问日志配置例
      • 3.2.3 Nginx日志过滤
      • 3.2.4 Nginx访问日志轮询切割
    • 3.3 Nginx错误日志
      • 3.3.1 Nginx错误日志级别
      • 3.3.2 Nginx错误日志示例
  • 4. nginx错误码原因以及解决方案
    • 4.1 400 bad request错误的原因和解决办法
    • 4.2 Nginx 502 Bad Gateway错误
    • 4.3 Nginx出现的413 Request Entity Too Large错误
    • 4.4 解决504 Gateway Time-out(nginx)

测试请求限制

[root@web01 conf.d]# ab -n100 -c4  http://mirrors.etiantian.org/centos/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking mirrors.etiantian.org (be patient).....doneServer Software:        nginx/1.20.1
Server Hostname:        mirrors.etiantian.org
Server Port:            80Document Path:          /centos/
Document Length:        9134 bytesConcurrency Level:      4
Time taken for tests:   0.014 seconds
Complete requests:      100
Failed requests:        94(Connect: 0, Receive: 0, Length: 94, Exceptions: 0)
Write errors:           0
Non-2xx responses:      94
Total transferred:      91722 bytes
HTML transferred:       73322 bytes
Requests per second:    7263.22 [#/sec] (mean)
。。。。100%      1 (longest request)#失败94个,有94个状态码非2XX
Failed requests:        94
Non-2xx responses:      94

ab,jemeter,webbanch,tcpcopy,http_runner

压测:不错的文章
链接: https://www.imooc.com/article/291715

连接限制(limit_conn)

http {limit_conn_zone $binary_remote_addr zone=addr:10m;server {location /download/ {limit_conn addr 1;}}

下载速度限制(limit_rate) ngx_http_core_module

location /flv/ {flv;limit_rate_after 500k;limit_rate       50k;
}

综合配置

[root@web01 conf.d]# cat mirrors.etiantian.org.conf
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录
location / {index index.html; #阿里云镜像首页}#yum仓库目录
location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;#allow 10.0.0.7;        #允许单个IP地址#allow 10.0.0.0/24;     #允许地址或地址段#deny all;	           #拒绝所有#deny 10.0.0.7;      #拒绝指定的地址或地址段#deny 10.0.0.0/24;      #拒绝指定的地址或地址段#allow all;          #允许所有的地址#限制请求为r/s,有5个进入队列,多余的丢弃。#limit_req zone=req_one burst=5 nodelay;#限制并发连接为1limit_conn addr 1;#限制下载速度limit_rate_after 50m;  #生产场景:VIP体验,类似百度云体验VIP下载达到50m,开始限速limit_rate 200k;       #限制速度为200K
}location /admin/ {           #网站后台,先进行办公源地址访问。#用户名密码验证auth_basic "oldboyedu Auth access";auth_basic_user_file /etc/nginx/auth_pass;#来源IP限制#allow 10.0.0.7;           #允许指定的地址或地址段#deny all;                 #拒绝所有的地址}
}nginx -t && systemctl reload nginx

测试:
1.搞一个大文件

dd if=/dev/zero of=/data/centos/oldboy.zip bs=1M count=500

2.测试方法

[root@web01 conf.d]# curl -o a.zip http://mirrors.etiantian.org/centos/oldboy.zip% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed59  100M   59 59.9M    0     0  1199k      0  0:01:25  0:00:51  0:00:34  202k

3.ab压测方法:指定大文件,坑:不要测试简单Html文件。

[root@web01 conf.d]# ab -n10 -c2  http://mirrors.etiantian.org/centos/oldboy.zip
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking mirrors.etiantian.org (be patient).....doneServer Software:        nginx/1.20.1
Server Hostname:        mirrors.etiantian.org
Server Port:            80Document Path:          /centos/oldboy.zip
Document Length:        197 bytesConcurrency Level:      2
Time taken for tests:   0.014 seconds
Complete requests:      10
Failed requests:        1(Connect: 0, Receive: 0, Length: 1, Exceptions: 0)
Write errors:           0
Non-2xx responses:      9
Total transferred:      104861305 bytes
HTML transferred:       104859373 bytes
Requests per second:    277.09 [#/sec] (mean)
Time per request:       7.218 [ms] (mean)
Time per request:       3.609 [ms] (mean, across all concurrent requests)
Transfer rate:          2837529.94 [Kbytes/sec] received99%     36100%     36 (longest request)
说明:
#当前Non-2xx responses: 9,表示有9个请求不是2xx状态码,被Nginx服务器拒绝,一共是10个并发。

上节课后作业解答:

[root@web01 conf.d]# cat mirrors.etiantian.org.conf
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #阿里云镜像正常站点目录
location / {index index.html; #阿里云镜像首页}#yum仓库centos目录
location /centos/ {autoindex on;allow 10.0.0.0/24;     #允许地址或地址段deny all;	           #拒绝所有#限制请求为r/s,有5个进入队列,多余的丢弃。#limit_req zone=req_one burst=5 nodelay;#限制并发连接为1limit_conn addr 1;#限制下载速度limit_rate_after 50m;  #生产场景:VIP体验,类似百度云体验VIP下载达到50m,开始限速limit_rate 200k;       #限制速度为200K
}location /admin/ {           #网站后台,先进行办公源地址访问。#用户名密码验证auth_basic "oldboyedu Auth access";auth_basic_user_file /etc/nginx/auth_pass;#来源IP限制allow 10.0.0.0/24;           #允许指定的地址或地址段deny all;                    #拒绝所有的地址}
}

1.Nginx状态监控

1.1 Nginx status介绍

Nginx软件的功能模块中有一个ngx_http_stub_status_module模块,这个模块的主要功能是记录Nginx的基本访问状态信息,让使用者了解Nginx的工作状态,例如:连接数等信息。

1.2 Nginx status配置

用location的方式实现状态信息配置,例如在任意一个虚拟主机里,为server标签增加如下配置:

location /nginx_status {stub_status;access_log off;allow 10.0.0.0/24; #<==设置允许和禁止的IP段访问。deny all;          #<==设置允许和禁止的IP段访问。
}[root@web01 conf.d]# cat mirrors.etiantian.org.conf
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录access_log  /var/log/nginx/mirrors.etiantian.org.access.log.gz  main gzip=9 buffer=32k flush=5s;
location / {index index.html; #阿里云镜像首页
}#yum仓库目录
location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;#allow 10.0.0.7;        #允许单个IP地址#allow 10.0.0.0/24;     #允许地址或地址段#deny all;	           #拒绝所有#deny 10.0.0.7;      #拒绝指定的地址或地址段#deny 10.0.0.0/24;      #拒绝指定的地址或地址段#allow all;          #允许所有的地址#限制请求为r/s,有5个进入队列,多余的丢弃。#limit_req zone=req_one burst=5 nodelay;#限制并发连接为1limit_conn addr 1;#限制下载速度limit_rate_after 50m;  #生产场景:VIP体验,类似百度云体验VIP下载达到50m,开始限速
limit_rate 200k;       #限制速度为200K
}location /admin/ {           #网站后台,先进行办公源地址访问。#用户名密码验证auth_basic "oldboyedu Auth access";auth_basic_user_file /etc/nginx/auth_pass;#来源IP限制#allow 10.0.0.7;           #允许指定的地址或地址段#deny all;                 #拒绝所有的地址
}
location /nginx_status {stub_status;}
}

结尾的就是nginx状态的配置:

   location /nginx_status {stub_status;}	

1.3 基本状态数据如下所示:(注意本地解析域名)

[root@web01 conf.d]# curl http://mirrors.etiantian.org/nginx_status
Active connections: 1  # 表示nginx正在处理的活动连接数1个
server accepts handled requests397 397 4046 
Reading: 0 Writing: 1 Waiting: 0 

1.4 状态信息说明

状态含义
Active connections当前活跃连接数,包括Waiting等待连接数。
accepts已接收的总TCP连接数量。
handled已处理的TCP连接数量。
requests当前总http请求数量。
Reading当前读取的请求头数量。
Writing当前响应的请求头数量。
Waiting当前等待请求的空闲客户端连接数

Zabbix监控Nginx状态信息 https://www.cnblogs.com/bixiaoyu/p/9169319.html

2.Nginx location

2.1 location作用

location指令作用是可以根据用户请求URI来执行不同的应用,URI的知识前面章节已经讲解过,其实就是根据用户请求的网站的地址URL匹配,匹配成功即进行相关的操作。

2.2 location语法

  location [ = | ~ | ~* | ^~ ]      uri            { ... }
#  指令         匹配标识            匹配的网站网址   匹配URI后要执行的配置段
location @name { ... }# 匹配符 匹配规则                  优先级
# =     精确匹配                     1 
# ^~    以某个字符串开头              2
# ~     区分大小写的正则匹配           3
# ~*    不区分大小写的正则匹配         4
# /     通用匹配,任何请求都会匹配到    5

2.3 location优先级示例

[root@web01 conf.d]# cat location01.etiantian.org.conf 
server {listen 80;server_name location01.etiantian.org;
location = / {default_type text/html;return 200 'location = /';
}location / {default_type text/html;return 200 'location /';
}location /documents/ {default_type text/html;return 200 'location /documents/';
}location ^~ /images/ {default_type text/html;return 200 'location ^~ /images/';
}location ~* \.(gif|jpg|jpeg)$ {default_type text/html;return 200 'location ~* \.(gif|jpg|jpeg)';}
}

2.4 匹配顺序实践:

#(1)等号精确匹配优先,no.1
[root@web01 conf.d]# curl http://location01.etiantian.org/
location = / 
#(2)# ^~ ,以某个字符串开头no.2
[root@web01 conf.d]# curl http://location01.etiantian.org/images/1.gif
location ^~ /images/#(3)~*    不区分大小写的正则匹配 
[root@web01 conf.d]# curl http://location01.etiantian.org/documents/1.jpg
location ~* \.(gif|jpg|jpeg)#(4)#目录匹配
[root@web01 conf.d]# curl http://location01.etiantian.org/documents/1.html
location /documents/ #目录匹配#(5) / 通用匹配,任何请求都会匹配到no.5
[root@web01 conf.d]# curl http://location.etiantian.org/index.html
location /   #默认匹配最后。

2.5 location02 @name,这样的location02不用于常规请求处理,而是用于重定向。

[root@web01 conf.d]# cat location02.etiantian.org.conf 
server {listen 80;server_name location02.etiantian.org;root /data;
#如果出现如下状态码,则重新从定向到@error_status
error_page 404 403 502 @error_statuslocation @error_status {default_type text/html;return 200 '你的访问出了问题,我是oldboy.';
}[root@web01 conf.d]# curl -H "host:location02.etiantian.org" http://10.0.0.7/oldboy
你的访问出了问题,我是oldboy.

3.Nginx 日志模块

3.1 Nginx日志格式

1.log_format定义日志格式语法

#配置语法: 包括: error.log access.log
Syntax: log_format name [escape=default|json] string ...;
Default: log_format combined "...";
Context: http

2.默认Nginx定义语法格式如下

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

3.Nginx日志格式中常用的变量

$remote_addr        # 记录客户端IP地址
$remote_user        # 记录客户端用户名
$time_local         # 记录通用的本地时间
$time_iso8601       # 记录ISO8601标准格式下的本地时间
$request            # 记录请求的方法以及请求的http协议
$status             # 记录请求状态码(用于定位错误信息)
$body_bytes_sent    # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent         # 发送给客户端的总字节数
$msec               # 日志写入时间。单位为秒,精度是毫秒。
$http_referer       # 记录从哪个页面链接访问过来的
$http_user_agent    # 记录客户端浏览器相关信息
$http_x_forwarded_for #记录客户端IP地址
$request_length     # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time       # 请求花费的时间,单位为秒,精度毫秒# 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。

真实的日志内容为:

10.0.0.1- - [05/Apr/2015:12:16:00 +0800] "GET / HTTP/1.1" 200 25 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" "-"

对应说明:

  • $remote_addr对应的真实日志里的10.0.0.100,即客户端的IP。
  • $remote_user对应的是第二个中杠“-”,没有远程用户,所以用“-”填充。
  • [$time_local]对应的是[05/Apr/2015:12:16:00 +0800]。
  • “$request"对应的是"GET / HTTP/1.1”。
  • $status对应的是200状态码,200是正常访问。
  • $body_bytes_sent对应的是25字节,响应body的大小。
  • “$http_referer"对应的是”-",直接打开的域名浏览,因此,referer没有值。
  • “$http_user_agent"对应的是"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36”。
  • “$http_x_forwarded_for"对应的是”-“,因为Web服务没有使用代理,因此此处为”-"。

3.2 Nginx访问日志

web服务器的访问日志是非常重要的,我们可以通过访问日志来分析用户的访问情况,也可以通过访问日志发现一些异常访问。

3.2.1 access_log日志配置语法。

Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default: access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except

3.2.2 Nginx访问日志配置例

server {listen 80;server_name mirrors.etiantian.org;#将当前的server网站的访问日志记录至对应的目录,使用main格式#access_log /var/log/nginx/mirrors.etiantian.org.log main;access_log  /var/log/nginx/mirrors.etiantian.org.access.log.gz  main gzip=9 buffer=32k flush=5s;
location / {root /data;index index.html;}
}

3.2.3 Nginx日志过滤

一个网站会包含很多元素,尤其是有大量的图片、js、css等静态资源。这样的请求其实可以不用记录日志。

# 访问静态资源gif、png等时,将日志丢入空
location ~* .*\.(gif|jpg|png|css|js)$ 
{access_log /dev/null;
}

3.2.4 Nginx访问日志轮询切割

为什么Nginx访问日志轮询切割?
1.按天好进行相关分析。
2.单个日志过大。

方法1:00点

mv access.log  $(date +%F -d '-1d').accss.log
systemctl reload nginx
=============================================[root@web01 scripts]# cat cut_nginx_log.sh 
#!/bin/sh
Dateformat=`date +%Y%m%d -d -1day`
Nginxlogdir="/var/log/nginx/"Logname="mirrors.etiantian.org.access.log.gz"#第一关
[ -d $Nginxlogdir ] && cd $Nginxlogdir||exit 1#第二关 
[ -f $Logname ]||exit 1#第三关
/bin/mv $Logname ${Dateformat}_$Logname#第四关
systemctl reload nginx# 每天00点00分进行日志滚动
#####
00 00 * * *  /bin/sh /server/scripts/cut_nginx_log.sh &>/dev/null

方法2:logrotate工具切割

/etc/logrotate.d/nginx
[root@web01 scripts]# cat  /etc/logrotate.d/nginx
/var/log/nginx/*.log.gz {dailydateextmissingokrotate 52#compressdelaycompressnotifemptycreate 640 nginx admsharedscriptspostrotateif [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid`fiendscript
}#每天00点00分进行日志滚动
#crontab -e
00 00 * * *  /usr/sbin/logrotate -f /etc/logrotate.d/nginx &>/dev/null

3.3 Nginx错误日志

3.3.1 Nginx错误日志级别

常见的错误日志级别有debug | info | notice | warn | error | crit | alert | emerg
级别越高记录的信息越少,如果不定义,默认级别为error.
它可以配置在main、http、server、location段里

3.3.2 Nginx错误日志示例

error_log  /var/log/nginx/error.log crit;
#如果要想彻底关闭error_log,需要这样配置error_log /dev/null;

建议:放到http区段就可以。

4. nginx错误码原因以及解决方案

链接: http://www.laoseng.net/articles/2014/12/18/1418884520679.html

4.1 400 bad request错误的原因和解决办法

配置nginx.conf相关设置如下.

client_header_buffer_size 16k;
large_client_header_buffers 4 64k;

根据具体情况调整,一般适当调整值就可以。

4.2 Nginx 502 Bad Gateway错误

proxy_next_upstream error timeout invalid_header http_500 http_503;

或者尝试设置:

large_client_header_buffers 4 32k;

4.3 Nginx出现的413 Request Entity Too Large错误

这个错误一般在上传文件的时候会出现,
编辑Nginx主配置文件Nginx.conf,找到http{}段,添加

client_max_body_size 10m; //设置多大根据自己的需求作调整.

如果运行php的话这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。

post_max_size = 10M
upload_max_filesize = 2M

4.4 解决504 Gateway Time-out(nginx)

遇到这个问题是在升级discuz论坛的时候遇到的

一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好, 那么最后就极有可能导致504 Gateway Time-out

现在的网站, 尤其某些论坛有大量的回复和很多内容的, 一个页面甚至有几百K。

默认的fastcgi进程响应的缓冲区是8K, 我们可以设置大点

在nginx.conf里, 加入: fastcgi_buffers 8 128k

这表示设置fastcgi缓冲区为8×128k

当然如果您在进行某一项即时的操作, 可能需要nginx的超时参数调大点,例如设置成60秒:send_timeout 60;

只是调整了这两个参数, 结果就是没有再显示那个超时, 可以说效果不错, 但是也可能是由于其他的原因, 目前关于nginx的资料不是很多, 很多事情都需要长期的经验累计才有结果.

相关文章:

Day54-nginx限速-访问日志-错误日志精讲

Day54-nginx限速-访问日志-错误日志精讲 测试请求限制连接限制&#xff08;limit_conn&#xff09;下载速度限制(limit_rate) ngx_http_core_module综合配置1.Nginx状态监控1.1 Nginx status介绍1.2 Nginx status配置1.3 基本状态数据如下所示&#xff1a;&#xff08;注意本地…...

SQL经典面试题

这里写目录标题 1 背概念2 学例子 1 背概念 1 事务 事务是最小的不可在分的工作单元&#xff0c;事务的操作要么同时成功,要么同时失败。 ACID: 原子性、一致性、隔离性、持久性 2 约束 主键约束&#xff1b;外键约束&#xff08;少用&#xff0c;会增加程序的耦合性&#xff…...

Java基础知识总结(14)

map集合 /* java.util.Map接口中常用的方法 1、Map和Collection 没有继承关系 2、Map集合以key和value的方式存储数据&#xff1a;键值对key和valuea都是引用数据类型key和value都是存储对象的内存地址key起到主导地位&#xff0c;value是key的一个附属品 3、Map接口中常用的方…...

MacOS - GCC 版本升级解决方案

Mac 中自带的 GCC 版本是 4.2.1&#xff0c;由于版本太低&#xff0c;在很多操作的时候会报错。因此需要对其进行升级&#xff0c;这里使用 Homebrew 来下载最新的 GCC。 安装 Homebrew MacOS 的终端中输入如下的命令来安装 Homebrew $ /usr/bin/ruby -e "$(curl -fsSL …...

小程序绕过 sign 签名

之前看到了一篇文章 小程序绕过sign签名思路 之前在做小程序渗透时也遇到了这种情况&#xff0c;但是直接放弃测试了&#xff0c;发现这种思路后&#xff0c;又遇到了这种情况&#xff0c;记录下过程 并没有漏洞分享&#xff0c;仅仅是把小程序也分享出来&#xff0c;方便大家…...

【Canvas与艺术】绘制动态太极图

【图例】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>绘制旋转太极图</title><style type"text/css"&g…...

Llama 2 模型

非常清楚&#xff01;&#xff01;&#xff01;Llama 2详解 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/649756898?utm_campaignshareopn&utm_mediumsocial&utm_psn1754103877518098432&utm_sourcewechat_session一些补充理解&#xff1a; 序列化&#xff…...

SQLiteC/C++接口详细介绍sqlite3_stmt类(十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十二&#xff09; 43、sqlite3_reset sqlite3_reset 函数用于重置已经编…...

【理解机器学习算法】之Clustering算法(Agglomerative Clustering)

聚合聚类(Agglomerative Clustering)是一种层次聚类算法&#xff0c;通过逐步合并或“聚集”它们来构建嵌套聚类。这种方法采用自底向上的方式构建聚类层次&#xff1a;它从将每个数据点作为单个聚类开始&#xff0c;然后迭代合并最接近的聚类对&#xff0c;直到所有数据点合并…...

千帆AppBuilder开发参考-应用API调用说明

介绍 百度智能云千帆AppBuilder平台提供了AppBuilder-SDK&#xff0c;开发者可使用SDK&#xff0c;快捷的开发功能&#xff0c;提升开发效率。 AppBuilder-SDK提供了完整的AI原生应用开发套件&#xff0c;包括丰富的开发组件和应用示例代码。开发组件包括大模型组件、AI能力组…...

python自定义日历库,与对应calendar库函数功能基本一致

目录 自定义日历库 常用列表 日期列表 常用函数 闰年判断 月份天数 元旦序号 日历表头 星期序号 序号及天数 月历字串 打印月历 年历字串 打印年历 对比测试 测试结果 完整代码 运行结果 自定义日历库 自定义日历库函数&#xff0c;并使得其与python calend…...

css3鼠标悬停图片特效,图片悬停效果源码

特效介绍 css3鼠标悬停图片特效,图片悬停效果源码&#xff0c;可以在网页上面作为自己的动态加载名片&#xff0c;放到侧边栏或者网站合适的位置即可 动态效果 代码下载 css3鼠标悬停图片特效,图片悬停效果源码...

使用CSS3画出一个叮当猫HTML源码

我们经常使用PS或者Flash制作动画&#xff0c;本文则介绍了如何用CSS3画出个叮当猫&#xff0c;实现过程很有趣&#xff0c;感兴趣的朋友可以参考一下 首先&#xff0c;先把HTML结构搭建好&#xff1a; <div class"wrapper"> <!--叮当猫整体--> <di…...

Spring Boot 自动化单元测试类的编写过程

前言 Web环境模拟测试 企业开发不仅要保障业务层与数据层的功能安全有效&#xff0c;也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的&#xff0c;并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测…...

复试专业前沿问题问答合集8-3——RNN、Hadoop、GPT大语言模型

复试专业前沿问题问答合集8-3——RNN、Hadoop、GPT大语言模型 深度学习中的的RNN、Hadoop、GPT大语言模型的原理关系问答: GPT(Generative Pre-trained Transformer)和RNN(Recurrent Neural Network)是两种在自然语言处理(NLP)领域广泛使用的深度学习模型。它们在处理…...

序列的使用

目录 序列的创建 序列的使 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在许多数据库之中都会存在有一种数据类型 — 自动增长列&#xff0c;它能够创建流水号。如果想在 Oracle 中实现这样的自动增长列&#xff0c;可…...

golang kafka sarama 源码解析

消费者组重平衡 github.com/!shopify/saramav1.27.2/consumer_group.go func (c *consumerGroup) newSession(ctx context.Context, topics []string, handler ConsumerGroupHandler, retries int) (*consumerGroupSession, error) {// 获取broker组协调器coordinator, err :…...

Flutter知识点整理

JVM 1.Flutter Hot reload 实现原理 一、原理概述 Hot Reload 只能在 Debug 模式下使用&#xff0c;因为 Debug 模式下&#xff0c;Flutter 采用的是 JIT&#xff08; 动态编译&#xff09;&#xff0c;代码是运行在 Dart VM 上&#xff0c;JIT 将 Dart 编译成可以运行在 Dart…...

现代游戏引擎架构

一、并行编程 1.1 为什么需要并行编程 游戏的渲染计算对算力要求很高&#xff0c;所以我们需要把操作系统的资源利用到极致。 但是摩尔定律已经不在适用了&#xff0c;硬件的发展目前已经达到瓶颈。所以我们需要通过数量来提高计算效率。 1.2 并行编程基础 进程与线程&#…...

深度学习:复杂工业场景下的复杂缺陷检测方法

摘要&#xff1a;在复杂的工业场景中&#xff0c;缺陷检测一直是一个重要而具有挑战性的任务。近年来&#xff0c;深度学习技术的快速发展为复杂工业场景下的缺陷检测提供了新的解决方案。本文将介绍深度学习在复杂工业场景下的复杂缺陷检测中的应用&#xff0c;并探讨其技术进…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...