【计算机网络】- 应用层HTTP协议
目录
初识HTTP
什么是HTTP
版本
HTTPS
模型
HTTP抓包工具
为什么使用
抓包工具的下载
下载后的重要操作
Fiddler的使用
HTTP请求与响应的基本格式
HTTP请求基本格式编辑
HTTP响应基本格式
协议格式总结❗️❗️❗️编辑
HTTP 详解
认识 URL
URL基本格式
关于 URL encode
HTTP的方法
GET 方法
使用场景
POST 方法
使用场景
📝面经:GET和POST的区别
认识 "报头" (header)
Host
Content-Length
Content-Type
User-Agent (简称 UA)
Referer
Cookie
HTTP 响应状态码
认识 "状态码" (status code)
200 OK
404 Not Found
403 Forbidden
405 Method Not Allowed
500 Internal Server Error
504 Gateway Timeout
302 Move temporarily
初识HTTP
什么是HTTP
HTTP (全称为 "超⽂本传输协议") 是⼀种应⽤⾮常⼴泛的 应⽤层协议.
为什么是超文本
文本=>字符串
所谓 "超⽂本" 的含义, 就是传输的内容不仅仅是⽂本(⽐如 html, css 这个就是⽂本), 还可以是⼀些其他的资源, ⽐如图⽚, 视频, ⾳频等⼆进制的数据
版本
最新的 HTTP 3 版本也正在完善中, ⽬前 Google / Facebook 等公司的产品已经⽀持了.
HTTP 往往是基于传输层的 TCP 协议实现的. (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP 实现)
⽬前我们主要使⽤的还是 HTTP1.1 和 HTTP2.0 . 目前互联网上见到的HTTP协议,绝大部分都是HTTP1.1版本
HTTPS
HTTPS可以认为是HTTP的升级版,和HTTP的区别就在于引入了一个"加密层"(HTTPS的安全性更高一些),除了安全性之外,HTTPS和HTTP完全一样的了
模型
HTTP协议,是一种典型的"一问一答模型”的协议
客户端->服务器
客户端发一个请求,服务器返回一个响应(一一对应)
打开网页这种场景,就属于典型的一问一答的模式
非“一一对应”模型
一问多答 下载一个大的文件
多问一答 上传一个大的文件
多问多答 远程桌面(远程控制)
HTTP抓包工具
为什么使用
抓包工具相当于⼀个 "代理",借助抓包工具,观察到HTTP请求/响应的详细情况
浏览器访问 sogou.com 时, 就会把 HTTP 请求先发给抓包工具, 抓包工具再把请求转发给 sogou 的服务器. 当 sogou 服务器返回数据时, 抓包工具 拿到返回数据, 再把数据交给浏览器.
因此 抓包工具 对于浏览器和 sogou 服务器之间交互的数据细节, 都是⾮常清楚的.
代理就可以简单理解为⼀个跑腿⼩弟. 你想买罐冰阔落, ⼜不想⾃⼰下楼去超市, 那么就可以把钱给你的跑腿⼩弟, 跑腿⼩弟来到超市把钱给超市⽼板, 再把冰阔落拿回来交到你⼿上. 这个过程中, 这个跑腿⼩弟对于 "你" 和 "超市⽼板" 之间的交易细节, 是⾮常清楚的.
抓包工具的下载
官网下载地址
下载后的重要操作
由于当前网络上大部分网站都是HTTPS,需要开启Fiddler的HTTPS功能.
只要启动Fiddler,此时,抓包工作就自动开始了,这里虽然不进行任何操作,Fiddler也能抓到很多包,这是正常的,你的电脑上有些软件,可能就在不停的在后台偷偷的和服务器进行交互
Fiddler的使用
可以使⽤ ctrl + a 全选左侧的抓包结果, delete 键先清除所有被选中的结果,再刷新搜狗页面
点击某一项,右侧就能看到请求和响应的详细情况
右侧上⽅显⽰了 HTTP 请求的报⽂内容.
右侧下⽅显⽰了 HTTP 响应的报⽂内容.
切换到 Raw 标签⻚可以看到详细的数据格式
Raw标签页就是HTTP的原始数据
发送HTTP请求,就是往TCP socket中,按照上述格式,写入一段字符串.
收到HTTP响应,就是从TCP socket中,读出一段字符串再解析
请求和响应的详细数据, 可以通过右下⻆的 View in Notepad 通过记事本打开.
响应这里用记事本打开后,看到的是二进制,因为出现乱码了(其实本身响应也是文本,此处的二进制,是压缩后的)。为什么要压缩呢?在二进制的角度上对数据进行重新编码,体积小了,传输时消耗的带宽就低了,保证信息量不变,体积缩小。带宽可是互联网中最贵的硬件资源比CPU,内存都贵。那怎么才能不看到乱码?
点这里进行解压缩,再用记事本打开
搜狗主页中,返回的响应数据,解压缩之后,其实就是主页的HTML.很多网站也是如此,浏览器看到的网页就是由HTML,CSS,JavaScript构成。返回一个HTML给浏览器就是HTTP非常典型的场景。
HTTP请求与响应的基本格式
HTTP请求基本格式

首行:
[⽅法](HTTP请求的方法(method),这次请求的"动作"是啥)+[url](访问的资源是啥) +[版本]
请求头Header:
请求的属性, 冒号分割的键值对;每组属性之间使⽤\n分隔;从第二行开始的若干行,一直到空行结束
HTTP中,请求头里的键值对都有哪些,是HTTP标准规定的.不同的请求头,都有特定的含义,但是标准也允许用户自定义一些请求头
空行:
正文Body:
空⾏后⾯的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个Content-Length属性来标识Body的⻓度;我们上面的例子是没有这部分内容的
HTTP响应基本格式
首行:
[版本号] + [状态码] + [状态码解释] 200是最常见的一个状态码,表示成功
Header:
请求的属性, 冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表⽰Header部分结束
键值对也是标准规定的,有的键值对,只能出现在请求中,有的只能出现在响应中,有的呢都能出现
空行:
Body:
空行后⾯的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个Content-Length属性来标识Body的⻓度; 如果服务器返回了⼀个html页面, 那么html页面内容就是在body中.
协议格式总结❗️❗️❗️

为什么 HTTP 报⽂中要存在 "空行"?
因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空⾏就相当于是 "报头的结束标记", 或者是 "报头和正⽂之间的分隔符".
HTTP 在传输层依赖 TCP 协议, TCP 是⾯向字节流的. 如果没有这个空⾏, 就会出现 "粘包问题".
HTTP 详解
认识 URL
平时我们俗称的 "⽹址" 其实就是说的 URL (Uniform Resource Locator 统⼀资源定位符).
网络上资源那么多(资源可以是一个网页,可以是一个文件,可以是一个图片…),必须要有一套规则,能够找到某个指定的资源。
URL基本格式
关于 URL encode
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
⽐如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进⾏转义.
⼀个中⽂字符由 UTF-8 或者 GBK 这样的编码⽅式构成, 虽然在 URL 中没有特殊含义, 但是仍然需要进⾏转义. 否则浏览器可能把 UTF-8/GBK 编码中的某个字节当做 URL 中的特殊符号.
转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做⼀位,前⾯加上%,编码成%XY格式
urlencode⼯具
日常开发的时候,大多数情况不需要手动处理转码的,日常使用的一些库(无论是前端的还是后端的,一般都是自带了url encode/decode的功能的)。
HTTP的方法
GET 方法
使用场景
GET 是最常⽤的 HTTP ⽅法. 常⽤于获取服务器上的某个资源.
1️⃣在浏览器中直接输⼊ URL, 此时浏览器就会发送出⼀个 GET 请求.
2️⃣另外, HTML 中的 link, img, script 等标签, 也会触发 GET 请求.
3️⃣后⾯我们还会学习, 使⽤ JavaScript 中的 ajax 也能构造 GET 请求.
最上⾯的
是通过浏览器地址栏发送的 GET 请求
下⾯的和 sogou 域名相关的请求, 有些是通过 html 中的 link/script/img 标签产⽣的, 例如
有些是通过 ajax 的⽅式产⽣的, 例如
POST 方法
使用场景
1️⃣登录/注册
2️⃣上传文件
除此之外,POST也有很多其他的场景。其实,HTTP中的GET和POST很多时候都是可以通用的
📝面经:GET和POST的区别
🍂语义不同:GET一般用于获取数据,POST一般用于提交数据!
🍂传递数据的方式不同:GET的body一般为空,需要传递的数据通过query string传递,POST的query string一般为空,需要传递的数据通过body传递
🍂GET请求一般是幂等的,POST请求一般是不幂等的.(如果多次请求得到的结果一样,就视为请求是幂等的)
🍂GET可以被缓存,POST不能被缓存.(这一点也是承接幂等性).
认识 "报头" (header)
header 的整体的格式也是 "键值对" 结构. 每个键值对占⼀⾏. 键和值之间使⽤分号分割.
报头的种类有很多, 此处仅介绍⼏个常⻅的.
Host
表⽰服务器主机的地址和端⼝,这部分信息,其实在URL已经有所体现了
Content-Length
表⽰ body 中的数据⻓度.
Content-Type
表示请求的 body 中的数据格式.浏览器会根据这里的值决定如何解析body的内容
application/json: 数据为 json 格式. body 格式形如:
{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16}
后续自己编写后端代码的时候也需要手动设置Content-Type让响应能够被正确解析,Content-Type和Content-Length都属于是在请求和响应中都会存在的,一个请求/响应中,没有body,也就没有这俩字段,如果有body,则必须要有这俩字段。
User-Agent (简称 UA)
表示浏览器/操作系统的属性.
形如:
判定UA字段,通过UA获取到用户的浏览器信息和操作系统信息,可以判定当前用户的浏览器版本都支持哪些特性,是只支持文字图片,还是说能支持多媒体。在今天,浏览器大家都差不多,比如放到7,8年前,需要考虑兼容1E浏览器,开发人员还是要头疼一些的。现在虽然浏览器功能差不多,但是上网的设备,还是存在差别,手机和电脑的屏幕尺寸比例是截然不同的,仍然可以通过UA这样的方式来切入。
针对上述问题,在前端开发圈子里,研究出了个东西"响应式编程",在前端代码中(主要是CSS),能够自动查询出当前屏幕的尺寸,结合尺寸对页面自动进行重新排版。
UA现在还有一个作用,就是用来做数据统计。是日常开发的重要环节,统计很多的业务指标,根据统计结果,进一步的迭代改进产品。UA的统计主要就是用来区分PC和移动端。
Referer
描述了当前页面,是从哪个页面跳转过来的,Referer并不一定真的有,如果直接在浏览器中输⼊URL,或者直接通过收藏夹访问⻚⾯时是没有 Referer 的。
同一个广告主,会在多个平台多个渠道投放广告,在百度上点击,会跳到广告主的网站,在搜狗上点击,也会跳到广告主的网站,广告主在自己的网站这边,是可以很容易的统计出一段时间内有多少访问量的(有多少广告点击的)。如何区分,哪些点击是来自于百度,哪些来自于搜狗呢?Referer就可以用来区分的。
Cookie

Cookie是什么?Cookie是浏览器本地持久化存储数据的一种机制,按照键值对方式存储,键值对的内容都是程序员自定义的,按照域名为维度分别进行存储。每个网站有自己的Cookie,相互不影响。
Cookie从哪里来?服务器返回的响应数据中,包含Set-Cookie字段,服务器这边的程序员根据需要,编写代码生成的。
Cookie到哪里去?后续浏览器访问同一个服务器的时候,就会把之前存储的Cookie再带上,从而发送到服务器这边。
Cookie上面存的键值对,都是程序员根据需要自定义的,其中有一个场景,Cookie非常经典的使用场景。使用Cookie保存用户的身份信息。对于HTTP来说,针对同一个服务器,每次HTTP请求,彼此,之前都是独立的,登录是前一个请求,后续的请求是如何知道我处于登录状态呢?
随着互联网技术的发展,cookie也不是唯一一个在浏览器这边存储数据的机制了
HTTP 响应状态码
认识 "状态码" (status code)
200 OK
这是⼀个最常⻅的状态码,表⽰访问成功。抓包抓到的⼤部分结果都是 200。
404 Not Found
没有找到资源.
浏览器输⼊⼀个 URL, ⽬的就是为了访问对⽅服务器上的⼀个资源. 如果这个 URL 标识的资源不存在, 那么就会出现 404
例如, 在浏览器中输⼊ www.sogou.com/index.html , 此时就在尝试访问 sogou 上的 /index.html 这个资源.如果输⼊正确, 则可以正确访问到. 但是如果输⼊错误, ⽐如 www.sogou.com/index2.html , 就会看到 404 这样的响应.
403 Forbidden
表⽰访问被拒绝. 有的⻚⾯通常需要⽤⼾具有⼀定的权限才能访问(登陆后才能访问). 如果⽤⼾没有登陆直接访问, 就容易⻅到 403.
例如: 查看码云的私有仓库, 如果不登陆, 就会出现 403.
405 Method Not Allowed
前⾯我们已经学习了 HTTP 中所⽀持的⽅法, 有 GET, POST, PUT, DELETE 等.
但是对⽅的服务器不⼀定都⽀持所有的⽅法(或者不允许⽤⼾使⽤⼀些其他的⽅法).
500 Internal Server Error
服务器出现内部错误. ⼀般是服务器的代码执⾏过程中遇到了⼀些特殊情况(服务器异常崩溃)会产⽣这个状态码.
咱们平时常⽤的⽹站很少会出现 500 (但是偶尔也能看到).
504 Gateway Timeout
当服务器负载⽐较⼤的时候, 服务器处理单条请求的时候消耗的时间就会很⻓, 就可能会导致出现超时的情况.
这种情况在双⼗⼀等 "秒杀" 场景中容易出现, 平时不太容易⻅到.
302 Move temporarily
临时重定向.
理解 "重定向"
就相当于⼿机号码中的 "呼叫转移" 功能.
⽐如我本来的⼿机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码,
只要我去办理⼀个呼叫转移业务, 其他⼈拨打 186-1234-5678 , 就会⾃动转移到 135-1234-5678 上.
在登陆⻚⾯中经常会⻅到 302. ⽤于实现登陆成功后⾃动跳转到主⻚.
响应报⽂的 header 部分会包含⼀个 Location 字段, 表⽰要跳转到哪个⻚⾯.
相关文章:
【计算机网络】- 应用层HTTP协议
目录 初识HTTP 什么是HTTP 版本 HTTPS 模型 HTTP抓包工具 为什么使用 抓包工具的下载 下载后的重要操作 Fiddler的使用 HTTP请求与响应的基本格式 HTTP请求基本格式编辑 HTTP响应基本格式 协议格式总结❗️❗️❗️编辑 HTTP 详解 认识 URL URL基本格式 …...
python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖
【1】引言 前序学习了使用numpy创建单通道的灰色图像,并对灰色图像的局部进行了颜色更改,相关链接为: python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…...
数据库:MongoDB命令行帮助解释
MongoDB命令: mongodmongosmongoperrormongoexportmongofilesmongoimportmongorestoreMongostat MongoDB包中的核心组件包括: mongod 是 MongoDB 的核心服务器进程,负责数据存储和管理。mongos 是分片集群的路由进程,负责将请求路由到正确…...
python 统计相同像素值个数
目录 python 统计相同像素值个数 最大值附近的值 python 统计相同像素值个数 import cv2 import numpy as np import time from collections import Counter# 读取图像 image cv2.imread(mask16.jpg)# 将图像转换为灰度图像 gray_image cv2.cvtColor(image, cv2.COLOR_BGR2…...
工作流引擎Camunda与LiteFlow核心组件对比
以下为 Camunda 7 和 LiteFlow 详细的介绍,包括它们的核心组件和用途。 1. Camunda 7 详细介绍 Camunda 7 是一个基于 BPMN 2.0 标准的企业级工作流和决策自动化平台。它被广泛应用于复杂业务流程的管理和执行,其核心目标是通过流程自动化来提升企业效…...
记一个Timestamp时区问题的坑
resultSet.getTimestamp(“kpi_collect_time”)查出来的Timestamp居然是带时区的, 如果该Timestamp不是UTC时区的,Timestamp.toInstant().atZone(ZoneId.of(“UTC”))会把Timestamp转成UTC时区 使用Timestamp.toLocalDateTime()可以直接把时区信息抹除 …...
R语言学习笔记之开发环境配置
一、概要 整个安装过程及遇到的问题记录 操作步骤备注(包含遇到的问题)1下载安装R语言2下载安装RStudio3离线安装pacman提示需要安装Rtools4安装Rtoolspacman、tidyfst均离线安装完成5加载tidyfst报错 提示需要安装依赖,试错逐步下载并安装…...
Hive部署
1. 最小化安装Hive 本次安装的版本是Hive的3.1.3版本 解压缩Hive压缩包 # 解压缩 tar -zxvf apache-hive-3.1.3-bin.tar.gz、 # 修改文件夹名称(看个人习惯,可以不执行) mv apache-hive-3.1.3-bin apache-hive-3.1.3在conf目录下,新增hive-env.sh&…...
Windows第一次上手鸿蒙周边
端云一体所需装备 很重要:C/D/E/F盘要有二三十G的可用空间! 硬件:华为鸿蒙实验箱(基础版)》飞机板核心板环境监测板 软件:Visual Studio Code写代码 终端编译 Hiburn烧录到开发板 MobaXterm (…...
【java数据结构】二叉搜索树
【java数据结构】二叉搜索树 一、二叉搜索树的概念二、二叉搜索树的操作2.1 插入2.2 查找2.3 删除(重点以及难点)2.3.1 删除节点的左边为null2.3.2 删除节点的右边为null2.3.3 删除的左右节点都不为空 三、二叉搜索树的性能分析3.1 最优情况3.2 最差情况…...
3D Vision--计算点到平面的距离
写在前面 本文内容 计算点到平面的距离 平台/环境 python open3d 转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/121482246 目录 写在前面准备Open3D代码完 准备Open3D pip install open3d代码 import open3d as o3ddef compute_points2…...
相机内参的作用原理
由三角形角度关系,得到X_image / focal_length X_real / Z_distance 用双目测距得到Z_distance之后 然后联合X_image / focal_length可以计算得到真实世界的X_real...
计算机网络介质访问控制全攻略:从信道划分到协议详解!!!
一、信道划分介质访问控制 介质访问控制:多个节点共享同一个“总线型”广播信道时,可能发生“信号冲突” 应该怎么控制各节点对传输介质的访问,才能减少冲突,甚至避免冲突? 时分复用(TDM) 时分复用:将时间分为等长的“…...
代码随想录day1
704.二分查找: 1.左闭右闭 int search(vector<int>& nums, int target) {int right nums.size() - 1;int left 0;while(left < right){int middle left ((right - left) >> 1);if(nums.at(middle) target){return middle;}else if(nums[m…...
IJK播放器问题集
IJK播放器问题集 在使用ijkplayer进行播放时候,时常会遇到一些问题,故记录下: 1 ijkplayer出现小窗切换到大窗画面卡住问题 检查是否大小窗口切换时候,频繁设置了surface。某些底层api频繁设置会导致画面不动。 //holder判断是…...
macOS使用LLVM官方发布的tar.xz来安装Clang编译器
之前笔者写过一篇博文ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器介绍了Ubuntu下使用官方发布的tar.xz包来安装Clang编译。官方发布的版本中也有MacOS版本的tar.xz,那MacOS应该也是可以安装的。 笔者2015款MBP笔记本,CPU是intel的,出厂…...
【设计模式-行为型】观察者模式
一、什么是观察者模式 说起观察者模式,不得不说一位观察者模式的高级应用者,朱元璋。不知道大家有没有看过胡军演的电视剧《朱元璋》。这部剧背景是元朝末年,天下大乱,朱元璋自幼父母双亡,沦为乞丐,后遁入空…...
HTML5 新表单属性详解
HTML5 为 <form> 和 <input> 标签引入了一系列新属性,极大地增强了表单的功能和用户体验。这些新属性不仅简化了开发者的工作,还为用户提供了更友好、更高效的交互方式。本文将详细介绍这些新属性,并结合代码示例帮助大家更好地理…...
Android程序中使用FFmpeg库
目录 前言 一、环境 二、创建APP 三. 添加FFmpeg库文件到app中 1. 复制ffmpeg头文件和so库到app中 2. 修改CMakeLists.txt文件内容. 3. 修改ffmpeglib.cpp 文件内容 4. 修改NativeLib.kt 文件添加方法和加载库 5. 调用 四. 增加解析视频文件信息功能 总结 前言 前面…...
到华为考场考HCIE的注意事项和考试流程
大家好,我是张同学,来自成都职业技术学院2021级计算机网络专业。最近成功通过了 Datacom HCIE 考试,在这里和大家分享一下我的经验。 考证契机 在母校的培养下,我接触到ICT这个行业,打好了基础,开始了成…...
基于STM32的智能书架管理系统设计
目录 引言系统设计 硬件设计软件设计 系统功能模块 图书分类与存储模块环境监测与保护模块数据显示与用户交互模块远程管理与书籍推荐模块 控制算法 图书分类与存储管理算法环境监测与保护算法数据记录与推荐算法 代码实现 图书分类与存储代码环境监测与保护代码数据显示与远程…...
STL--list(双向链表)
目录 一、list 对象创建 1、默认构造函数 2、初始化列表 3、迭代器 4、全0初始化 5、全值初始化 6、拷贝构造函数 二、list 赋值操作 1、赋值 2、assign(迭代器1,迭代器2) 3、assign(初始化列表) 4、assig…...
构建高效稳定的网络环境
概述 网络技术是当今IT行业的重要组成部分,构建高效稳定的网络环境对于企业、个人和互联网发展至关重要。本文将探讨网络技术中的关键要素,包括网络协议、网络架构、网络安全和网络优化,并提供实用的技巧和最佳实践,以帮助您构建…...
2025美赛倒计时,数学建模五类模型40+常用算法及算法手册汇总
数学建模美赛倒计时,对于第一次参加竞赛且没有相关基础知识的同学来讲,掌握数学建模常用经典的模型算法知识,并熟练使用相关软件进行建模是关键。本文将介绍一些常用的模型算法,以及软件操作教程。 数学建模常用模型包括…...
ElasticSearch DSL查询之排序和分页
一、排序功能 1. 默认排序 在 Elasticsearch 中,默认情况下,查询结果是根据 相关度 评分(score)进行排序的。我们之前已经了解过,相关度评分是通过 Elasticsearch 根据查询条件与文档内容的匹配程度自动计算得出的。…...
C语言--数据在内存中的存储
数据在内存中的存储 主要研究整型和浮点型在内存中的存储。 1. 整数在内存中的存储 在学习操作符的时候,就了解过了下面的内容: 整数的2进制表示方法有三种,即原码、反码和补码。 有符号的整数,三种表示方法均有符号位和数值…...
qml ScrollView详解
1、概述 QML中的ScrollView是一个容器组件,它允许用户滚动查看其内容,当内容超出视口大小时特别有用。ScrollView提供了垂直和水平滚动条(或触摸滚动),使用户能够访问被视口裁剪的内容部分。它常用于显示大量数据或复…...
通过frm和ibd文件恢复mysql数据
1.提取所有的文件名并查找出以frm结尾的 dir /t /b >1.txt 2.要准备的软件 1.mysql-utilities-1.6.5-winx64.msi 2.vcredist_x64.exe(c 2013) 3.利用frm生成sql文件 mysqlfrm --serverroot:123456localhost:3306 --port3308 D:\phpstudy_pro\Extensions\MySQL5.7.26\da…...
观察者模式 - 观察者模式的应用场景
引言 观察者模式(Observer Pattern)是设计模式中行为型模式的一种,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会自动收到通知并更新。观察者模式广泛应用于事件处理系统…...
【Mac】Python相关知识经验
一、给Python3安装第三方库 mac下给Python3安装第三方库pillow,处理图片 【安装方式】: 终端中输入命令:python3 -m pip install pillow 按回车,等待pillow下载安装 NOTE: 其他模块同理,如pytesseract 二、Python版…...
使用 JMeter 的 Autostop Listener 插件:自动化性能测试的守护者
在性能测试中,监控测试执行的状态并及时做出响应是至关重要的。如果测试过程中出现性能瓶颈或系统崩溃,继续运行测试可能会导致资源浪费或测试结果不准确。JMeter 的 Autostop Listener 插件正是为了解决这一问题而设计的。它允许你设置自动化停止条件&a…...
C# lock使用的逻辑和情景
情景:扣库存,会出现超扣的情况,因为同一个单子会有不同的工作人员使用,要保证数据的一致性。那么就用锁。 优化锁对象管理 使用 Lazy 初始化锁对象: 使用 ConcurrentDictionary 的 GetOrAdd 方法结合 Lazy 确保锁对象只…...
React 中hooks之 React useCallback使用方法总结
1. useCallback 基础概念 useCallback 是 React 的一个 Hook,用于记忆函数定义,避免在每次渲染时创建新的函数实例。它在需要将回调函数传递给经过优化的子组件时特别有用。 当state变化的时候引起组件重新渲染执行会导致某个方法被反复创建增加内存负担…...
期刊论文左下角添加通讯作者和横线的方法
一、添加脚注 二、写脚注内容 三、修改脚注分隔符(添加横线) 大概插入十个此符号,长度可微调。...
Docker使用 使用Dockerfile来创建镜像
本篇文章主要介绍了Docker使用Dockerfile来创建镜像, 本文学习Dcokerfile的基本命令,并且创建一个支持ssh服务的镜像. 1.Dockerfile 1.1基本案例 基本案例 dockerfile可以说是docker的描述符,该文件定义了docker镜像的所能拥有哪些东西.基本格式如下: 第一行指定…...
手写SOCKET进行HTTP通信
网络基础 我们电脑主板上都内置了多种网卡,一般主要有以下几类: 虚拟网卡(loopback) 注意,它是虚拟的,并不是物理网卡,也被称为是本地环回地址(或接口),一般将127.0.0.1作为本地环回…...
深入理解 Java 的并发容器
目录 一、为何需要并发容器 二、Java 中的主要并发容器 1. ConcurrentHashMap 2. CopyOnWriteArrayList 3. ConcurrentLinkedQueue 4. BlockingQueue及其实现类 三、并发容器的应用场景 1. 缓存系统 2. 任务队列 3. 数据共享与传递 四、使用并发容器的注意事项 1. …...
四、CSS效果
一、box-shadow box-shadow:在元素的框架上添加阴影效果 /* x 偏移量 | y 偏移量 | 阴影颜色 */ box-shadow: 60px -16px teal; /* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影颜色 */ box-shadow: 10px 5px 5px black; /* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影扩散半…...
每日OJ_牛客_DP44兑换零钱_C++_Java
目录 牛客_DP44兑换零钱 题目解析 C代码 Java代码 牛客_DP44兑换零钱 兑换零钱_牛客题霸_牛客网 描述: 给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个a…...
Linux——入门基本指令汇总
目录 1. ls指令2. pwd3. whoami指令4. cd指令5. clear指令6. touch指令7. mkdir指令8. rm指令9. man指令10. cp指令11. mv指令12. cat指令13. tac指令14. more指令15. less指令16. head指令17. tail指令18. date指令19. cal指令20. find指令21. which指令22. alias指令23. grep…...
VOSK实现【离线中文语音】识别
Vosk是一款开源的离线语音识别工具包,具有以下功能: 多语言支持:能够对20多种语言和方言进行语音识别,如中文、英语、德语、法语、西班牙语等,可满足不同用户的语言需求。 模型轻量化:每种语言的模型大小仅…...
Qt 控件与布局管理
1. Qt 控件的父子继承关系 在 Qt 中,继承自 QWidget 的类,通常会在构造函数中接收一个 parent 参数。 这个参数用于指定当前空间的父控件,从而建立控件间的父子关系。 当一个控件被设置为另一控件的子控件时,它会自动成为该父控…...
Checkbutton组件
在这个案例中,我们将添加三个复选框(Checkbutton)组件,每个组件都有不同的初始状态。 准备就绪 本文案例是在上一篇《Combobox组件》上的扩展,你可以从这里下载其中的代码。 如何操作 我们正在创建三个状态不同的复选框组件。 第一个组件是禁用状态,并且其中有一个勾…...
Markdown Viewer 浏览器, vscode
使用VS Code插件打造完美的MarkDown编辑器(插件安装、插件配置、markdown语法)_vscode markdown-CSDN博客 右键 .md 文件,选择打开 方式 (安装一些markdown的插件) vscode如何预览markdown文件 | Fromidea GitCode - 全球开发者…...
【QNX】QNX侧查看CPU的信息
目录 一 工具 ① top ▲ 使用top查看CPU信息 ▲ 输出 ② hogs ▲ 使用hogs查看CPU信息 ▲ 输出 ③ pidin ▲ 使用pidin查看CPU信息 ▲ 输出 二 对比 在QNX实时操作系统中,可查看CPU信息的方法有top、hogs以及pidin。 一 工具 ① top top命令不仅能够显…...
Android中关于View的几种属性赋值方式
我们以给TextView组件设置颜色属性展开讲解 1、xml中直接定义(设定TextView为黑色) 2、xml 中 引用style(设定TextView为蓝色) 3、在theme 中直接定义(设定TextView紫色) 4、在主题中添加对样式资源的引用…...
JavaScript网页基于tesseract.js提取图片中的文字,识别车牌,识别快递单号等
Tesseract是我们的老盆友了,以前写过基于JavaCV版本的Tesseract字符识别,现在tesseract终于可以在网页上面用了(tesseract.js),让我们一起来试试效果。 注意:本章使用Vue模块化调用tesseract.js方式&#x…...
智慧金融合集:财税资金数据管理一体化大屏
随着科技的快速进步和数字化转型的加速,金融、税务等机构和企业面临的数据量呈现出爆炸式增长。传统的数据分析方法早已无法胜任现代业务的需求。为此,许多机构开始尝试创新的软件工具来更好的管理繁琐的数据。 通过图扑软件的数据可视化大屏,…...
Android SystemUI——最近任务应用列表(十七)
对于最近任务应用列表来说,在 Android 原生 SystemUI 中是一个单独的组件。 <string-array name="config_systemUIServiceComponents" translatable="false">……<item>com.android.systemui.recents.Recents</item> </string-arra…...
工业相机 SDK 二次开发-Halcon 插件
本文介绍了 Halcon 连接相机时插件的使用。通过本套插件可连接海康 的工业相机。 一. 环境配置 1. 拷贝动态库 在 用 户 安 装 MVS 目 录 下 按 照 如 下 路 径 Development\ThirdPartyPlatformAdapter 找到目录为 HalconHDevelop 的文 件夹,根据 Halcon 版本找到对…...