Nginx日志配置、错误界面配置、流量控制 第九天

article/2025/5/15 9:43:21

目录

nginx日志配置

nginx日志介绍

access.log

error.log

open_log_file_cache

rewrite.log

nginx的日志轮转

nginx错误界面配置

nginx流量控制

nginx如何限流

配置基本限流

nginx流量限制(高级)

流量控制相关功能


nginx日志配置

nginx日志介绍

nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 需要日志模块 ngx_http_log_module 的支持,日志格式通过 log_format 命令来定义,日志对于统计和排错是非常有利的,下面总结了 nginx 日志相关的配置 包括 access_log、log_format、open_log_file_cache、rewrite_log、error_log。

总结:Nginx中通过access_log和error_log指令配置访问日志和错误日志,通过log_format我们可以自定义日志格式。如果日志文件路径中使用了变量,我们可以通过open_log_file_cache 指令来设置缓存,提升性能。其他的根据自己的使用场景定义。详细的日志配置信息可以参考Nginx官方文档

access.log

# 设置访问日志access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
# 关闭访问日志access_log off; 
  • path 指定日志的存放位置。
  • format 指定日志的格式。默认使用预定义的combined。
  • buffer 用来指定日志写入时的缓存大小。默认是64k。
  • gzip 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。
  • flush 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空。
  • if 条件判断。如果指定的条件计算为0或空字符串,那么该请求不会写入日志。

作用域:可以应用access_log指令的作用域分别有http,server,location,limit_except。也就是说,在这几个作用域外使用该指令,Nginx会报错。

access_log /var/logs/nginx-access.log    #该例子指定日志的写入路径为/var/logs/nginx-access.log,日志格式使用默认的combined。access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
该例子指定日志的写入路径为/var/logs/nginx-access.log,日志格式使用默认的combined,指定日志的缓存大小为 32k,日志写入前启用 gzip 进行压缩,压缩比使用默认值 1,缓存数据有效时间为1分钟。

 log_format 指令

Nginx 预定义了名为 combined 日志格式,如果没有明确指定日志格式默认使用该格式:

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

 如果不想使用Nginx预定义的格式,可以通过log_format指令来自定义。

语法:
log_format name [escape=default|json] string ...;
• name 格式名称。在 access_log 指令中引用。
• escape 设置变量中的字符编码方式是json还是default,默认是default。
• string 要定义的日志格式内容。该参数可以有多个。参数中可以使用Nginx变量。自定义日志格式的使用:
access_log /var/logs/nginx-access.log main
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';使用log_format指令定义了一个main的格式,并在access_log指令中引用了它。假如客户端有发起请求:https://qf.com/,我们看一下我截取的一个请求的日志记录:
10.0.105.207 - - [01/Jul/2019:10:44:36 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "-"我们看到最终的日志记录中$remote_user、$http_referer、$http_x_forwarded_for都对应了一个-,这是因为这几个变量为空。

 log_format 指令中常用的一些变量:

error.log

错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。

error_log file [level];
Default:
error_log logs/error.log warn;

file参数指定日志的写入位置。

level 参数指定日志的级别。level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值。可以看到其取值范围是按紧急程度从低到高排列的。只有日志的错误级别等于或高于level指定的值才会写入错误日志中。

基本用法:
error_log /var/logs/nginx/nginx-error.log配置段:main, http,  mail,  stream,  server, location作用域。
例子中指定了错误日志的路径为:/var/logs/nginx/nginx-error.log,日志级别使用默认的 error。

open_log_file_cache

每一条日志记录的写入都是先打开文件再写入记录,然后关闭日志文件。如果你的日志文件路径中使用了变量,如 access_log /var/logs/$host/nginx-access.log,为提高性能,可以使用open_log_file_cache指令设置日志文件描述符的缓存。

语法:
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];默认值: 
open_log_file_cache off;        • max 设置缓存中最多容纳的文件描述符数量,如果被占满,采用LRU算法将描述符关闭。
• inactive 设置缓存存活时间,默认是10s。
• min_uses 在inactive时间段内,日志文件最少使用几次,该日志文件描述符记入缓存,默认是1次。
• valid:设置多久对日志文件名进行检查,看是否发生变化,默认是60s。
• off:不使用缓存。默认为off。open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
配置段:http、server、location作用域中。例子中,设置缓存最多缓存1000个日志文件描述符,20s内如果缓存中的日志文件描述符至少被被访问2次,才不会被缓存关闭。每隔1分钟检查缓存中的文件描述符的文件名是否还存在。

rewrite.log

由ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启,启用时将在error log中记录notice级别的重写日志。

基本语法:         
rewrite_log on | off;默认值: 
rewrite_log off;        配置段:  http,  server, location,  if作用域。

nginx的日志轮转

[root@192 ~]# rpm -ql nginx |grep log /etc/logrotate.d/nginx
[root@192 ~]# vim /etc/logrotate.d/nginx
/var/log/nginx/*.log {           #指定需要轮转处理的日志文件daily     #日志文件轮转周期,可用值为: daily/weekly/yearlymissingok               # 忽略错误信息rotate 7               # 轮转次数,即最多存储7个归档日志,会删除最久的归档日志minsize 5M	       #限制条件,大于5M的日志文件才进行分割,否则不操作dateext             # 以当前日期作为命名格式compress         # 轮循结束后,已归档日志使用gzip进行压缩delaycompress    # 与compress共用,最近的一次归档不要压缩notifempty         # 日志文件为空,轮转不会继续执行create 640 nginx nginx     #新日志文件的权限sharedscripts     #有多个日志需要轮询时,只执行一次脚本postrotate    # 将日志文件转储后执行的命令。以endscript结尾,命令需要单独成行if [ -f /var/run/nginx.pid ]; then    #判断nginx的PID。# 默认logrotate会以root身份运行kill -USR1 cat /var/run/nginx.pidfiendscript
}
执行命令:
[root@192 nginx]# /usr/sbin/logrotate -f /etc/logrotate.conf
创建计划任务:
[root@192 nginx]# crontab -e
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.conf
注意:USR1  停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。

nginx错误界面配置

nginx错误页面包括404 403 500 502 503 504等页面,只需要在server中增加以下配置即可:

#error_page  404 403 500 502 503 504  /404.html;location = /404.html {root   /usr/local/nginx/html;}

 注意:/usr/local/nginx/html路径下必须有404.html这个文件!!!

404.html上如果引用其他文件的png或者css就会有问题,显示不出来,因为其他文件的访问也要做配置;为了简单,可以将css嵌入文件中,图片用base编码嵌入。

示例:

[root@localhost ~]# mkdir /html
[root@localhost ~]# vim /html/404.html<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /><title>404</title><style>.layout-table{display:table;height:100%;width:100%;vertical-align: middle;margin-top:150px}.layout-table-cell{display: table-cell;vertical-align: middle;text-align:center}.layout-tip{font-size:28px;color:#373737;margin: 0 auto;margin-top:16px;border-bottom: 1px solid #eee;padding-bottom: 20px;width: 360px;}#tips{font-size:18px;color:#666666;margin-top:16px;}</style></head><body class="layui-layout-body"><div class="layui-layout layui-layout-admin"><div class="layui-body"><div class="layout-table"><div class="layout-table-cell"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV4AAACMCAYAAAA0qsGKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIwRDQ0ODRFMzMyODExRThBQ0Q5Q0UyNkNCMkE4MDk0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIwRDQ0ODRGMzMyODExRThBQ0Q5Q0UyNkNCMkE4MDk0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjBENDQ4NEMzMzI4MTFFOEFDRDlDRTI2Q0IyQTgwOTQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjBENDQ4NEQzMzI4MTFFOEFDRDlDRTI2Q0IyQTgwOTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4Qz6opAAAU5klEQVR42uxd3XXjthKe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" class="layout-img"><p class="layout-tip">哎呀,找不到该页面啦!</p><p id="tips">请检查您的网络连接是否正常或者输入的网址是否正确</p></div></div></div></div></body>
</html>
[root@localhost ~]# vim /etc/nginx/conf.d/404.conf
server {listen 80;server_name www.hjf777.com;location / {root /html;index index.html;}error_page 404 /404.html;location = /404.html {root /html;}
}
[root@localhost ~]# nginx -s reload

 浏览器测试访问,输入ip地址后加一个不存在的路径,就会跳转到我们自己定义的404页面

nginx流量控制

流量控制是nginx中一个非常实用,却经常被错误理解和错误配置的功能。我们也可以用来限制用户在给定时间内HTTP请求的数量。请求,可以是一个简单网站首页的GET请求,也可以是登录表单的POST请求。流量限制可以用作安全目的,比如可以用减慢暴力密码破解的速率。通过将传入请求的速率限制为真实用户的典型值,并标识目标URL地址(通过日志),还可以用来抵御DDOS攻击。更常见的情况,该功能被用来保护上游应用服务器不被同时太多用户请求所压垮。

nginx如何限流

nginx的“流量限制”使用漏桶算法(leaky bucket algorithm),该算法在通讯和分组交换计算机网络中广泛使用,用以处理宽带有限时的突发情况。就好比,往一个桶口里倒水,桶底在漏水的水桶。如果桶口倒水的速率大于桶底的漏水速率,桶里面的水将会溢出;同样,在请求处理方面,水代表来自客户端的请求,水桶代表根据“先进先出调度算法”(FIFO)等待被处理的请求队列,桶底漏出去的水代表离开缓冲区被服务器被处理的请求,桶口溢出去的水代表被丢弃和不被处理的请求。

配置基本限流

“流量限制”配置两个主要的指令,limit_req和limit_req_zone,如下所示:

limit_req_zone $binary_remote_addr zone=mylimit rate=10r/s;limit_req_zone指令设置流量限制和共享内存区域的参数,但实际上并不限制请求速率。所以需要通过添加limit_req指令——rate,将流量限制应用在特定的location或者server块中。例如上面的rate=10r/s,我们对请求进行流量限制。现在每个ip地址被限制为每秒只能请求10次,更精确地说,在前一个请求的100毫秒内不能请求该URL。limit_req_zone指令定义了流量限制相关的参数,而limit_req指令在出现的上下文中启用流量限制
limit_req_zone指令通常在HTTP块协议中定义,使其可在多个上下文中使用,它需要三个参数:key:定义应用限制的请求特性。比如上面命令中的nginx变量$binary_remote_addr,保存客户端IP地址的二进制形式。这意味着,我们可以将每个不同的IP地址通过第三个参数rate设置的请求速率进行限制。(使用$binary_remote_addr变量是因为比字符串形式的客户端IP地址$remote_-addr占用更少的空间)zone:定义用于存储每个IP地址状态以及被限制请求URL访问频率的共享内存区域。保存在内存共享区域的信息,意味着可以通过nginx的worker进程之间共享。定义分为两个部分:通过zone=keyword(表示区域的名字),以及冒号后面跟区域大小。16000个IP地址的状态信息,大约需要1MB。rate:定义最大请求速率。在上面命令中,速率不能超过每秒10个请求。nginx实际上以毫秒的粒度来跟踪请求,所以速率限制相当于每100毫秒1个请求。因为不允许“突发情况”(见下一章节),这意味着在前一个请求100毫秒内达到的请求将被拒绝。(1秒=1000毫秒)

 示例:

[root@localhost ~]# vim /etc/nginx/nginx.conf
....                #在HTTP全局块中添加limit_req_zone指令
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
....
[root@localhost ~]# vim /etc/nginx/nginx.conf
server {listen 80;server_name www.hjf777.com;location / {root /html;index index.html;limit_req zone=mylimit;}
}[root@localhost ~]# nginx -s reload

 客户端访问测试

nginx流量限制(高级)

通过将基本的“流量限制”与其他nginx功能配合使用,我们可以实现更细粒度的流量限制。

示例:

准备四台机器

192.168.242.137    代理服务器

192.168.242.138    真实服务器

192.168.242.134    客户端(白名单)

192.168.242.140    客户端(不在白名单内)

先部署好真实服务器(192.168.242.138)

[root@localhost ~]# mkdir /html
[root@localhost ~]# echo "hello xiaopanda" >/html/index.html
[root@localhost ~]# vim /etc/nginx/conf.d/limit.conf
server {listen 80;server_name localhost;location / {root /html;index index.html;}
}
[root@localhost ~]# nginx -s reload

测试

 接下来部署代理服务器(192.168.242.137)

[root@localhost ~]# vim /etc/nginx/nginx.conf
....                       在http全局块添加upstream配置,添加地址池,地址池里是真实服务器的ip
upstream web { server 192.168.242.138;
} 
...
[root@localhost ~]# vim /etc/nginx/conf.d/proxy.conf
server {listen 80;server_name localhost;location / {proxy_pass http://web;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
[root@localhost ~]# nginx -s reload
浏览器访问代理服务器地址,验证是否能访问真实服务器的网页。(成功访问到了,步骤省略了,如果有问题,检查配置文件)

然后在代理服务器上做流量限制(192.168.242.137)

[root@localhost ~]# vim /etc/nginx/nginx.conf
...  在http全局块添加geo和map两个指令
geo $limit {default 1;             192.168.242.134 0;     #白名单
}
map $limit $limit_key {0 "";1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=req_zone:10m rate=1r/s;
upstream web {server 192.168.242.138;
}
...
[root@localhost ~]# vim /etc/nginx/conf.d/php.conf
server {listen 80;server_name localhost;location / {limit_req zone=req_zone;     #使用limit_req指令proxy_pass http://web;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}[root@localhost ~]# nginx -s reload

使用两台客户端分别测试

白名单客户端测试192.168.242.134

 黑名单客户端访问测试

 说明流量限制成功。

这个例子同时使用了geo和map指令。geo块将给在白名单中的ip地址对应的$limit变量分配一个值0,给其他不在白名单中的默认分配一个值1。然后我们使用一个映射将这些值转为key,如下:

如果$limit变量的值是0,$limit_key变量将被赋值为空字符串

如果$limit变量的值为1,$limit_key变量将被赋值为客户端二进制形式的IP地址

两个指令配合使用后,白名单内IP地址的$limit_key变量被赋值为空字符串,不在白名单内的被赋值为客户端的ip地址。当$limit_req_zone后的第一个参数是空字符串时,不会应用“流量限制”,所以白名单内的ip地址不会被限制。其他所有ip地址都会被限制。limit_req指令将应用到的location块,允许在配置的限制上最多超过10个数据包的突发,并且不会延迟转发。

流量控制相关功能


http://chatgpt.dhexx.cn/article/7jtUQUSa.shtml

相关文章

运维配置:Nginx日志配置详解

Nginx日志配置详解 前言 Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种&#xff1a;access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息&#xff0c;请求的处理时间等信息。错误日志记录了访问出错的信息&…

nginx日志[配置解释]

经常使用nginx&#xff0c;但是对nginx中的日志配置了解的不多&#xff0c;最近简单的学习了一下&#xff0c;在此简略的记录下。 nginx基础配置如下&#xff1a; user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/ngi…

后端实践:Nginx日志配置(超详细)

前言 Nginx日志对于统计、系统服务排错很有用。 Nginx日志主要分为两种&#xff1a;access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息&#xff0c;请求的处理时间等信息。错误日志记录了访问出错的信息&#xff0c;可以帮助我…

Linux下玩转nginx系列(三)---nginx日志配置文件说明

nginx日志共三个参数。 access_log: 定义日志的路径及格式。 log_format: 定义日志的模板。 open_log_file_cache: 定义日志文件缓存。 nginx access日志配置 access_log日志配置 access_log用来定义日志级别&#xff0c;日志位置。语法如下&#xff1a; 日志级别&#x…

Linux中级实战专题篇三:nginx服务(日志介绍,作用域,格式定义,流量控制,访问控制模块,用户信任登录)

Nginx 日志配置 1、Nginx 日志介绍 Nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持&#xff0c;日志格式通过 log_format 命令来定义&#xff0c;日志对于统计和排错是非常有利的&#xff0c;下面总结…

英媒:知名色情网站约80万名用户账号遭曝光

英媒称&#xff0c;色情网站Brazzers约80万登记用户的资料遭曝光。黑客从与网站有关的论坛中窃取这些数据。 英国广播公司网站9月7日报道&#xff0c;Brazzersforum是给Brazzers用户讨论影片内容和演员的论坛&#xff0c;很多人看来在两个网站上使用相同的登录名称和密码&#…

黑客团体Anonymous宣称已经攻陷40家儿童色情网站

Anonymous从一成立以来就连续攻击企业和联邦政府的网站&#xff0c;他们的大部分攻击行动公然违法&#xff0c;但事实上这一组织向来以自己的价值观行事&#xff0c;例如他们对儿童色情网站深恶痛绝&#xff0c;在攻击上述网站的同时&#xff0c;自愿扮演起正义维护者的角色。 …

一个emoji表情包处理工具类

一个emoji表情包处理工具类 参考业务场景解决方案方案一&#xff08;mysql字符集&#xff09;方案二&#xff08;emoji表情包转码&#xff09; 尊重他人成果、转载请注明出处 参考 https://github.com/vdurmont/emoji-java 业务场景 在常规如APP推送、BBS、论坛等类型的业务系…

有趣的表情包购物网站

首页 一个轮播图 首页 换肤 产品页 一个放大镜 我的账户界面 产品信息界面 一个打星小程序 可增删 以及删除的购物车界面

怎么自己制作动图表情包?在线gif生成的操作步骤

gif表情包在我们平时的生活里斗图的时候经常会用到&#xff0c;那么如何用图片制作gif&#xff08;https://www.gif.cn&#xff09;表情包呢&#xff1f;今天就分享一个在线gif生成的简单方法&#xff0c;利用gif制作工具将图片转gif动图&#xff0c;下面是详细的操作步骤。 打…

表情符号(emoji)大全,只此一文便够了

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 表情符号&#xff08;emoji&#xff09;大全、只此一文便够了 摘要集中展示笑脸和动物人庆贺和物品食品和物交通和地点符号 符号表smileys_and_peopleanimals_and_naturefood_and_dr…

热门聊天表情包怎么找?怎么制作?多平台表情合集,没有找不到的表情包!搞笑-金馆长-张家辉-卡通-二次元-gif等表情大全

去年的时候我做了一个表情包的小程序&#xff1a;i表情助手。 第一个版本做的比较简陋&#xff0c;一是表情图片资源比较少&#xff0c;二是需要用户填写文案制作&#xff0c;总的来说还是不够好用&#xff0c;所以一直没有进行推广。 过完年放完假回来&#xff0c;我决定好好…

22、实现发送文字、表情包

实现发送文字、表情包 一、 发送原理 二、 前端处理核心方法三、 后端逻辑处理函数 func dispatch(data[]byte)四、对端接收到消息后处理函数五、表情包简单逻辑六、发送图片流程七、 发送语音八、 发送视频测试 实现发送文字、表情包 一、 发送原理前端user1拼接好数据对象 …

是谁在Go标准库的源码中植入了色情网站?

昨天&#xff0c;有网友在群里说在GitHub上发现了色情网站&#xff01; GitHub上怎么会有色情网站呢&#xff1f;网友给出了下面的截图&#xff1a; 这个出现在Go标准库中的Issue里面&#xff0c;有一个url… 该Issue地址&#xff1a;https://github.com/golang/go/issues/488…

调皮的表情图(Emoji)

调皮的表情&#xff08;Emoji&#xff09; 示例HTMLCSSJS 更多有趣示例 尽在 知屋安砖社区 示例 HTML <div class"main"><div class"emoji"><div class"emoji__eyes abs"><div class"emoji__eye"></div&…

现表情包大幅流行,今天教你们开发个人表情包网站

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者&#xff1a;python学习教程 ( 想要学习Python&#xff1f;Python学习交流群&#xff1a;1039649593&#xff0c;满足你的需求…

python是世界上最好的语言表情包_语言表情包 - 语言微信表情包 - 语言QQ表情包 - 发表情 fabiaoqing.com...

如果你有一个朋友很久没跟你联系了一是他死了是他是学汉语言的三是他在期末考试如果他既是汉语言的又在准备期末考试你就当他死了吧 - 汉语言专业表情包 对方不想和你说话,向你推荐了世界上最好的语言!(PHP)_PHP_语言_对方表情 组织语言中(写作业中)_作业_语言_组织表情 …

情网

情网 我掩饰不住的慌张&#xff0c;在迫不急待地张望&#xff0c;生怕这一路是好梦一场。而你是一张无边无际的网&#xff0c;轻易就把我困在网中央&#xff0c;我越陷越深越迷惘&#xff0c;路越走越远越漫长&#xff0c;如何我才能锁住你眼光。情愿就这样守在你身旁&#xff…

javaScript基础面试题 -- 延迟加载JS有哪些方式?

延迟加载JS有哪些方式&#xff1f; js脚本放置在不同位置&#xff0c;对页面加载的不同影响defer与async的区别&#xff1a; 回答&#xff1a;defer 与 async js脚本放置在不同位置&#xff0c;对页面加载的不同影响 关于这个问题&#xff0c;首先来介绍一下&#xff0c;js脚本…

14道高频手写JS面试题及答案,巩固你的JS基础

目录 1. 手写深拷贝 2. 防抖函数 3. 节流函数 4. 模拟 instanceof 5. 全局通用的数据类型判断方法 6. 手写 call 函数 7. 手写 apply 函数 8. bind方法 9. 模拟 new 10. 类数组转化为数组的方法 11. 组合继承 12. 原型式继承 13. 实现 Object.create() 14. 数组…