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/profile
	PATH=$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 httpd

ll /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 FollowSymLinks
    AllowOverride None
    Require 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 FollowSymLinks
          AllowOverride None
          AuthName        "welcome"
          AuthType        Basic
          AuthUserFile    /usr/local/apache/conf/.apachepasswd
          Require 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.com
    DocumentRoot "/var/www/html/web"
    ServerName www.hualuweb.com
    ErrorLog "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.com
    DocumentRoot "/var/www/html/bbs"
    ServerName www.hualubbs.com
    ErrorLog "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:80
  ServerName 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:80
  Listen 80
  Listen 8081

② 编辑虚拟主机配置文件

vim /usr/local/apache/conf/extra/httpd-vhosts.conf

<VirtualHost 192.168.137.5:80>
    ServerAdmin root@hualu.com
    DocumentRoot "/var/www/html/web"
    ServerName www.hualuweb.com
    ErrorLog "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.com
    DocumentRoot "/var/www/html/bbs"
    ServerName www.hualubbs.com
    ErrorLog "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.com
    DocumentRoot "/var/www/html/web"
    ServerName www.hualuweb.com
    ErrorLog "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.com
    DocumentRoot "/var/www/html/bbs"
    ServerName www.hualubbs.com
    ErrorLog "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

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

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

相关文章

第15章 《乐趣》Page355~375 代码简化版

运行效果&#xff1a;全屏了 简化之后的代码如下&#xff1a; //main.cpp #include <iostream> #include <SDL2/SDL.h> #include "sdl_initiator.hpp" #include "sdl_error.hpp" #include "sdl_window.hpp" #include "sdl_sur…

2023年国家基地“楚慧杯”网络空间安全实践能力竞赛 Web方向 题解wp

前言&#xff1a;三小时的比赛&#xff0c;和强网同时结束还要当场交wp&#xff0c;汗流浃背&#xff0c;烧起来了啊啊啊啊~ eaaeval 目录扫出备份文件 源码如下 <?php class Flag{public $a;public $b;public function __construct(){$this->a admin;$this->b …

设计模式——策略模式

引言 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 问题 一天&#xff0c; 你打算为游客们创建一款导游程序。 该程序的核心功能是提供美观的地图&#xff0c; 以…

STM32F103RCT6开发板M3单片机教程06--定时器中断

前言 除非特别说明&#xff0c;本章节描述的模块应用于整个STM32F103xx微控制器系列&#xff0c;因为我们使用是STM32F103RCT6开发板是mini最小系统板。本教程使用是&#xff08;光明谷SUN_STM32mini开发板&#xff09; STM32F10X定时器(Timer)基础 首先了解一下是STM32F10X…

如何开发一个prompt?prompt的使用有哪些原则?

提示词使用原则 如何开发一个跟自己预期结果接近的提示词&#xff1f;有哪些基本原则&#xff1f; 提示词迭代开发 写提示词时&#xff0c;第一次尝试是值得的&#xff0c;反复完善提示&#xff0c;获得越来越接近你想要的结果 原文来源于B站吴恩达提示工程教学公开课。…

Jenkins----基于 CentOS 或 Docker 安装部署Jenkins并完成基础配置

查看原文 文章目录 基于 CentOS7 系统部署 Jenkins 环境基于 Docker 安装部署 Jenkins环境配置 Jenkins 中文模式配置用户名密码形式的 Jenkins 凭据配置 ssh 私钥形式的 Jenkins 凭据配置 Jenkins 执行任务的节点 基于 CentOS7 系统部署 Jenkins 环境 &#xff08;1&#xff…

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

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

并发编程中常见的设计模式

文章目录 一、 终止线程的设计模式1. 简介2. Tow-phase Termination&#xff08;两阶段终止模式&#xff09;—优雅的停止线程 二、避免共享的设计模式1. 简介2. Immutability模式—想破坏也破坏不了3. Copy-on-Write模式4. Thread-Specific Storage模式—没有共享就没有伤害 三…

[数据集][目标检测]人员持刀数据集VOC+YOLO格式6923张1类别重制版

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6923 标注数量(xml文件个数)&#xff1a;6923 标注数量(txt文件个数)&#xff1a;6923 标注…

C# WPF上位机开发(函数运行时间分析)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上位机除了基本功能和稳定性之外&#xff0c;还有一个要注意的就是运行效率的问题。如果我们想提高软件的运行效率&#xff0c;单位时间做更多的工…

【idea】解决sprintboot项目创建遇到的问题

目录 一、报错Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found 二、报错java: 错误: 无效的源发行版&#xff1a;17 三、java: 无法访问org.springframework.web.bind.annotation.CrossOrigin 四、整合mybatis的时候&#xff0c;报java.lang.Ill…

Spring Boot+Mybatis设置sql日志打印

在全局配置文件添加以下内容&#xff1a;logging.level.com.demo.mapperdebug&#xff0c;com.demo.mapper&#xff1a;src下的mapper路径&#xff0c;debug&#xff1a;设置日志打印级别为debug&#xff0c;亦可设置为&#xff1a;ERROR、WARN、INFO application.properties …

安装android studio

记录一下安装android studio的过程&#xff1a; 1.首先安装android studio到某一文件夹后&#xff0c;在C盘用户目录下可以看到.android文件夹。C:\Users\22515\AppData\Local\Google目录下也会出现AndroidStudio2022.2文件夹。&#xff08;注意&#xff1a;用户名&#xff0c…

【精选】SpringMVC处理响应及注解开发

SpringMVC处理响应 配置视图解析器 SpringMVC默认情况下会在控制器执行完成后跳转到视图页面&#xff0c;视图解析器能找到相应的视图&#xff0c;之前的404异常就是由于没有配置视图解析器导致找不到视图。 在SpringMVC中提供了13个视图解析器&#xff0c;用于支持不同的视图…

87 GB 模型种子,GPT-4 缩小版,超越ChatGPT3.5,多平台在线体验

瞬间爆火的Mixtral 8x7B 大家好&#xff0c;我是老章 最近风头最盛的大模型当属Mistral AI 发布的Mixtral 8x7B了&#xff0c;火爆程度压过Google的Gemini。 缘起是MistralAI二话不说&#xff0c;直接在其推特账号上甩出了一个87GB的种子 随后Mixtral公布了模型的一些细节&am…

yolov5训练自己的数据集

1.要保证yolov5的目录和数据集在同一级目录下&#xff0c;格式如下&#xff0c;我的数据集是leaf。要和yolov5-master在一个级别。 2.数据集leaf的格式是非常重要的&#xff0c;leaf里面有有train&#xff08;训练集&#xff09;,val&#xff08;验证集&#xff09;&#xff…

Web前端期末大作业---新农村建设网页设计

✅ 作者简介&#xff1a;一名普通本科大三的学生&#xff0c;致力于提高前端开发能力 ✨ 个人主页&#xff1a;前端小白在前进的主页 ⭐️ 个人社区 : 个人交流社区 &#x1f340; 学习格言: ☀️ 打不倒你的会使你更强&#xff01;☀️ &#x1f525;前言 期末来咯&#xff0c…

小程序静默登录-登录拦截实现方案【全局loginPromis加页面拦截】

实现效果&#xff1a; 用户进入小程序访问所有页面运行onload、onShow、onReady函数时保证业务登录态是有效的 实现难点&#xff1a; 由于小程序的启动流程中&#xff0c;页面级和组件级的生命周期函数都不支持异步阻塞&#xff1b;因此会造成一个情况&#xff0c;app.onLau…

频谱论文:面向频谱地图构建的频谱态势生成技术研究

#频谱# [1]李竟铭.面向频谱地图构建的频谱态势生成技术研究.2019.南京航空航天大学,MA thesis.doi:10.27239/d.cnki.gnhhu.2019.000556. &#xff08;南京航空航天大学&#xff09; 频谱地图是对无线电环境的抽象表达&#xff0c;它可以直观、多维度地展现频谱态势信息&…