【网络协议 | HTTP】HTTP总结与全梳理(一) —— HTTP协议超详细教程
🔥博客简介:开了几个专栏,针对 Linux 和 rtos 系统,嵌入式开发和音视频开发,结合多年工作经验,跟大家分享交流嵌入式软硬件技术、音视频技术的干货。
✍️系列专栏:C/C++、Linux、rtos、嵌入式开发、流媒体、数据结构、网络协议、开源库、CMake、Makefile、架构设计模式等。
文章目录
- 一、前言
- 二、HTTP 概述
- 三、HTTP 的特性
- 四、HTTP 工作流程
- 五、HTTP 请求方法
- 六、HTTP 请求格式
- 七、HTTP 响应格式
- 八、HTTP 的优缺点
- 九、示例
《HTTP总结与全梳理》系列,主要是针对HTTP协议知识点进行全面的梳理总结。此篇文章主要对HTTP协议进行详解,并列举一个简单的示例demo,该系列后续文章包括HTTP 开发调试方法抓包方法、HTTP数据上传,HTTP数据下载等文章。
一、前言
嵌入式开发工作中我们常用到一些网络协议,本章我们总结http协议,后续文章我们会陆续总结https等网络协议。在总结http协议之前,我们先熟悉一下什么是超文本。
超文本的概念最早由Ted Nelson在1960年代提出,并在1990年代因万维网(World Wide Web)的发展而广为人知。
超文本(Hypertext)是一种通过HTML(超文本标记语言)组织和呈现信息的方式。允许读者通过点击或选择文本中的链接来跳转到相关的信息或内容,这种链接通常称为“超链接”(Hyperlinks)。
在超文本中,内容可以包含文本、图像、视频等多种媒体形式,并且这些内容之间可以通过超链接进行连接和跳转。这种非线性的信息组织方式使得用户能够灵活地浏览和查找信息,而不是按照传统的线性文本顺序进行阅读。
例如,在一个网页中,您会发现许多链接,当您点击一个链接时,它会带您到另一个相关的页面或内容,这就是典型的超文本应用。
二、HTTP 概述
1. HTTP 发展历程
HTTP的发展可以追溯到1990年代初期。它经历了几个主要版本的演变,每个版本都带来了显著的改进和优化。以下是HTTP历次发展的详细历程:
1. HTTP/0.9(1991年)
HTTP的第一个版本是在1991年由WWW之父蒂姆·伯纳斯-李(Tim Berners-Lee)提出的。这是一个极其简陋的协议,只有一个GET方法,用于请求服务器上的HTML文档。它没有HTTP头部,因此无法传输元数据,所有的响应都被视为纯文本。该版本缺少如下现代HTTP特性:
方法: 只有一个GET,没有POST、PUT等。
协议头: 没有请求和响应头。
状态码: 没有标准化的状态码。
2. HTTP/1.0(1996年)
HTTP/1.0是第一个广泛使用的版本,并在1996年通过RFC 1945标准化。它引入了以下显著改进:
更多的方法: 除了GET,新增了POST和HEAD方法。
协议头: 引入了HTTP头部信息,使请求和响应更加灵活与可扩展。
状态码: 标准化了状态码,如200 OK、404 Not Found等。
多媒体支持: 支持图片、文件下载等多种媒体类型的传输。
3. HTTP/1.1(1997年)
HTTP/1.1首次在RFC 2068中定义,并在随后通过RFC 2616进行了修订和完善。它成为了至今最为广泛应用的HTTP版本,带来了多个关键特性和性能改进:
持久连接:默认保持连接,允许多个请求和响应复用同一个TCP连接,减少了连接建立和关闭的开销。
分块传输编码: 支持服务器在文档生成的同时发送响应,从而实现动态内容的高效传输。
增强的缓存机制: 引入了强缓存控制(如Cache-Control头)和条件请求(如If-Modified-Since头)。
Host头: 支持在一个服务器上托管多个域名,从而实现虚拟主机功能。
管道化: 允许在同一连接上并行发送多个请求,而不用等待前一个请求的响应,但这个特性在实践中未得到广泛使用。
4. HTTP/2.0(2015年)
HTTP/2由IETF在2015年发布(RFC 7540),其设计目标是改善HTTP/1.x的性能瓶颈,主要通过以下技术实现:
二进制分帧: 使用二进制协议替代文本协议,提升了解析速度和传输效率。
多路复用: 在同一个TCP连接上并发地传输多个请求和响应,减少了延迟并提高了网络利用率。
头部压缩: 采用HPACK算法压缩HTTP头部,减少头部信息的传输开销。
服务器推送: 允许服务器主动向客户端推送资源,以提前加载页面所需资源,提升响应速度。
5. HTTP/3(2022 还在完善中)
HTTP/3是最新一代的HTTP协议,目前正处在标准化过程当中,部分草案已经由IETF发布。HTTP/3的关键区别在于它基于QUIC(Quick UDP Internet Connections)协议,而不是传统的TCP。QUIC是Google开发的一种基于UDP的协议,旨在解决TCP的延迟和连接可靠性问题。HTTP/3的主要特点包括:
基于UDP的QUIC协议:通过使用UDP来替代TCP,减少了连接建立时间和抗网络抖动的能力。
快速重连: 在网络改变或中断时,实现快速重连而不需要重新建立连接。
改进的流控制:在HTTP/3中,多个流之间完全独立,减少了拥塞和阻塞问题。
未来的发展
HTTP仍在不断演进中,以适应日益增长的互联网需求和新兴的网络技术。每个新版本的发布都致力于解决前一个版本中的缺陷和优化网络性能。
2. HTTP 简述
HTTP全称为 Hypertext Transfer Protocol,中文含义为“超文本传输协议”。 HTTP协议是一个基于请求/响应模式的应用层协议。
HTTP往往是基于TCP/IP协议传输数据,但也有HTTP是基于UDP协议来传输数据。通过上面讲述的HTTP发展历程可知,HTTP1.0、HTTP1.1、HTTP2.0均是基于TCP实现,而HTTP3则是基于UDP实现。
HTTP协议定义了客户端与服务器之间的通信规范,以实现对各种资源(如文本、图像、音频、视频等)的传输和访问。通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
OSI参考模型和TCP/IP分层模型示意图为:
三、HTTP 的特性
无状态
HTTP是无状态协议,这意味着每个请求都是独立的,服务器不保留任何有关之前请求的信息。这种设计使得HTTP具有很高的灵活性和可扩展性,但也带来了会话管理的挑战,通常通过Cookies、Session等机制实现。
无连接
HTTP的“无连接”特性指的是每次HTTP请求与响应之间并不要求客户端和服务器之间保持长时间的通信连接。具体来说,客户端在发送请求并接收到服务器的响应后,连接就会被立即关闭,这样的设计使得每个请求/响应对都独立于其他请求/响应对。
虽然HTTP协议本身是无连接的,但其具体实现上有所不同:
短连接
短连接(短链接)是HTTP/1.0协议默认使用的一种连接方式。特性如下:
- 每个请求/响应对结束后立刻关闭连接: 在HTTP/1.0中,客户端和服务器的每次请求/响应对都会建立一个新的TCP连接,并在请求完成后关闭连接。
- 高连接开销: 由于每次请求都要重新建立和关闭连接,短连接会导致较高的连接开销。
- 适用于低频率的请求: 短连接适用于那些不频繁发送请求的情况,但当请求频繁时,会带来额外的负载和延时。
长连接
长连接(长链接)是HTTP/1.1及以上版本默认支持和推荐的连接方式。长连接并不是一直保持连接不断开,而是在一定的时间范围内保持连接,以便可以复用已有的连接来处理多个请求和响应。特性如下:
- 连接保持一段时间: 长连接在请求完成后不会立即关闭,可以保持TCP连接一定时间(通常这个时间由服务器设置的一段超时时间决定)。在此连接期间,客户端可以继续发送多个请求。HTTP/1.1及以上版本默认使用长连接,Connection: keep-alive不需要显式指定。如果不使用长连接,需要明确指定Connection: close不使用长连接。
- 减少连接开销: 由于减少了重复的TCP握手和连接建立、关闭的过程,长连接显著降低了连接开销,提高了请求效率和响应速度。
- 支持多个请求/响应对: 在一个长连接上,客户端可以发送多个请求,每个请求可以在不同的时候被发送。例如,浏览器可以在一个长连接上不断地获取网页上的多个资源(图片、CSS文件、JavaScript等)。
四、HTTP 工作流程
HTTP协议采用了请求/响应模型,定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
1. 客户端连接到Web服务器 一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.baidu.com。
2. 发送HTTP请求 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3. 服务器接受请求并返回HTTP响应 Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4. 释放连接TCP连接 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5. 客户端浏览器解析HTML内容。客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。
五、HTTP 请求方法
方法 | 描述 |
---|---|
GET | 用于获取服务器上的资源。当客户端发送GET请求时,服务器将返回相应请求的资源 ,GET请求的参数会附在URL后面,因此可能会受到长度限制 |
HEAD | 类似于GET请求,但只返回资源的报头信息,而不返回实际的资源内容。HEAD请求常用于检查资源的元数据,例如最后的修改时间、ETag等 |
POST | 用于向服务器提交数据,并请求服务器进行处理。POST请求通常用于向服务器发送表单数据、上传文件、进行用户登录等操作。相对于GET请求,POST请求没有长度限制,并且不会将参数暴露在URL中,而是放在请求体中进行传输 |
PUT | 用于创建或更新服务器上的资源。PUT请求类似于POST请求,但PUT请求要求在指定的URL上创建或更新资源。如果资源已存在,则会进行更新;如果资源不存在,则会进行创建 |
DELETE | 用于删除服务器上的资源。DELETE请求会删除指定URL对应的资源。删除后,相应的URL将不再存在。 |
CONNECT | 主要用于代理服务器,指示代理服务器与目标服务器建立隧道连接 |
OPTIONS | 用于获取目标URL所支持的请求方法。服务器收到OPTIONS请求后,会返回该URL所支持的请求方法列表 |
TRACE | 用于将请求上的报头信息回显给客户端,用于调试或诊断信息 |
在实际嵌入式开发中,上述方法大部分都使用不到,最常见的HTTP方法是GET、PUT、POST。
六、HTTP 请求格式
客户端发送一个HTTP请求到服务器的请求消息格式包括:请求行、请求头、空行、请求体(请求数据)四部分组成
下图示例:
请求头里面的这些键值对含义,看下表:
请求头 | 作用 | 示例 |
---|---|---|
Host | 指定请求的目标主机的域名和可选的端口号 | Host: www.example.com |
User-Agent | 包含发出请求的浏览器或客户端的信息 | User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) |
Accept | 告知服务器客户端能够处理的内容类型 | Accept: text/html;image/apng |
Accept-Language | 指定客户端首选的自然语言 | Accept-Language: zh-CN |
Accept-Encoding | 指定客户端支持的内容编码方式(如压缩算法) | Accept-Encoding: gzip, deflate |
Cookie | 包含之前由服务器发送并存储在客户端的cookie | Cookie: sessionId=abc123; logged_in=true |
Referer | 告知服务器请求来源(引荐资源)的URL | Referer: https://www.google.com/ |
Connection | 控制连接的处理 | Connection: keep-alive |
Content-Type | 告知服务器请求主体包含的数据的类型 | Content-Type: application/json |
Content-Length | 表示请求主体的长度(以字节为单位) | Content-Length: 16 |
Authorization | 包含认证信息,用于身份验证 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | 指示请求和响应的缓存机制 | Cache-Control: no-cache |
Range | 请求特定范围的资源部分,它是断点续传的基础 | Range: bytes=500-999 |
需要注意的是,这个Content-Length表示请求体里面的数据长度,即“name=ueno&age=37”长度正好为16
七、HTTP 响应格式
HTTP响应也由四部分组成,分别是:响应行、响应头、空行和响应体(响应正文)。
下图示例:
响应头里面的这些键值对含义,看下表:
响应头 | 作用 | 示例 |
---|---|---|
Date | 指明响应被发送的日期和时间 | Date: Wed, 21 Oct 2023 07:28:00 GMT |
Server | 包含处理请求的服务器软件的信息 | Server: Apache/2.4.41 (Ubuntu) |
Content-Type | 指示响应主体的数据类型 | Content-Type: text/html; charset=UTF-8 |
Content-Length | 表示响应主体的长度(以字节为单位 | Content-Length: 169 |
Content-Encoding | 指示服务器对响应主体使用的编码方式 | Content-Encoding: gzip |
Last-Modified | 表示所请求资源的最后修改日期和时间 | Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT |
ETag | 提供资源的特定版本标识符,用于缓存优化 | ETag: “5d8c72a5edda3f30b6cf15e66f3591b2” |
Accept-Ranges | 指示服务器是否支持范围请求及范围单位 | Accept-Ranges: bytes |
Cache-Control | 告诉客户端如何缓存响应 | Cache-Control: no-cache, no-store, must-revalidate |
Expires | 指定响应过期的日期和时间,过期后需要重新请求 | Expires: Wed, 21 Oct 2024 07:28:00 GMT |
Set-Cookie | 设置HTTP cookie,发送到客户端以存储信息 | Set-Cookie: sessionId=abc123; Path=/; HttpOnly |
Location | 用于重定向响应,告知客户端重新请求的位置(URL) | Location: https://www.example.com/newpage |
Connection | 控制当前连接的管理 | Connection: keep-alive |
Transfer-Encoding | 指示响应主体的传输编码方式,用于分块传输 | Transfer-Encoding: chunked |
Retry-After | 告知客户端多久之后可以再次请求资源,通常用于503状态码 | Retry-After: 120 |
需要注意的是,所有HTTP响应的第一行都是状态行,即响应行就是状态行。状态行内容依次是当前HTTP版本号,3位数字组成的状态码,以及描述状态的短语,彼此由空格分隔。状态码的第一个数字代表当前响应的类型,如下图:
关于HTTP详细的状态码可查看开发文档 HTTP 响应状态码
关于HTTP更多内容,详细可查看开发文档 HTTP 开发文档
八、HTTP 的优缺点
以下是HTTP的优点和缺点:
优点:
- 简单且易于实现: HTTP协议结构简单,快速且易于实现,对于开发和调试非常方便。
- 广泛支持: 几乎所有的现代互联网应用和设备都支持HTTP,使其成为一个非常通用的协议。
- 无状态性: HTTP是无状态协议,这意味着每个请求都是独立的,不依赖于前面的请求。这简化了服务器设计和应用逻辑。
- 兼容性好: HTTP可以使用不同的传输层(如TCP、QUIC等),这使得它在不同的网络环境中具有良好的兼容性。
- 支持多种媒体类型: HTTP可以传输各种类型的数据,如HTML文档、图像、视频、JSON、XML等。
缺点:
- 无状态性: 尽管无状态性使得HTTP简单易实现,但它也导致了每次请求/响应之间不能保留客户端的状态,需要使用cookie、session等技术来实现状态保存。
- 安全性较低: 原生的HTTP不加密,明文传输,数据在传输过程中容易被截取和篡改。HTTPS(HTTP + SSL/TLS)可以解决这个问题,但增加了复杂度和性能开销。
- 性能问题: HTTP/1.1的请求/响应模型使得每次请求都要建立新的TCP连接或复用已有连接,但仍会带来延迟和开销。在HTTP/2和HTTP/3中有所改进,但也增加了复杂度。
- 冗长的头部: HTTP协议的请求和响应中,头部信息较为冗长,占用了额外的带宽。
- 资源误用: 无状态性和握手开销使得HTTP在大量短连接情况下,比较消耗服务器资源。
九、示例
示例通过http的GET方法连接www.example.com,并获取其响应打印出来。www.example.com的界面如下:
1、目录结构
project
└── http.c
2、http.c源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>#define BUFFER_SIZE 4096void error_handling(const char *message)
{perror(message);exit(EXIT_FAILURE);
}int main()
{const char *hostname = "www.example.com";const char *portnum = "80";const char *path = "/";int sockfd;struct addrinfo hints, *res;char buffer[BUFFER_SIZE];int bytes_received;memset(&hints, 0, sizeof(hints));hints.ai_family = AF_UNSPEC;hints.ai_socktype = SOCK_STREAM;if (getaddrinfo(hostname, portnum, &hints, &res) != 0) {error_handling("getaddrinfo() error");}sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);if (sockfd == -1) {error_handling("socket() error");}if (connect(sockfd, res->ai_addr, res->ai_addrlen) == -1) {error_handling("connect() error");}freeaddrinfo(res);snprintf(buffer, sizeof(buffer),"GET %s HTTP/1.1\r\n""Host: %s\r\n""Connection: close\r\n""\r\n",path, hostname);printf("*********Request*********\n");printf("%s", buffer);if (write(sockfd, buffer, strlen(buffer)) == -1) {error_handling("write() error");}while ((bytes_received = read(sockfd, buffer, BUFFER_SIZE - 1)) > 0) {buffer[bytes_received] = '\0';printf("*********Response*********\n");printf("%s", buffer);}if (bytes_received == -1) {error_handling("read() error");}close(sockfd);return 0;
}
3、编译运行
在project目录,执行命令,生成可执行文件app
gcc -o app http.c
运行结果
请求报文:
响应报文:
相关文章:
【网络协议 | HTTP】HTTP总结与全梳理(一) —— HTTP协议超详细教程
🔥博客简介:开了几个专栏,针对 Linux 和 rtos 系统,嵌入式开发和音视频开发,结合多年工作经验,跟大家分享交流嵌入式软硬件技术、音视频技术的干货。 ✍️系列专栏:C/C、Linux、rtos、嵌入式…...
java基础选择题--11
1. 以下保留字( )不能出现在说明虚函数原型的语句中。A.static B.operator C.void D.const 参考答案:A 2. 一个类中只能定义一个析构函数。( )A.对 B.错 参考答案:A 解释: 在C中,一个类只能有一个析构函数。析构函数在对象生…...
欲除烦恼须无我,各有前因莫羡人
欲除烦恼须无我,各有前因莫羡人...
Vue的APP实现下载文件功能,并将文件保存到手机中
Vue的APP实现下载文件功能,并将文件保存到手机中 文字说明后台核心代码前台核心代码运行截图项目链接 文字说明 本文介绍Vue实现的APP,将文件下载并保存到手机中,为系统提供导出功能;同时支持导入,即选择本地的文件后&…...
泛微开发修炼之旅--07通过后端代码实现创建并发送待办、源码及示例
文章链接:泛微开发修炼之旅--07通过后端代码实现创建并发送待办、源码及示例...
轻松搭建AI应用的三个大模型技术路线
时下聊起AI,想必最热的就是使用AI的应用(chatGPT,文心一言等)来提升自己工作的效率,比如破局俱乐部,洋哥带领星球2万多人开启大航海,教人使用这一波新起的应用进行赚钱与赋能。 在我的视角来看…...
Vue01-vue的简介
一、Vue是什么? 一套用于构建用户界面的渐进式javaScript框架。 构建用户界面: 渐进式: 目前Vue的地位:生态完善,国内前端工程师必备技能。 二、Vue的特点 一个XXX.vue就是一个组件,封装的概念,…...
leetcode455.分发饼干、376. 摆动序列、53. 最大子序和
455.分发饼干 为了满足更多的小孩,就不要造成饼干尺寸的浪费 大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的 这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最…...
JVM的内存结构
JVM 内存结构 方法区: 方法区主要用于存储虚拟机加载的类信息、常量、静态变量,以及编译器编译后的代码等数据。 程序计数器 由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时间的,因此,在任一具体时刻,一个CP…...
轻量管理内核复杂级别的项目
在嵌入式开发中,管理大型项目(例如Linux内核)往往是一个复杂的过程。常规的版本控制系统如Git在处理小型项目时非常高效,但面对庞大的代码库时可能会显得笨重且占用大量存储空间。本文将介绍几种轻量级的方法来管理内核级别的项目…...
【wiki知识库】05.分类管理模块--后端SpringBoot模块
📝个人主页:哈__ 期待您的关注 目录 一、🔥今日目标 二、☀SpringBoot代码修改 1.使用逆向工程生成Category表结构 2. 新增CategoryQueryParam 3.新增CategorySaveParam 4.新增CategotyQueryVo 三、🤖新增分类管理的相关接口…...
资源目录与云SSO
1、开启资源目录 2、创建资源文件夹(根据公司业务划分) 3、资源文件夹内创建或邀请成员 4、创建管控策略(类型访问控制权限授权方法,可以授权给指定给资源文件夹或资源文件夹内成员) 5、可信服务-委派管理员账号数量 …...
ChatGPT AI专题资料合集【65GB】
介绍 ChatGPT & AI专题资料合集【65GB】 🎁【七七云享】资源仓库,海量资源,无偿分享√...
Linux 编译安装python
以deepin操作系统安装Python3.8.10为例。 下载 python3.8.10 官网下载 Linux要下载源码,进行编译。 下图tarball即tar包,是压缩包的意思。python官网给出两种压缩格式的tarball,下载哪个都可以。 方式一:直接点击链接下载 方式…...
2025 QS 世界大学排名公布,北大清华跻身全球前20
一年一度,2025 QS 世界大学排名公布! QS(Quacquarelli Symonds)是唯一一个同时将就业能力与可持续发展纳入评价体系的排名。 继去年 2024 QS 排名因为“墨尔本超耶鲁,新南悉尼高清华”而荣登微博热搜之后,…...
clickhouse(十五、存储优化实践)
文章目录 背景问题定位优化方式排序键设计写入顺序压缩算法 DoubleDeltaLowCardinality避免使用Nullable 总结 背景 clickhouse集群容量告警,项目中某些表占据大量的存储空间,借此机会对ck的存储优化进行实践学习,并通过多种方式测试验证优化…...
ubuntu下搭建Supervisor
sudo apt update #安装 sudo apt install supervisor#启动 supervisord 服务: sudo systemctl start supervisor#关闭 supervisord 服务 sudo systemctl stop supervisor#重启 supervisord 服务 sudo systemctl restart supervisor#设置 supervisord 开机自启 sudo …...
在HTML和CSS当中运用显示隐藏
1.显示与隐藏 盒子显示:display:block;盒子隐藏: display:none:隐藏该元素并且该元素所占的空间也不存在了。 visibility:hidden:隐藏该元素但是该元素所占的内存空间还存在,即“隐身效果”。 2.圆角边框 在CSS2中添加圆角,我们不得不使用背景图像&am…...
Java基础27,28(多线程,ThreadMethod ,线程安全问题,线程状态,线程池)
目录 一、多线程 1. 概述 2. 进程与线程 2.1 程序 2.2 进程 2.3 线程 2.4 进程与线程的区别 3. 线程基本概念 4.并发与并行 5. 线程的创建方式 方式一:继承Thread类 方式二:实现Runable接口 方式三:实现Callable接口 方式四&…...
C#WPF数字大屏项目实战04--设备运行状态
1、引入Livecharts包 项目中,设备运行状态是用饼状图展示的,因此需要使用livechart控件,该控件提供丰富多彩的图形控件显示效果 窗体使用控件 2、设置饼状图的显示图例 通过<lvc:PieChart.Series>设置环状区域 3、设置饼状图资源样…...
IntelliJ IDEA安装
IntelliJ IDEA 的安装、配置与使用-简化版 一、IntelliJ IDEA 介绍 1.JetBrains 公司介绍 IDEA(https://www.jetbrains.com/idea/)是 JetBrains 公司的产品,公司旗下还有其 它产品,比如: ➢ WebStorm:用于开发 JavaScript、HT…...
铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型
铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型。工业物联数字孪生平台以5G技术为基础,通过工业物联网连接铸铁机械生产过程中的各个环节,运用数字孪生技术构建虚拟工厂,实现生产过程的实时监测、模拟与优化&#…...
rocketmq No route info of this topic 问题排查
Broker配置项 autoCreateTopicEnable true 如果是单节点(master),注释掉这里的配置 #有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制; #brokerRole SYNC_MASTER Pytho…...
STEEL ——首个利用 LLM 检测假新闻的框架算法解析
1.概述 近年来,假新闻的泛滥确实对政治、经济和整个社会产生了深远的负面影响。为了解决这一问题,人们开发了各种假新闻检测方法,这些方法试图通过分析新闻内容、来源和传播方式来识别虚假信息。 然而,正如你所提到的࿰…...
【AREngine BUG 解决方法】无法获取有效的相机图像尺寸
近期拿了一台 华为mate20 Pro的手机,在运行AR示例的过程中出现了黑屏。 问题排查 SDK版本:com.huawei.hms:arenginesdk:3.7.0.3 定位 经排查,发现(ARCamera对象的相机内参) getImageDimensions()返回的图像尺寸的width和height都为0。 这…...
植物大战僵尸杂交版2.0.88最新版+防闪退工具V2+修改工具+高清工具
植物大战僵尸杂交版,不仅继承原作的经典玩法,而且引入了全新的植物融合玩法,将各式各样的植物进行巧妙的杂交,孕育出前所未有、功能各异的全新植物。 创新的杂交合成系统 游戏引入了创新的杂交合成系统,让玩家可以将不…...
面试题:说说你对 JS 中 this 指向的了解
面试题:说说你对 JS 中 this 指向的了解 JS 的代码执行环境分为严格模式和非严格模式,可以通过 use strict 打开严格模式,此时 JS 在语法检查上会更加严格。要讨论 JS 中的 this 指向问题,也要分为严格模式和非严格模式进行讨论。…...
分享一个实用的MySQL一键巡检脚本
今日分享一个实用的MySQL一键巡检脚本,脚本内容还不是很完善,后续会继续进行优化。大家可以先在测试环境执行,确认执行没问题后可以在生产环境进行操作,问题的可以私信我。 MySQL一键巡检脚本的作用主要是帮助数据库管理员快速且…...
【动手学深度学习】卷积神经网络CNN的研究详情
目录 🌊1. 研究目的 🌊2. 研究准备 🌊3. 研究内容 🌍3.1 卷积神经网络 🌍3.2 练习 🌊4. 研究体会 🌊1. 研究目的 特征提取和模式识别:CNN 在计算机视觉领域被广泛用于提取图像…...
2024年数字化经济与智慧金融国际会议(ICDESF 2024)
2024 International Conference on Digital Economy and Smart Finance 【1】大会信息 大会时间:2024-07-22 大会地点:中国成都 截稿时间:2024-07-10(以官网为准) 审稿通知:投稿后2-3日内通知 会议官网:h…...
橙子建站验证码/新乡seo公司
关注回复[目录]学习113篇Excel教程全套Excel视频教程,扫码观看编按:哈喽,大家好!今天是部落窝函数课堂的第7课,我们将一起来认识FIND函数!对于FIND函数,相信大家或多或少都会有一点印象…...
广州网络营销品牌/上海专业seo服务公司
虽然 Python 提供了一些简单的数据结构类型,如 list 、 tuple 、 set 和 dict;这些数据类型可以满足我们日常使用,但 collections 就是为了代替这些标准数据类型而来。快速查看表collections 提供了 8 个 对象和 1 个工厂函数对象功能deque类…...
怎么做简单的微信浏览的网站/成都最新数据消息
http://www.52c51.com/article/63.html市场上盛行的电子高压灭蚊手拍(简称“电蚊拍”),以其实用、灭蚊效果好、无化学污染、安全卫生等优点,普遍受到人们的欢迎。其实这种电灭蚊拍线路简单,具有一定电子制作能力的青少…...
公司做网站计入什么科目/长沙seo网站排名优化公司
Git的功能特性:从一般开发者的角度来看,git有以下功能:1、从服务器上克隆数据库(包括代码和版本信息)到单机上。2、在自己的机器上创建分支,修改代码。3、在单机上自己创建的分支上提交代码。4、在单机上合…...
高明网站建设/外媒头条最新消息
2需求分析 本文档记录的需求分析,是软件系统处于筹备计划阶段的活动。该阶段主要分析系统在功能上需要实现什么,而暂时不考虑考虑如何去实现。需求分析的目标是把用户对待开发软件提出的“要求”或“需要”进行分析与整理,确认后形成描述完整…...
wordpress自动水印/中国疫情最新情况
HDFS的设计目标 通过上一篇文章的介绍我们已经了解到HDFS到底是怎样的东西,以及它是怎样通过多副本机制来提供高可靠性的,我们可以发现HDFS设计目标可以总结为以下几点: 非常巨大的分布式文件系统 运行在普通廉价的硬件上 易扩展、为用户提供性能不错的文件存储服务 HDFS的…...