计算机网络实验4:HTTP、DNS协议分析
文章目录
- 1. 主要教学内容
- 2. HTTP协议
- 3. HTTP分析实验
- 【实验目的】
- 【实验原理】
- 【实验内容】
- 【实验思考】
- 4. HTTP分析实验可能遇到的问题
- 4.1 捕捉不到http报文
- 4.2 百度是使用HTTPS协议进行传输
- 4.3 Wireshark获得数据太多如何筛选
- 4.4 http报文字段含义不清楚
- General(通用部分):
- Request Headers(请求头部):
- Response Headers(响应头部):
- 4.5 http协议工作过程怎么填写
- 5. DNS协议
- 6. DNS协议分析实验
- 【实验目的】
- 【实验原理】
- 【实验内容】
- 【实验思考】
- 7. DNS协议分析实验可能遇到的问题
- 7.1 不了解nslookup命令如何使用
- 7.2 如何在Wireshark中对应DNS协议内容
1. 主要教学内容
- 实验内容:使用Wireshark捕获数据包,根据捕获的相关数据包分别对HTTP、DNS协议展开分析。额外内容:利用fiddler软件对HTTPS协议进行分析。
- 所需学时:1。
- 重难点:HTTP和DNS协议的报文结构。
- 周次:第3周。
- 教材相关章节:2.4、2.7。
2. HTTP协议
HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态(指协议对于事务处理没有记忆能力)的应用层协议,常基于 TCP 的连接方式。HTTP 1.1版本中给出一种持续连接的机制,绝大多数的 Web 应用都构建在 HTTP 协议之上。
在 HTTP 的请求和应答标准中,客户端是终端用户,服务器端是网站。通过使用 Web浏览器或者其他的工具,客户端发起一个到服务器上指定端口(默认端口为 80)的 HTTP请求,这个客户端称为用户代理(User Agent)。应答的服务器上存储着一些资源,比如HTML 文件和图像,这个应答服务器称为源服务器(Origin Server)。在用户代理和源服务器中间可能存在多个中间层,比如代理、网关或者隧道(Tunnels)。尽管 TCP/IP 协议是互联网上最流行的应用,但是 HTTP 协议并没有规定必须使用它和它支持的层。事实上HTTP 可以在任何其他互联网协议或其他网络上实现。HTTP 只假定其下层协议提供可靠的传输,任何能够提供这种保证的协议都可以被其使用。
通常情况下,由 HTTP 客户端发起一个请求,建立一个到服务器指定端口的 TCP 连接。HTTP 服务器则在该端口监听客户端发送过来的请求。一旦收到请求,服务器向客户端发回一个状态行和响应的消息,消息的消息体可能是请求的文件、错误消息或者其他一些信息。
- HTTP有两类报文,HTTP的请求报文和响应报文结构(SP:空格;crlf :回车换行):
- HTTP 协议定义了8种方法表示对指定数据的操作:
-
HTTP请求报文分为三部分:请求行、消息报头、请求正文。
-
在接收和解释请求消息后,服务器返回一个HTTP响应消息(Request Mesage)。 HTTP 响应消息也由三部分组成,分别是状态行、消息报头、响应正文。
-
状态码由三位数宇组成,第 一位数字定义了响应的类别,有以下5种可能取值。
1xx:指示信息,表示请求已接收,继续处理。
2xx:成功,表示请求已被成功接收、理解、接受。
3xx:重定向,要完成请求必须进行更进一步的操作。
4xx:客户端错误,请求有语法错误或请求无法实现。
5xx:服务器端错误,服务器未能实现合法的请求。
- 常见状态码:
3. HTTP分析实验
【实验目的】
(1) 掌握 HTTP 协议获取网页的流程。
(2) 了解 HTTP 请求报文和响应报文的格式,并进行报文分析。
(3) 了解 HTTP 1.0 和 HTTP 1.1的区别。
【实验原理】
HTTP 协议定义了 Web 客户端(浏览器)如何向 Web 站点请求 Web 页面以及 Web 服务器如何将 Web 页面传送给客户机。具体而言,这是通过客户端发送 HTTP 请求报文和HTTP 响应报文实现的。当用户请求一个页面时(在浏览器中输人网址或者单击网页某一个链接),浏览器会向 Web 服务器发出对该页及其引用的相关对象的 HTTP 请求报文,服务器响应这些请求报文,生成 HTTP 响应报文,并将请求的对象附在 HTTP 响应报文后发送给客户端。
由于网页文档的传输需要可靠性的保证,所以 HTTP 协议使用传输层的 TCP 协议作为载体。TCP 协议是一个面向连接的协议,提供可靠的数据传输,HTTP 协议在默认的情况下使用TCP的80端口。
HTTP 协议是无状态的协议,即当服务器收到某个客户端发送的 HTTP 请求报文时, 并不清楚该客户端是否曾经发送过相同的 HTTP 请求报文,即 HTTP 协议本身不会维护客户端和服务器端的状态。
非持久连接方式与网页上的每个对象都需要建立一个TCP 连接,效率不高,HTTP 1. 0 只能使用非持久连接方式。持久连接方式使用一个TCP 连接,其流水线作业方式比非流水线作业方式效率高。HTTP 1. 1既能使用非持久连接方式又能使用持久连接方式,默认方式下使用持久连接的流水线作业方式。持久连接的缺点是对服务器的性能要求比较高。因为服务器对于每个TCP 的连接都需要花费较长的时间,而每个TCP 连接都需要占用服务器响应的资源, 非持久连接由于连接释放得快,资源的释放也相对快,并且连接客户的数量对于持久连接而言相对要少一些。
HTTP报文包括HTTP请求报文和HTTP响应报文。这两种报文在实际的传输中都是以 ASCII 码方式编码的。HTTP 报文格式反映了HTTP 协议的核心内容,包括客户端如何向服务器端请求对象,通信双方需要协商哪些内容等。
【实验内容】
-
步骤 1:打开 Wireshark,选择监听网卡,设置过滤规则(只捕获 HTTP 的报文),开始侦听。
-
步骤 2:打开浏览器,输人网址(例如 www.baidu.com),捕获数据
-
步骤 3:分析捕获的数据包,回答以下问题。
(1) 在捕获的报文中,共有几种 HTTP 报文?客户机与服务器之间共建立了几个连接?服务器和客户机分别使用了哪几个端口?
(2) 在捕获的 HTTP 报文中,选择一个 HTTP 请求报文和对应的 HTTP 应答报文,按图 2-8 所示分析它们的字段,并将分析结果填人表 2-4 和表 2-5 中。
(3) 综合分析捕获的报文,理解HTTP协议的工作过程,将结果填人表2-6中。
(4) 在第1个和第3个HTTP会话中,Web服务器对 Web客户端GET请求的响应是什么?
【实验思考】
(1) 实验中哪台计算机启动了 HTTP 会话?是如何启动的?
(2) 哪台计算机首先发出了结束 HTTP 会话的信号? 是如何发出的?
(3) GET 方法取回由 Request-URI标识的信息,POST 方法可以用于提交表单。请寻找一个有表单提交特征的网页,访问该网页,捕获数据包并分析请求方法中的 GET 和POST 方法。
4. HTTP分析实验可能遇到的问题
4.1 捕捉不到http报文
可能原因:不是无法抓取 http包,是抓到了没有解密,显示还是TLS。
解决方法:
Windows系统参考:为什么我的 Wireshark 抓不到/抓不全 HTTP 数据包 ?
MAC系统参考:Mac电脑安装配置Wireshark 抓包工具,解决Https无法抓包问题
4.2 百度是使用HTTPS协议进行传输
我们以为捕获不到http报文,实际上是因为网站加密了,通过上述方法得到http报文中可能有许多看不懂的地方,而且发现使用的端口号是443而不是80,这是因为大部分网站都是使用HTTPS协议进行传输,以提高数据传输的安全性。
但是我们无法通过Wireshark进行捕捉数据包,因此,我们可以尝试一些使用HTTP的网站。
尽管如此,仍然有一些HTTP开头的网站存在。这些网站可能是因为运营成本较低、没有很多个人信息输入需求,或者本身不涉及敏感信息等原因。比如旅游网站“马蜂窝”(http://www.mafengwo.cn/)。
4.3 Wireshark获得数据太多如何筛选
- 我们可以通过网站的前端页面获得网站的IP地址:
通过Wireshark中的过滤器,筛选出该IP的数据:
此时就能清晰的看到http请求报文,以及http响应报文。
进行对应分析即可:
4.4 http报文字段含义不清楚
General(通用部分):
- Request URL:请求的URL地址,即请求的目标资源。
- Request Method:请求方法,表示客户端对资源的请求操作。常见的方法有GET、POST、PUT、DELETE等。
- Status Code:状态码,表示服务器对请求的处理结果。常见的状态码有200 OK(成功)、404 Not Found(未找到资源)、500 Internal Server Error(服务器内部错误)等。
- Remote Address:这个字段不是HTTP标准中的一部分,而是指示客户端的IP地址和端口号,表示请求的源IP地址。在HTTP请求中,这个字段显示客户端的IP地址和端口号,通常是代理服务器或负载均衡器的地址,而不是最终用户的真实IP地址。
- Referrer Policy:Referrer是HTTP请求头部的一个字段,用于指示请求的来源URL,即访问当前页面的前一个页面的URL。Referrer Policy则是为了控制Referrer头部的发送情况而定义的策略。Referrer Policy可以设置为no-referrer(不发送Referrer头部)、no-referrer-when-downgrade(只在从HTTPS网页导航到HTTP网页时不发送Referrer头部)、origin(仅发送源信息,但不包含路径等具体内容)、strict-origin(仅在协议安全的情况下发送完整的源信息)等。
Request Headers(请求头部):
- User-Agent:用户代理,标识发起请求的客户端应用程序或设备类型,例如浏览器名称和版本。
- Accept:客户端可接受的响应内容类型,通常是MIME类型(例如text/html、application/json等)。
- Accept-Language:客户端可接受的语言类型,用于指定客户端希望接收的语言版本。
- Cookie:包含客户端发送给服务器的HTTP cookie信息,通常用于会话管理。
- Referer:表示请求的来源URL,即访问当前页面的前一个页面的URL,跨域时基于安全不会给全
- Authorization:用于在请求中传递认证信息,例如JWT或者原始的用于HTTP基本认证的用户名和密码。
- Cache-Control:缓存控制指令,用于指定缓存策略,例如no-cache(不使用缓存)或max-age(缓存的最大有效时间)等。
- Host:表示请求的目标主机的域名或IP地址。在HTTP/1.1中,Host头部是必需的,用于指定请求的目标服务器和端口号。例如:www.example.com:8080
- Origin:Origin头部用于指示请求的来源,即发起请求的网页所在的源,包含协议、域名和端口号。它通常用于跨域请求中,由浏览器自动添加。例如:http://www.origin.com
- Connection:Connection头部用于控制是否在请求完成后保持与服务器的连接。它是一个非标准的HTTP头部,在HTTP/1.1中引入了持久连接(Persistent Connection)后,取代了早期版本的Proxy-Connection和Keep-Alive头部。Connection头部的取值通常有几种:
- close:请求完成后关闭与服务器的连接。即,每次请求都会新建一个连接。
- keep-alive:请求完成后保持与服务器的连接,以便在同一连接上进行多个请求。这是持久连接的一种方式,减少了连接的建立和关闭的开销,提高了请求的效率。
- Upgrade:允许客户端和服务器协商更高级的协议。例如,WebSocket可以通过此头部实现从HTTP协议升级到WebSocket协议。
- 在现代的HTTP/1.1中,持久连接是默认启用的,即默认使用keep-alive,除非显示指定close,因此通常情况下可以不必手动添加Connection头部。
Response Headers(响应头部):
- Content-Type:响应的内容类型,表示服务器返回的数据的MIME类型,例如text/html、application/json等。
- Content-Length:响应的内容长度,表示服务器返回数据的字节数。
- Set-Cookie:设置HTTP cookie,服务器通过该头部向客户端发送新的cookie信息,用于会话管理。
- Expires:指定响应内容的过期时间,即缓存失效时间点。
- Cache-Control:缓存控制指令,用于指定缓存策略,例如no-cache(不缓存)或max-age(缓存的最大有效时间)等。
- Server:指示服务器软件的名称和版本。
4.5 http协议工作过程怎么填写
可以参考:
5. DNS协议
DNS(Domain Name System,域名系统)用于命名组织到域层次结构中的计算机和网络服务。
DNS 协议分成包头和数据两部分。如图所示,该报文由12B的首部和4个长度可变的字段组成:
各字段含义:
- 标识字段:由客户程序设置并有服务器返回结果,16 位,在对应的query和response报文中有着相同的ID,可以在捕获到的包中配对请求和应答报文,提取相关信息,同时也可以根据它们的时间戳大致估计DNS的响应时间。
- 标志字段:16 位,结构如图所示:
标志字段各字段解释如下:
QR(查询/响应):占 1B,定义报文类型。若为0则表示是查询报文,否则就是响应报文。
OpCode:占4B,定义查询或响应的类型。若为0则表示是标准的,若为 1则表示是反向的,若为2则表示是服务器状态请求。
AA(授权回答):占1B,当它置位时(即值为 1),表示名字服务器是权限服务器,它只用在响应报文中。
TC(截断的):占 1B,当它置位时,表示响应已超过512B并已截断。
RD(要求递归):占 1B,当它置位时,表示客户希望得到递归回答。它在查询报文中置位,在响应报文中重复置位。
RA(递归可用):占 1B,当它在响应报文中置位时,表示可得到递归响应,它只能在响应报文中置位。
保留:占 1B,置为 0。
未知1与未知2均为新增字段,各占 1B。
RCode:占4B,表示在响应中的差错状态,只有权限服务器才能做出这个判断。
- 问题数字段:
查询名:要查找的名字,它由一个或者多个标示符序列组成。每个标示符以首字节数的计数值说明该标示符长度,每个名字以 0 结束。计数字节数必须在 0~63 之间。该字段无须填充字节。
查询类型:每个问题有一个查询类型,通常查询类型为 A(由名字获得 IP 地址)或者PTR(获得 IP 地址对应的域名)。
类域(class):置为0x0001 即可。
- 资源记录部分:是DNS协议的最后了个字段,回答字段、授权宇段和附加信息字段均采用资源记录RR(Resource Record)的相同格式。
6. DNS协议分析实验
【实验目的】
(1) 学会在客户端使用 nslookup 命令进行域名解析
(2) 通过协议分析软件掌握 DNS 协议的报文格式
【实验原理】
DNS(Domain Name System,域名系统)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址。在因特网中向主机提供域名解析服务的机器即为 DNS 服务器。
DNS 基于 IP 协议中的 UDP 协议,端口号为 53。目前 DNS 分布式查询方式一般采用递归或递归迭代相结合的方法。当在浏览器的地址栏中输人某一网址时,浏览器首先会向默认的本地域名服务器发出 DNS 请求报文,DNS请求报文中包括请求的域名和请求的类别。若本地域名服务器能够找到对应的 IP 地址,便返回一个 DNS 相应报文,其中包括域名以及一个或多个对应的IP 地址。若本地域名服务器不能找到,则会向上级根域名服务器发出域名解析请求,根域名服务器会返回一个 IP 地址告诉本地域名服务器应该到哪里请求所需域名的解析,本地域名服务器根据得到的 IP 向对应的域名服务器发出请求,最终获得域名和对应的 IP。
DNS的正向解析用于通过域名解析 IP 地址,反向解析用于通过 IP 地址获得域名。DNS 采用一个称为资源记录的数据结构描述某个域名和对应IP。每个资源记录是一个五元组,包括域名(Domain name)、生存时间(TTL)、类别类型和值。
- 生存时间用于指示该记录的稳定程度,极为稳定的信息会被分配一个很大的值,而极不稳定的信息则会被分配一个较小的值。
- 类别字段对于 Internet 而言总是IN,事实上用于其他非 Internet 的情况几乎没有。类型字段指出了记录的类型,主要的类型包括 A,表示一台主机的IP 地址;MX,邮件服务器;NS,名字服务器;Cname,别名等。
nslookup 是一个监测网络中DNS服务器是否能正确实现域名解析的命令行工具。适用于Linux/UNIX和Windows 平台,用于简单检测DNS服务器的工作是否正常,也是排除 DNS服务器故障的一项重要手段。nslookup 指令适用于正向域名解析和反向域名解析。本实验通过nslookup 检测服务器的配置,并利用协议分析软件Wireshark捕获分析nslookup命令产生的DNS数据包。
nslookup查询命令格式为 nslookup 域名
,主要产生两个操作,一是根据本地DNS服务器的IP地址获得本地 DNS服务器的名字; 二是根据输人查询的域名查找该域名的 IP地址。
【实验内容】
在一台连接 Internet 的计算机上进行下列实验。
- 步骤 1:启动 Wireshark,选定侦听网卡,开始抓包。
- 步骤 2:切换到命令提示窗口,在命令提示符下输人
nslookup www.baidu.com
,分析执行结果。 - 步骤 3:分析 Wireshark 捕获的数据,观察 nslookup 的通信过程,正常情况下能够捕获到 4 帧,试具体分析捕获的数据包中 DNS 的报文格式细节。
- 步骤 4:继续使用协议分析仪进行数据的捕获,再次访问 www.baidu.com,观察此时是否还有 DNS 请求?
- 步骤 5:关闭浏览器后再重新打开,访问一个尚未访问过的网站,例如 www.sohu.com,观察此时是否有 DNS 请求?为什么?
- 步骤 6:在Windows 系统的命令提示符下运行 ipconfig /displaydns,显示本机缓冲区中的 DNS 解析内容。
- 步骤 7:在 Windows 系统的命令提示符下运行 ipconfig /flushdns,则可以清除本机的 DNS 缓存记录。
- 步骤 8:关闭浏览器再打开,访问刚才打开过的网站,观察是否有 DNS 请求?为什么?
【实验思考】
(1) DNS 协议中的资源记录 RR(Record Resource)包含哪些内容?
(2) DNS 除了返回需查找的域名还可能返回哪些内容?
(3) 反复实验,判断一个域名是否可以对应多个 IP 地址?域名与 IP 地址之间是否有对应的关系?
(4) 若实验中无法进行 DNS 解析,请写出导致问题的原因及解决办法
(5) DNS 协议何时用 UDP?何时用 TCP?
7. DNS协议分析实验可能遇到的问题
7.1 不了解nslookup命令如何使用
可以参考:nslookup 入门命令详解
7.2 如何在Wireshark中对应DNS协议内容
首先在过滤器中输入dns
,然后查看后面的info信息,看看哪些是自己发送的DNS请求,最后对应信息进行分析。
相关文章:

计算机网络实验4:HTTP、DNS协议分析
文章目录 1. 主要教学内容2. HTTP协议3. HTTP分析实验【实验目的】【实验原理】【实验内容】【实验思考】 4. HTTP分析实验可能遇到的问题4.1 捕捉不到http报文4.2 百度是使用HTTPS协议进行传输4.3 Wireshark获得数据太多如何筛选4.4 http报文字段含义不清楚General(…...

敏捷项目管理如何做好Sprint Backlog?迭代管理
什么是Sprint Backlog? Sprint Backlog是Scrum的主要工件之一。在Scrum中,团队按照迭代的方式工作,每个迭代称为一个Sprint。在Sprint开始之前,PO会准备好产品Backlog,准备好的产品Backlog应该是经过梳理、估算和优先…...

实验三 图像分割与描述
一、实验目的: (1)进一步掌握图像处理工具Matlab,熟悉基于Matlab的图像处理函数。 (2)掌握图像分割方法,熟悉常用图像描述方法。 二、实验原理 1.肤色检测 肤色是人类皮肤重要特征之一ÿ…...
npm使用国内淘宝镜像的方法(两种)
一、通过命令配置 1、设置淘宝镜像源 npm config set registry https://registry.npm.taobao.org/ 2、设置官方镜像源 npm config set registry https://registry.npmjs.org 3、查看镜像使用状态: npm config get registry 如果返回https://registry.npm.taobao.org…...

05应用程序设计和文件操作
一、 给应用程序设置菜单栏 比如: 在qt中,如果想要使用菜单栏功能,那么界面的基类要选择QMainWindow,不能选择QWidget QDialog 实现菜单栏步骤如下: 第一步:在UI设计师,直接双击菜单栏 第二步:在UI设计师,修改文本内容和其他设置 进行设置 设置的效果图如下: …...

【果树农药喷洒机器人】Part8:果树对靶变量喷药实验
📢:博客主页 【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉 📢:内容若有错误,敬请留言 📝指正…...
framework.beans.factory.annotation.Autowired(required=true)}
将其它项目复制过来,启动后会报错 15:24:55.880 [main] ERROR o.s.b.SpringApplication - [reportFailure,843] - Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name containerDataHandleC…...

【应用笔记】使用 CW32 实现电池备份(VBAT)功能
前言 电池备份(VBAT)功能的实现方法,一般是使用 MCU 自带的 VBAT 引脚,通过在该引脚连接钮扣电池,当系统电源因故掉电时,保持 MCU 内部备份寄存器内容和 RTC 时间信息不会丢失。 本文档介绍了如何基于 C…...

探讨uniapp的navigator 页面跳转问题
navigator 页面跳转。该组件类似HTML中的<a>组件,但只能跳转本地页面。目标页面必须在pages.json中注册。 "tabBar": {"color": "#7A7E83","selectedColor": "#3cc51f","borderStyle": "bl…...
使用Epoll实现高效的多路I/O转接
文章目录 概述1. 理解Epoll机制2. Epoll的三个主要函数3. 基于Epoll实现多路I/O转接4. 总结 概述 在网络编程中,高效地处理大量并发连接是提升系统性能的关键。传统的多线程或多进程模型在这种情况下可能会导致资源消耗过大,而Epoll(事件驱动…...

流程挖掘in汽车丨宝马的流程效能提升实例
汽车行业在未来10年里,可能会面临比过去50年更多的变化。电动化、智能化、共享化和自动驾驶等方面的趋势可能给企业流程带来以下挑战: 供应链管理-电动化和智能化的发展可能导致供应链中的零部件和系统结构发生变化,企业需要重新评估和优化供…...

微信小程序实现当前页面更新上一个页面
日常项目中需要实现的一个价格脱敏功能:通过点击页面二中的查看完整信息 点击回退按钮实现页面一中的价格显露出来 通过查询了大量资料发现 大多数都是通过调用上一个接口的onload 或者onshow 实现视图更新 经测试后 发现 无法实现 只能更改数据 无法更新视图 实现…...

基于PSO-KELM的时间序列数据预测(含对比实验)
前段时间有粉丝私信想让我出一期对时间序列预测的文章,所以今天它来了。 时间序列数据,如股指价格,具有波动性、非线性和突变的特点,对于这类数据的预测往往需要可靠强健的预测模型,而传统的机器学习算法如SVM、BP等…...

线性代数(二) 矩阵及其运算
前言 行列式det(A) 其实表示的只是一个值 ∣ a b c d ∣ a d − b c \begin{vmatrix} a & b\\ c & d\end{vmatrix} ad -bc acbd ad−bc,其基本变化是基于这个值是不变。而矩阵表示的是一个数表。 定义 矩阵与线性变换的关系 即得 ( a 11 a 12…...

【图像分类】理论篇(4)图像增强opencv实现
随机旋转 随机旋转是一种图像增强技术,它通过将图像以随机角度进行旋转来增加数据的多样性,从而帮助改善模型的鲁棒性和泛化能力。这在训练深度学习模型时尤其有用,可以使模型更好地适应各种角度的输入。 原图像: 旋转后的图像&…...
Centos下的tcpdump抓包用法
先查一下是否安装, 无的话装一下 (版本低的用yum install) : rpm -qa tcpdump dnf install tcpdump 1. 列出能抓包的网卡: tcpdump -D | --list-interfaces 2. 在eth0网卡上抓来源为10.1.1.1 的包, 只抓一个包 (-n这里是不解析DNS) : tcpdump -i eth0 -n src 10.1.1.1 -…...
自然语言处理从入门到应用——LangChain:记忆(Memory)-[记忆的存储与应用]
分类目录:《自然语言处理从入门到应用》总目录 使用SQLite存储的实体记忆 我们将创建一个简单的对话链,该链使用ConversationEntityMemory,并使用SqliteEntityStore作为后端存储。使用EntitySqliteStore作为记忆entity_store属性上的参数&am…...

微服务与Nacos概述-5
引入OpenFeign 添加依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>com.alibaba.cloud</groupId>…...

第九章 动态规划part08(代码随想录)
139.单词拆分 1. 确定dp[i][j] dp数组以及下标的含义一维dp数组的递推公式 dp[i] : 字符串长度为i的话,dp[i]为true,表示可以单词能被在字典中出现的单词组成。 dp[s.size()] true; 说明可以利用字典中出现的单词拼接出 s 。 2. 一维dp数组的递推公式…...
智能家居(1)---工厂模式实现灯光控制(继电器组)以及火灾报警模组的封装
采用工厂模式以面向对象的方式来封装各种设备模块,方便整合项目以及后期的维护和扩展 mainPro.c(主函数) #include <stdio.h> #include "controlDevice.h"struct Devices *pdeviceHead NULL; //设备工厂链…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...