Nginx网络服务的配置(叫不醒和睡不着的是两个世界)

news2024/12/23 10:39:31

文章目录

  • 一、Nginx概述
  • 二、Nginx相对于Apache的优点
  • 三、配置Nginx网络服务
    • 1.编译安装和启用Nginx服务
      • (1)关闭防火墙和selinux
      • (2)安装依赖包
      • (3)创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
      • (4)编译安装Nginx源码包
      • (5)nginx服务的检查、启动、重启、停止、生成日志和升级
      • (6)添加 nginx 系统服务(通过systemctl管理)
    • 2.修改Nginx主配置文件
    • 3.1全局配置
    • 3.2 I/O事件配置
    • 3.3 HTTP配置
  • 四、访问状态统计配置
    • 4.1 查看安装的模块
    • 4.3 重启服务,访问测试
  • 五、基于授权的访问控制
    • 5.1 生成用户密码认证文件
    • 5.2 修改主配置文件相对应目录,添加认证配置项
    • 5.3 重启服务,访问测试
  • 六、基于客户端的访问控制
  • 七、基于域名的Nginx虚拟主机
    • 7.1 为虚拟主机提供域名解析
    • 7.2 为虚拟主机准备网页文档
    • 7.3 修改Nginx的配置文件
  • 八、基于IP的Nginx虚拟主机
  • 九、基于端口的Nginx虚拟主机

一、Nginx概述

Nginx是一款高性能、轻量级Web服务软件。稳定性高,系统资源消耗低,对HTTP并发连接的处理能力高,单台物理服务器理论上可支持 30 000~50 000 个并发请求,实际约 2~3 万。

二、Nginx相对于Apache的优点

  1. 轻量化,Nginx 比 Apache占用更少的内存及资源;

  2. 静态处理,Nginx 静态处理性能比 Apache 高;

  3. Nginx可以实现无缓存的反向代理加速,提高网站运行速度;

  4. Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;

  5. Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;

  6. nginx是异步非阻塞进程,多个连接可以对应一个进程;apache是同步多进程,一个连接对应一个进程;

  7. Nginx高度模块化,编写模块相对简单,且组件比Apache少;

  8. 高并发下Nginx 能保持低资源低消耗高性能;

  9. Nginx 配置简洁,Apache配置复杂;

三、配置Nginx网络服务

需要准备Nginx源码包nginx-1.12.0.tar.gz

1.编译安装和启用Nginx服务

(1)关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

(2)安装依赖包

nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

(3)创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

useradd -M -s /sbin/nologin nginx

(4)编译安装Nginx源码包

#在opt目录下解压源码包
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
 
#到源码包中自定义编译安装
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \					#指定nginx的安装路径
--user=nginx \								#指定用户名
--group=nginx \								#指定组名
--with-http_stub_status_module				#启用 http_stub_status_module 模块以支持状态统计
 
#编译安装
make && make install
 
#让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

(5)nginx服务的检查、启动、重启、停止、生成日志和升级

nginx -t    #检查配置文件是否配置正确(语法)
 
#启动
nginx
 
#停止
cat /usr/local/nginx/logs/nginx.pid 
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx 
killall -s QUIT nginx
 
#重载(不关闭进程重新读取服务)
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx 
killall -s HUP nginx
 
#日志分割,重新打开日志文件
kill -USR1 <PID号>
 
#平滑升级
kill -USR2 <PID号> 升级方法1
 
新版本升级:
tar-zxvf nginx-1.xx.xx.tar.gz
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \ 
--with-http_ssl_module
#ssl是一种安全认证模块
 
make 
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old 
cp objs/nginx /usr/local/nginx/sbin/nginx
#kill -USR2 <PID号> 升级方法1 
make upgrade 升级方法2
#或者先killall nginx,再/usr/local/nginx/sbin/nginx 升级方法3

启动过程中遇到报错
在这里插入图片描述
原因:因为httpd服务与nginx服务同用80号端口
解决方法:关闭或者卸载httpd服务或者修改httpd服务的端口

注意点(不影响升级):
make upgrade过程中报的错是由于nginx不是通过/usr/local/nginx/sbin/nginx启动的,而是通过$PATH中的软连接启动的。
解决办法:
要保证当前 nginx 进程是通过/usr/local/nginx/sbin/nginx 启动的;或者先 killall nginx ,再使用 /usr/local/nginx/sbin/nginx 。

(6)添加 nginx 系统服务(通过systemctl管理)

chkconfig:2345 20 90 代表服务在2345启动级别中,第20个进程自启,第90个进程关闭。
chkconfig:- 代表不开机自启

#编写服务配置文件
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 2345 20 99
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
  $COM
;;
 
stop)
  kill -s QUIT $(cat $PID)
;;
 
restart)
  $0 stop
  $0 start
;;
 
reload)
  kill -s HUP $(cat $PID)
;;
 
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
 
esac
exit 0
 
#添加到系统服务
chmod +x /etc/init.d/nginx
chkconfig --add nginx
systemctl stop nginx
systemctl start nginx

第二种方法
通过system中创建服务

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx 
After=network.target
[Service]
Type=forking 
PIDFile=/usr/local/nginx/logs/nginx.pid 
ExecStart=/usr/local/nginx/sbin/nginx 
ExecReload=/bin/kill -s HUP $MAINPID 
ExecStop=/bin/kill -s QUIT $MAINPID 
PrivateTmp=true
[Install]
WantedBy=multi-user.target
-----------------------------------------------------------
[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务
[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
Privatermp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
 
[Install]服务安装的相关设置,可设置为多用户

停止之后 进程就结束了表示成功

在这里插入图片描述
此时服务已经起来

默认文件位置在/usr/local/nginx/html/

在这里插入图片描述

2.修改Nginx主配置文件

nginx.conf

1、全局块:全局配置,对全局生效;

2、events块:配置影响Nginx服务器与用户的网络连接;

3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;

4、server块:配置虚拟主机的相关参数,一个http块中可以有多个server块;

5、location块:用于配置匹配的uri;

6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。


vim/usr/local/nginx/conf/nginx.conf

3.1全局配置

#user nobody;               #运行用户,若编译时未指定则默认为nobody 
worker_processes 1;         #工作进程数量,一般设置为和CPU核数一样
#error_log logs/error.log;  #错误日志文件的位置
#pid logs/nginx.pid;        #PID文件的位置

3.2 I/O事件配置

events{
    use epol1;                 #使用epol1模型,2.6及以上版本的系统内核,建议使用epo11模型以提高性能,实现多路复用
    worker_connections 4096;   #每个进程处理4096个连接,默认值是1024
}
#修改nginx配置文件只是使得软件支持该并发量,如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数,使得硬件支持该并发量
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
#epo11是Linux内核为处理大批句柄而作改进的po11,是Linux下多路复用ro接口select/po11的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

要实现30000并发量,假设我是两核,worker_processes 2; worker_connections 15000;但一般而言,worker_connections设置为2的次方。
也就是说工作进程数量乘每个进程处理的链接数,就等于他的并发量,面试常问

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

*                hard    nofile          30000
#在最后一行添加如下内容
#第一列为用户和组
#第二列为磁盘限额,软硬限制
#第三列为项目
#第四列为相应项目的数量

上述设置的软硬并发量都是理论上的,真正并发量还得看CPU的性能,在投放到生产环境前,我们需要就行压测

3.3 HTTP配置

http{
##文件扩展名与文件类型映射表
include mime.types;
##默认文件类型
default_type application/octet-stream;
##日志格式设定
#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 logs/access.log main;
##开启文件传输模式
sendfile on;
##减少网络报文段的数量
#tcp_nopush on;
##连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
##gzip模设置,设置是否开启gzip压缩输出
#gzip on;
 
##Web服务的监听配置
    server{
        ##监听地址及端口
        listen 80#没写IP地址默认所有地址
        #站点域名,可以有多个,用空格隔开
        server_name www.stevelu.com;
        ##网页的默认字符集
        charset utf-8;
        ##根目录配置
        location / {
         root html;    ##网站根目录的位置/usr/local/nginx/html
        index index.html index.php;   ##默认首页文件名
        }
        error_page 500 502 503 504 / 50x.html;   ##内部错误的反馈页面
        ##错误页面配置
        location = /50x.html{
            root html;
        }
    }
}
-----------------------------------------------------------------------------------------------
日志格式设定:
$remote_addr$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local:用来记录访问时间与时区;
$request:用来记录请求的url与http协议;
$status:用来记录请求状态;成功是200,
$body_bytes_sent:记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的p地址了,通过$remote_add拿到的Ip地是反向代理服务器的ip地址。
反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
 
location常见配置指令,root、alias、proxy_pass 
root、alias不能同时配置
root(根路径配置):root  /var/www/html   请求www.stevelu.com/test/1.html,会返回文件/var/www/html/test/1.html 
alias(别名配置):alias   /var/www/html   请求www.stevelu.com/test/1.html,会返回文件/var/www/html/1.html 
proxy pass(反向代理配置)

关于访问的路径

location / {
    root html; 
    index index.html index.htm;
}
location /test {
    root data;  #根路径的目录
    index index.html index.htm;;
}    
#如果在location /后面加上test,访问的目录是如下,root代表根,根还是html目录,不要被test迷惑    
/usr/local/nginx/html/test/stevelu.html
 
location /test{
    alias /var/www/html; 
    index index.html index.htm;
}
 
http://192.168.109.132/steve.html-->/usr/loca/nginx/html/stevelu.html   网页内容33333
http://192.168.109.132/test/stevelu.html -->/data/test/stevelu.html     网页内容11111
http://192.168.109.132/test/stevelu.html -->/var/www/html/test/stevelu.html    网页内容22222

四、访问状态统计配置

4.1 查看安装的模块

先使用命令/usr/local/nginx/sbin/nginx -V查看已安装的Nginx是否包含HTTP_STUB_STATUS模块
在这里插入图片描述

with是已经安装 without表示未安装

在这里插入图片描述

cat  /opt/nginx-1.12.0/auto/options I grep YES  
#可查看nginx已安装的所有模块

4.2 修改nginx.conf配置文件,指定访问位置并添加stub status配置

cd /usr/local/nginx/conf 
cp nginx.conf nginx.conf.bak 
#备份原配置文件
 
vim /usr/local/nginx/conf/nginx.conf 
.......
http{
.......
     server{
        listen 80;
        server_name www.stevelu.com;
        charset utf-8;
        location / {
            root html;
            index index.html index.php;
        }    
        ##添加stub status配置##
        location /status {  
        #访问位置为/status,指定路径之后,我们就知道指定的路径去看状态统计 
            stub_status on;  #打开状态统计功能
            access_log off;  #关闭此位置的日志记录
         }
     }
 }        

4.3 重启服务,访问测试

systemctl restart nginx

浏览器访问http://192.168.109.132/status

Active connections:表示当前的活动连接数;

server accepts handled requests:表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、已处理的请求数。

可curl -Ls http://192.168.109.132/status 结合awk与if语句进行性能监控。

CON=$(curl -Ls http://192.168.109.132/status | awk '/Active connections:/{print $3}')
if[ $CON -gt 25000 ];then
echo "警告!当前并发数量为$CON,超过预警值!"

在这里插入图片描述

五、基于授权的访问控制

设置只有指定用户才可以访问该网页,想要对哪个路径进行限制,就在location下添加路径,我直接在默认的目录下实验

5.1 生成用户密码认证文件

yum install -y httpd-tools
htpasswd -c /usr/local/nginx/userlist.txt zhangsan
密码自拟,就是访问网页时候的密码
#-c 创建文件,第二次加入用户不用加
chown nginx /usr/local/nginx/userlist.txt
chmod 400 /usr/local/nginx/userlist.txt
#修改权限,只有管理员可以查看

5.2 修改主配置文件相对应目录,添加认证配置项

vim /usr/local/nginx/conf/nginx.conf 
......
    server{
    location / {   ##添加认证配置##
    ......
    auth_basic "secret";    #设置密码提示框文字信息
    auth_basic_user_file /usr/local/nginx/userlist.txt;
}

5.3 重启服务,访问测试

nginx   -t 
systemctl restart nginx
浏览器访问http://192.168.109.132

六、基于客户端的访问控制

访问控制规则如下:

deny IP/IP段:拒绝某个IP或IP段的客户端访问。(黑名单)

allow IP/IP段:允许某个IP或IP段的客户端访问。(白名单)

规则从上往下执行,如匹配则停止,不再往下匹配。

vim /usr/local/nginx/conf/nginx.conf 
......
    server {
        location / { 
        ......
        ##添加控制规则##
        allow 192.168.109.133;
        #允许访问的客户端IP 
        deny all;
        #拒绝其它IP客户端访问
        }
    }
systemctl restart nginx

七、基于域名的Nginx虚拟主机

首先在每个站点下指定网页的根目录,然后在nginx.conf文件中使用server块,指定不同的站点,location下指定不同的根目录的路径

7.1 为虚拟主机提供域名解析

echo "192.168.109.132 www.stevelu.com www.gyq.com" >> /etc/hosts

7.2 为虚拟主机准备网页文档

mkdir -p /var/www/html/stevelu
mkdir -p /var/www/html/gyq
echo "<hl>www.stevelu.com</h1>"> /var/www/html/stevelu/index.html
echo "<hl>www.gyq.com</hl>"> /var/www/html/gyq/index.html

7.3 修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf 
......
http{
    server{
        listen 80;
        server_name www.stevelu.com;#设置域名
        charset utf-8;
        access_log logs/www.stevelu.access.1og; #设置日志名
        location / {
            root /var/www/html/stevelu; #设置的工作目录
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }   
     
    server{
        listen 80;
        server_name www.gyq.com;#设置域名 
        charset utf-8;
        access_log logs/www.gyq.access.log;
        location / {
            root /var/www/html/gyq;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html; 
        location = 50x.html{
            root html;
        }
    }
}
 
systemctl restart nginx
#重启并访问测试

八、基于IP的Nginx虚拟主机

设置监听地址即可,其他跟基于域名都一样
例如:
listen 192.168.109.30:80  www.stevelu.com
listen 192.168.109.40:80    www.gyq.com
#前提是保证IP地址存在,如果没有临时设置用ifconfig
 
systemctl restart nginx
#重启并访问测试

九、基于端口的Nginx虚拟主机

就是改IP地址后面的端口,这个就不演示了

总结
1.设置并发量nginx.conf文件中 worker_processes乘worker_connections

2.查看当前nginx的并发量:安装status模块,浏览器访问http://IP地址/status 即可看到

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题B卷 Java 实现【机房布局】,附详细解题思路

一、题目描述 小明正在规划一个大型数据中心机房&#xff0c;为了使得机柜上的机器都能正常满负荷工作&#xff0c;需要确保在每个机柜边上至少要有一个电箱。 为了简化题目&#xff0c;假设这个机房是一整排&#xff0c;M表示机柜&#xff0c;I表示间隔&#xff0c;请你返回…

北斗RTK差分定位技术原理、优势及应用领域

北斗卫星导航系统是中国自主建设的卫星导航系统&#xff0c;是继美国GPS、俄罗斯GLONASS和欧盟Galileo之后&#xff0c;全球第四个卫星导航系统。北斗系统非常重要&#xff0c;可用于国防、公共安全、民生等多个领域&#xff0c;包括交通运输、环境保护、渔业等。差分定位则是北…

【Springboot系列】springboot扩展点大整理,赶紧收藏起来

系列文章&#xff1a;Spring Boot学习大纲&#xff0c;可以留言自己想了解的技术点 1、aware系列 在Spring Boot中&#xff0c;有一些可以实现的Aware接口&#xff0c;用于在应用程序中获取特定的上下文或对象。这些接口允许您的组件意识到它们所在的环境&#xff0c;并与之进…

和数集团元宇宙场景落地 催生新机遇

现代社会随着科技不断发展&#xff0c;人们对于虚拟现实的需求日益提高。随着互联网进入Web3.0时代&#xff0c;越来越多的人开始进入虚拟世界&#xff0c;探索虚拟现实的无限可能。 在这个充满未知的广阔世界中&#xff0c;和数集团旗下包括【神念无界源起山海】、【神宠岛】…

国内使用chatGPT插件

无需任何繁琐操作&#xff0c;只要你一打开edge浏览器就能使用chatGPT&#xff0c;还要什么自行车&#xff01; 那么如何使用呢&#xff1f;其实操作是非常简单的&#xff01; 步骤 第一步&#xff1a;下载edge浏览器 edge浏览器一般Windows10系统都自带了&#xff0c;没有的…

ChatGPT 提示的艺术 —— 如何编写清晰有效提示指南

ChatGPT 提示的作用 正如我们之前提到的那样&#xff0c;ChatGPT 对话中使用的提示的质量可以显著影响对话的成功。定义清晰的提示可以确保对话保持在正确的轨道上&#xff0c;并涵盖用户感兴趣的主题&#xff0c;从而产生更引人入胜和信息丰富的体验。 那么什么样的 ChatGPT…

计算机网络实验:认识Packet Tracer软件

目录 前言实验目的实验内容及要求相关知识点实验指导实验过程总结 前言 计算机网络是当今信息技术的重要组成部分&#xff0c;它涉及到多种硬件和软件的协同工作&#xff0c;以实现数据的传输和交换。为了更好地理解和掌握计算机网络的基本原理和技术&#xff0c;我们需要进行…

关于分数的二进制原反补码的求解

话不多说&#xff0c;上例子 求-53/64的原反补&#xff1b; 前奏&#xff1a;-53/64可以分解为符号位“-”和数字位53/64&#xff1b; 第一步&#xff1a;在计算机中&#xff0c;符号位用0表示“”用1表示“-” 第二步&#xff1a;求53/64的二进制数&#xff0c;过程如下图…

如何回馈 Elastic 社区

作者&#xff1a;Ully Sampaio 在 Elastic 社区中拥有前排座位最美妙的事情之一就是见证人们互相帮助。 从讨论和 Elastic Community Slack 工作区到 Elastic YouTube 官方频道&#xff0c;无论你走到哪里&#xff0c;你都会看到 Elasticsearch 专家和初学者分享他们的知识。 这…

图解LeetCode——543. 二叉树的直径

一、题目 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 二、示例 2.1> 示例 1&#xff1a; 【输入】roo…

Vision Transformer (ViT)及各种变体

目录 0.Vision Transformer介绍 1.ViT 模型架构 1.1 Linear Projection of Flattened Patches 1.2 Transformer Encoder 1.3 MLP Head 1.4 ViT架构图 1.5 model scaling 2.Hybrid ViT 4.其他Vision Transformer变体 5.Vit代码 6.参考博文 0.Vision Transformer介绍 …

样本不平衡的解决办法

背景 Focal loss是最初由何恺明提出的&#xff0c;最初用于图像领域解决数据不平衡造成的模型性能问题。本文试图从交叉熵损失函数出发&#xff0c;分析数据不平衡问题&#xff0c;focal loss与交叉熵损失函数的对比&#xff0c;给出focal loss有效性的解释。 交叉熵损失函数…

危机先知:TOOM舆情监控助力风险预警

随着社交媒体和互联网的普及&#xff0c;公众的声音在网络上如洪水般涌现。这些声音传递着情绪、态度和观点&#xff0c;对个人、组织甚至整个社会产生着巨大影响。因此&#xff0c;舆情监控成为了一个不可或缺的工具&#xff0c;帮助企业和组织及时了解公众对其品牌、产品或服…

决策树基本理论知识

目录 1、决策树是一种树模型 2、决策树的训练与测试 3、信息增益&#xff08;ID3&#xff09; 3.1、衡量标准-熵 3.2、决策树构造实例 4、决策树算法 ​5、连续值离散化 6、预剪枝 1、决策树是一种树模型&#xff1a; &#xff08;1&#xff09;、从根结点开始一步步走…

【C++】哈希表封装unordered系列

文章目录 前言一、哈希表的封装总结 前言 在看本篇文章前大家尽量拿出上一篇文章的代码跟着一步步实现&#xff0c;否则很容易引出大量模板错误而无法解决。 一、哈希表的封装 首先我们要解决映射的问题&#xff0c;我们目前的代码只能映射整形&#xff0c;那么如何支撑浮点数…

Java使用zxing.jar生成二维码

由于时代科学的进步&#xff0c;二维码已经和我们的生活密不可分&#xff0c;在开发过程中往往会涉及到和二维码相关的开发&#xff0c;今天这篇文章就教会大家如何使用zxing.jar包生成二维码 下面这个就是百度上面自带的一个生成二维码的功能&#xff0c;那他是怎么实现这个功…

计算机组成原理与体系结构概述

目录 一、计算机的发展 二、计算机的硬件系统 三、硬件的工作原理 四、计算机系统的层次结构 五、计算机的性能指标 一、计算机的发展 第一代计算机&#xff1a;电子管计算机 第一台电子计算机&#xff1a;ENIAC&#xff08;1946&#xff09; 设计目的&#xff1a;计算导弹…

平板触控笔哪种好?主动式电容笔推荐

现在市面上的电容笔分为主动式和被动式电容笔&#xff0c;很多小伙伴都分不清主动式和被动式电容笔的区别。今天给大家介绍一下这两款电容笔的区别。给大家分享几款好用的平替电容笔。 一、主动式电容笔和被动式电容笔的区别&#xff1a; 1.主动式电容笔&#xff1a; 主动式电…

数据结构与算法(九)

红黑树复习 图 图&#xff0c;是一种数据结构 集合只有同属于一个集合&#xff1b;线性结构存在一对一的关系&#xff0c;树形结构一对多的关系&#xff0c;图形结构&#xff0c;多对多的关系。 微信中&#xff1a;许多的用户组成了一个多对多的朋友关系网&#xff0c;这个关…

【C语言】变量

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星T…