Apache服务

目录

引言

一、常见的http服务程序

(一)lls

(二)nginx

(三)Apache

(四)Tomcat

二、Apache特点

三、Apache服务的安装

(一)yum安装及配置文件

1.配置文件

(二)编译安装

四、HTTP配置

(一)指定服务器名称

(二)监听端口

(三)包含其它子配置文件

(四)隐藏服务器版本信息

(五)持久连接

(六)DSO 

(七)MPM 多路处理模块

1.prefork模块

2.worker和event 模式相关的配置

(八)定义Main server的文档页面路径

(九)虚拟主机

1.基于IP地址

2.基于端口号

3.基于域名

(十)基于客户端 IP 地址实现访问控制

1.黑名单

2.白名单


引言

在互联网世界中,Web服务器扮演着至关重要的角色,它们是连接用户与网站内容的桥梁。其中,Apache HTTP Server(简称Apache)作为全球使用最为广泛的开源Web服务器软件之一,其影响力和普及度不容小觑。本文旨在带你走进Apache的世界,解析其核心功能,并探讨实际应用中的关键配置与优化实践。

一、常见的http服务程序

(一)lls

Windows 系统中默认 Web 服务程序是lIS(Internet Information Services),这是一款图形化的网站管理工具,IIS 程序不光能提供 Web 网站服务,还能够提供FTP、NMTP、SMTP 等服务功能,但只能在 Windows 系统中使用。

(二)nginx

nginx--最初于 2004年 10月4日为俄罗斯知名门户站点而开发的,作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而深受信赖,但最最最被认可的是低系统资源、占用内存少且并发能力强,目前国内如新浪、网易、腾讯等门户站均使用。

(三)Apache

Apache--取自美国印第安人土著语 Apache,寓意着拥有高超的作战策略和无穷的耐性,由于其跨平台和安全性广泛被认可且拥有快速、可靠、简单的 API扩展。目前拥有很高的 Web 服务软件市场占用率,全球使用最多的 Web服务软件,开源、跨平台(可运行于Unix,linux,windows 中)。
·支持基于IP或域名的虚拟主机
·支持多种方式的 HTTP 认证
·集成代理服务器模块
·安全 Socket层(SSL)
·能够实时见识服务状态与定制日志
·多种模块的支持

(四)Tomcat

Tomcat--属于轻量级的Web服务软件,一般用于开发和调试JSP 代码,通常认为Tomcat是 Apache 的扩展程序。

总结来说Nginx程序作为 Web 服务软件届的后起之秀已经通过自身的努力与优势赢得了大批站长的信赖,但是 Apache 程序作为老牌的 Web 服务软件因其卓越的稳定性与安全性成为了红帽 RHEL7 系统中默认的网站服务软件。

二、Apache特点

apache 功能:

提供http协议服务

多个虚拟主机:IP、Port、FQDN

CGI:Common Gateway Interface,通用网关接口,支持动态程序

反向代理

负载均衡

路径别名

丰富的用户认证机制:basic,digest

支持第三方模块

apache特性:

高度模块化:core + modules

DSO:Dynamic Shared Object 动态加载/卸载

MPM:multi-processing module 多路处理模块

MPM multi-processing module 工作模式

prefork:多进程I/O模型,每个进程响应一个请求,CentOS 7 httpd默认模型一个主进程:生成和回收n个子进程,创建套接字,不响应请求多个子进程:工作 work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求

Prefork MPM预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景

优点:稳定

缺点:慢,占用资源,不适用于高并发场景

worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型

一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

worker MPM是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。

优点:相比prefork 占用的内存较少,可以同时处理更多的请求

缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)

event:事件驱动模型(worker模型的变种),CentOS8 默认模型

一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n,有专门的监控线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

event MPM是Apache中最新的模式,2012年发布的apache 2.4.X系列正式支持event 模型. 属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力event只在有数据发送的时候才开始建立连接,连接请求才会触发工作线程,即使用了TCP的一个选项,叫做延迟接受连接TCP_DEFER_ACCEPT,加了这个选项后,若客户端只进行TCP连接,不发送请求,则不会触发Accept操作,也就不会触发工作线程去干活,进行了简单的防攻击(TCP连接)

优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放

缺点:没有线程安全控制

httpd-2.4:event 稳定版,centos7 以后默认

httpd-2.2:event 测试版,centos6 默认

我们在使用yum安装httpd的时候默认的是使用prefork工作模块

可以手动进行工作模式的切换

修改完毕之后,重启服务

可以看到,切换到event模式后,会开启很多线程,而prefork则没有线程

三、Apache服务的安装

(一)yum安装及配置文件

首先来讲解使用yum安装

yum  install  httpd  -y

Apache服务的安装包名称叫做httpd,下载时需要注意

1.配置文件

/etc/httpd/conf/httpd.conf 主配置文件

[root@localhost data]#grep  -i "^[a-z]"  /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"
#指定了Apache服务器的根目录位置。
Listen 80
#指示Apache监听HTTP请求的端口号为80。
Include conf.modules.d./﹡.conf
#包含conf.modules.d目录下的所有.conf文件,这些通常用来加载和管理模块。
User apache 
Group apache
#定义了Apache服务器运行时使用的系统用户和组账号。
ServerAdmin root@localhost
#设置管理员邮箱地址,当服务器发生错误时,可能会通过此地址发送通知邮件。
DocumentRoot "/var/www/html"
#指定网站的根目录(web根目录),网页文件将从这里提供给访问者。
ErrorLog "logs/error_log"
#设置错误日志文件的位置。
LogLevel warn
#定义了记录到日志中的信息级别,这里是“warn”级别,即记录警告及更严重级别的消息。
AddDefaultCharset UTF-8
#设置默认字符集为UTF-8,用于处理未明确声明字符集的文档。
EnableSendfile on
#启用sendfile系统调用,可能提高静态文件传输性能。
IncludeOptional conf.d/﹡.conf
#包含conf.d目录下的所有.conf文件,这些通常包含额外的配置或特定站点的虚拟主机配置。

/etc/httpd/conf.d/*.conf 子配置文件

在/etcs/httpd/conf.d/目录下新建以.conf结尾的文件,都会读取生效,且优先级大于主配置文件

在下面的优化中会进行演示

/etc/httpd/conf.d/conf.modules.d/ 模块加载的配置文件

00-base.conf
#基础模块配置文件,可能包含了启动时默认加载的基本模块配置。
00-dav.conf
#与WebDAV(Web-based Distributed Authoring and Versioning)相关的模块配置,允许用户通过HTTP协议对服务器上的文件进行远程管理。
00-lua.conf
#与Lua脚本语言集成相关的模块配置,如mod_lua,用于在Apache服务器上运行Lua脚本。
00-mpm.conf
#Multi-Processing Module (MPM) 配置文件,定义了Apache如何处理并发连接和多线程/多进程模型。
00-proxy.conf
#代理模块配置,如mod_proxy,用于设置Apache作为反向代理或正向代理,转发来自客户端的请求到其他服务器。
00-systemd.conf
#Systemd系统和服务管理器相关的配置,确保Apache服务与Systemd兼容并正确集成。
01-cgi.conf
#Common Gateway Interface (CGI) 模块配置,允许Apache通过CGI接口执行外部脚本程序(如Perl、Python等)以生成动态内容。

检查命令及配置语法:httpd -t 

c在读取配置⽂件前,先执⾏选项中的指令
C在读取配置⽂件后,再执⾏选项中的指令
d<服务器根⽬录>指定服务器的根⽬录
D<设定⽂件参数>指定要传⼊配置⽂件的参数
f<设定⽂件>指定配置⽂件
h显示帮助
l显示服务器编译时所包含的模块
L显示httpd指令的说明
S显示配置⽂件中的设定
t测试配置⽂件的语法是否正确
v显示版本信息
V显示版本信息以及建⽴环境
X以单⼀程序的⽅式来启动服务器
M

显示动态模块

服务单元文件:

/usr/lib/systemd/system/httpd.service

配置文件:/etc/sysconfig/httpd

站点网页文档根目录:/var/www/html

在访问httpd服务时,访问的目录为/var/www/html下的文件

在配置文件中可以进行修改

DocumentRoot   "/path”

<directory /path>

Require all granted

</directory>

DocumentRoot指向的路径为URL路径的起始位置

/path 必须显式授权后才可以访问

这是因为在配置文件中制定了默认的文件名

比如在文件中条件其它自定义名称后,会按顺序进行查找

首先新建一个名为pla.test的文件

使用其它机器访问时就会默认匹配前面的文件名,将没有匹配到的默认文件名忽略

再建一个名为index.txt的文件

再进行访问时就会匹配最前面的自定义名称

模块文件路径:

/etc/httpd/modules

/usr/lib64/httpd/modules

一些模块配置,不需要去关注

(二)编译安装

编译安装可以指定工作模块,可以在官方文档中查看

下面提供几个下载地址,可以自己进行编译安装

https://downloads.apache.org/apr/apr-1.7.0.tar.bz2
https://downloads.apache.org//apr/apr-util-1.6.1.tar.bz2
https://downloads.apache.org//httpd/httpd-2.4.46.tar.bz2

四、HTTP配置

在修改配置文件之前养成好习惯,先进行备份

cp   conf/httpd.conf  conf/httpd.conf.bak

(一)指定服务器名称

之前在使用httpd -t检查配置文件时出现一条报错信息

可以将95行的注释信息开启,也可以自定义域名

再次进行检查就没有报错信息了,也就是指定域名

重新之后就会生效了

(二)监听端口

httpd默认的监听端口号是80 

可以在主配置文件中修改

再次访问的时候会拒绝,因为默认是80,而httpd服务不再监听80端口

可以同时监听多个端口,在设置时,省略IP地址,表示监听本机的所有IP地址

添加一块临时网卡:ifconfig ens33:0  192.168.83.111/24

访问htppd服务时,无论访问哪一个IP地址的9527端口都可以

但是在访问10086端口时,只能访问192.168.83.40的10086端口

(三)包含其它子配置文件

为什么在/etc/httpd/conf.d/下新建一个以.conf结尾的文件,就可以当作配置文件生效?

这是因为,在主配置文件中也规定了

Include 和 IncludeOptional 指令用于包含其他配置文件或目录下的所有匹配的配置文件。

Include和IncludeOptional功能相同,都可以包括其它配置文件

但是当无匹配文件时,include会报错,IncludeOptional将继续加载其余配置,不会导致错误

(四)隐藏服务器版本信息

在Apache HTTP Server中,可以通过配置文件隐藏服务器版本信息以增强安全性,防止攻击者利用已知的软件漏洞。

可以在配置文件中添加ServerTokens字段来设置显示的版本信息

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

选项显示信息
ServerTokens ProdServer: Apache
ServerTokens MajorServer: Apache/2
ServerTokens MinorServer: Apache/2.0
ServerTokens MinServer: Apache/2.0.41
ServerTokens OSServer: Apache/2.0.41 (Unix)
ServerTokens Full  Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.

ServerTokens Prod:只显示服务名称

ServerTokens Major显示主要版本号

ServerTokens Minor:显示主要和次要版本号

ServerTokens Min:显示最小化但仍然包含具体版本信息的标识

ServerTokens OS:显示服务器软件、主要和次要版本号以及操作系统信息

此为默认值

ServerTokens Full:显示完整的服务器标识,包括服务器软件、完整版本号、操作系统及可能存在的其他模块版本信息

(五)持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认开启持久连接。虽然效果比较好,但是对并发访问量大的服务器,持久连接会使有些请求得不到响应。可以通过设置限制条件来主动断开连接。

断开条件:

时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级

请求数量: 请求数达到指定值,也会断开

在客户端使用telnet进行测试

(六)DSO 

DSO (Dynamic Shared Object):加载动态模块配置,不需重启即生效动态模块所在路径

查看静态编译的模块:httpd -l

查看静态编译及动态装载的模块:httpd -M

其模块存放位置在vim  /etc/httpd/conf.modules.d目录下

想要禁用哪个模块,直接打开文件进行注释就可以,前提是了解好模块的作用再决定是否注释或启用

(七)MPM 多路处理模块

httpd 支持三种MPM工作模式:prefork, worker, event

vim   /etc/httpd/conf.modules.d/00-mpm.conf

1.prefork模块

开启prefork模块

开启后重新启动服务:systemctl restart httpd

正常开启进程后,会开启五个子进程

注意:startservers与10之间只能有一个空格,否则会出现语法错误

重启服务后会发现,会同时开启10个子进程

StartServers 最初始开启进程数
MinSpareServers 空闲时最少预留
MaxSpareServers 空闲时最大预留
ServerLimit最多进程数,最大值 20000
MaxRequestWorkers最大的并发连接数,默认256
MaxConnectionsPerChild

子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程

将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)

MaxRequestsPerChild从httpd.2.3.9开始被MaxConnectionsPerChild代替

2.worker和event 模式相关的配置

ServerLimit

 这个指令限制了服务器可以同时运行的子进程总数。默认情况下,它会设置为与

MaxRequestWorkers相同的值,但在某些情况下,用户可能需要增加此值以支持

更多的并发连接。注意:修改这个值通常需要重新编译Apache

processes

 在Apache文档中并没有直接对应的processes配置项。但StartServers与此有关,

表示启动时创建的工作进程数量。

StartServers

 在worker或event模式下,StartServers指定了Apache启动时应启动多少个工作进程

。每个工作进程内包含多个线程来处理请求。

MaxRequestWorkers

这个参数定义了Apache可以同时处理的最大请求数量,即最多能有多少个客户端请

求被并行服务。这包括所有正在处理和等待处理的请求总数。

simultaneously

 这不是一个Apache配置选项,但确实描述了MaxRequestWorkers的作用,即允许

Apache同时处理的请求数量。

MinSpareThreads

 指定在任何时刻系统至少要保持的空闲线程数。如果当前的空闲线程数低于这个值,

Apache将会创建新的线程。

MaxSpareThreads

 定义了在任何时刻系统最多可以存在的空闲线程数。当达到这个数值时,Apache将

停止创建新的线程,即使有更多空闲。

ThreadsPerChild

 在worker或event模式下,每个工作进程中包含的线程数。这意味着每个工作进程能

够并行处理多个请求。

重启服务后,查看进程数量

(八)定义Main server的文档页面路径

在上面的配置文件中,已经讲解过文档页面路径以及重新定义的方法,下面说一说别名的定义

注释

因为只是做别名,并不需要重新指明文档默认路径,所以不需要在开头行加DocumentRoot而指向的路径为URL路径的起始位置

准备完毕后重启服务:systemctl restart httpd

使用客户机访问test时就相当于访问/data/http/

(九)虚拟主机

httpd 支持在一台物理主机上实现多个网站,即多虚拟主机

虚拟主机:在一台服务器中分出一定的磁盘空间供用户放置网站、存放数据等,仅提供基础的网站访问、数据存放与传输流量功能,能够极大的降低用户费用,也几乎不需要管理员维护除网站数据以外的服务,适合小型网站。

1.基于IP地址

首先,添加一个临时IP,也可以之间添加网卡

将/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf模板文件中的大约23-38行复制到/etc/httpd/conf.d/目录下新建一个以.conf结尾的子配置文件当中

新建一个子配置文件

vim  /etc/httpd/conf.d/vhost.conf

<Directory "/data/http">AllowOverride None# Allow open access:Require all granted
</Directory>
#对/data/http目录进行授权<VirtualHost 192.168.83.40>   #定义了这个虚拟主机监听的IP地址ServerAdmin root@localhost 
#设置服务器管理员邮箱地址,当发生错误时,可能会向这个邮箱发送通知DocumentRoot "/data/http/nice" 
#指定网站根目录的位置。访问者通过域名访问时,网页资源将从此路径提供ServerName www.kysw.com
#设置虚拟主机的域名,任何指向www.accp.com的HTTP请求都将匹配到这个虚拟主机配置ErrorLog "/data/http/nice/nice-error_log"
#配置错误日志文件的位置,所有与该虚拟主机相关的错误信息将被记录在这个文件中CustomLog "/data/http/nice/nice-access_log" common
#设置访问日志文件位置,客户端对网站的所有访问请求都会按common格式记录在此日志文件内。
</VirtualHost><VirtualHost 192.168.83.200>ServerAdmin root@localhostDocumentRoot "/data/http/good"ServerName www.kysw.comErrorLog "/data/http/good/good-error_log"CustomLog "/data/http/good/good-access_log" common
</VirtualHost>

重启服务后进行测试:systemctl restart httpd

使用客户端进行测试

2.基于端口号

不需要添加网卡,只需要在IP地址后面添加不同的端口号即可

重启服务后进行测试:systemctl restart httpd

3.基于域名

将不同的路径的servername换成自定的不同的域名

重启服务后进行测试:systemctl restart httpd

在客户端/etc/hosts文件中添加域名解析,将服务端的IP地址与自定义的不同的域名添加进去,通过不同的域名,获取不同的信息

(十)基于客户端 IP 地址实现访问控制

1.黑名单

黑名单,不能有失效,至少有一个成功匹配才成功,即失败优先

在新建的子配置文件中添加以下内容

#这段配置内容描述了对/opt目录及其资源的访问控制规则,并设置了一个别名指向 /test
<directory /opt>    #定义一个虚拟目录,这里的路径是服务器上的实际物理路径/opt
<RequireAll>        #在此标签内定义的所有条件都必须满足时,用户才能被允许访问该目录
require all granted  #表示允许所有用户访问/opt目录下的资源。
require not ip 192.168.83.100 #拒绝192.168.83.100这个IP地址访问
</RequireAll>   #结束<RequireAll>标签块
</directory>    #结束<directory /opt>标签块。
alias /test /opt/html    #别名

在/opt下建立html目录。并在目录下添加一个index.html文件输入内容

拒绝的IP地址十无法访问的

其它地址都可以访问

2.白名单

白名单,多个语句有一个成功,则成功,即成功优先

将子配置文件中的黑名单信息替换为以下内容

#这段配置内容描述了对/opt目录及其资源的访问控制规则,并设置了一个别名指向 /test
<directory /opt>    #定义一个虚拟目录,这里的路径是服务器上的实际物理路径/opt
<RequireAny>        #在此标签内定义的所有条件都必须满足时,用户才能被允许访问该目录
require all denied #表示拒绝所有用户访问/opt目录下的资源。
require ip 192.168.83.100 #允许192.168.83.100这个IP地址访问
</RequireAny>   #结束<RequireAny>标签块
</directory>    #结束<directory /opt>标签块。
alias /test /opt/html    #别名

所有IP地址都拒绝访问,只有白名单的IP地址可以访问

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

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

相关文章

每日OJ题_二叉树dfs④_力扣98. 验证二叉搜索树

目录 力扣98. 验证二叉搜索树 解析代码 力扣98. 验证二叉搜索树 98. 验证二叉搜索树 难度 中等 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树…

利用eds editor生成CANOPEN 设备eds文件

使用CANopen EDS Editor生成CANOPEN设备的EDS文件是一个系统化的过程&#xff0c;它涉及将设备的具体技术参数和功能映射到CANopen规范定义的对象字典中。以下是一般步骤概览&#xff1a; 启动编辑器&#xff1a; 打开CANopen EDS Editor软件&#xff0c;通常可以通过桌面快捷方…

mac 安装H3C iNode + accessClient mac版

一、下载安装 官网下载地址 https://www.h3c.com/cn/Service/Document_Software/Software_Download/IP_Management/ 可以使用文末参考博文中的账号 yx800 密码 01230123登录下载 选择版本 下载 下载 H3C_iNode_PC_7.3_E0626.zip 文件后&#xff0c;解压下载到的PC端压缩包…

迈向三维:vue3+Cesium.js三维WebGIS项目实战--持续更新中

写在前面&#xff1a;随着市场对数字孪生的需求日益增多&#xff0c;对于前端从业者的能力从对框架vue、react的要求&#xff0c;逐步扩展到2D、3D空间的交互&#xff0c;为用户提供更紧密的立体交互。近年来前端对GIS的需求日益增多。本文将记录WebGIS的学习之旅&#xff0c;从…

R cox回归 ggDCA报错

临床预测模型的决策曲线分析&#xff08;DCA&#xff09;&#xff1a;基于ggDCA包 决策曲线分析法&#xff08;decision curve analysis&#xff0c;DCA&#xff09;是一种评估临床预测模型、诊断试验和分子标记物的简单方法。 我们在传统的诊断试验指标如&#xff1a;敏感性&a…

数据结构·顺序表

1数据结构简介 学习数据结构与算法之前&#xff0c;一般是先学数据结构&#xff0c;方便之后学习算法&#xff0c;那么数据结构拆开介绍&#xff0c;就是数据 和 结构&#xff0c;数据&#xff0c;生活中到处都是&#xff0c;结构&#xff0c;就是数据存储的方式&#xff0c;即…

支付宝小程序实现类似微信多行输入

先来看看微信小程序输入框展示效果&#xff1a; 输入超过 8 行的时候会出现滚动&#xff0c;这样做的好处就是输入框不会直接顶到页面最顶部。 支付宝小程序实现多行输入框&#xff1a;使用textarea多行输入框实现 思路一&#xff1a; textarea 标签设置max-height, 标签自…

【Git教程】(二)入门 ——关于工作区与版本库、版本提交、查看信息、克隆、推送与拉回的简单介绍 ~

Git教程 入门 1️⃣ 准备Git 环境1.1 创建版本库1.2 首次提交1.3 显示历史 2️⃣ Git 的协作功能2.1 克隆版本库2.2 从另一版本库中获取修改2.3 从任意版本库中取回修改2.4 创建共享版本库2.5 用 push 命令上载修改2.6 Pull 命令&#xff1a;取回修改 &#x1f33e; 总结 如果…

跳表是一种什么样的数据结构

跳表是有序集合的底层数据结构&#xff0c;它其实是链表的一种进化体。正常链表是一个接着一个用指针连起来的&#xff0c;但这样查找效率低只有O(n)&#xff0c;为了解决这个问题&#xff0c;提出了跳表&#xff0c;实际上就是增加了高级索引。朴素的跳表指针是单向的并且元素…

ArcgisForJS如何访问Arcgis Server?

文章目录 0.引言1.准备ArcGIS相关工具2.创建含有ArcSDE地理数据库的MXD文件3.注册ArcSDE地理数据库4.发布数据到Arcgis Server5.ArcgisForJS访问ArcGIS Server数据 0.引言 ArcGIS API for JavaScript 是一个用于在Web和移动应用程序中创建交互式地图和地理空间分析应用的库。它…

解决MobaXterm网络错误连接超时问题

报错页面&#xff1a; 报错原因&#xff1a; ①网络断开了 ②网络端口&#xff0c;端口号改变 解决办法&#xff1a; ①重新连接网络按R ②固定端口号 第一步&#xff1a;编辑------>虚拟机网络编辑器&#xff08;我的Linux在虚拟机里&#xff09; 第二步&#xff1a;用…

抽象工厂模式 Abstract Factory

1.模式定义: 提供一个创建一系列相关或互相依赖对象的接口&#xff0c;而无需指定它们具体的类 2. 应用场景: 程序需要处理不同系列的相关产品&#xff0c;但是您不希望它依赖于这些产品的 具体类时&#xff0c; 可以使用抽象工厂 3.优点: 1.可以确信你从工厂得到的产品彼…

Chrome插件精选 — 缓存清理

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. Chrome清理大师…

Elasticsearch:使用 ELSER v2 进行语义搜索

在我之前的文章 “Elasticsearch&#xff1a;使用 ELSER 进行语义搜索”&#xff0c;我们展示了如何使用 ELESR v1 来进行语义搜索。在使用 ELSER 之前&#xff0c;我们必须注意的是&#xff1a; 重要&#xff1a;虽然 ELSER V2 已正式发布&#xff0c;但 ELSER V1 仍处于 [预览…

【算法 - 动态规划】最长回文子序列

上篇文章中&#xff0c;我们学习一个新的模型&#xff1a; 样本对应模型&#xff0c;该模型的套路就是&#xff1a;以结尾位置为出发点&#xff0c;思考两个样本的结尾都会产生哪些可能性 。 而前篇文章中的 纸牌博弈问题 属于 [L , R]上范围尝试模型。该模型给定一个范围&…

C 嵌入式系统设计模式 08:硬件代理模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之一&…

【C++语法基础】3.常用数学运算和位运算技巧(✨新手推荐阅读)

前言 在C编程中&#xff0c;数学运算是非常基础和常用的功能。C提供了多种数学运算符和函数&#xff0c;用于执行基本的数学计算&#xff0c;如加减乘除、取模运算以及位运算等。 一、加减乘除四则运算 C中的基本算术运算符包括加法()、减法(-)、乘法(*)、除法(/)。这些运算…

Chrome关闭时出现弹窗runtime error c++R6052,且无法关闭

环境&#xff1a; Chrome 版本121 Win10专业版 问题描述&#xff1a; Chrome关闭时出现弹窗runtime error cR6052&#xff0c;且无法关闭 解决方案&#xff1a; 1.任务管理器打开&#xff0c;强制结束进程 2.再次打开谷歌浏览器&#xff0c;打开设置关于Chrome&#xff0…

IO进程线程day5作业

1、使用多线程完成两个文件的拷贝&#xff0c;第一个线程拷贝前一半&#xff0c;第二个线程拷贝后一半&#xff0c;主线程回收两个线程的资源 代码&#xff1a; #include<myhead.h>//定义文件拷贝函数 int copy_file(int start,int len) {int srcfd,destfd;//以只读的形…

Vue3之ref与reactive的基本使用

ref可以创建基本类型、对象类型的响应式数据 reactive只可以创建对象类型的响应式数据 接下来让我为大家介绍一下吧&#xff01; 在Vue3中&#xff0c;我们想让数据变成响应式数据&#xff0c;我们需要借助到ref与reactive 先为大家介绍一下ref如何使用还有什么注意点 我们需…