Nginx 简介和入门 - part1

虽然作为1个后端程序员, 终究避不开这东西

安装Nginx

本人的测试服务器是debian , 安装过程跟ubuntu基本一样

sudo apt-get install nginx

问题是 nginx 安装后 执行文件在/usr/sbin 而不是/usr/bin 所以正常下普通用户是无法使用的。

必须切换到root 用户去配置nginx

gateman@tf-vpc0-subnet0-main-server:~$ nginx -v
-bash: nginx: command not found
gateman@tf-vpc0-subnet0-main-server:~$ sudo su -
root@tf-vpc0-subnet0-main-server:~# nginx -v
nginx version: nginx/1.18.0
root@tf-vpc0-subnet0-main-server:~# 

查看服务注册, 可以简单注册nginx.service 已经成功, 而且已启动

root@tf-vpc0-subnet0-main-server:~# systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-01-01 12:23:06 UTC; 28min ago
       Docs: man:nginx(8)
    Process: 32767 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 32768 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 32961 (nginx)
      Tasks: 5 (limit: 19184)
     Memory: 7.0M
        CPU: 26ms
     CGroup: /system.slice/nginx.service
             ├─32961 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─32963 nginx: worker process
             ├─32964 nginx: worker process
             ├─32965 nginx: worker process
             └─32966 nginx: worker process

Jan 01 12:23:06 tf-vpc0-subnet0-main-server systemd[1]: Starting A high performance web server and a reverse proxy server...
Jan 01 12:23:06 tf-vpc0-subnet0-main-server systemd[1]: Started A high performance web server and a reverse proxy server.
root@tf-vpc0-subnet0-main-server:~# 




查看Nginx 监听的端口

root@tf-vpc0-subnet0-main-server:~# sudo lsof -i -P -n | grep LISTEN
exim4       830 Debian-exim    4u  IPv4  11734      0t0  TCP 127.0.0.1:25 (LISTEN)
exim4       830 Debian-exim    5u  IPv6  11735      0t0  TCP [::1]:25 (LISTEN)
sshd        954        root    3u  IPv4  10970      0t0  TCP *:22 (LISTEN)
sshd        954        root    4u  IPv6  10972      0t0  TCP *:22 (LISTEN)
docker-pr  1304        root    4u  IPv4  12180      0t0  TCP *:8201 (LISTEN)
docker-pr  1309        root    4u  IPv6  12732      0t0  TCP *:8201 (LISTEN)
docker-pr  1401        root    4u  IPv4  12777      0t0  TCP *:2222 (LISTEN)
docker-pr  1408        root    4u  IPv6  13466      0t0  TCP *:2222 (LISTEN)
docker-pr  1453        root    4u  IPv4  13489      0t0  TCP *:63790 (LISTEN)
docker-pr  1459        root    4u  IPv6  14429      0t0  TCP *:63790 (LISTEN)
docker-pr  1474        root    4u  IPv4  14437      0t0  TCP *:33062 (LISTEN)
docker-pr  1481        root    4u  IPv6  12269      0t0  TCP *:33062 (LISTEN)
docker-pr  1500        root    4u  IPv4  12276      0t0  TCP *:33061 (LISTEN)
docker-pr  1507        root    4u  IPv6  12279      0t0  TCP *:33061 (LISTEN)
nginx     32961        root    6u  IPv4 127458      0t0  TCP *:80 (LISTEN)
nginx     32961        root    7u  IPv6 127459      0t0  TCP *:80 (LISTEN)
nginx     32963    www-data    6u  IPv4 127458      0t0  TCP *:80 (LISTEN)
nginx     32963    www-data    7u  IPv6 127459      0t0  TCP *:80 (LISTEN)
nginx     32964    www-data    6u  IPv4 127458      0t0  TCP *:80 (LISTEN)
nginx     32964    www-data    7u  IPv6 127459      0t0  TCP *:80 (LISTEN)
nginx     32965    www-data    6u  IPv4 127458      0t0  TCP *:80 (LISTEN)
nginx     32965    www-data    7u  IPv6 127459      0t0  TCP *:80 (LISTEN)
nginx     32966    www-data    6u  IPv4 127458      0t0  TCP *:80 (LISTEN)
nginx     32966    www-data    7u  IPv6 127459      0t0  TCP *:80 (LISTEN)

如图, 就是用的80




测试ngnix主页

在这里插入图片描述



nginx 主要文件目录介绍

/etc/nginx/ – 包含了所有nginx的配置文件
/etc/nginx/nginx.conf – 主配置文件

/etc/nginx/conf.d/
在 Nginx 中,/etc/nginx/conf.d 目录用于存储自定义的配置文件片段。这些配置文件片段通常以 .conf 扩展名结尾,并包含了特定的 Nginx 配置指令和块,用于配置服务器的不同方面。

当 Nginx 启动时,它会加载主配置文件(通常为 /etc/nginx/nginx.conf),并在主配置文件中包含 /etc/nginx/conf.d 目录中的所有配置文件片段。

/etc/nginx/sites-available/
sites-available目录是用于存放可用的虚拟主机配置文件的位置。每个配置文件代表一个独立的虚拟主机或站点配置。在这个目录中的配置文件通常以.conf` 扩展名结尾,包含有关虚拟主机的配置指令和设置。

当您想要添加一个新的虚拟主机或站点时,您可以在 sites-available 目录中创建一个新的配置文件,并定义该虚拟主机的配置。这样的配置文件可以包括监听的端口、域名、SSL 证书、请求转发规则等。

/etc/nginx/sites-enabled/
sites-enabled目录是用于存放启用的虚拟主机配置的位置。在这个目录中的配置文件是sites-available目录中的配置文件的符号链接(软链接)。只有位于sites-enabled` 目录中的配置文件才会在 Nginx 启动时生效。

通过将符号链接添加到 sites-enabled 目录,您可以选择性地启用或禁用特定的虚拟主机或站点配置。这对于在多个虚拟主机之间切换或禁用某些配置非常有用,而无需删除或移动实际的配置文件。

通常,sites-available 目录用于存储所有可用的虚拟主机配置文件,而 sites-enabled 目录用于存储要在 Nginx 中启用的实际配置文件。这种组织结构使得管理和维护多个虚拟主机变得更加方便。

我们查看 /etc/nginx/sites-enabled/default 这个目录

root@tf-vpc0-subnet0-main-server:/etc/nginx# ls -lrt /etc/nginx/sites-enabled/default 
lrwxrwxrwx 1 root root 34 Jan  1 12:23 /etc/nginx/sites-enabled/default -> /etc/nginx/sites-available/default

可以见到defaut folder 就是1个软连接,
/etc/nginx/sites-enabled/default 实际上就是 /etc/nginx/sites-available/default

/var/log/nginx/
存放日志文件

/var/www/
存放nginx的静态文件, 例如 nginx 欢迎页面的html就在这里

好了, 那么到底 /etc/nginx/conf.d/ 和 /etc/nginx/sites-enabled/的区别是啥, 到底配置文件放哪里??

Nginx 中存在两种不同的配置风格(使用 /etc/nginx/sites-enabled/ 和 /etc/nginx/conf.d/ 目录)是为了提供更大的灵活性和适应不同的使用场景。

/etc/nginx/sites-enabled/ 目录风格:
这种风格通过使用符号链接的方式,将实际的虚拟主机配置文件放置在 /etc/nginx/sites-available/ 目录,然后将其符号链接到 /etc/nginx/sites-enabled/ 目录中。这种方式允许您通过创建或删除符号链接来启用或禁用特定的虚拟主机配置。

这种风格的优点是可以轻松地启用或禁用不同的虚拟主机配置,而不需要编辑主配置文件。这对于管理多个虚拟主机或进行动态配置更加方便。

/etc/nginx/conf.d/ 目录风格:
这种风格允许您直接将虚拟主机的配置文件放置在 /etc/nginx/conf.d/ 目录中,而不需要使用符号链接。每个虚拟主机的配置文件可以是独立的文件,以 .conf 为扩展名。

这种风格的优点是更加简洁和直观,您可以直接在目录中创建和管理每个虚拟主机的配置文件,而不需要创建符号链接。这对于简单的配置场景或较少的虚拟主机数量更加方便。

两种风格的选择取决于个人偏好和特定的使用案例。某些人更喜欢使用符号链接来启用或禁用虚拟主机,而另一些人更喜欢直接管理虚拟主机的配置文件。

本文会尽量用第1种风格




nginx.conf 主配置文件简单内容解释

gateman@tf-vpc0-subnet0-main-server:/etc/nginx$ cat nginx.conf 
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

其中 user www-data 代表nginx实际上会以这个用户运行

其他代码模块都是 在一些 大括号中
例如 event {} 意思如下:

worker_connections 768;:
这个指令设置每个 worker 进程可处理的最大连接数。在这个例子中,每个 worker 进程被配置为可以处理最多 768 个连接。请注意,这个值应根据服务器的负载和性能需求进行调整。

multi_accept on;(注释掉的指令):
这是一个可选的指令,用于启用或禁用 Nginx 的多连接接受机制。当启用时,每个 worker 进程可以同时接受多个连接。在此示例中,该指令被注释掉了,表示该功能被禁用。

当 multi_accept 设置为 off 时,worker_connections 的值仍然表示每个 worker 进程可以处理的最大连接数。即使 multi_accept 关闭,每个 worker 进程仍然能够同时处理多个连接,但它们将按顺序逐个接受连接。





在 http{} 中

sendfile on;:
这个指令启用了 Nginx 的 sendfile 功能。sendfile 是一种高效的文件传输机制,它允许直接从磁盘到网络套接字发送文件,而无需将文件内容先复制到用户空间。这可以提高文件传输的性能和效率。

tcp_nopush on;:
这个指令启用了 TCP 的 nopush 功能。当启用 nopush 时,Nginx 会在发送响应时尽快将数据发送给客户端,而无需等待数据缓冲区填满。这可以提高响应的实时性和传输效率。

types_hash_max_size 2048;:
这个指令设置了 Nginx 类型哈希表的最大大小。类型哈希表用于快速查找文件类型和 MIME 类型。通过增加哈希表的大小,可以提高类型查找的效率。

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

这两行就是定义这个http服务的日志位置

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

这里就是一些虚拟主机设置




配置1个 virtual host (虚拟主机)

我们在/etc/nginx/conf.d/ 下创建1个文件 binaryville1.conf

server {
        listen 80;
        server_name jp-gcp-vms.xyz www.jp-gcp-vms.xyz;
        index index.html index.htm index.php;
        root  /var/www/binaryville1;
}

可以见到, 这个虚拟主机监听的端口同样是80, 这不是会跟自带主页有冲突?
是的, 要得就是这个效果

root  /var/www/binaryville1;

这一句的的意思是定义虚拟网站的根目录位置, 存放静态文件

index index.html index.htm index.php;

上面这句的就是定义index 入口的文件名(在定义的根目录下找), 优先级从左到右.

接下来用nginx -t 命令来检查语法

gateman@tf-vpc0-subnet0-main-server:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

然后用systemctl reload nginx 来apply change

gateman@tf-vpc0-subnet0-main-server:~$ sudo systemctl reload nginx
gateman@tf-vpc0-subnet0-main-server:~$ 

没有error 就代表成功

这时再打开主页, 发现主页就被覆盖了!
在这里插入图片描述




配置多个 virtual host (虚拟主机), 检查加载顺序

既然端口可以冲突
我们来做个实验

我们在/etc/nginx/conf.d/ 创建另外两个文件 binaryville0.conf 和 binaryville2.conf
而他们会执行不同的根目录

root@tf-vpc0-subnet0-main-server:/etc/nginx/conf.d# ls -l
total 12
-rw-r--r-- 1 root root 161 Jan  1 18:15 binaryville0.conf
-rw-r--r-- 1 root root 161 Jan  1 17:38 binaryville1.conf
-rw-r--r-- 1 root root 161 Jan  1 18:15 binaryville2.conf
root@tf-vpc0-subnet0-main-server:/etc/nginx/conf.d# cat binaryville*
server {
        listen 80;
        server_name jp-gcp-vms.xyz www.jp-gcp-vms.xyz;
        index index.html index.htm index.php;
        root  /var/www/binaryville0;
}
server {
        listen 80;
        server_name jp-gcp-vms.xyz www.jp-gcp-vms.xyz;
        index index.html index.htm index.php;
        root  /var/www/binaryville1;
}
server {
        listen 80;
        server_name jp-gcp-vms.xyz www.jp-gcp-vms.xyz;
        index index.html index.htm index.php;
        root  /var/www/binaryville2;
}
root@tf-vpc0-subnet0-main-server:/etc/nginx/conf.d# 

而在他们各自的根目录下, index.html 的内容有区别, 可以区分是哪个目录的文件被加载

gateman@tf-vpc0-subnet0-main-server:~$ sudo su -
root@tf-vpc0-subnet0-main-server:~# cd /var/www
root@tf-vpc0-subnet0-main-server:/var/www# ls
binaryville0  binaryville1  binaryville2  html
root@tf-vpc0-subnet0-main-server:/var/www# tree
.
├── binaryville0
│   └── index.html
├── binaryville1
│   └── index.html
├── binaryville2
│   └── index.html
└── html
    └── index.nginx-debian.html

4 directories, 4 files
root@tf-vpc0-subnet0-main-server:/var/www# cat binaryville*/index*
binaryville0 - site comming soon!
binaryville1 - site comming soon!
binaryville2 - site comming soon!

猜猜最终谁的会被加载?

答案是binaryville0.conf
在这里插入图片描述

实际上,Nginx 在加载配置文件时会按照如下顺序进行处理:

首先,Nginx 会加载 nginx.conf 主配置文件。
然后,Nginx 会加载 /etc/nginx/conf.d/ 目录中的配置文件。它会按照文件名的字母顺序加载这些文件。
在当前情况下,根据文件名的字母顺序,Nginx 会按照以下顺序加载这三个文件:binaryville0.conf、binaryville1.conf 和 binaryville2.conf。

由于这些文件的内容相同(根据您提供的信息文件大小相同),最后加载的 binaryville2.conf 不会覆盖先前加载的文件内容。

*也就是上, 多个配置文件下, 也是最左优先的, 后加载的相同配置不会覆盖已经加载的!




配置server_name , 根据域名区分配置

其实我配置两个域名来指向同1台server
jp-gcp-vms.xyz
jp-gcp-vms.cloud

然后我改下配置文件

root@tf-vpc0-subnet0-main-server:/etc/nginx/conf.d# cat binaryville*
server {
        listen 80;
        server_name jp-gcp-vms.xyz www.jp-gcp-vms.xyz;
        index index.html index.htm index.php;
        root  /var/www/binaryville0;
}
server {
        listen 80;
        server_name 34.39.2.90;
        index index.html index.htm index.php;
        root  /var/www/binaryville1;
}
server {
        listen 80;
        server_name jp-gcp-vms.cloud www.jp-gcp-vms.cloud;
        index index.html index.htm index.php;
        root  /var/www/binaryville2;
}
root@tf-vpc0-subnet0-main-server:/etc/nginx/conf.d# 

其中binaryville0 用域名1, binaryville1 用ip , binaryville0 用域名2
实际效果
在这里插入图片描述
果然我们可以用server_name 来用同1个端口区分不同的虚拟主机!

当然实际上开发用不同端口区分也可以!




配置default_server

假如3个虚拟主机配置的server_name 都匹配不上?

这种情况下 用户打开的就是binaryville0主页了, 最左原则!

而且我们也可以用 default_server 来强制 某个虚拟主机在server_name 都匹配不上时候被选择。
例如:

root@tf-vpc0-subnet0-main-server:/etc/nginx/conf.d# cat binaryville1.conf 
server {
        listen 80 default_server;
        server_name 34.39.2.90;
        index index.html index.htm index.php;
        root  /var/www/binaryville1;
}

如果 多个配置都有default_server? 还是最左原则!

后面的内容有时间再写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/285282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

事件循环的理解

1.单线程 Js是一个单线程的语言,代码只能一行一行去执行,遇到同步的代码就直接执行了,如果遇到异步的代码怎么办? 不可能等到异步的代码执行完,在去执行后面同步的代码。 2.主线程 遇到同步的代码,就在主线程里面直接执行了。 3.任务队列 遇到异步的…

数位dp详解,记忆化搜索,递推,OJ精讲

文章目录 前言引例-不降数前置知识差分转换枚举技巧前缀状态 状态分析状态设计状态转移初始状态记忆化搜索 引例代码实现状态初始化数位初始化记忆化搜索 非递归如何实现?状态设计状态转移算法原理算法实现初始化递推求解 OJ精讲Good Numbers不要62不含连续1的非负整…

redis 从0到1完整学习 (十四):RedisObject 之 ZSet 类型

文章目录 1. 引言2. redis 源码下载3. redisObject 管理 ZSet 类型的数据结构4. 参考 1. 引言 前情提要: 《redis 从0到1完整学习 (一):安装&初识 redis》 《redis 从0到1完整学习 (二):re…

【基础】【Python网络爬虫】【1.认识爬虫】什么是爬虫,爬虫分类,爬虫可以做什么

Python网络爬虫基础 认识爬虫1.什么是爬虫2.爬虫可以做什么3.为什么用 Ptyhon 爬虫4.爬虫的分类通用爬虫聚焦爬虫功能爬虫增量式爬虫分布式爬虫 5.爬虫的矛与盾(重点)6.盗亦有道的君子协议robots7.爬虫合法性探究 认识爬虫 1.什么是爬虫 网络爬虫&…

LAYABOX:2024新年寄语

2024新年寄语 过去的一年,尽管许多行业面临严峻挑战和发展压力,小游戏领域却逆势上扬,年产值首次突破400亿元大关,众多优质小游戏企业收获颇丰。 对此,祝福大家,2024一定更好! 过去的一年&#…

基于低代码的指尖遐想_2

广义低代码解决了企业或个人的哪些问题,其快速发展的背后说明了什么? 基于一个简要的企业信息化系统来分析阐述(天下大事合久必分,分久必合): 2010年前后,一个合格的程序员,可以做需…

YOLOv8改进 | 2023主干篇 | FasterNeT跑起来的主干网络( 提高FPS和检测效率)

一、本文介绍 本文给大家带来的改进机制是FasterNet网络,将其用来替换我们的特征提取网络,其旨在提高计算速度而不牺牲准确性,特别是在视觉任务中。它通过一种称为部分卷积(PConv)的新技术来减少冗余计算和内存访问。…

系统学习Python——装饰器:函数装饰器-[对方法进行装饰:使用嵌套函数装饰方法]

分类目录:《系统学习Python》总目录 如果想要函数装饰器在简单函数和类级别的方法上都能工作,最直接的解决办法在于使用前面文章介绍的状态保持方案之一:把自己的函数装饰器编写为嵌套的def,这样你就不会陷入单一的self实例参数既…

听GPT 讲Rust源代码--library/portable-simd

File: rust/library/portable-simd/crates/core_simd/examples/spectral_norm.rs spectral_norm.rs是一个示例程序,它展示了如何使用Portable SIMD库中的SIMD(Single Instruction Multiple Data)功能来实现频谱规范化算法。该示例程序是Rust源…

仿网易云音乐网站PHP源码,可运营的原创音乐分享平台源码,在线音乐库系统

源码介绍 使用PHP和MYSQL开发的原创音乐分享平台源码,仿网易云音乐网站。用户可以在网站上注册并上传自己的音乐作品,系统内置广告系统,为网站创造收入来源。 安装教程 1.导入sql.sql 2.修改 includes\config.php 数据库信息和网址都改成…

3、事务与持久化

目录 1、事务 2、持久化 1. RDB 2.AOF 3.Redis的主从架构 4、哨兵 5、Redis的集群 1、事务 Redis事务:一次失误操作,该成功的成功,该失败的失败。 先开启事务,执行一些列的命令,但是命令不会立即执行&#xf…

第9章 继承和派生习题(详解)

一、选择题 1.下列表示引用的方法中, () 是正确的。已知:int m10: A.int &xm; B.int &y10; C.int &z; D.fl…

双指针——移动零

题目 示例 算法原理 我们使用两个指针,cur扫描数组,如果nums[cur]为非0,dest,然后让nums[cur]与nums[dest]交换,从而实区间[0,dest]为非0,[dest1,cur]为0,[cur,numsSize-1]为未扫描 题目链接:28…

1.1 理解大数据(2)

小肥柴的Hadoop之旅 1.1 理解大数据(2) 目录1.1 理解大数据1.1.3 大数据概述1.1.4 更多思考 参考文献和资料 目录 1.1 理解大数据 1.1.3 大数据概述 step_0 大数据定义 【《大数据算法设计分析》】: 通常来讲大数据(Big Data&am…

pyqt5用qtdesign设计页面时,去掉页面的空白界面、边框和标题栏

前言 Windows默认的标题栏有时候自己觉得不太美观,就想自己设计一个,然后把默认的去掉,并且把长方形的边框和多余的空表界面去掉,就是下图中圈出来的区域: 去掉之后的效果如图: 这样我们就可以自定义窗…

Spring Boot 3 集成 Jasypt详解

随着信息安全的日益受到重视,加密敏感数据在应用程序中变得越来越重要。Jasypt(Java Simplified Encryption)作为一个简化Java应用程序中数据加密的工具,为开发者提供了一种便捷而灵活的加密解决方案。本文将深入解析Jasypt的工作…

57.网游逆向分析与插件开发-游戏增加自动化助手接口-接管游戏的自动药水设定功能

内容来源于:易道云信息技术研究院VIP课 码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:51307d6bf69f2f3c645c70d09f841f5e32da79b9 代码下载地址,在 SRO_EX 目录下&…

MySQL 8.0 InnoDB Tablespaces之Undo Tablespaces(UNDO表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之Undo Tablespaces(UNDO表空间)Undo Tablespaces(UNDO表空间)默认UNDO表空间添加 Undo 表空间查看Undo 相关的信息查看Undo 相关参数变量查看Undo 状态信息通过information_schema.innodb_…

Java ArrayList在遍历时删除元素

文章目录 1. Arrays.asList()获取到的ArrayList只能遍历,不能增加或删除元素2. java.util.ArrayList.SubList有实现add()、remove()方法3. 遍历集合时对元素重新赋值、对元素中的属性赋值、删除元素、新增元素3.1 普通for循环3.2 增强for循环3.3 forEach循环3.4 str…

JavaScript编程进阶 – 迭代器

JavaScript编程进阶 – 迭代器 JavaScript Programming Advanced - Iterators By JacksonML 在JavaScript语言中,迭代器是对象(Object), 它事先定义好了一个序列,并在其终止时有可能地(潜在地)返回值。 本文简要介绍迭代器对象如…