网络原理 - 10(HTTP/HTTPS - 1)
前面的网络原理 1 - 9,按照 TCP/IP 五层协议栈,介绍了各个层次的核心协议。
应用层:自定义协议(xml,json....)
传输层:UDP/TCP
网络层:IP
数据链路层:以太网
我们这里还要返回头,再重新谈一谈应用层的一个协议 --- HTTP 协议~~(HTTP 也是基于 TCP 来实现的~~)
目录
HTTP是什么
理解“应用层协议”
HTTP 协议的工作流程
HTTP 协议格式
抓包工具
原理
使用
抓包结果
HTTP 请求的基本格式
HTTP 响应的基本格式
协议格式总结:
完!
HTTP是什么
HTTP(全称为“超文本传输协议”)是一种应用非常广泛的应用层协议。
文本 ==》 字符串(能在 UTF8/GBK 等等码表上找到的合法字符)
超文本 ==》不仅仅是字符串,还可以携带一些图片,视频,音频,特殊的格式等等 ---- HTML等等...
富文本 ==》 word(可以设置行高什么什么的,在记事本中打开 word 文件会显示乱码~~)
HTTP 诞生于 1991年,已经发展为现如今最主流使用的一种应用层协议了
最新的 HTTP 3 版本也正在完善推出中~~
HTTP 往往是基于传输层的 TCP 协议实现的(1.0,1.1,2.0 版本均为 TCP,HTTP 3是基于 UDP 实现的)。目前我们主流仍然是 HTTP1.1 版本,我们此处也重点也该版本为主进行讨论~~
HTTP 协议最主要的应用场景,就是网站,浏览器和服务器之间进行传输数据。客户端(手机,PC)和服务器之间的数据交互,也很可能是 HTTP。
举个栗子:
当我们在浏览器中输入一个“百度搜索”的网址(URL)的时候,浏览器就会给百度的服务器发送一个 HTTP 请求,百度的服务器就会返回一个 HTTP 响应。
这个响应结果被浏览器进行解析之后,就展示成我们所看到的页面内容(这个过程中,浏览器就可能给服务器发送多个 HTTP 请求,服务器也会对应的返回多个响应,这些响应里面就包含了页面 HTML,CSS,JavaScript,图片,字体等等信息~)
理解“应用层协议”
我们前面已经研究了 TCP/IP,已经知道了数据能从客户端进程,经过路径的选择,跨网络传输到服务器端进程(IP + Port)
但是,仅仅只是把数据从 A 点送到 B 点就 OK 了吗???
举个栗子:
我们在 🐕东 上下单了一台笔记本,卖家[客户端] 把笔记本通过顺丰快递[传输 + 路径选择]送到买家[服务器] 就完了吗??
当然不是,买家要对产品进行使用,并且在使用完时候,对卖家进行一个打分评论~~
我们把数据从 A 端传送到 B 端,TCP/IP 解决的是顺丰的功能,而两端还要对数据进行加工处理或者使用,所以,我们还需要一层协议,不关心通信的细节,关心的是应用细节!!!
这层协议就叫做应用层协议。而应用程序是会有不同的业务场景的,所以应用层协议是有不同种类的,其中经典协议之一的 HTTP 就是其中的代表作~~
在我们刚刚举的例子中,顺丰快递相当于 TCP/IP 的功能,那么买回来的笔记本,都会附带说明书,说明书就是用来指导用户该如何使用笔记本~~此时的说明书就可以理解为用户层协议~~
HTTP 协议的工作流程
上面,我们在举了浏览器和百度的栗子~~~我们在浏览器中输入一个“网址”,此时浏览器就会给对应的服务器发送一个 HTTP 请求,对方服务器接收到请求,经过处理,就会返回一个 HTTP 响应。
HTTP 协议的交互过程,是非常经典的“一问一答”,但事实上,当我们访问一个网站的时候,一般涉及不止一次 HTTP 请求/响应的交互过程~~
HTTP 协议格式
HTTP 是超文本传输协议,但其仍然是一个文本格式的协议,我们可以通过 FIddler 进行抓包,分析 HTTP 请求 / 响应的细节~~
抓包工具
我们这里以 Fiddler 为例(官网地址:https://www.telerik.com/fiddler/)(安装一路 next 即可)
下载之后,在抓包前还需要一个简单的设置:
全部勾选上~~ 会提示下载一个认证证书,一定要下载~~
完成上面的操作,如果我们的电脑本身还有其他的代理程序,fq 的代理程序什么的,都要关闭,代理程序之间可能会有冲突~~
原理
Fiddler 相当于是一个 “代理”,浏览器在访问 www.baidu.com 的时候,就会把 HTTP 请求先发给 Fiddler ,Fiddler 再把请求转发给百度的服务器。当百度服务器返回数据的时候,Fiddler 拿到返回数据,再把数据提交给浏览器。
因此,Fiddler 对于浏览器和百度服务器之间的交互的数据细节,是十分清楚的~~
注意:这个代理,是一个程序,而不是设备,是工作在应用层的,上述的转发,都是站在应用层的角度上的~
使用
如果我们上述的安装配置操作完全 ok,此时 fiddler,就能够抓到很多的数据包~~
左侧窗口显示了所有的 HTTP 请求/响应,我们可以选中某个请求查看详情
右侧上方显示了 HTTP 请求的报文内容(我们切换到 Raw 标签页可以看到详细的数据格式)
右侧下方显示了 HTTP 响应的报文内容(我们切换到 Raw 表爱你也可以看到详细的数据格式)
当我们需要查看请求和响应的详细数据时候,可以通过 View in Notepad 通过记事本打开~~
(可以使用 ctrl + a 全选左侧的抓包结果,然后 delete 键清除所有被选中的结果~)
补充:我们的系统上有任何一个程序(不一定是浏览器)此时使用了 HTTP/HTTPS,此时,都能被 fiddler 给获取到~~(我们电脑上的很多程序在我们感知不到的情况下会在后台偷偷的做很多事情~~)
打开一个网站,其实浏览器和服务器之间进行的 HTTP 交互不只是只有一次,而是通常有很多次,第一次交互是拿到这个页面的 HTML,HTML 还会依赖其他的 CSS 和 JS 图片等等,HTML 被浏览器加载之后,又会触发一些其他的 HTTP 请求,获取到 CSS JS 等等,当执行到 JS 的时候,JS 里面的代码可能又要触发很多的 HTTP 请求~~~
字体为蓝色的表示返回的是一个 HTML,往往是访问一个网站的入口请求,我们就以百度来看一下看抓包结果~~
抓包结果
我们将右侧 HTTP 请求的内容,在记事本打开,是下面的结果
但是,当我们如法炮制对下面响应进行记事本打开的时候,咦,发现是乱码呀,如下:
这个情况,是因为,当前响应数据被进行压缩了。在网络传输中,带宽是一个比较贵的硬件资源,为了节省带宽,就可以把响应进行压缩(一般是对响应进行压缩,请求不太需要)。
我们可以点击这个按钮进行解压缩
这样就 OK 啦~~
HTTP 请求的基本格式
我们此处以 百度 的搜索页面为栗子:
HTTP 请求包含 4 部分
1. 首行
首行又包含了 3 个部分:[方法] + [URL] + [版本],三个部分使用空格来进行分割~
GET 为方法,https://www.baidu.com/ 为 URL, HTTP/1.1 为版本
2. 请求头(Header)
从第二行,一直到最后,都是请求头,(这个请求没有正文)。里面是类似 TCP 报头/IP 报头,包含一些重要的属性信息,以文本的方式进行组织~~
报头中包含了很多键值对,每个键值对占一行,键和值之间使用 : 和 空格 来分割
此处的键值对都有那些,有什么含义,都是 HTTP 协议所规定的~~
3. 空行
请求头最下面会有一个空行,这个空行就可以表示结束标记~
4. 正文(body):HTTP 的载荷部分。有的 HTTP 请求有 body,有的就没有 body~~
HTTP 响应的基本格式
1. 首行
首行也是包含 3 个部分:[版本号] + [状态码] + [状态码解释],3 个部分之间使用空格来进行分割。
HTTP/1.1 为版本号,200 为状态码,OK 为状态码描述
这里可以对状态码描述进行一点小补充:
我们在 C 语言中曾经学习了一个函数是 strerror,该函数可以把 C 语言中的 erno 翻译成一个错误信息(字符串),此处的状态码描述也是,将 200 翻译成一个字符串信息描述~~
2. 响应头(Header):
同样的表示一些属性,用冒号分割的键值对,每组属性之间使用 \n 进行分割。
3. 空行
遇到空行则表示 Header 部分结束
4. 正文(Body):
空行后面的内容都是 Body,Body 允许为空字符串。如果 Body 存在,则在 Header 中会有一个 Content - Length 属性来标识 Body 的长度,如果服务器返回了一个 HTML 页面,那么 HTML 页面内容就是在 body 中~~
协议格式总结:
问:为什么 HTTP 报文中要存在“空行”??
答:HTTP 协议中,并没有具体规定报头部分的键值对有多少个,空行就相当于是“报头的结束标志”,或者说空行是“报头和正文之间的分隔符”。HTTP 在传输层是依赖 TCP 协议的,TCP 是面向字节流的,如果没有这个空行,就会出现“粘包问题”~~
完!
相关文章:
网络原理 - 10(HTTP/HTTPS - 1)
前面的网络原理 1 - 9,按照 TCP/IP 五层协议栈,介绍了各个层次的核心协议。 应用层:自定义协议(xml,json....) 传输层:UDP/TCP 网络层:IP 数据链路层:以太网 我们这…...
UDP协议详解+代码演示
1、UDP协议基础 1. UDP是什么? UDP(User Datagram Protocol,用户数据报协议)是传输层的核心协议之一,与TCP并列。它的主要特点是: 无连接:通信前不需要建立连接(知道对端的…...
QT事件Trick
拖动 void DWidget::mousePressEvent(QMouseEvent *event) {if(event->button()Qt::LeftButton){QListWidgetItem *selItem currentItem();if(selItem! nullptr){m_startPosevent->pos(); //记录鼠标按下时的起始位置}}QListWidget::mousePressEvent(event); }void DW…...
解答UnityShader学习过程中的一些疑惑(持续更新中)
一、坐标系相关 shader中会有几种空间: 模型空间:以物体自己为中心原点 世界空间:就是unity的世界坐标 观察空间(视图空间):以相机为中心的坐标系 裁剪空间:是一个4d空间,有x,y,z,w…...
【图论 拓扑排序 bfs】P6037 Ryoku 的探索|普及+
本文涉及知识点 C图论 CBFS算法 P6037 Ryoku 的探索 题目背景 Ryoku 对自己所处的世界充满了好奇,她希望能够在她「死」之前尽可能能多地探索世界。 这一天,Ryoku 得到了一张这个世界的地图,她十分高兴。然而,Ryoku 并不知道…...
Spring Boot定时任务
在 Spring Boot 中实现定时任务主要依赖于Scheduled注解和 Spring 调度器。 基本概念 定时任务,简单来说就是在特定的时间点或按照一定的时间间隔自动执行的任务。在 Spring Boot 中,实现定时任务主要依赖于 Spring 框架提供的 Scheduled 注解和 TaskSc…...
如何使用electron-forge开发上位机ui
Electron Forge是一个用于快速构建、打包和发布Electron应用程序的工具。它提供了一种简单的方式来设置Electron项目,并使用现代工具和最佳实践来管理应用程序的开发和部署过程。使用Electron Forge,开发人员可以轻松地创建跨平台的桌面应用程序…...
idea启动springboot方式及web调用
使用以下方式启动springboot. 我这里是微服务, 本地调试需要启动程序使用 1. 通过maven检测到Profile配置 2. web调用 我这里直接用 apifox接口调用, 带着token和一些必要参数。有这几点: 请求头要加的token需要是网页上F12获取到的 如果是微服务本地调用。url需要…...
利用EMQX实现单片机和PyQt的数据MQTT互联
https://www.dong-blog.fun/post/2050 基于MQTT的设备监控与控制系统设计 引言 物联网(IoT)设备的远程监控与控制是现代智能系统的基础需求。本文将介绍一个基于MQTT协议的设备监控与控制系统,该系统由两部分组成:模拟单片机设备和PyQt客户端。我们将…...
C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...
Context7 MCP:提供实时、版本特定的文档以解决AI幻觉问题
在实际开发中,使用AI辅助编码常常出现令人沮丧的问题:AI提供的API调用建议往往已经过时,或者根本不存在。 特别是当您使用最新版库时,这个问题尤为明显。 Upstash团队开发的Context7开源工具正是为解决这一痛点而生。 版本不匹配导致的API错误 现代开发库迭代速度快,常…...
电路研究9.3.2——合宙Air780EP中的AT开发指南:HTTP(S)-PDP的研究
按照推荐的GPRS模块的学习顺序,现在需要研究的是HTTP(S)了,所以我们就继续学习吧。 9.5.2 HTTP(S)应用指南 应用概述 4G 模块支持 HTTP 和 HTTPS 协议(这个确实也考虑过了,但是不知道合不合适呢,而且我们计划的通讯是只…...
K8S ConfigMap 快速开始
一、什么是 ConfigMap? ConfigMap 是 Kubernetes 中用于存储非敏感配置数据的 API 对象,支持以键值对(Key-Value)或文件的形式存储配置,允许将配置与镜像解耦,实现配置的集中管理和动态更新。 二、主要用…...
【星海出品】K8S调度器leader
发现K8S的技术资料越写越多,独立阐述一下K8S-Scheduler-leader 调度器通过Watch机制来发现集群中【新创建】且尚未被调度【unscheduled】到节点上的pod。 由于 Pod 中的容器和 Pod 本身可能有不同的要求,调度程序会过滤掉任何不满足 Pod 特定调度需求的…...
第十二届蓝桥杯 2021 C/C++组 空间
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 空间 - 蓝桥云课 思路: 思路详解&#…...
通过深度学习推进增材制造:当前进展与未来挑战综述
通过深度学习推进增材制造:当前进展与未来挑战综述 原文信息: 标题:Advancing Additive Manufacturing through Deep Learning: A Comprehensive Review of Current Progress and Future Challenges 作者:Amirul Islam Saimon, Emmanuel Yangue, Xiaowei Yue, Zhenyu (…...
深入蜂窝物联网 第三章 LTE-M(Cat-M1)详解:省电机制与移动特性
1. 前言与应用场景 在蜂窝物联网阵营中,LTE-M(Cat-M1) 兼具低功耗和中速率,且支持移动场景下的无缝切换,因而成为物流追踪、可穿戴设备、智能路灯、共享单车等场景的首选。 本章将系统剖析: 核心特性:PSM、eDRX 与移动性保障; 协议流程:简化的 RRC/NAS 步骤; 时序图…...
软件设计师速通其一:计算机内部数据表示
考试资料推荐 ,这也是大部分图片的出处。本文章主要将视频原本讲的不详细、不便于理解的东西摆开揉碎了给到读者。相信本文能帮您更好更快的学习知识。本文也是您考前快速复习的不二之选。本文会用星星来表示每个考点的重要性,其中一颗★表示课外拓展&am…...
Kubernetes》》k8s》》Taint 污点、Toleration容忍度
污点 》》 节点上 容忍度 》》 Pod上 在K8S中,如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。如果不能容忍,那就无法调度到该节点。 污点和容忍度的概念 》》污点等级——>node 》》容忍度 —>pod Equal——>一种是等…...
【爬虫】一文掌握 adb 的各种指令(adb备忘清单)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 入门设备基础Logcat文件管理远程 Shell包安装Paths手机信息包信息设备相关命令权限Logs常见的 ADB 命令将文件推送到 Android 设备的下载文件夹列出所有已安装的包并获取完整路径从安卓设备中提取文件从主机安装 APK 到…...
1.7无穷级数
引言 无穷级数是考研数学一的核心内容,涵盖数项级数、幂级数、傅里叶级数等核心概念。本文系统梳理4大考点,结合公式速查与实战示例,助你高效突破级数难点! 考点一:数项级数敛散性判定 1️⃣ 正项级数 (1) 比较审敛…...
vitest | 测试框架vitest | 总结笔记
测试框架 vitest 介绍 网址:Vitest | Next Generation testing framework 特点:①支持vite的生态系统,②兼容jest语法 ③HMR测试(速度快) ④ ESM(js的原生支持) 安装 Vitest: npm …...
使用 ELK 实现全链路追踪:从零到一的实践指南
前言 在现代分布式系统中,随着服务数量的增加,系统的复杂性也呈指数级增长。为了快速定位问题、分析性能瓶颈,全链路追踪成为一项必不可少的能力。本文将详细介绍如何利用 ELK(Elasticsearch Logstash Kibana) 实现…...
AI智能体开发实战:从概念到落地的全流程解析
一、AI智能体:重新定义人机协作 什么是AI智能体? AI智能体是具备感知-思考-行动闭环能力的程序实体,能够通过传感器(如文本输入、图像识别)获取信息,基于大模型推理决策,并通过API、机器人等执…...
如何搭建spark yarn 模式的集群
搭建Spark on YARN集群的步骤 Spark on YARN模式允许Spark作业在Hadoop YARN资源管理器上运行,这样可以更好地与Hadoop生态系统集成并共享集群资源。以下是搭建Spark YARN集群的详细步骤: 前提条件 已安装并配置好Hadoop集群(包括HDFS和YAR…...
DDoS 攻击如何防护?2025最新防御方案与实战指南
一、DDoS 攻击的致命威胁:你的业务离瘫痪有多近? 1. 2024 年 DDoS 攻击现状 攻击规模:全球日均攻击峰值突破7.2Tbps,混合型攻击占比超 65%(来源:Cloudflare)行业重灾区: 行业攻击占…...
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目
安装 pnpm install icraft/player-react --saveimport { ICraftPlayer } from "icraft/player-react";export default function MyScene() {return <ICraftPlayer srcyour-scene.iplayer />; }icraft/player-react 为开发者提供了一站式的3D数字孪生可视化解决…...
esm使用-包括esmfold和embedding
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言零、安装一、esmfold的使用二、esm2的embedding1.模型加载与准备2.读入数据3.提取残基级表示4.生成序列级表示(均值池化)5.可视化自注意力接触图6.潜在问题与改进建议7.小结总结前言 主要参…...
【Nginx】 使用least_conn负载均衡算法是否能将客户端的长连接分散到不同的服务器上demo
为了验证Nginx在关闭HTTP Keepalive的情况下,使用least_conn负载均衡算法是否能将客户端的长连接分散到不同的服务器上,我们可以搭建一个简单的环境。这个环境包括: 一个Nginx服务器作为负载均衡器。两个后端服务器(可以使用简单…...
TMI投稿指南(三):共同作者
IEEE 作者编辑风格手册 --- IEEE Editorial Style Manual for Authors 投稿之后检查路径: IEEE 作者门户:登录 --- IEEE Author Gateway: Login 共同第一作者:在许多领域,被视为成为第一作者是件好事。但只有一个人可以是第一作…...
Java多线程入门案例详解:继承Thread类实现线程
本文通过一个简单案例,讲解如何通过继承 Thread 类来实现多线程程序,并详细分析了代码结构与运行机制。 一、前言 在 Java 中,实现多线程主要有两种方式: 继承 Thread 类 实现 Runnable 接口 本文以继承 Thread 类为例&#x…...
Transformer Prefill阶段并行计算:本质、流程与思考
Transformer Prefill阶段并行计算:本质、流程与思考 “为什么Transformer在Prefill阶段可以并行?并行到什么程度?哪里还需要同步?今天讲清楚!” 引子 在大语言模型(LLMs)爆发的时代,…...
KUKA机器人自动备份设置
在机器人的使用过程中,对机器人做备份不仅能方便查看机器人的项目配置与程序,还能防止机器人项目和程序丢失时进行及时的还原,因此对机器人做备份是很有必要的。 对于KUKA机器人来说,做备份可以通过U盘来操作。也可以在示教器上设…...
Lua 第13部分 位和字节
13.1 位运算 Lua 语言从 5.3 版本开始提供了针对数值类型的一组标准位运算符。与算术运算符不同的是,位运算符只能用于整型数。位运算符包括 &( 按位与)、|(按位或)、~(按…...
下载同时返回其他参数
一般情况下下载的接口是没有返回值的,直接返回一个文件 浏览器直接触发文件下载 但是有一些奇葩需求,除了文件外还需要一些其他字段返回。这个时候就只能把文件转成字符串返回,然后再由前端做下载或者展示 后台获取字符 byte[] byte[] bo…...
240428 leetcode exercises
240428 leetcode exercises jarringslee 文章目录 240428 leetcode exercises[25. K 个一组翻转链表 ](https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/3663828/xian-fan-zhuan-lian-biao-zai-kyi-ge-zu-f-lgaj/)🔁 探宗求源 其义自见 [75. 颜色…...
SQLMesh 审计与测试:确保数据质量的利器
在数据科学项目中,确保数据质量和准确性至关重要。SQLMesh 提供了审计和测试两种工具来验证数据。本文将介绍 SQLMesh 的审计功能,并与测试进行对比,帮助您更好地理解如何在项目中使用这些工具。 SQLMesh 审计 SQLMesh 的审计功能可以帮助您…...
SQL Server 存储过程开发规范
SQL Server 存储过程开发规范(高级版) 1. 总则 1.1 目标 本规范旨在: 提高存储过程的事务一致性、异常可追踪性、错误透明度。 统一日志记录、错误码管理、链路追踪(Trace ID)。 支持复杂事务场景(嵌套…...
图像处理篇---信号与系统的应用
文章目录 前言一、信号表示层面图像作为二维信号二、系统特性分析线性移变系统建模采样系统理论应用时域采样定理在帧率选择中的应用三、变换域处理多维傅里叶分析小波变换与多分辨率分析四、系统响应特性人类视觉系统(HVS)建模摄像机系统响应五、编码系统中的信号处理预测编…...
什么是 Web 标准?为什么它们对 SEO 和开发很重要?
网页标准为何重要?谷歌解析SEO优势 在当今数字营销领域,搜索引擎优化(SEO)是网站提升可见性和吸引自然流量的关键策略。然而,许多网站管理员和营销人员可能忽略了一个重要的SEO因素——网页标准。谷歌的SEO专家深入解…...
Python 正则表达式 re 包
一、常见正则表达式符号 符号含义示例.匹配任意单个字符(除了换行)r"a.c" 可匹配 "abc"、"a1c" 等\d匹配任何数字(0-9)r"\d" 匹配 "123"、"56"\w匹配字母、数字或下…...
leetcode0230. 二叉搜索树中第 K 小的元素-medium
1 题目:二叉搜索树中第 K 小的元素 官方标定难度:中 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 示例 1: 输入:r…...
Linux环境变量配置与std访问环境变量
文章目录 前言1. 用户环境变量快速配置1.2 **以上语句的具体解释:**1.3 $PATHNAME实现增量式添加 2.系统级永久配置与避坑指南2.1 特殊字符处理2.2 动态PATH管理2.3 敏感信息保护2.4 环境调试命令 3. cstd中访问环境变量 前言 首先介绍一下Linux下各目录操作符的含…...
【go】go语言slice/map的产生背景,及原理理解
介绍一下Slice 先讲一下slice的产生背景,首先,go本身是有数组的,但是不会自动扩容,然而实际工作中会有很多场景是要求能自动扩容的,比如说你接用户的数据,你肯定要设置一个可以自动扩容的数组来接ÿ…...
机器学习day3 - KNN的api调用
使用KNN算法判断是否为传入的图片是否为苹果 """ 使用KNN算法判断是否为传入的图片是否为苹果 """ # 导入需要的库 from sklearn.model_selection import train_test_split # 导入数据集划分函数 from sklearn.preprocessing import StandardS…...
Qt内置图标速查表
文章目录 1、说明🌾2、实现效果🌱Qt6.7以下版本Qt6.7以上版本 3、主要代码🌳 更多精彩内容👉个人内容分类汇总 👈 1、说明🌾 在我们使用Qt开发程序时,需要美化界面总会想到贴图,显示…...
Python(14)推导式
在 Python 编程中,推导式是一种强大而简洁的语法结构,它能让开发者以简洁的方式从一个数据序列创建另一个新的数据序列。无论是处理列表、字典、集合还是元组,推导式都能大显身手。这篇博客将结合菜鸟教程中的内容,通过丰富的代码…...
React速通笔记
相关视频: 黑马程序员前端React18入门到实战视频教程,从reacthooks核心基础到企业级项目开发实战(B站评论、极客园项目等)及大厂面试全通关_哔哩哔哩_bilibili 一、React介绍 React由Meta公司开发,是一个用于 构建W…...
深入蜂窝物联网:第二章 深度解读 NB-IoT:协议栈、部署与典型应用
1. NB-IoT 简介与应用场景 NB-IoT(Narrowband-IoT,窄带物联网)是3GPP在LTE演进基础上,为海量低速率IoT设备设计的无线接入技术。它仅占用 200 kHz 或 180 kHz(Guard-band)带宽,通过扩频和重复发射,提高了深度覆盖能力。 典型应用 远程抄表:电表、水表、气表等周期性少…...
处理对象集合,输出Map<String, Map<String, List<MyObject>>>格式数据,无序组合键处理方法
需求:对象有字段A,B,C,需要判断对象之间AB两个字段相同的对象 如: 对象1,Aaaa,Bbbb 对象2,Aaaa,Bbbb 对象3,Abbb,Baaa 对象4,Abbb,Baaa…...