Nginx之常用基本配置
上一篇博客我们大概介绍了一下nginx,nginx的架构,nginx编译安装和nginx命令的用法,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12366808.html;今天我们来简单的配置下nginx和一些简单指令说明。
nginx和httpd类似都是高度模块化的软件,不同的模块有着不同的功能,想要把nginx配置好,首先我们需要了解各个模块的用法以及模块选项的用法和说明。首先我们来了解下nginx用yum安装后的程序环境。
[root@www ~]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.16.1
……省略部分内容
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx
[root@www ~]#
提示:从上面的显示,我们大概可以了解到nginx的主配置文件是/etc/ngxin/ngxin.conf,nginx.conf.default是默认配置文件,从这个文件中我们可以了解到nginx的默认配置是怎么配置的;主程序是/usr/sbin/nginx,日志文件路径是/var/log/nginx,Unit File是nginx.service;/etc/nginx/fastcgi.conf和fastcgi_parems,这两个文件一个是fastcig协议的配置文件,一个是变量配置文件。了解了nginx 的程序环境,我们在来看看主配置文件内容
[root@www ~]# cat /etc/nginx/nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; events {
worker_connections 1024;
} http {
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 /var/log/nginx/access.log main; sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048; include /etc/nginx/mime.types;
default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf; server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html; # Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; location / {
} error_page 404 /404.html;
location = /40x.html {
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
} # Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# } } [root@www ~]#
提示:主配置文件结构大致可以分为main段(全局配置段)和http配置段或者mail配置段或者stream段,后面的http配置段或mail配置段或stream配置段,主要看nginx用于什么功能,如果单纯的用于web服务器,那么后面的mail和stream配置段就可以不要了,也就是说有关web的配置我们必须要在http配置段配置;同样的如果nginx用于邮件代理我们就需要把有关邮件代理的配置放到mail配置段,如果用于四层负载均衡,我们需要把对应的配置写到stream配置段;我们先说一下全局配置段吧
user指令:表示指定运行worker进程的用户
[root@www ~]# head /etc/nginx/nginx.conf
For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
[root@www ~]# ps aux |grep nginx
root 1425 0.0 0.0 120832 2244 ? Ss 19:49 0:00 nginx: master process nginx
nginx 1426 0.0 0.0 121228 3132 ? S 19:49 0:00 nginx: worker process
nginx 1427 0.0 0.0 121228 3132 ? S 19:49 0:00 nginx: worker process
nginx 1428 0.0 0.0 121228 3132 ? S 19:49 0:00 nginx: worker process
nginx 1429 0.0 0.0 121228 3132 ? S 19:49 0:00 nginx: worker process
root 1439 0.0 0.0 112660 968 pts/0 S+ 19:51 0:00 grep --color=auto nginx
[root@www ~]#
提示:通常情况都不建议nginx用root运行;如果是集群环境建议统一进程运行用户,其次必须统一时间
worker_processes :指定worker进程的数量,一般是和运行nginx主机的CUP核心数来定,一般都是小于或者等于物理cpu核心数,auto表示自动去匹配cup核心数来启动worker进程数量
[root@www ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
Stepping: 9
CPU MHz: 3599.644
CPU max MHz: 0.0000
CPU min MHz: 0.0000
BogoMIPS: 7200.06
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-3
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
[root@www ~]# ps aux |grep nginx
root 1425 0.0 0.1 121500 5272 ? Ss 19:49 0:00 nginx: master process nginx
nginx 1453 0.0 0.0 121748 3668 ? S 19:56 0:00 nginx: worker process
nginx 1454 0.0 0.0 121748 3668 ? S 19:56 0:00 nginx: worker process
nginx 1455 0.0 0.0 121748 3668 ? S 19:56 0:00 nginx: worker process
nginx 1456 0.0 0.0 121748 3668 ? S 19:56 0:00 nginx: worker process
root 1465 0.0 0.0 112660 972 pts/0 S+ 19:57 0:00 grep --color=auto nginx
[root@www ~]#
error_log表示指定nginx错误日志存放文件
[root@www ~]# ll /var/log/nginx/error.log
-rw-r--r-- 1 root root 120 Feb 27 19:56 /var/log/nginx/error.log
[root@www ~]# cat /var/log/nginx/error.log
2020/02/27 19:52:18 [notice] 1442#0: signal process started
2020/02/27 19:56:47 [notice] 1452#0: signal process started
[root@www ~]#
pid表示指定pid文件
[root@www ~]# ps aux |grep nginx
root 1567 0.0 0.0 120832 2248 ? Ss 20:05 0:00 nginx: master process /usr/sbin/nginx
nginx 1568 0.0 0.0 121228 3336 ? S 20:05 0:00 nginx: worker process
nginx 1569 0.0 0.0 121228 3336 ? S 20:05 0:00 nginx: worker process
nginx 1570 0.0 0.0 121228 3336 ? S 20:05 0:00 nginx: worker process
nginx 1571 0.0 0.0 121228 3136 ? S 20:05 0:00 nginx: worker process
root 1574 0.0 0.0 112660 972 pts/0 S+ 20:05 0:00 grep --color=auto nginx
[root@www ~]# ll /var/run/nginx.pid
-rw-r--r-- 1 root root 5 Feb 27 20:05 /var/run/nginx.pid
[root@www ~]# nginx -s stop
[root@www ~]# ll /var/run/nginx.pid
ls: cannot access /var/run/nginx.pid: No such file or directory
[root@www ~]#
提示:pid文件就是存放nginx主控进程的进程号的,如果nginx没有运行或者停止了服务,那么pid文件也会跟着消失;这里提示一下在centos7上/var/run 和/run是同一文件夹 ,它俩做的是硬链接
[root@www ~]# ll -id /var/run/
1150 drwxr-xr-x 22 root root 620 Feb 27 20:07 /var/run/
[root@www ~]# ll -id /run
1150 drwxr-xr-x 22 root root 620 Feb 27 20:07 /run
[root@www ~]#
提示:两个文件夹的inode号都是同一个
include此指令表示把某些地方的配置导入到此地;这个指定配置的时候需要注意放的位置;正因为有了这个功能,我们就可以把很多不同功能的配置用专有的文件来配置,这样既方便管理,也很容易读;
events此配置段表示配置有关事件驱动相关的配置
worker_connections :每个worker进程所能够打开的最大并发连接数;
use method:指定并发请求的处理方法;如use epoll;
accept_mutex on|off:处理新的连接请求的方法;on表示各worker进程轮流处理新请求,off表示每来一个新请求就会通知所有的worker进程
有关性能优化的全局配置
worker_cpu_affinity cpumask:手动或自动绑定cpu,默认情况下是没有绑定cpu的,这意味着worker进程会在每个CPU上来会调度的,这样一来在cpu就存在频繁的切换,影响性能;我们可以手动把每个进程绑定到不同的CPU上。禁止worker进程在每个CPU上来回切换
提示:在没有绑定cpu时,我们对nginx worker进程发起并发连接请求,可以看到4个worker进程在不同的CUP上来回切换,很显然这无疑在给系统多余的开销,我们可以绑定nginx 的worker线程。
[root@www ~]# grep worker_cpu /etc/nginx/nginx.conf
worker_cpu_affinity 0001 0010 0100 1000;
[root@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www ~]# nginx -s reload
[root@www ~]#
提示:如果你有的CPU是八核的,那么就需要用8个0来表示,其中第一个进程对应最右侧的0,如果需要绑定到该cpu核心上,则对应位为1即可;
提示:绑定cpu我们也可以直接使用worker_cpu_affinity auto;来指定,让其自动绑定到每个cpu核心上去
worker_priority number:指定worker进程的nice值,设定worker进程优先级;[-20,19]
[root@www ~]# grep "worker_priority" /etc/nginx/nginx.conf
worker_priority -5;
[root@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www ~]# nginx -s reload
[root@www ~]# ps axo comm,pid,nice,psr|grep nginx
nginx 2583 0 0
nginx 31567 -5 0
nginx 31568 -5 1
nginx 31569 -5 2
nginx 31570 -5 3
[root@www ~]#
以上就是常用的全局配置段指令的说明和使用,详细请参考nginx官方文档http://nginx.org/en/docs/ngx_core_module.html
http协议的相关配置
在主配置文件中我们可以看到有一个以http开头的配置段,这个配置段主要配置nginx工作成web服务的配置
server:这个指令表示定义个虚拟主机类似httpd里的virtualhost,这也是一个http里的一个子配置段,里面有server_name指令 root等等
server_name:表示指定虚拟主机名称;指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串;支持*通配任意长度的任意字符;支持~起始的字符做正则表达式模式匹配;
匹配机制:首先是字符串精确匹配;其次是左侧*通配符,然后右侧*通配符,最后是正则表达式
root:设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;可用的位置:http, server, location, if in location;
listen:指定虚拟主机监听的地址和端口,如果只指定端口未指定地址,表示监听服务器上的所有地址,如果在server里没有指定端口,对应的虚拟主机将监听在默认端口80上
listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server:设定为默认虚拟主机;
ssl:限制仅能通过ssl连接该服务
backlog=number:指定后援队列长度
sndbuf=size:指定发送缓冲区大小
提示:我们这样配置后,在hosts文件中添加对应的解析后,用浏览器访问www.ilinux.io,此时它就会把默认主机里的映射路径下的资源响应我们
[root@www ~]# echo "this is default path " > /usr/share/nginx/html/test.html
[root@www ~]# cat /usr/share/nginx/html/test.html
this is default path
[root@www ~]# curl http://www.ilinux.io/test.html
this is default path
[root@www ~]#
tcp_nodelay on|off :在keepalived模式下的连接是否启用TCP_NODELAY选项;
tcp_nopush on|off:在sendfile模式下,是否启用TCP_CORK选项;
sendfile on|off:是否启用sendfile功能;
通常情况下以上三项都是打开的,TCP_NODELAY主要是发送报文延时问题,如果开启了该功能选项,表示不管数据包多小都及时发送,如果关闭了,通常会等到一定量的数据报文一起发送,对于小报文延时就很高,TCP_CORK主要是解决小包问题,它和TCP_NODELAY相反,启用表示要到一定量的数据包后才发送,关闭表示不用等一定量的数据报文再发送,它们两者都是解决小包问题,前者应用在长连接模式下,后者应用在sendfile模式下;sendfile模式解决了内核到用户应用程序,用户应用程序到内核的重复过程,它可将数据报文直接从内核加载到网卡socket缓存区,直接发送出去;这三项都和性能相关,通常都是开启的;
location:此指令用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;在一个server中location配置段可存在多个;
语法:location [ = | ~ | ~* | ^~ ] uri { ... }
=:对URI做精确匹配;
^~:对URI的左半部分做匹配检查,不区分字符大小写;
~:对URI做正则表达式模式匹配,区分字符大小写;
~*:对URI做正则表达式模式匹配,不区分字符大小写;
不带符号:匹配起始于此uri的所有的url;
匹配优先级:=, ^~, ~/~*,不带符号;
示例:
location = / {
[ configuration A ]
} location / {
[ configuration B ]
} location /documents/ {
[ configuration C ]
} location ^~ /images/ {
[ configuration D ]
} location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
说明:如果是用户请求uri是/ 那么在以上location中将匹配到A,如果是/index 将匹配到B,如果是/documents/index将匹配到C,如果是/images/1.jpg将匹配到D和E,但是D的优先级高于E,所有应用D的配置,如果是/document/1.jpg将匹配到C和E,但是E的优先级高于C,所以会应用E的配置;
alias path:定义资源路径别名,仅用于location中;它和root定义资源路径不同的是,root定义的资源路径应用在/uri/左侧的'/',而alias定义的资源路径应用在/uri/的右侧'/';
示例:
[root@www ~]# cat /etc/nginx/conf.d/test.conf
server { listen 80;
server_name www.ilinux.io; location /test/ {
root /data/web/html/; allow all;
}
}
[root@www ~]# cat /data/web/html/index.html
this is /data/web/html/index.html
[root@www ~]# cat /data/web/html/index.html
this is /data/web/html/index.html
[root@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www ~]# nginx -s reload
[root@www ~]# curl http://www.ilinux.io/test/index.html
this is /data/web/html/test/index.html
[root@www ~]#
提示:我们用root来指定资源路径时,我们访问/test/.index.html 它返回的是/data/web/html/test/index.html,就相当于把location左侧的“/”更换成root定义的路径,用户访问资源的真实路径就是/data/web/html/test/index.html;换句话讲,root指定资源路径,匹配用户URI最左侧“/”,真实路径是root指定的路径+用户URI(不带左侧"/")
[root@www ~]# cat /etc/nginx/conf.d/test.conf
server { listen 80;
server_name www.ilinux.io; location /test/ {
alias /data/web/html/; allow all;
}
}
[root@www ~]# cat /data/web/html/index.html
this is /data/web/html/index.html
[root@www ~]# cat /data/web/html/test/index.html
this is /data/web/html/test/index.html
[root@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www ~]# nginx -s reload
[root@www ~]# curl http://www.ilinux.io/test/index.html
this is /data/web/html/index.html
[root@www ~]#
提示:用alias 指定资源路径时,我们访问/test/index.html,它返回/data/web/html/index.html,相当于alias 指定的资源路径覆盖了用户请求的URI最右侧的“/”,换句话说用户URI最右侧的“/”就是alias所指定的资源路径,用户访问/test/index.html 就相当于访问/data/web/html/index.html;这里还需要注意一点的是 alias 指定资源路径时,必须是“/”结尾,如果不以“/”结尾,资源将无法找到;对于root来讲是不是“/”结尾这个无要求;
index file:指定默认主页,可配置在http, server, location;
示例:
[root@www html]# cat /etc/nginx/conf.d/test.conf
server { listen 80;
server_name www.ilinux.io;
location /test/ {
alias /data/web/html/;
index test.html;
allow all;
}
}
[root@www html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www html]# nginx -s reload
[root@www html]# curl http://www.ilinux.io/test/
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>
[root@www html]# echo "this is default page" > /data/web/html/test.html
[root@www html]# curl http://www.ilinux.io/test/
this is default page
[root@www html]#
error_page code ... [=[response]] uri:指定错误页面,匹配指定的状态码,返回指定的URL
示例:
[root@www html]# cat /etc/nginx/conf.d/test.conf
server { listen 80;
server_name www.ilinux.io;
location /test/ {
alias /data/web/html/;
index test.html;
allow all;
}
error_page 404 403 /error.html; location /error.html {
root /data/web/html/error;
}
}
[root@www html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www html]# nginx -s reload
[root@www html]# mkdir /data/web/html/error/
[root@www html]# echo "error page" > /data/web/html/error/error.html
[root@www html]# curl http://www.ilinux.io/abc/
error page
[root@www html]#
提示:通过指定错误页面,我们可以自定义错误页面,也可以对错误页面用专有的location来做配置;
Nginx之常用基本配置的更多相关文章
- Nginx之常用基本配置(三)
前面我们聊了下了Nginx作为WEB服务器对客户端请求相关配置,文件操作优化.Nginx访问控制.basic验证,.状态模块状态页.gzip压缩配置:回顾请参考https://www.cnblogs. ...
- Nginx之常用基本配置(二)
上一篇我们把nginx的主配置文件结构大概介绍了下,全局配置段比较常用的指令说了一下,http配置段关于http服务器配置指令介绍了下,以及有几个调优的指令,server_name的匹配机制,错误页面 ...
- Nginx基础 - 常用模块配置
1.Nginx状态监控http_stub_status_module记录Nginx客户端基本访问状态信息 location /mystatus { stub_status on; access_log ...
- Nginx代理服务——常用的配置语法
可以到官方查看所有代理的配置语法http://nginx.org/en/docs/http/ngx_http_proxy_module.html 缓存区 Syntax:proxy_buffering ...
- nginx常用服务配置
一.nginx.conf的配置方式,创建新vhost user nginx; worker_processes ; worker_cpu_affinity ; worker_rlimit_nofile ...
- 大神教你Nginx常用基础配置方案
Nginx的fastcgi模块参数设置 Nginx 有两个配置文件fastcgi_params.fastcgi.conf,两者唯一的区别是,fastcgi.conf 多一个参数 SCRIPT_FILE ...
- Nginx常用功能配置二
Nginx常用功能配置二 Nginx location匹配设置 location作用:可以根据用户请求的URI来执行不同的应用,根据用户请求的网站的地址URL匹配. location语法: locat ...
- Nginx常用功能配置一
Nginx常用功能配置 参数include配置 说明:如果日常工作中server标签存在太多,可以采用include配置模式,Nginx的主配置文件包含的所有虚拟主机的子配置文件会统一放入extra目 ...
- 2.了解nginx常用的配置
作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-07-10 20:56:10 星期三 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...
随机推荐
- python scoket
一.简介 scoket(套结字)在python就是模块 二.分类 基于文件型(不用) 基于网络型 名字:AF_INET AF_INET6 三.scoket应用 1.基于tcp 长连接:基于tcp的Se ...
- SqlServer分页存储过程(多表查询,多条件排序),Repeater控件呈现数据以及分页
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出 ...
- 玩转Django2.0---Django笔记建站基础十三(第三方功能应用)
第13章 第三方功能应用 在前面的章节中,我们主要讲述Django框架的内置功能以及使用方法,而本章主要讲述Django的第三方功能应用以及使用方法.通过本章的学习,读者能够在网站开发过程中快速开发网 ...
- linux 的21个命令:
1:ls [list] 2:输入输出重定向 3:| 管道 4:chmod 5:cd 6:mkdir 7:cp 8:rm 9:mv 10:cat 11:pwd 12:ln[link] 13:grep ...
- 嗯 想写个demo 苦于没数据
step 1: 来点数据: 各种数据 随你便了. step 2: 来个 服务端 step 3 : 客户端 调用
- requests快速构造请求头的方法
上图请求头内容,内容多不说,也不确认哪些数据是必须的,网上找到一个懒办法 快速一键生成 Python 爬虫请求头 实战演练 抓取网站:https://developer.mozilla.org... ...
- python应用airtest库的环境搭建
参考https://blog.csdn.net/ywyxb/article/details/64126927 注意:无论是在线还是离线安装,最好在管理员权限下执行命令 1.安装Python36(32位 ...
- UML--> plantUML安装
plantUML安装 因为基于intellid idea,所以第一步自行安装. setting->plugins 搜索plantUML 安装完成后,重启idea 会有如下显示 安装Graphvi ...
- mac电脑下使用fcrackzip破解zip压缩文件密码
fcrackzip简介 fcrackzip是一款专门破解zip类型压缩文件密码的工具,工具小巧方便.破解速度快,能使用字典和指定字符集破解,适用于linux.mac osx 系统 fcrackzip安 ...
- java 排序算法分析
一.冒泡排序(时间复杂度O(N^2)) public int[] bubbling(int[] arr){ ) return arr; ; i--){ 1 ; j < i-; j ++){ 2 ...