爬虫基础(一)HTTP协议 :请求与响应
前言
爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。
今天的HTTP协议,会有助于我们更好的了解网络。
一、什么是HTTP协议
(1)定义
HTTP(超文本传输协议,HyperText Transfer Protocol)是用于在网络上进行数据通信的协议,尤其是用于网页的传输。
简单来说,就是专门把超文本数据从网络上传输到本地浏览器上的一个协议
我们也经常见它,比如网站前面的前缀:
当然,上图有些不太正确,但 HTTPS 其实是HTTP的升级版,二者其实差不太多。
(2)HTTPS
那么HTTPS到底有什么不同呢?
HTTPS的全称是Hypertext Transfer Protocol Secure。相较于HTTP多了一个Secure
所以我们应该知道,哪里升级了。
简单来说,就是在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性
Tips:HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。(了解即可)
(3)URI和URL
还有些专业术语,诸如URI和URL :
- URI(统一资源标识符):用于标识资源的字符串。
- URL(统一资源定位符):一种特定类型的URI,用于定位资源并提供如何访问这些资源的信息。
- URN:统一资源名称
顾名思义,URI让我们可以唯一标识一个资源。URL则让我们可以去定位一个资源。
比如一个网址https://www.example.com
我们可以把这整个链接叫做URI,因为这个网址标识了一个资源。
而这个链接,也叫做URL,因为这个网址的链接也同样定位了一个资源。
那他们怎么区分呢?
URI包括了URL,因为URI=URL和URN。
比如,一本书的编号111,这个编号就是URN。
所以该编号也可以叫做URI,因为它同样标识了一个资源,但是它不能叫做URL了,因为该编号并没有定位这个资源,我们只知道它叫什么,却不知道去哪里可以找到他。
二、HTTP请求过程
(1)请求过程
我们在网页最上面的导航栏上输入网址,按下回车,然后出现一个新网页。
这个过程就是浏览器向某网站发送了一个请求,然后网站进行处理,最后网站回馈一个响应,浏览器解析后展现出来。
(2)相关名词介绍
(注:以下名词了解即可)
为了更好的说明该过程,我们可以鼠标右键用检查功能来具体显示一下请求和响应:
然后切换到Network面板,再刷新一下网页:
即可看到很多行的东西,每一行就代表一次 请求-响应 过程
我们仔细观察这个界面的各列:
其中,各列含义如下
- Name:请求界面的名称
- Status:响应状态码,通过状态码显示,可以判定响应是否正常。
- Type:请求文档的类型。
- Initiator:请求源,用来标记是哪个对象或进程发起的请求。
- Size:请求资源大小(如果是缓存中提取的资源,该列显示from cache)
- Time:从发起请求到获得响应所花总时间。
- Waterfall:网络请求可视化瀑布流。
- (有时会有Protocol:请求协议类型,http1.1代表HTTP1.1版本,h2代表HTTP2.0版本)
若单击某列,则会显示更详细的信息:
在General部分:
- Request URL :请求的URL
- Request Method:请求方法
- Status Code:响应状态码
- Remote Address:远程服务器的地址和端口
- Referre Policy:为判别策略
- Response Headers:响应头
- Request Headers:请求头
以上名词可能有些说的不太清楚,现在我们具体来看一看各部分,到底是干什么的
三、请求部分
请求,即Request。
由用户发往服务器的信息。包括四大部分:请求方法、请求网址、请求头、请求体。
(1)请求方法
请求方法,客户端请求服务器时的方式
常见的有两种:GET请求、POST请求
比如:
GET请求:
请求获取指定资源,如请求页面返回内容
当我们在浏览器最上面输入网址并按下回车,这就是发起了GET请求。
POST请求:
向指定资源提交数据,通常用于表单提交或者上传文件。
当我们登陆网站,输入账号密码后,点击提交后,这就是发起了POST请求。
那么二者有什么具体区别呢?
- GET请求的参数包括在URL,POST请求的数据包括在请求体中。
所以如果打开某网站某板块某界面的某图片后,这时我们会在上面的网址中看到该图片的路径,这就是GET请求该图片的参数 - GET请求提交数据最大1024字节,POST请求没有限制。
所以综上,当我们提交账号密码时,最好选择POST,否则GET会将密码显示在网址中暴露哦~
当然除此之外,还有很多请求,不过并不常用,汇总如下:
- GET:请求获取指定资源。GET 请求不应包含请求体,且一般用于获取数据。
- POST:向指定资源提交数据,通常用于表单提交或者上传文件。POST 请求可以包含请求体,用于传送数据。
- PUT:向指定资源上传数据,通常用于更新资源的状态。PUT 请求一般是幂等的,即多次相同的请求会得到相同的结果。
- DELETE:请求删除指定资源。
- PATCH:部分更新指定资源的数据。与 PUT 的区别是,PATCH 只更新资源的一部分,而 PUT 会替换整个资源。
- HEAD:类似 GET 请求,但只获取响应的头部信息,不返回实际的资源数据。
- OPTIONS:请求服务器,询问支持哪些 HTTP 方法。常用于跨域请求中的预检请求。
(2)请求网址
网址格式如下:
协议://主机名:端口号/路径?查询字符串#片段标识符
说明:
- 协议(Scheme):指定访问资源所使用的协议。常见的协议包括:
http
或https
(超文本传输协议)、
ftp
(文件传输协议)、
mailto
(用于电子邮件地址)、
file
(本地文件) - 主机名(Host):指定资源所在的服务器的域名或 IP 地址。
通常为一个域名,如www.example.com
,
或者是 IP 地址,如192.168.1.1
。 - 端口号(Port)(可写可不写):指定服务器的端口,通常省略。
默认情况下:http
默认端口为 80、https
默认端口为 443。
如果指定了非默认端口,则需要在主机名后加上端口号,用冒号分隔,如www.example.com:8080
。 - 路径(Path):指定请求资源在服务器上的位置。
例如,/products/123
表示访问/products/123
这个路径的资源。 - 查询字符串(Query)(可写可不写):以
?
开头,包含一个或多个键值对,用于传递参数。
例如,?id=123&name=abc
,查询字符串由参数名和值组成,多个参数用&
分隔。 - 片段标识符(Fragment)(可写可不写):以
#
开头,指向文档中的一个特定位置。
用于指定页面内的某个部分。例如,#section2
指向页面的第二个部分。
举个例子:
https://www.example.com:8080/products/123?id=456&color=red#review
解释:
- 协议:
https
- 主机名:
www.example.com
- 端口号:
8080
- 路径:
/products/123
- 查询字符串:
?id=456&color=red
- 片段标识符:
#review
(3)请求头
请求头是 HTTP 请求中的一部分,它包含了关于客户端、请求以及数据的附加信息。
客户端通过它向服务器传递元数据,帮助服务器理解请求的内容、用户的偏好、客户端环境等。
举个例子:
请求头就像你在向别人请求东西时提供的一些附加信息。
假设你在网上买东西,除了告诉商家你想买的产品,还会提供一些其他信息,比如:
你用的是什么设备(是手机还是电脑)
你能接受的商品类型(比如希望商品图片清晰,或者只想看某种品牌的商品)
这些附加信息就像是请求头里的内容,它们帮助商家(服务器)了解你具体的需求,确保你能收到最合适的产品。
所以你要访问一个网页,你的请求头可能包含以下信息:
(注:了解即可)
1. Host
-
指定请求的服务器域名或 IP 地址。从 HTTP/1.1 版本开始,这是必需的头部字段。
-
示例:
Host: www.example.com
2. User-Agent
-
简称UA。表示发送请求的客户端软件类型(如浏览器、操作系统等)。爬虫时加上此部分可以伪装成浏览器。
-
示例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
3. Accept
-
指定客户端能够处理的响应内容类型。通常用于指定请求的数据格式
-
示例:
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp,*/*;q=0.8
4. Accept-Language
-
告诉服务器客户端能够理解的语言。例如,可以告诉服务器希望获取中文或英文的内容。
-
示例:
Accept-Language: en-US,en;q=0.5
5. Content-Type
-
仅在请求体中有数据时使用,指定请求体的媒体类型。例如,表单提交时,数据的格式是
application/x-www-form-urlencoded
,上传文件时是multipart/form-data
。 -
示例:
Content-Type: application/json
-
用于身份验证,携带认证信息,如令牌或基本认证信息。常用于需要用户验证的资源。
-
示例:
Authorization: Bearer <token>
-
客户端向服务器发送的 Cookie 信息,服务器根据该信息识别用户状态(如登录状态)。
-
示例:
Cookie: sessionid=abc123; user=JohnDoe
8. Accept-Encoding
-
告诉服务器客户端支持的编码方式,通常用于压缩响应体。
-
示例:
Accept-Encoding: gzip, deflate, br
9. Connection
-
表示是否保持持久连接,决定在请求完成后是否保持与服务器的连接。
-
示例:
Connection: keep-alive
10. Referer
-
表示来自哪个 URL 的请求,通常用于了解用户访问的来源页面。
-
示例:
Referer: https://www.example.com/previous-page
(4)请求体
请求体是 HTTP 请求中的一部分,主要用于携带客户端发送给服务器的实际数据内容。
可以理解为你在向服务器请求某项服务时,所附带的具体信息或者数据。
举个例子:
如果你填写了一个网上表单,提交了你的个人信息(比如名字、地址、电子邮件等),这些信息就是通过请求体发送到服务器的。
(Tips:对于请求体来说,一般是POST请求的表单数据,对于GET请求,请求体为空)
对于请求头和请求体的区别?
- 请求头:
包含一些附加信息(比如浏览器类型、请求语言、是否有登录状态等)
帮助服务器理解如何处理请求。 - 请求体:
包含实际的数据内容,是请求的核心部分
比如你提交的表单数据、上传的文件等。
四、响应部分
响应,即Response。
由服务器给用户的信息。包括三部分:响应状态码、响应头、响应体。
(1)响应状态码
就像前文所说,这就是根据给出的数字,来判定响应是否正常。
比如,200表示正常、404表示找不到等,都是常见状态码。
下面汇总了常见的状态码及错误原因:
1. 1xx:信息性状态码
这些状态码表示请求已被接收,正在继续处理。
-
100 Continue:表示客户端可以继续发送请求的其余部分(通常用于大文件上传时,客户端先发送请求头,服务器返回 100 状态码,客户端再发送请求体)。
2. 2xx:成功状态码
这些状态码表示请求已成功被处理。
-
200 OK:请求成功,服务器返回请求的资源。
-
201 Created:请求成功,服务器创建了新的资源(通常用于 POST 请求)。
-
204 No Content:请求成功,但服务器没有返回任何内容(常见于删除操作)。
3. 3xx:重定向状态码
这些状态码表示请求需要进一步的操作才能完成(通常是页面重定向)。
-
301 Moved Permanently:请求的资源已被永久移到新的位置,响应中会带有新的 URL。
-
302 Found:请求的资源临时移动到其他位置,客户端会按照新 URL 继续请求。
-
304 Not Modified:资源未修改,客户端可以使用缓存的副本。
4. 4xx:客户端错误状态码
这些状态码表示请求有错误,客户端需要修正请求后再试。
-
400 Bad Request:请求无效,服务器无法理解请求。
-
401 Unauthorized:请求未授权,通常需要提供身份验证(如登录)。
-
403 Forbidden:服务器拒绝请求,即使用户已认证。
-
404 Not Found:请求的资源不存在或无法找到。
-
405 Method Not Allowed:请求方法不被允许(例如,服务器只允许 GET 请求,但客户端使用了 POST 请求)。
5. 5xx:服务器错误状态码
这些状态码表示服务器未能完成有效请求,通常是服务器本身的问题。
-
500 Internal Server Error:服务器遇到错误,无法完成请求。
-
502 Bad Gateway:服务器作为网关或代理时,收到来自上游服务器的无效响应。
-
503 Service Unavailable:服务器暂时无法处理请求,通常是因为服务器超负荷或正在维护。
- 504 Gateway Timeout:服务器作为网关或代理时,未能在规定时间内从上游服务器获取响应。
(2)响应头
响应头是服务器在响应客户端请求时,附加在响应消息中的一些信息。
这些信息主要用于描述服务器的处理结果、返回的数据类型、缓存策略等。
可以理解为服务器对客户端请求的“回馈”信息,告诉客户端服务器的状态、资源类型等。
下面为常用响应头:
-
Content-Type:指定响应体的内容类型(即数据的格式)。例如:
Content-Type: text/html
:返回的是 HTML 内容。Content-Type: application/json
:返回的是 JSON 格式数据。Content-Type: image/png
:返回的是 PNG 图片。
-
Content-Length:表示响应体的大小,以字节为单位
-
Date:返回响应的时间戳,表示服务器响应的日期和时间
-
Server:表示服务器的类型和版本
-
Set-Cookie:服务器向客户端发送的 cookie,用于保存客户端的状态信息。
(3)响应体
响应体是服务器在响应客户端请求时,返回给客户端的实际数据内容。
举个例子:
比如你请求一个网页时,响应体就是返回的 HTML 内容;你请求某个数据接口时,响应体就是返回的 JSON 数据。
如下图所示:
当我们打开Preview中,看到的蓝框内的内容,就是响应体。
在爬虫时,我们要做的,就是解析它!!!
它的常见内容有:
-
HTML 页面:如果你请求一个网页,响应体通常是该网页的 HTML 内容。
例如,浏览器向服务器请求https://example.com
,服务器返回一个 HTML 页面,响应体就是网页的 HTML 代码。 -
JSON 数据:在许多现代 Web 应用中,通常使用 JSON 格式。
例如,发送一个 GET 请求到一个数据接口,返回的响应体是 JSON 数据:
{ "name": "John Doe", "age": 30 } -
图片或文件:如果请求的是一个文件(如图片、视频等),响应体包含文件的内容。
例如,浏览器请求一个 PNG 图片,服务器返回响应体,其中包含该图片的二进制数据。 -
文本内容:如果请求的是纯文本数据,响应体可能直接是一些文本内容。
相关文章:
爬虫基础(一)HTTP协议 :请求与响应
前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议ÿ…...
拼车(1094)
1094. 拼车 - 力扣(LeetCode) 解法: class Solution { public:bool carPooling(vector<vector<int>>& trips, int capacity) {uint32_t passenger_cnt 0;//将原数据按照from排序auto func_0 [](vector<int> & …...
Ubuntu全面卸载mysql
如果你已经看到whereis mysql输出了与MySQL相关的路径,说明MySQL仍然存在于系统中。要卸载MySQL,可以按照以下步骤操作,确保完全删除所有相关的文件和配置: 1. 停止MySQL服务 首先,停止MySQL服务: sudo …...
@Inject @Qualifier @Named
Inject Qualifier Named 在依赖注入(DI)中,Inject、Qualifier 和 Named 是用于管理对象创建和绑定的关键注解。以下是它们的用途、依赖配置和代码示例的详细说明: 1. 注解的作用 Inject:标记需要注入的构造函数、字段…...
OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?
找了一圈发现官方的文档都是最新的,3.2很多API都不支持,比如获取OhosAppContext,通过OhosAppContext来获取应用版本号,最终是通过读取app.json5的文件内容来读取版本号,最终修改entry下的hvigorfile.ts如下,…...
初始化mysql报错cannot open shared object file: No such file or directory
报错展示 我在初始化msyql的时候报错:mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory 解读: libaio包的作用是为了支持同步I/O。对于数据库之类的系统特别重要,因此…...
Vue.js组件开发-实现全屏背景图片滑动切换特效
使用 Vue 实现全屏背景图片滑动切换特效的详细步骤、代码、注释和使用说明。 步骤 创建 Vue 项目:使用 Vue CLI 创建一个新的 Vue 项目。准备图片资源:准备好要用于背景切换的图片,并将它们放在项目的合适目录下。编写 HTML 结构࿱…...
AI在自动化测试中的伦理挑战
在软件测试领域,人工智能(AI)已经不再是遥不可及的未来技术,而是正在深刻影响着测试过程的现实力量。尤其是在自动化测试领域,AI通过加速测试脚本生成、自动化缺陷检测、测试数据生成等功能,极大提升了测试…...
FreeRTOS的任务创建和删除
1,任务创建和删除的API函数 任务的创建和删除本质就是调用FreeRTOS的API函数 动态创建任务: 任务的任务控制块以及任务的栈空间所需的内存,均由 FreeRTOS 从 FreeRTOS 管理的堆中分配。 静态创建任务: 任务的任务控制块以及任务的…...
【C++】STL容器使用与实现详解:vector
文章目录 Ⅰ. vector的介绍和使用一、vector的介绍二、vector的使用 (只列出比较重要的,其他的需要时查文档)1. vector的定义2. vector iterator(迭代器)的使用3. vector 容量问题4. vector 增删查改5. 正确释放 vecto…...
【Block总结】动态蛇形卷积,专注于细长和弯曲的局部结构|即插即用
论文信息 标题: Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation 作者: 戚耀磊、何宇霆、戚晓明、张媛、杨冠羽 会议: 2023 IEEE/CVF International Conference on Computer Vision (ICCV) 发表时间: 2023年10月…...
物业管理软件引领社区智能化转型提升服务效率与居民生活质量
内容概要 物业管理软件的出现,标志着社区管理方式的一场革命,它不仅仅是一个工具,更是推动智能化转型的关键助力。通过高效的管理功能,物业管理软件在优化服务流程的同时,也提升了居民的生活质量和社区的整体发展活力…...
论文阅读(十三):复杂表型关联的贝叶斯、基于系统的多层次分析:从解释到决策
1.论文链接:Bayesian, Systems-based, Multilevel Analysis of Associations for Complex Phenotypes: from Interpretation to Decision 摘要: 遗传关联研究(GAS)报告的结果相对稀缺,促使许多研究方向。尽管关联概念…...
线性调整器——耗能型调整器
线性调整器又称线性电压调节器,以下是关于它的介绍: 基本工作原理 线性调整器的基本电路如图1.1(a)所示,晶体管Q1(工作于线性状态,或非开关状态)构成一个连接直流源V和输出端V。的可调电气电阻,直流源V由60Hz隔离变压器(电气隔离和整流&#…...
梯度提升用于高效的分类与回归
使用 决策树(Decision Tree) 实现 梯度提升(Gradient Boosting) 主要是模拟 GBDT(Gradient Boosting Decision Trees) 的原理,即: 第一棵树拟合原始数据计算残差(负梯度…...
使用Ollama和Open WebUI快速玩转大模型:简单快捷的尝试各种llm大模型,比如DeepSeek r1
Ollama本身就是非常优秀的大模型管理和推理组件,再使用Open WebUI更加如虎添翼! Ollama快速使用指南 安装Ollama Windows下安装 下载Windows版Ollama软件:Release v0.5.7 ollama/ollama GitHub 下载ollama-windows-amd64.zip这个文件即可…...
2025年1月个人工作生活总结
本文为 2025年1月工作生活总结。 研发编码 使用sqlite3命令行查询表数据 可以直接使用sqlite3查询数据表,不需进入命令行模式。示例如下: sqlite3 database_name.db "SELECT * FROM table_name;"linux shell使用read超时一例 先前有个编译…...
Windows环境安装nvm,并使用nvm管理nodejs版本教程
目录 1.nvm安装步骤 2.验证nvm是否安装成功 3.查看本地可以安装的所有版本 4.安装特定nodejs版本 5.配置nvm镜像 6.使用特定nodejs版本 7.给nodejs配置镜像和环境变量 8.查看本地安装的所有版本(* 表示当前版本) 9.卸载指定版本的nodejs 前端开发中,不…...
C++中常用的排序方法之——冒泡排序
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C中常用的排序方法之——冒泡排序的…...
SQL进阶实战技巧:如何分析浏览到下单各步骤转化率及流失用户数?
目录 0 问题描述 1 数据准备 2 问题分析 3 问题拓展 3.1 跳出率计算 3.2 计算从浏览商品到支付订单的不同路径的用户数,并按照用户数降序排列。 往期精彩 0 问题描述 统计从浏览商品到最终下单的各个步骤的用户数和流失用户数,并计算转化率 用户表结构和…...
NLP模型大对比:Transformer >Seq2Seq > LSTM > RNN > n-gram
结论 Transformer 大于 传统的Seq2Seq 大于 LSTM 大于 RNN 大于 传统的n-gram n-gram VS Transformer 我们可以用一个 图书馆查询 的类比来解释它们的差异: 一、核心差异对比 维度n-gram 模型Transformer工作方式固定窗口的"近视观察员"全局关联的&q…...
接口技术-第5次作业
目录 作业内容 解答 一、填空题 二、综合题 1.采用AD570通过82C55A与CPU接口,82C55A的端口地址为300H~303H,完成用查询方式采集250个数据,送到2000H开始的存储单元存储。绘制电路连接图(AD570的4种主要信号线都要标出)。 2…...
实战技巧:如何快速提高网站的收录比例?
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/28.html 快速提高网站的收录比例是网站优化中的重要目标之一。以下是一些实战技巧,可以帮助你实现这一目标: 一、内容优化 高质量原创内容: 确保网站内…...
WEB集群6-10天
第六天 nginx编译安装 全新的进行编译安装 [rootweb-1 ~]# mkdir /nginx [rootweb-1 ~]# cd /nginx/ [rootweb-1 nginx]# ls [rootweb-1 nginx]#curl -O https://nginx.org/download/nginx-1.26.1.tar.gz解压源码包 [rootweb-1 nginx]#tar xf nginx-1.26.1.tar.gz [rootw…...
10.共享内存 信号量集 消息队列
10.共享内存 信号量集 消息队列 **1. IPC对象操作通用框架****2. 共享内存(Shared Memory)****3. 信号量集(Semaphore)****4. 消息队列(Message Queue)****5. 练习与作业****6. 总结** 1. IPC对象操作通用框…...
玩转大语言模型——使用langchain和Ollama本地部署大语言模型
系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…...
数据结构与算法学习笔记----容斥原理
数据结构与算法学习笔记----容斥原理 author: 明月清了个风 first publish time: 2025.1.30 ps⭐️介绍了容斥原理的相关内容以及一道对应的应用例题。 Acwing 890. 能被整除的数 [原题链接](890. 能被整除的数 - AcWing题库) 给定一个整数 n n n和 m m m个不同的质数 p 1 …...
Appium介绍
在使用不同版本的Appium包进行自动化测试时,出现警告问题可能是由于版本不兼容、配置不正确等原因导致的。下面将详细介绍解决这些问题的步骤,确保模拟器能够正常启动,并能在Appium查看器中同步显示。 1. 环境准备 首先,确保你已…...
doris:Bitmap
BITMAP 类型可以在 Duplicate 表、Unique 表、Aggregate 表中使用,只能作为 Key 类,无法作为 Value 列使用。在 Aggregate 表中使用 BITMAP 类型,其建表时必须使用聚合类型 BITMAP_UNION。用户不需要指定长度和默认值。长度根据数据的聚合程度…...
gitee——报错修改本地密码
有时候当我们向远端push本地的仓库时会有一些报错的行为。 如下: 这是因为我们在gitee修改了密码时,本地还没有更新提交,总是报错 解决修改密码报错 如下: 1.在本地点击搜索栏找到控制面板 步骤如下...
Leetcode 45. 跳跃游戏 II
这题是一个动态规划问题,首先我先说一下自己的动态规划解题步骤: 1,首先需要明确动态规划数组的含义:这个是根据题目来定的,这一个题目的数组含义:dp【i】指的是从0跳到i所需要的最小的步骤。 2ÿ…...
ROS2---基础操作
工作空间(workspace) workspace是一个存放项目开发相关文件的文件夹。例如我们要开发一个机器人,我们可以创建一个工作空间,然后存放这个机器人不同功能的包(感知(雷达,相机等),运动࿰…...
【Leetcode 每日一题】350. 两个数组的交集 II
问题背景 给你两个整数数组 n u m s 1 nums_1 nums1 和 n u m s 2 nums_2 nums2,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值…...
第13章 深入volatile关键字(Java高并发编程详解:多线程与系统设计)
1.并发编程的三个重要特性 并发编程有三个至关重要的特性,分别是原子性、有序性和可见性 1.1 原子性 所谓原子性是指在一次的操作或者多次操作中,要么所有的操作全部都得到了执行并 且不会受到任何因素的干扰而中断,要么所有的操作都不执行…...
STM32 PWMI模式测频率占空比
接线图: PWMI基本结构 代码配置: 与上一章输入捕获代码一样,根据结构体,需要在输入捕获单元再配置一个通道。我们调用一个函数 这个函数可以给结构体赋值,当我们定义了一遍结构体参数,再调用这个函数&…...
无心剑七绝《恭贺新春》
七绝恭贺新春 软件通灵万象真 生机繁茂绘星辰 智联世界情不尽 系统更新又一春 2025年1月29日 平水韵十一真平韵 无心剑七绝《恭贺新春》以“软件生态”为题旨,巧妙融入新春喜庆氛围,展现出科技与自然和谐共生的意境。首句“软件通灵万象真”,…...
低代码产品表单渲染架构
在React和Vue没有流行起来的时候,低代码产品的表单渲染设计通常会使用操作Dom的方式实现。 下面是一个表单的例子: 产品层 用户通过打开表单,使用不同业务场景业务下的表单页面,中间的Render层就是技术实现。 每一个不同业务的表单…...
allegro修改封闭图形线宽
说在前面 我们先把最优解说在前面,然后后面再说如果当时不熟悉软件的时候为了挖孔是用了shapes该怎么修改回来。 挖空最方便的方式是在cutout层画一个圆弧,下面开始图解,先add一个圆弧 z 最好是在画的时候就选择好层,如果忘记了后续再换回去也行,但好像软件有bug,此处并…...
C++实现2025刘谦魔术(勺子 筷子 杯子)
目录 1、魔术步骤 2、C代码 2.1、定义物品 2.2、枚举初始顺序 2.3、进行step2筷子交换 2.4、进行step3杯子交换 2.5、进行step4勺子交换 3、运行结果 4、全部源码 又是一年春晚啦,今年比较期待的是刘谦的魔术表演,现在用C实现刘谦的第一个魔术&…...
Leetcode:219
1,题目 2,思路 第一种就是简单的暴力比对当时过年没细想 第二种: 用Map的特性key唯一,把数组的值作为Map的key值我们每加载一个元素都会去判断这个元素在Map里面存在与否如果存在进行第二个判断条件abs(i-j)<k,条件 符合直接…...
SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇
文章目录 引言SpringBootThymeleafVueSpringBootSpringBootVue(前端)axios/ajaxVue作用响应式动态绑定单页面应用SPA前端路由 前端路由URL和后端API URL的区别前端路由的数据从哪里来的 Vue和只用三件套axios区别 关于地址栏url和axios请求不一致VueJSPS…...
小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5
闲鱼上收了一台CR6606和一台CR6609, 一直没时间研究, 趁春节假期把这两个都刷成 OpenWRT 配置说明 CPU: MT7621AT,双核880MHz内存: NT5CC128M16JR-EKI 或 M15T2G16128A, 256MB闪存: F59L1G81MB, 128MB无线基带芯片(BB): T7905DAN无线射频芯片(RF): MT7975DN无外置F…...
我的求职面经:(2)C++中空指针请使用nullptr不要使用NULL
1. C中NULL定义就是整数字面量0 2. 对于C函数,由于存在重载,使用NULL而不是nullptr可能导致函数走错重载。 3. C中定义NULL为(void* )0,确实是代表空指针。使用时隐式转换成对应的需要类型的空指针。 4. C中void指针…...
Java8_StreamAPI
Stream 1.创建流 1.1 集合创建流 List<String> list List.of("a", "b", "c"); Stream<String> stream list.stream(); stream.forEach(System.out::println);1.2 数组创建流 String[] array {"a","b",&qu…...
[STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器
一、定时器简介 STM32 中的定时器(TIM,Timer)是其最重要的外设之一,广泛用于时间管理、事件计数和控制等应用。 1.1 基本功能 定时功能:TIM定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中…...
信息学奥赛一本通 1606:【 例 1】任务安排 1 | 洛谷 P2365 任务安排
【题目链接】 ybt 1606:【 例 1】任务安排 1 洛谷 P2365 任务安排 【题目考点】 1. 动态规划:线性动规 【解题思路】 可以先了解法1,虽然不是正解,但该解法只使用了动规的基本思路,易于理解,有助于理解…...
【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开
之前在Vmware虚拟机里配置了mumu模拟器,现在想要移植到宿主机中 1、虚拟机中的MuMu模拟器12-1是目标系统,对应的目录如下 C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-1 2、Vmware-虚拟机-设置-选项,启用共享文件夹 3、复…...
【C语言】预处理详解
他们想要逃避工作的压迫,却又被功绩社会深植的价值观绑架。 前言 这是我自己学习C语言的第九篇博客总结。后期我会继续把C语言学习笔记开源至博客上。 上一期笔记是关于C语言的编译链接,没看的同学可以过去看看: 【C语言】编译链接_c 读取一行…...
设计模式Python版 适配器模式
文章目录 前言一、适配器模式二、适配器模式实现三、适配器模式在Django中的应用 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&…...
系统思考—蝴蝶效应
“个体行为的微小差异,可能在系统中引发巨大且不可预测的结果。” — 诺贝尔经济学得主托马斯谢林 我们常说,小变动带来大影响,这种现象,在复杂系统理论中被称为“蝴蝶效应”:即使极小的变化,也能在动态系…...