Web服务器基础 http协议
文章目录
- 1.Web基础
- 1.1MIME
- 1.2 URI 和 URL
- 1.2.1定义
- 1.2.2两者的区别
- 2.静态资源和动态资源
- 2.1 静态资源
- 2.2 动态资源
- 3.HTTP协议
- 3.1HTTP协议简介
- 3.2HTTP协议的版本及区别
- 3.2.1http协议版本
- 3.2.2http1.0和1.1的区别
- 3.3HTTP请求报文
- 3.4HTTP请求访问的过程
- 1、建立连接:
- 2、接收请求:
- 3、处理请求:
- 4、访问资源:
- 5、构建响应报文:
- 6、发送响应报文
- 7、记录日志
- 3.5HTTP状态码
- 3.5.1状态码分类
- 3.5.2常用状态码
- 3.6HTTP的请求报文和响应报文
- 3.6.1请求报文
- 3.6.2响应报文
- 3.7 HTTP连接优化
- 4.http概述
- 4.1 安装软件
- 4.2 http相关文件
- 4.2.1配置文件
- 4.2.2服务单元文件和主服务器程序文件
- 4.2.3模块文件
- 4.2.3http服务控制和启动
- 5.http的常见配置
- 5.1 虚拟主机
- 5.1.1功能
- 5.1.2虚拟主机的实现方案
- 5.1.2.1基于ip地址
- 5.1.2.2基于端口地址
- 5.1.2.3基于域名
- 6.http协议的三种工作模式
- 7.cookie和session
- 7.1cookie
- 7.2session
1.Web基础
1.1MIME
MIME是一种互联网标准,是一种用于标识文件类型的方法。
MIME类型由一个主类型和一个子类型组成,用斜杠(/)分隔,MIME类型的作用是告诉接收方如何解释和处理接收到的文件
#常见范例text/plain #纯文本文件
text/html #HTML网页文件
text/css #CSS媒体文件
image/jpeg #JPEG格式图片文件
image/png #PNG格式图片文件
video/mp4 #MP4格式音频文件
audio/mpeg #MP3格式音频文件
1.2 URI 和 URL
1.2.1定义
URI: Uniform Resource Identifier 统一资源标识,分为URL 和 URN
URL:Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
1.2.2两者的区别
定义范围:URI是一个广义的概念,用于标识和命名互联网上的资源,可以是URL、URN或其他形式。URL是URI的一种具体实现形式,用于资源的定位和访问。
功能重点:URI强调资源的标识性,用于唯一标识和命名资源。URL则更注重资源的位置性,其中包含了定位和访问资源所需的详细信息。
URL格式范例:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme:方案,访问服务器以获取资源时要使用哪种协议
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔
2.静态资源和动态资源
静态和动态资源的区别在于需不需要服务器进行二次加工
静态资源无需二次加工即直接使用
但动态资源需要二次加工
2.1 静态资源
静态资源指的是在服务器上保存的文件,其内容在请求和传输过程中不发生变化。
静态资源可以是图片、CSS样式表、JavaScript文件、HTML文件等。
静态资源的请求一般是通过URL直接访问,当客户端发送请求时,服务器直接将这些文件返回给客户端,不进行任何处理。
2.2 动态资源
动态资源则是在服务器端通过执行脚本或程序生成的内容,需要占用服务器的资源。
服务器会根据请求中的参数和数据,执行相应的脚本或程序来生成动态内容,然后将生成的内容返回给客户端。
动态资源可以是动态网页、API接口等。
3.HTTP协议
3.1HTTP协议简介
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应
3.2HTTP协议的版本及区别
3.2.1http协议版本
http 0.9 :服务器只能回应HTML格式字符串,不能回应别的格式http 1.0 :每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接引入了POST命令和HEAD命令头信息是 ASCII 码,后面数据可为任何格式http 1.1 :支持持久连接,即在一个TCP连接里面完成多个http请求和响应,但是每个请求和响应是按照顺序一一对应的http 2.0 :支持完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应( 也支持压缩,服务端主动推送)
3.2.2http1.0和1.1的区别
- 缓存处理
- 带宽优化及网络连接的使用
- 错误通知的管理
- Host 头处理
- 长连接
3.3HTTP请求报文
HTTP定义了一组请求方法,用于指定客户端对资源的操作方式
方法名 | 作用 |
---|---|
GET | 获取资源 |
HEAD | 获取报文首部,主要用于确认 URL 的有效性以及资源更新的日期时间等 |
POST | 传输实体主体 (比如传输 用户名密码) |
PUT | 上传文件(比如写博客) |
PATCH | 对资源进行部分修改 |
DELETE | 删除文件 |
OPTIONS | 查询支持的方法(查看服务端可以支持哪些方法) |
CONNECT | 要求在与代理服务器通信时建立隧道(类似加密) |
TRACE | 追踪路径 |
3.4HTTP请求访问的过程
1、建立连接:
接收或拒绝连接请求
2、接收请求:
接收客户端请求报文中对某资源的一次请求的过程
3、处理请求:
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
4、访问资源:
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
5、构建响应报文:
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文
6、发送响应报文
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束
7、记录日志
最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
3.5HTTP状态码
3.5.1状态码分类
1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误
3.5.2常用状态码
状态码 | 含义 |
---|---|
200 | 成功,请求数据通过响应报文的entity-body部分发送;OK |
301 | 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently |
302 | 响应报文Location指明资源临时新位置 Moved Temporarily |
304 | 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified |
307 | 浏览器内部重定向 |
401 | 需要输入账号和密码认证方能访问资源;Unauthorized |
403 | 请求被禁止;Forbidden |
404 | 服务器无法找到客户端请求的资源;Not Found |
500 | 服务器内部错误;Internal Server Error,比如:cgi程序没有执行权限 |
502 | 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway |
503 | 服务不可用,临时服务器维护或过载,服务器无法处理请求, |
504 | 网关超时 |
3.6HTTP的请求报文和响应报文
3.6.1请求报文
#request 报文格式 <method> <request-URL> <version>
<headers><entity-body>第一行为请求行,包含请求方法、请求目标和HTTP协议版本号
第二行为请求头部,包含与请求相关的各种元数据信息空行用于分隔头部和请求体的空行
第四行为请求体,可选项,包含实际的请求数据
示例:curl 192.168.67.100|head
#状态行
> GET / HTTP/1.1
#HTTP GET请求,即获取指定路径的内容,请求的路径为根路径("/"),表示请求服务器的默认页面#头部字段
> User-Agent: curl/7.29.0
#指定客户端使用的User-Agent,该请求由curl/7.29.0发送
> Host: 192.168.67.100
#指定了要访问的服务器的主机地址
> Accept: */*
#指定了客户端可以接受的响应内容的类型,表示客户端可以接受任何类型的内容
3.6.2响应报文
response报文格式<version> <status> <reason-phrase>
<headers>
<entity-body>第一行为状态行,状态行由协议版本,状态码,状态码描述三部分组成。第二行为响应头部,响应头包含与响应相关的各种元数据信息。第三行为空行,用于分隔头部和响应体的空行。第四行为响应体,可选项,包含实际的响应数据。
示例:
curl -v 192.168.67.100|head
#响应状态行
HTTP/1.1 403 Forbidden
#表示请求被拒绝 状态403表示请求被禁止头部字段
Date: Thu, 24 Aug 2023 06:13:43 GMT
#报文的创建时间
Server: Apache/2.4.6 (CentOS)
#服务器程序软件名称和版本
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
#表示所请求资源的最后修改日期和时间
ETag: "1321-5058a1e728280"
#表示所请求资源的实体标签
Accept-Ranges: bytes
#服务器可接受的请求范围类型
Content-Length: 4897
#响应实体主体的长度。
Content-Type: text/html; charset=UTF-8
#实体主体的类型和字符编码,表示响应内容是以UTF-8编码的HTML文本。
3.7 HTTP连接优化
1)并行连接:并行连接通过同时建立多个连接 ,使得客户端可以并发地发送多个请求,以提高并发性和响应速度。
2)持久连接 :持久连接允许客户端和服务器之间在单个连接上发送多个HTTP请求和响应 ,而不是每个请求都要重新建立连接。
3) 管道化连接:管道化连接是一种在持久连接上发送多个请求而无需等待服务器响应 的机制。
4.http概述
4.1 安装软件
yum install -y httpd
4.2 http相关文件
4.2.1配置文件
/etc/httpd/conf/httpd.conf #主配置文件/etc/httpd/conf.d/*.conf #子配置文件/etc/httpd/conf.d/conf.modules.d/ #模块加载的配置文件
检查配置语法:httpd -t
或 apache2 -t
站点网页文档根目录:/var/www/html
4.2.2服务单元文件和主服务器程序文件
服务单元文件
/usr/lib/systemd/system/httpd.service
配置文件:/etc/sysconfig/httpd
主服务器程序文件
/usr/sbin/httpd
4.2.3模块文件
/etc/httpd/modules/usr/lib64/httpd/modules
4.2.3http服务控制和启动
开机自启和关闭开机自启
systemctl enable httpd.service #开机自启systemctl disable httpd.service #关闭开机自启
开启服务
systemctl start httpd.serviceapachectl start service httpd start
关闭服务
systemctl stop httpd.serviceapachectl stopservice httpd stop
重新加载
systemctl restart httpd.serviceapachectl restart service httpd restart
查看服务状态
systemctl status httpd
配置文件语法检查
apachectl configtestservice httpd configtest
5.http的常见配置
5.1 虚拟主机
5.1.1功能
httpd虚拟主机的作用是通过一个物理服务器来托管多个域名或网站,实现资源共享、个性化配置和多域名指向不同网站的功能,提高服务器资源利用率和降低成本。
5.1.2虚拟主机的实现方案
5.1.2.1基于ip地址
原理
为每个虚拟主机准备至少一个ip地址,并通过服务器软件来指定每个虚拟主机使用的IP地址
示例:
前置准备
#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0rpm -q httpd
#查看软件是否安装systemctl start httpd #开启服务cd /var/www/html/ #进入httpd站点文件目录
vim index.html #设定默认主页,默认主页名字必须为index.htmlsystemctl resgtart httpd #重启服务
mkdir ip1
#创建新目录vim .ip1/index.html
#新的测试网页
#新建一个除了IP地址不同的配置文件
vim /etc/httpd/conf.d/ipv.conf注:网址是需要真实存在的
httpd -t
#测试是否有错误
vim /etc/httpd/conf/httpd.conf #编辑主配置文件ServerName www.example.com:80 #添加到主配置文件中
保存后再次尝试
httpd -t
示例
配置192.168.67.101为示例
vim /etc/httpd/conf/httpd.conf
mkdir /var/www/html/scj #创建所需目录httpd -tvim /var/www/html/scj/index.html #编辑主页systemctl restart httpd
#重新加载
记得刷新
5.1.2.2基于端口地址
原理
每个虚拟主机使用同一个IP地址,但使用不同的端口号来区分。
这种方法不需要分配额外的IP地址或端口,可以在同一个IP地址上承载多个虚拟主机。
示例
前置准备
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux
yum install httpd -y
systemctl start httpd
#安装并启动httpd服务vim /etc/httpd/conf/httpd.conf
#编辑配置文件
vim scj1/index.html
#编辑主页
httpd -t
#查看是否有错误
systemctl restart httpd
#重启服务curl 192.168.67.100:80curl 192.168.67.10:8080
5.1.2.3基于域名
原理
服务器软件根据请求头中的主机名(域名)来区分虚拟主机。
这种方法不需要分配额外的IP地址或端口,可以在同一个IP地址上承载多个虚拟主机。
示例
前置准备
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux
yum install httpd -y
systemctl start httpd
#安装并启动httpd服务vim /etc/httpd/conf/httpd.conf
#编辑配置文件
vim scj2/index.html
#添加新路径
httpd -t
#排错
vim /etc/hosts
#编辑本地hosts文件,添加地址映射
systemctl restart httpd
#重启服务curl www.scj1.comcurl www.scj2.com
6.http协议的三种工作模式
①prefork:一对一模式,处理一个请求开启一个进程,缺点是httpd服务进程数有上限。
②worker:一对多模式,规定一个进程处理多少个请求,缺点是处理完自己的请求空闲不会告知服务器。
③event:一对多模式,且有一个监听进程,若有处理完请求的空闲进程会通知服务器分配新的请求。
7.cookie和session
Cookie和Session用于解决http协议无状态。
7.1cookie
Cookie是一种在客户端(通常是Web浏览器)存储数据的小文件。它由服务器在HTTP响应中发送给客户端,并在后续的请求中由客户端发送回服务器。Cookie通常用于跟踪和标识用户会话,以提供个性化的服务或记录用户在网站上的活动。
7.2session
Session是指在一段时间内,用户与某个系统或应用之间的交互过程。在Web开发中,会话通常用于跟踪用户在网站上的活动状态,以便提供个性化的服务、记录用户的操作等。
相关文章:

Web服务器基础 http协议
文章目录 1.Web基础1.1MIME1.2 URI 和 URL1.2.1定义1.2.2两者的区别 2.静态资源和动态资源2.1 静态资源2.2 动态资源 3.HTTP协议3.1HTTP协议简介3.2HTTP协议的版本及区别3.2.1http协议版本3.2.2http1.0和1.1的区别 3.3HTTP请求报文3.4HTTP请求访问的过程1、建立连接:…...
采用 SVG 实现 web 绘图软件的技术分享
背景 前端技术 使用 svg.js 及全家桶的组件实现 svg 绘图的 web 软件。 MySql8 词语定义 图纸:在页面上绘制的内容整体整体叫做图纸,业务上图纸是具有重要业务意义的概念。 对象:图纸上的业务元素的最小概念。 难点-技术背景 当时遇到…...

Qt --- QTimer
在Qt开发界面的时候,非常多的时候都得使用定时器,定时器具体可以干什么呢?比如:控制时钟、定时改变样式、改变进度等。。。说到这里,经常使用QQ,而不同的时段都会显示不同的背景,我认为如果用Qt…...

计算机终端核心安全配置规范
声明 本文是学习 政务计算机终端核心配置规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 范围 本标准提出了政务计算机终端核心配置的基本概念和要求,规定了核心配置的自动化实现方法,规范了核心配置实施流程。 本标准适…...
【Spring Boot】什么是深度优先遍历与广度优先遍历?用Spring Boot项目举例说明。
深度优先遍历(Depth First Search,DFS)和广度优先遍历(Breadth First Search,BFS)是图的遍历算法。其中,深度优先遍历从某个起始点开始,先访问一个节点,然后跳到它的一个…...

MetaMask Mobile +Chrome DevTools 调试Web3应用教程
注:本教程来源网络,有兴趣的可以直接到这里查看。 写好了WEB3应用,在本地调试用得好好的,但是用钱包软件访问就报莫名的错,但是又不知道是什么原因,排查的过程非常浪费时间 。 因此在本地同一局域网进行调试…...

栈和队列OJ题
有效括号问题: 题目描述: 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的…...

36k字从Attention讲解Transformer及其在Vision中的应用(pytorch版)
文章目录 0.卷积操作1.注意力1.1 注意力概述(Attention)1.1.1 Encoder-Decoder1.1.2 查询、键和值1.1.3 注意力汇聚: Nadaraya-Watson 核回归1.2 注意力评分函数1.2.1 加性注意力1.2.2 缩放点积注意力1.3 自注意力(Self-Attention)1.3.1 自注意力的定义和计算1.3.2 自注意…...
网站怎么选择适合的服务器
IDC数据中心大致分为T1、T2、T3、T4 T1:基本机房基础设施(可用性99.671%、年平均故障时间28.8小时) 1) T1 基本数据中心拥有非冗余容量组件,以及一个单一的非冗余分配路径来为关键环境提供服务。T1 基础设施包括:IT …...
http协议和HTTP编程流程
目录 1、http协议 (1)概念 (2)使用的端口 (3)长连接和短连接 (4)常见web服务器 2、https(443) 3、浏览器连接服务器编程 1、http协议 (超文…...
【NPM】包的指令
npm 安装的包可以根据其用途和作用进行分类,一般可以分为以下几种类型: 普通依赖(Regular Dependencies): 这些是你项目中的实际依赖项,用于构建、运行或扩展你的应用程序。这些依赖会被包含在你的应用程序…...
音频4A算法导论
+我V hezkz17进数字音频系统研究开发交流答疑群(课题组) 一 音频4A算法是? 音频4A算法是指自动增益控制(Automatic Gain Control, AGC)、自动噪声抑制(Automatic Noise Suppression, ANS)和自动回声消除(Automatic Echo Cancellation, AEC),主动降噪ANC(Active Noi…...

SecureBridge安全文件下载的组件Crack
SecureBridge安全文件下载的组件Crack SecureBridge包括SSH、SSL和SFTP客户端和服务器组件。它使用SSH或SSL安全传输层协议和加密消息语法来保护任何TCP流量,这些协议为客户端和服务器提供身份验证、强数据加密和数据完整性验证。SecureBridge组件可以与数据访问组件…...
进程同步
目录 临界区(Critical Section): 互斥量(Mutex): 信号量(Semaphore): 事件(Event): 进程同步的四种方法 临界区(Critical Section): 通过对多线程的串行…...

Prometheus+Grafana+AlertManager监控Linux主机状态
文章目录 PrometheusGrafanaAlertManager监控平台搭建开始监控Grafana连接Prometheus数据源导入Grafana模板监控Linux主机状态 同系列文章 PrometheusGrafanaAlertManager监控平台搭建 Docker搭建并配置Prometheus Docker拉取并配置Grafana Docker安装并配置Node-Exporter …...

UI设计第一步,在MasterGo上开展一个新项目
我们都知道,一个完整的项目,要经历创建团队、搭建组件库、应用规范以及管理设计资产,那么今天小编就在MasterGo中带你从0到1开展一个全新的项目。 你一定遇到过这种情况,同团队的设计师,由于使用不同版本或不同软件&a…...

【校招VIP】TCP/IP模型之常用协议和端口
考点介绍: 大厂测试校招面试里经常会出现TCP/IP模型的考察,TCP/IP协议是网络基础知识,是互联网的基石,不管你是做开发、运维还是信息安全的,TCP/IP 协议都是你绕不过去的一环,程序员需要像学会看书写字一样…...

Spring统一功能处理
1. AOP存在的问题 获取参数复杂AOP的规则相对简单 2. 拦截器 2.1. 应用(以登录为例) 2.1.1. 自定义拦截器 新建interceptor文件夹 import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http…...

搭建CFimagehost私人图床,实现公网远程访问的详细指南
文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…...
Python的logging.config模块
要使用Python的logging.config模块记录一个月的日志数据,你可以按照以下步骤进行操作: 首先,导入必要的模块: import logging import logging.config import datetime创建一个配置文件,例如logging.ini,用…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...