5.5 Linux Apache服务

1、概念介绍
a. Web 服务简介

WEB服务器也称为WWW(WORLD WIDE WEB,万维网)服务器,主要功能是提供网上信息浏览服务。

常用web服务器:httpd(apache)、nginx、tomcat、IIS

客户端:IE、firefox、chrome

b. Apache 简介

官网地址:Welcome to The Apache Software Foundation!

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

c. Apache 特点

① 开放源代码:这是apache服务器的重要特性之一,也是其他特性的基础,任何人都可以自由使用,这充分体现了开源软件的精神。

② 跨平台应用:这个特性得益于apache的源代码开放,apache服务器可以运行在绝大多数软硬件平台,如linux、unix、windows等。

③ 支持各种web编程语言:apache服务器可支持的网页编程语言包括perl、php、python、java等,甚至微软的ASP技术也可以在apache服务器中使用。支持各种常用的web编程语言使apache具有更广泛的应用领域。

④ 模块化设计:apache并没有将所有的功能集中在单一的服务程序内部,而是尽可能地通过标准的模块实现专有的功能,这为apache服务器带来了良好的扩展性,其他软件开发商可以编写标准的模块程序,从而添加apache本身不具有的其他功能。

⑤ 运行非常稳定:apache服务器可用于构建具有大负载访问量的web站点。

⑥ 良好的安全性:apache服务器具有相对较好的安全性,这是开源软件共同具有的特性,并且,apache的维护团队会及时对发现的漏铜提供修补程序。

d. Apache 版本

apache服务器目前包括1.X和2.X两个版本:

1.X系列的最高版本是1.3,该版本继承了apache服务器1.0版本以来的优秀特性和配置管理风格,具有非常好的兼容性、稳定性。

从2.0版本开始,apache服务器加入了许多新的功能,使用的配置语法和管理风格也有所改变。对于新构建的网站服务器,使用2.X版本是一个不错的选择。目前apache的最新版本是httpd-2.4.54

e. Apache 端口
  • B/S 架构
  • 80: http
  • 443:http
f. Apache 基金会

Apache软件基金会是世界上最大的开源基金会

  • 300+顶级项目
  • 2.71 亿多行代码用于管理
  • 350 多个项目和倡议
  • 从 Apache 镜像下载约 2 PB 的源代码
  • 850 多名个人 ASF 成员
  • 8,200 多个 Apache 提交者
  • 49,000 多名代码贡献者
  • GitHub 流量:前 5 个最活跃的 Apache 资源—克隆:Thrift、Beam、Cordova、Arrow、Geode;
  • GitHub 流量:前 5 个最活跃的 Apache 资源—访问量:Spark、Flink、Camel、Kafka、Beam;
  • 价值22B 美元以上的 Apache 开源软件产品以 100% 的免费提供给广大公众,使全球数十亿用户受益
2、源码安装 Apache
a. apache 安装
# 下载httpd
wget http://archive.apache.org/dist/httpd/httpd-2.4.54.tar.gz# 解压至/usr/local/src
tar -zxvf httpd-2.4.54.tar.gz -C /usr/local/src# 安装编译环境和apache依赖
yum install -y gcc gcc-c++ apr arp-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre openssl*# 进入httpd目录
cd /usr/local/src/httpd-2.4.54/# 预编译
./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-ssl --enable-mpms-shared=all --enable-mpm-with=event# 编译
make -j 2# 安装
make install

预编译配置参数用途:

  • --prefix=:指定安装目录
  • --enable-so:支持动态加载模块
  • --enable-rewrite :支持网站地址重写
  • --enable-cgi:支持CGI程序脚本
  • --enable-ssl:支持SSL加密
  • --enable-charset-lite:支持多语言编码
  • --enable-mpms-shared=all:安装apache所有运行模式模块
b. apache 目录结构
ls /usr/local/apache

bin

存放httpd服务的各种执行程序文件,包括主程序httpd,服务控制工具apachectl等

cgi-bin

存放各种CGI程序文件

logs

存放httpd服务的日志文件

conf

存放httpd服务的各种配置文件,包括主配置文件httpd.conf、增强配置子目录extra等。

htdocs

存放网页文档,包括默认首页文件index.html等。

modules

存放httpd服务的各种模块文件

c. 优化执行路径(2选1)

① 添加软连接:通过源码编译安装的httpd服务,程序路径并不在默认的搜索路径中,为了使该服务在使用时更加方便,可以为相关程序添加符号链接 ln -s /usr/local/apache/bin/* /usr/local/bin

② 修改PATH环境变量:在/etc/profile 中添加PAHT环境变量

vim /etc/profilePATH=$PATH:/usr/local/apache/bin
source /etc/profile# 查看apache版本
httpd -v

3、添加httpd系统服务(2选1)
a. 使用chkconfig添加系统服务

chkconfig命令 主要用来更新(启动或停止)和查询系统服务的运行级信息, 若希望将httpd添加为系统服务,以便通过chkconfig进行管理,需要编写服务管理脚本,把脚本放在/etc/init.d/目录下,并在脚本开头添加chkconfig识别配置。

# 生成服务器管理脚本
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd# 添加chkconfig识别
vim /etc/init.d/httpd#!/bin/sh# chkconfig:2345 11 88                  # 运行级别 启动优先级 关闭优先级# description:apache web server         # 服务描述信息# 设置开机自动启动
chkconfig --add httpd  		# 添加服务,以便让chkconfig指令管理它
chkconfig httpd on    		# 设置开机运行该服务,默认是设置2345等级开机运行服务
chkconfig --list httpd

# 删除指定的服务,不再让chkconfig指令管理它
chkconfig --del httpd  

# 查看端口和进程信息
netstat -antup | grep httpd
ps -ef | grep httpd

# 客户端测试
cur 192.168.137.5

b 使用 .service 脚本

centos7使用sytemd管理操作系统服务,systemd是Linux系统最新的初始化系统,对应的进程管理命令是systemctl, systemctl命令兼容了service,systemctl实际上将 service 和 chkconfig 这两个命令组合到一起,即systemctl也会去/etc/init.d目录下,查看,执行相关程序。

systemd使用.service脚本管理linux脚本, systemd有系统和用户区分:

  • 系统.service文件放在/usr/lib/systemd/system/
  • 用户.service文件放在/etc/lib/systemd/user/

一般系统管理员手工创建的单元文件建议存放在/etc/systemd/system/目录下面。

Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都指向/usr/lib/systemd/system/目录。systemctl enable命令用于在上面两个目录之间,建立符号链接关系。开机时,Systemd只执行/etc/systemd/system目录里面的配置文件。

① 在编写.service 脚本之前,先将chkconfig服务和httpd服务停掉,清除上步操作:

systemctl stop httpd
ps -ef | grep httpd# chkconfig关闭httpd服务管理
chkconfig --del httpd
chkconfig --list | grep httpd

② 编写.service脚本

cat /usr/lib/systemd/system/httpd.service [Unit]
Description=httpd
After=network.target[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start
ExecReload=/usr/local/apache/bin/apachectl restart
ExecStop=/usr/local/apache/bin/apachectl stop
PrivateTmp=True[Install]
WantedBy=multi-user.target

③ 添加开机自启动

# 设置服务开机自启动
systemctl enable httpd# 查看服务是否是开机自启动
systemctl is-enabled httpdll /etc/systemd/system/multi-user.target.wants/httpd.service

④ 启动服务并查看

# 启动服务
systemctl start httpd# 查看服务
systemctl status httpd

⑤ 客户端测试

curl 192.168.137.5

c. .service 脚本详解

Unit字段: 主要给出服务描述、启动顺序和依赖关系

Description字段 给出当前服务的简单描述。

Documentation字段 给出文档位置。

After字段 表示在什么服务之后启动,不涉及依赖关系

Before字段 表示在什么服务之前启动,不涉及依赖关系

Wants字段表示该服务和某服务存在某种弱依赖关系,即某服务停止运行或退出不影响该服务继续运行。

Requires字段 表示强依赖关系,即某服务停止运行或退出,该服务也必须停止运行。

Wants字段与Requires字段 只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。

Server字段 主要给出服务的启动行为,如何启动、重启、停止

Type字段 定义启动类型。它可以设置的值如下:

  • - simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他 服务,不要使用此类型启动
  • - forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
  • - oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
  • - dbus:类似于simple,但会等待 D-Bus 信号后启动
  • - notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
  • - idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。

PIDFile字段: pid文件路径

ExecStart字段: 定义启动进程时执行的命令,就是手动启动时执行的命令。

ExecReload字段: 重启服务时执行的命令。

ExecStop字段: 停止服务时执行的命令。

ExecStartPre字段: 启动服务之前执行的命令。

ExecStartPost字段: 启动服务之后执行的命令。

ExecStopPost字段: 停止服务之后执行的命令。

KillMode字段: 定义 Systemd 如何停止服务。它可以设置的值如下:

  • - control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
  • - process:只杀主进程
  • - mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
  • - none:没有进程会被杀掉,只是执行服务的 stop 命令

Restart字段:定义了Systemd 的重启方式。它可以设置的值如下:对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。

  • - no(默认值):退出后不会重启
  • - on-success:只有正常退出时(退出状态码为0),才会重启
  • - on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
  • - on-abnormal:只有被信号终止和超时,才会重启
  • - on-abort:只有在收到没有捕捉到的信号终止时,才会重启
  • - on-watchdog:超时退出,才会重启
  • - always:不管是什么退出原因,总是重启

RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。

user字段 可以设置服务的用户名

WorkingDirectory字段 指定服务的安装目录

Install字段: 该字段 定义如何安装这个配置文件,即怎样做到开机自启

WantedBy字段 表示该服务所在的 Target。

  • Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是服务所在的Target是multi-user.target,Systemd 有默认的启动 Target。就是multi-user.target,在这个组里的所有服务,都将开机启动。
4、Apache 3种运行模式

Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式

  • Prefork:进程模式
  • worker:线程模式
  • Event : 事件模式(2.4版本后开始稳定)
a. prefork 运行模式

Prefork MPM实现了一个非线程的、预派生的web服务器。它在Apache启动之初,就先预派生一些子进程,然后等待连接;可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求, 这是一个成熟稳定,可以兼容新老模块,也不需要担心线程安全问题,但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景。

优点:因为每个进程使用独立的内存空间,所以比较安全。一个进程坏了,不会影响其他进程。

缺点:占用的内存比较大。

b. Worker MPM 运行模式

worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)。

优点:可以处理海量请求,而系统资源的开销小。原因:一个进程中包括多个线程。多个线程之间可以共享内存,所以占用的内存资源比较少。

缺点:不太安全。如果一个线程坏了。整个进程都要坏了。另外存在keep-alive长连接占用资源时间过长。

c. Event MPM

event模式是在2.4版本中才稳定发布的模式。这是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。

当某个连接没有请求时,会主动关闭连接,在work模式下,必须等keep-alive超时,才可以释放。

d. 修改 Apache 工作模式
# 查看Apache 工作模式
httpd -V

由于在预编译的时候添加了--enable-mpms-shared=all参数,可以直接修改工作模式,如果没有添加,需要重新指定参数编译安装。

 vim /usr/local/apache/conf/httpd.conf

# 重启服务
systemctl restart httpd# 查看工作模式
httpd -V

e. 查看web站点访问情况

Httpd服务器使用了两种类型的日志:访问日志和错误。这两种日志的文件名分别为access_log和error_log,均位于/usr/local/apache/logs目录下。

# 查看web访问日志
tail /usr/local/apache/logs/access_log

# 查看web错误日志
tail /usr/local/apache/logs/error_log

5、httpd.conf 配置文件
vim /usr/local/apache/conf/httpd.conf

全局配置:

ServerRoot "/usr/local/apache"    			# httpd服务器安装目录
Listen 80																# 设置httpd服务器监听的地址和网络端口号
User daemon															# 设置运行httpd进程的用户账号
Group daemon														# 设置运行httpd进程的组账号
ServerAdmin you@example.com							# 设置httpd服务器的管理员e-mail地址
ServerName www.test.com:80							# 设置web站点的完整域名
DocumentRoot "/usr/local/apache/htdocs"	# 设置网站根目录
DirectoryIndex index.html index.php			# 设置网站的默认首页
ErrorLog  logs/error_log								# 设置错误日志文件的路径
LogLevel warn														# 设置记录错误日志的级别
CustomLog logs/access_log common				# 设置访问日志文件的路径
PidFile logs/httpd.pid									# 设置用于保存httpd进程号的文件
AddDefaultCharset UTF-8									# 设置站点中的网页默认使用的字符集编码
Include conf/extra/httpd-default.conf		# 加载另一个配置文件的内容

区域配置项:

<Directory />    					# 定义“/”目录区域的开始AllowOverride None    	# 不允许隐含控制文件覆盖配置Require all denied     	# 禁止任何人访问此区域
</Directory>    					# 定义“/”目录区域的结束
6、httpd 服务的访问控制
a. 客户机地址限制

通过require配置项,可以根据主机的主机名或ip地址来决定是否允许客户端访问,在httpd服务器的主配置文件的<Location>、<Directory>、<Files>、<Limit>配置段中均可以使用Require配置项来控制客户端的访问,地址的形式可以是ip地址、网络地址、主机名或域名,使用名称“all”时表示任意地址。

Require all granted:										表示允许所有主机访问
Require all denied:										表示拒绝所有主机访问
Require local:													表示仅允许本地主机访问
Require [not] host <主机名或域名列表>:	表示允许或拒绝指定主机或域访问
Require [not] ip<ip地址或网段列表>:			表示允许或拒绝指定ip地址或网段访问

通常情况下,网站服务器是对所有客户机开放的,网页文档目录并未做任何限制,因此使用的是“Require all granted”策略,表示允许从任何客户机访问。

<Directory "/usr/local/apache/htdocs">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted
</Directory>
b. 用户授权限制

基于用户的访问控制包括认证(authentication)和授权(authorization)两个过程,是apache允许指定用户使用用户名和密码访问特定资源的一种方式。认证是指识别用户身份的过程,授权是指允许特定用户访问特定目录区域的过程。

Httpd服务器支持使用摘要认证(digest)和基本认证(basic)两种方式,使用摘要认证需要在编译httpd之前添加--enable-auth-digest选项,但并不是所有的浏览器都支持摘要认证;而基本认证是httpd服务的基本功能,不需要预先配置特别的选项。

① 创建用户认证数据文件

htpasswd -c /usr/local/apache/conf/.apachepasswd admin
htpasswd  /usr/local/apache/conf/.apachepasswd user1
  • -c选项表示新建立此文件,如果密码文件已经存在,则省略-c,否则会覆盖
cat /usr/local/apache/conf/.apachepasswd

② 添加用户授权配置

vim /usr/local/apache/conf/httpd.conf# 添加用户授权配置<Directory "/usr/local/apache/htdocs">Options Indexes FollowSymLinksAllowOverride NoneAuthName        "welcome"AuthType        BasicAuthUserFile    /usr/local/apache/conf/.apachepasswdRequire valid-user#Require all granted</Directory>
  • AuthName: 定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示
  • AuthType: 设置认证的类型,Basic表示基本认证
  • AuthUserFile:设置用于保存用户账号、密码的认证文件路径
  • Require valid-user:要求只有认证文件中的合法用户才能访问,其中valid-user表示所有合法用户,若只授权给单个用户,可改为指定的用户名。

③ 启动服务

systemctl restart httpd

④ 测试访问

7、配置Apache虚拟主机

虚拟web主机指的是在同一台服务器中运行多个web站点,httpd支持的虚拟主机类型包括三种:

  • 不同ip相同端口
  • 相同ip不同端口
  • 不同域名相同端口
a. 开启虚拟主机功能

三种都需要把虚拟主机功能打开

# 编辑Apache配置文件
vim /usr/local/apache/conf/httpd.conf# 去掉文件中的这行注释,如果没有此行,手写此行
Include conf/extra/httpd-vhosts.conf
b. 配置不同ip相同端口虚拟主机

① 给服务增加IP

ifconfig ens33:1 192.168.137.20
ifconfig ens33:1

② 创建站点目录

mkdir -p /var/www/html/{web,bbs}
tree /var/www

③ 创建站点网页

echo "Welcome to web page!!!" > /var/www/html/web/index.html
echo "Welcome to bbs page!!!" > /var/www/html/bbs/index.html

④ 定义虚拟主机文件

# 创建日志文件目录
mkdir -p /usr/local/apache/logs/www/{web,bbs}# 编辑虚拟主机配置文件
vim /usr/local/apache/conf/extra/httpd-vhosts.conf<VirtualHost 192.168.137.5:80>ServerAdmin root@hualu.comDocumentRoot "/var/www/html/web"ServerName www.hualuweb.comErrorLog "logs/www/web/hualuweb.com-error_log"CustomLog "logs/www/web/hualuweb.com-access_log" common<Directory "/var/www/html/web">Require all granted</Directory>
</VirtualHost><VirtualHost 192.168.137.20:80>ServerAdmin root@hualu.comDocumentRoot "/var/www/html/bbs"ServerName www.hualubbs.comErrorLog "logs/www/bbs/hualubbs.com-error_log"CustomLog "logs/www/bbs/hualubbs.com-access_log" common<Directory "/var/www/html/bbs">Require all granted</Directory>
</VirtualHost># 添加服务名称
vim /usr/local/apache/conf/httpd.conf# 添加服务网站ServerName www.hualuweb.com:80ServerName www.hualubbs.com:80
# 检查虚拟主机配置文件语法
httpd -t

⑤ 重启服务并测试

systemctl restart httpd

# 查看web访问日志
cat /usr/local/apache/logs/www/web/hualuweb.com-access_log 

c. 配置相同ip不同端口虚拟主机

① 修改 httpd.conf

# 添加监听端口
vim /usr/local/apache/conf/httpd.conf#Listen 12.34.56.78:80Listen 80Listen 8081

② 编辑虚拟主机配置文件

vim /usr/local/apache/conf/extra/httpd-vhosts.conf<VirtualHost 192.168.137.5:80>ServerAdmin root@hualu.comDocumentRoot "/var/www/html/web"ServerName www.hualuweb.comErrorLog "logs/www/web/hualuweb.com-error_log"CustomLog "logs/www/web/hualuweb.com-access_log" common<Directory "/var/www/html/web">Require all granted</Directory>
</VirtualHost><VirtualHost 192.168.137.5:8081>ServerAdmin root@hualu.comDocumentRoot "/var/www/html/bbs"ServerName www.hualubbs.comErrorLog "logs/www/bbs/hualubbs.com-error_log"CustomLog "logs/www/bbs/hualubbs.com-access_log" common<Directory "/var/www/html/bbs">Require all granted</Directory>
</VirtualHost>

③ 测试虚拟主机配置文件语法

httpd -t

④ 重启服务并测试

systemctl restart httpd

d. 不同域名相同端口虚拟主机

① 编辑虚拟主机配置文件

vim /usr/local/apache/conf/extra/httpd-vhosts.conf<VirtualHost www.hualuweb.com:80>ServerAdmin root@hualu.comDocumentRoot "/var/www/html/web"ServerName www.hualuweb.comErrorLog "logs/www/web/hualuweb.com-error_log"CustomLog "logs/www/web/hualuweb.com-access_log" common<Directory "/var/www/html/web">Require all granted</Directory>
</VirtualHost><VirtualHost www.hualubbs.com:80>ServerAdmin root@hualu.comDocumentRoot "/var/www/html/bbs"ServerName www.hualubbs.comErrorLog "logs/www/bbs/hualubbs.com-error_log"CustomLog "logs/www/bbs/hualubbs.com-access_log" common<Directory "/var/www/html/bbs">Require all granted</Directory>
</VirtualHost>

② 配置hosts映射文件

vim /etc/hosts
192.168.137.5 www.hualuweb.com
192.168.137.5 www.hualubbs.com

③ 检测虚拟主机文件语法

httpd -t

④ 重启服务

systemctl restart httpd

⑤ 修改Windows映射文件

C:\Windows\System32\drivers\etc\hosts
192.168.137.5 www.hualuweb.com
192.168.137.5 www.hualubbs.com

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

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

相关文章

高通平台开发系列讲解(AI篇)SNPE工作流程介绍

文章目录 一、转换网络模型二、量化2.1、选择量化或非量化模型2.2、使用离线TensorFlow或Caffe模型2.3、使用非量化DLC初始化SNPE2.4、使用量化DLC初始化SNPE三、准备输入数据四、运行加载网络沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍SNPE模型工作…

学习Java第70天,过滤器Filter简介

过滤器概述 Filter,即过滤器,是JAVAEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是Java Web项目中最为实用的技术之一 Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口 Filter的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和…

【C++】POCO学习总结(十八):XML

【C】郭老二博文之&#xff1a;C目录 1、XML文件格式简介 1&#xff09;XML文件的开头一般都有个声明&#xff0c;声明是可选 <&#xff1f;xml version"1.0" encoding"UTF-8"?>2&#xff09;根元素&#xff1a;XML文件最外层的元素 3&#xff…

java内置的数据结构

Java语言提供了许多内置的数据结构&#xff0c;包括&#xff1a; 1. 数组&#xff08;Array&#xff09;&#xff1a;数组是最基本的数据结构之一&#xff0c;它是一个有序的元素集合&#xff0c;每个元素都有一个对应的索引。在Java中&#xff0c;数组可以通过声明和初始化来创…

【从零开始学习--设计模式--策略模式】

返回首页 前言 感谢各位同学的关注与支持&#xff0c;我会一直更新此专题&#xff0c;竭尽所能整理出更为详细的内容分享给大家&#xff0c;但碍于时间及精力有限&#xff0c;代码分享较少&#xff0c;后续会把所有代码示例整理到github&#xff0c;敬请期待。 此章节介绍策…

每天五分钟计算机视觉:网络中的网络(NiN)

本文重点 前面的课程中我们学习了众多的经典网络模型&#xff0c;比如LeNet、AlexNet、VGG等等&#xff0c;这些网络模型都有共同的特点。 它们的特点是&#xff1a;先由卷积层构成的模块充分提取空间特征&#xff0c;然后再由全连接层构成的模块来输出分类结果。也就是说它们…

C练习题_3答案

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。 以下正确的C语言自定义标识符是(A)A. la B. 2a C. do D. a.12 2.在C语言中,错误的常数表示是(D) A. OL B. 0x6aL C. ‘6’…

Apache SeaTunne简介

Apache SeaTunne简介 文章目录 1.Apache SeaTunne是什么&#xff1f;1.1[官网](https://seatunnel.apache.org/)1.2 项目地址 2.架构3.特性3.1 丰富且可扩展的连接器和插件机制3.2 支持分布式快照算法以确保数据一致性3.3 支持流、批数据处理&#xff0c;支持全量、增量和实时数…

Linux_Docker图形化工具Portainer如何安装并结合内网穿透实现远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 本文主要介绍如何本地安装Portainer并结合内网穿透工具实现任意浏览器远程访问管理界面。Portainer 是一个轻量级…

频谱论文:基于张量Tucker分解的频谱地图构建算法

#频谱# [1]陈智博,胡景明,张邦宁 郭道省.(2023).基于张量Tucker分解的频谱地图构建算法.电子与信息学报(11),4161-4169. &#xff08;陆军工程大学&#xff09; 研究内容 将动态电磁环境的时变频谱地图建模为3维频谱张量&#xff0c;通过张量Tucker分解提取出具有物理意义的核…

【MySQL】(DDL) 数据库操作

创建&#xff1a; create database 数据库名称; //创建数据库 create database if not exists 数据库名 ; //创建数据库并添加判断 &#xff08;如果存在就不创建不存在就创建 &#xff09; create database 数据库名 default charset 字符集 ; //创建数据库并设置字符集 查…

CSRF(跨站脚本请求)

一、漏洞原理 CSRF&#xff08;Cross-Site Request Forgery&#xff09;是一种网络安全攻击&#xff0c;攻击者通过欺骗用户在不知情的情况下发送请求&#xff0c;从而实现对目标网站的操作。 网站管理员(已经登录网站后台)——黑客构造的恶意服务器(是网站的创建用户请求)——…

B01、JVM与Java体系结构-01

字节码与多语言混合编程 字节码概述&#xff1a; 我们平时说的java字节码&#xff0c;指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为&#xff1a;jvm字节码。不同的编译器&#xff0c;可以编译出相同的字节码文件&…

人工智能在金融与商业领域的智能化变革

导言 随着人工智能技术的不断发展&#xff0c;金融和商业领域正迎来一场智能化的变革。随着人工智能的不断发展&#xff0c;其在金融和商业领域的应用正成为业界瞩目的焦点。本文将深入探讨人工智能在金融和商业应用中的关键技术、应用场景以及对未来的影响。 1. 关键技术与算…

音频I2S

前言 基于网上资料对相关概念做整理汇总&#xff0c;部分内容引用自文后文章。 学习目标&#xff1a;简单了解相关概念、相关协议。 1 概述 数字音频接口DAI&#xff0c;即Digital Audio Interfaces&#xff0c;顾名思义&#xff0c;DAI表示在板级或板间传输数字音频信…

AtCoder Beginner Contest 332 G. Not Too Many Balls(最大流转最小割 dp)

题目 n(n<500)种球&#xff0c;第i种有ai(0<ai<1e12)个球&#xff0c; m(m<5e5)个盒子&#xff0c;第j个能放bj(0<bj<1e12)个球 特别地&#xff0c;第j个盒子最多能放i*j个第i种球 求m个盒子能放的最多的球的总数 思路来源 官方题解 题解 显然是一个最…

关于pycharm无法进入base界面的问题

问题&#xff1a;terminal输入activate无法进入base 解决方案 1.Cortana这边找到Anaconda Prompt右击进入文件所在位置 2. 右击进入属性 3. 复制cmd.exe开始到最后的路径 cmd.exe "/K" C:\ProgramData\anaconda3\Scripts\activate.bat C:\ProgramData\anaconda3 …

C语言预处理详解及其指令

预处理详解 1.预定义符号2.#define定义常量基本使用方法举例子如果在define定义的表示符后面加上分号会发生什么&#xff1f;用一下来解释 3. #define定义宏举例例1例2 4. 带有副作用的宏参数例如: 5. 宏替换的规则6. 宏函数的对比宏和函数的一个对比 7. #和##7.1 #运算符7.2 #…

全套SpringBoot讲义01

hello&#xff0c;我是小索奇&#xff0c;全套SpringBoot教程~一起来学习叭 文章目录 SpringBoot文档更新日志前言课程内容说明课程前置知识说明 SpringBoot基础篇JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作&#xff08;一&#xff09;JC-1-2.SpringBoot入门程序制…

数据库交付运维高级工程师-腾讯云TDSQL

数据库交付运维高级工程师-腾讯云TDSQL上机指导&#xff0c;付费指导&#xff0c;暂定99