HTTP协议

article/2025/9/30 13:11:44

目录

前置 

1.网络划分

1)局域网

2)广域网

2.IP地址和端口号

1)IP地址

2)端口号

3.网络通信

一,概念

1.HTTP

2.二进制数据和文本

二,抓包

1.网络抓包

2.URL(统一资源定位器)

(1)https(协议)

(2)www.baidu.com

(3)端口号

(4)带层次的资源路径

(5)查询字符串:querystring

注意:

URL 中的可省略部分

三, http协议格式 

1)首行

2)header头

3)空行

4)body

四,请求方法

1)概念

2)GET

3)POST 

 4)其他方法

5)url长度问题

6) GET和POST的区别

5.header头

1)Host

2)Content-Length

3)Content-Type

4)User-Agent(UA)

5)Referer

6)Cookie(请求头)

7)Set-Cookie(响应头)

8)Session

9)补充(关于Session和Cookie的时间)

五,HTTP响应状态码

1.状态码

2.状态码(200)

3.状态码(301)

4.状态码(302)

5.状态码(304)

6.状态码(307)

7.状态码(403)

8.状态码(404)

9.状态码(405)

10.状态码(500)

11.状态码(504)

六,Ajax

1.form构造http请求

2.Ajax构造get方法

3.Ajax构造post方法

4.Ajax封装


前置 

1.网络划分

1)局域网

局域网,简称LAN,是指在某一区域内有多台计算机互联组成的计算机组,这些主机就可以互相通信,互相访问对方提供的资源

2)广域网

广域网,简称WAN,大家公认的开放的网络,连接上的主机都能访问

2.IP地址和端口号

1)IP地址

标识网络上某个主机的网络地址

格式:四个部分,每个部分之间用 . 分隔,每个部分0-255(8个比特位,一个字节)

本机IP:127.0.0.1

2)端口号

标识网络通信中,某个主机的某个进程

结合IP和port就可以知道要获取,网络上哪个主机的哪个进程

通俗点讲:IP地址就像是一个街道,让你直到具体在哪个街道(哪个主机),然而,端口号就像是门牌号,告诉你是哪家(哪个进程)

3.网络通信

通过网络,获取网络上某个主机的某个进程(资源)

一,概念

1.HTTP

HTTP协议也称“超文本传输协议”,是一种应用非常广泛的应用层协议

  • 所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片, 视频, 音频等二进制的数据 

2.二进制数据和文本

文本是带编码的二进制数据,两者其实是可以相互转化的,http是属于文本格式,内部可以包含一些二进制数据

1)在Java中,String有getByte("编码")就可以将字符串转化为二进制数据

2)new String(字节数组,"编码"),就可以将二进制数据转化为字符串

二,抓包

1.网络抓包

网络通信时,抓取传输的请求和相应的数据包

1)开发者工具:没有http协议原生格式的内容

2)fiddler:可以看到http原生格式的数据包 

2.URL(统一资源定位器)

标识网络中,某个资源的路径(俗称网址),它具有全球唯一性,正确的URL才可以打开此网页

https://www.baidu.com/personInf/student?userId=10000&classId=100

(1)https(协议)

指定使用的传输协议,最常用的是HTTP协议,它也是WWW中应用最广的协议。

(2)www.baidu.com

服务器路径,可以使用IP,也可以使用域名

本机ip:127.0.0.1

本机域名:localhost

(3)端口号

浏览器不输入端口号:http协议默认使用80端口号,https默认使用443端口

(4)带层次的资源路径

标识在某个服务器中,具体某个资源的路径,如果没有输入资源路径,就是访问/

(5)查询字符串:querystring

起的作用就是获取某个资源下的不同的数据

格式:键值对格式,键=值,多个键值对之间用&间隔

key1=value1&key2=value2

注意:

  • 如果URL中包含特殊字符,中文,空格等,都会转义,再放在http协议的数据包中,发送http请求
  • urlencode(url编码):将里面的中文,空格等转换为16进制
  • urldecode(url解码):将url中16进制数据转换为原始的中文,空格等

URL 中的可省略部分

  • 协议名: 可以省略, 省略后默认为 http://
  • ip 地址 / 域名: 在 HTML 中可以省略(比如 img, link, script, a 标签的 src 或者 href 属性). 省略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致.
  • 端口号: 可以省略. 省略后如果是 http 协议, 端口号自动设为 80; 如果是 https 协议, 端口号自动设为 443.
  • 带层次的文件路径: 可以省略. 省略后相当于 / . 有些服务器会在发现 / 路径的时候自动访问/index.html
  • 查询字符串: 可以省略
  • 片段标识: 可以省略

三, http协议格式 

1)首行

  1. 请求行:请求方法 url http版本号
  2. 响应行/状态行:http版本号 状态码 状态码描述

2)header头

  • 包括请求头/响应头:标识具有http协议的属性
  • 格式:key: value(n对键值对,n对键值对之间用换行符间隔,冒号后边最好有一个空格)
  • 在http协议中,有标准的header键,但是程序员也可以约定header键

3)空行

header家属,一直读取到空行,就可以解析到header

提问:为什么要有空行?空行存在的作用/意义

因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 "报头的结束标记", 或者
是 "报头和正文之间的分隔符".HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题"

4)body

请求正文/响应正文:请求携带的数据

四,请求方法

1)概念

标识具体是以什么方式来操作资源:获取/保存/修改/删除等(操作资源的类型)

2)GET

  1. GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源.
  2. 在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求.
  3. 另外, HTML 中的 link, img, script 等标签, 也会触发 GET 请求.
  4. 使用 JavaScript 中的 ajax 也能构造 GET 请求
  • 获取资源(不一定遵守)
  • 在浏览器地址栏中输入url,默认是GET请求方法
  • 携带数据:使用queryString存放
  • body(约定为空)不一定遵守

3)POST 

  1. POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面).
  2. 通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript 的 ajax 也可以构造 POST 请求       
  • 提交数据到服务端
  • 不使用queryString(不一定遵守)
  • 使用body

 4)其他方法

  • PUT 与 POST 相似,只是具有幂等特性,一般用于更新
  • DELETE 删除服务器指定资源
  • OPTIONS 返回服务器所支持的请求方法
  • HEAD 类似于GET,只不过响应体不返回,只返回响应头
  • TRACE 回显服务器端收到的请求,测试的时候会用到这个
  • CONNECT 预留,暂无使用

5)url长度问题

浏览器和web服务器可以配置url的最大长度,如果没有配置,就是用默认的长度

常见问题:

实际 URL 的长度取决于浏览器的实现和 HTTP 服务器端的实现. 在浏览器端, 不同的浏览器最大长
度是不同的, 但是现代浏览器支持的长度一般都很长; 在服务器端, 一般这个长度是可以配置的

6) GET和POST的区别

(1)语义上:GET是获取资源//数据,POST是提交资源或数据(可以打破)

(2)存放的位置:GET放在queryString上,POST放在body(可以打破)

(3)GET具有幂等性,POST不具有幂等性(如果多次请求到的结果一样,就是具有幂等性)

(4)GET可以缓存,POST不可以缓存

  • 关于语义: GET 完全可以用于提交数据, POST 也完全可以用于获取数据.
  • 关于幂等性: 标准建议 GET 实现为幂等的. 实际开发中 GET 也不必完全遵守这个规则(主流网站都有 "猜你喜欢" 功能, 会根据用户的历史行为实时更新现有的结果.
  • 关于安全性: 有些资料上说 "POST 比 GET 请安全". 这样的说法是不科学的. 是否安全取决于前端在传输密码等敏感信息时是否进行加密, 和 GET POST 无关.
  • 关于传输数据量: 有的资料上说 "GET 传输的数据量小, POST 传输数据量大". 这个也是不科学的, 标准没有规定 GET 的 URL 的长度, 也没有规定 POST 的 body 的长度. 传输数据量多少,完全取决于不同浏览器和不同服务器之间的实现区别.
  • 关于传输数据类型: 有的资料上说 "GET 只能传输文本数据, POST 可以传输二进制数据". 这个也是不科学的. GET 的 query string 虽然无法直接传输二进制数据, 但是可以针对二进制数据进行 url encode

5.header头

标识http数据包属性

常用的键:

1)Host

标识服务器地址(域名/IP + port)

2)Content-Length

标识body的长度,对方才能根据这个长度来解析

  • 客户端发送请求给服务端,对方就是服务端
  • 服务端发送请求给客户端,对方就是客户端

3)Content-Type

常见的格式

a)application/x-www-form-urlencoded: form 表单提交的数据格式.和queryString格式一样,这里的字段值,只能是简单的数据类型

title=test&content=hello

b)multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped="multipart/form-data" . 通常用于提交图片/视频(也可以是简单地数据类型)

c)image/jepg:指定具体的一个文件类型 

d)application/json:请求和响应都常用,和js对象的格式差不多(只是键也需要加双引号)

{"username":"张三","password":"123456","age":18
}

请求:一般就是输入一些内容后,提交数据到服务端

响应:一般就是服务端返回一些数据,客户端js代码获取响应数据,然后填充到html中

4)User-Agent(UA)

也就是常说的浏览器表示,比如pc,手机等

5)Referer

标识当前这次的http请求是从那个页面点击或者跳转过来的

6)Cookie(请求头)

  • 一种客户端保存数据的技术
  • 保存数据:由服务端响应的http数据包中,设置Set-Cookie(一个或多个),Cookie是和网站关联,不同的网站有不同的Cookie(保存的信息如账号等不同网站保存为本地不同的Cookie)
  • 使用:浏览器在每次请求时,自动携带在请求Cookie头中
  • 格式:多组键值对(键=值,多个键值对之间用分号间隔)

7)Set-Cookie(响应头)

 

8)Session

  • 一种服务端保存数据的技术,由于HTTP协议是一种无状态协议,一次请求一次响应,服务端无法感知之前登录的用户(服务端没有保存用户状态)
  • 在服务端使用一个Map<String,Session>的数据结构来保存用户信息,这里的String就像是sessioid,一个Session对象就是一个用户会话,里面可以存放一个用户的需要保存的很多信息,这里的Sessio也是一个Map<String,Object>的结构,至于存放什么样的键值对数据,后端程序员实现

9)补充(关于Session和Cookie的时间)

Session:

  • 服务端保存的Session信息,有默认的过期的时间(也可以通过程序设置)
  • 服务器有session过期检验机制:通过单独的一个线程来扫描,发现当前时间和session最后一次使用的时间超时,就删除掉
  • 服务端默认存放session的地方,web服务器默认是放在内存中,所以重启服务器,session也就没了(有些web服务器把数据存放在硬盘中,重启就还有)
  • 注销后,时间超时后,重启后,服务端保存的session就没有了

Cookie:

  • Cookie也有过期时间(可以通过程序来设置)
  • 若Cookie过期,浏览器就找不到相应的令牌,就相当于无法验证

五,HTTP响应状态码

1.状态码

三位数字构成,标识服务端对客户端这次请求的处理结果,HTTP响应报文,都是服务端返回的,状态码也可以由程序设置

2.状态码(200)

  • 标识服务端对当次请求处理成功(约定的规范)
  • 如果程序有bug,出现异常,应该返回其他的状态码,但返回了200,就需要程序员去检查后端代码逻辑

3.状态码(301)

301:Moved Permanently:永久重定向

4.状态码(302)

302:Moved temporarily:临时重定向(和301看起来效果一样)

5.状态码(304)

304:Not Found:标识之前已经访问过的资源

  • 本次请求的资源,没有被修改过,内容为空
  • 如果服务端的资源没有变化,这样就节省了传输数据流量
  • 当服务器代码发生改变或者重启服务器时,则重新发出资源
  • 当服务器有变化时,客户端能得到最新的资源

6.状态码(307)

307也是临时重定向,和302的区别是:

307要求客户端不改变原先的请求方法,对在Location头部中规定的uri进行访问,对于,302,很多客户端的实现是,直接使用get方式访问重定向地址

7.状态码(403)

403:Forbidden:禁止访问,一般有两种情况

  1. 未登录去访问
  2. 登录后,权限不足

8.状态码(404)

404:Not Found:标识请求的url路径没有对应的资源

url的格式:[协议名]//:[ip或域名]:[port]/[带层次的路径]?[查询字符串]

找不到主机,或者找不到进程(port),找不到资源路径

9.状态码(405)

405:Method Not Allowed:方法不支持

服务端提供的方法是一个或者多个,请求的方法没在服务提供的方法范围内,返回405

  • 如果出现405,要检查是前端的请求方法不对还是后端提供的方法不对

10.状态码(500)

500:Internal Server Error:服务器内部错误

一般是服务器内部代码有问题,出现异常等,如果出现,一定要检查后端的堆栈信息,定位后端的代码问题

11.状态码(504)

504:Gateway Timeout:请求在服务端处理超时

  • 服务端也有时间限制(可以设置),发现处理时间超过这个时间就返回504(如果请求过多,并发高问题,处理不过来,还可能是程序效率低)
  • 客户端请求也是有时间限制的,如果服务端没有在时间限制内返回,就报错

六,Ajax

1.form构造http请求

<body><!-- form表单提交数据到服务端:action是请求的url,method是请求方法 --><!-- get方法默认请求数据放在queryString,post方法默认是body上 --><!-- post默认提交方式(Content-Type)为表单格式(application/x-www-form-urlencoded) --><form action="http://abc.com" method="get"><!-- 表单中的控件(文本框,密码框,单选复选框,下拉菜单等)都以name为键,用户输入/选择 的内容为值 --><!-- 键=值,多个之间 & 间隔 --><input type="text" name="username"><input type="password" name="password"><input type="submit" value="提交"></form>
</body>

2.Ajax构造get方法

<script>// XMLHttpRequest对象就是ajax发送请求及处理响应的对象let xhr = new XMLHttpRequest();// 设置一个异步回调函数到ajax对象的属性中// 注意:这里只是函数的声明,不会执行,而是发送http请求,对应的事件发生,才调用回调函数xhr.onreadystatechange = function(){// xhr.readyState属性:// 0: 请求未初始化:还没发送http请求// 1: 客户端和服务器的连接已建立:// 2: 服务端已接收请求// 3: 服务端正在处理请求// 4: 客户端已收到服务端返回的响应,且响应已就绪if(xhr.readyState == 4){// xhr.status属性:响应状态码console.log(xhr.status);// xhr.responseText属性:响应正文console.log(xhr.responseText);}}// open:设置请求方法和url,此时还没有发送http请求xhr.open("GET", "http://42.192.83.143:8089/AjaxMockServer/info");// send:正式发送http请求,也可以设置请求正文(body)数据xhr.send();//send(), send(body)两种方式
</script>

3.Ajax构造post方法

<script>// XMLHttpRequest对象就是ajax发送请求及处理响应的对象let xhr = new XMLHttpRequest();// 设置一个异步回调函数到ajax对象的属性中// 注意:这里只是函数的声明,不会执行,而是发送http请求,对应的事件发生,才调用回调函数xhr.onreadystatechange = function(){// xhr.readyState属性:// 0: 请求未初始化:还没发送http请求// 1: 客户端和服务器的连接已建立:// 2: 服务端已接收请求// 3: 服务端正在处理请求// 4: 客户端已收到服务端返回的响应,且响应已就绪if(xhr.readyState == 4){// xhr.status属性:响应状态码console.log(xhr.status);// xhr.responseText属性:响应正文console.log(xhr.responseText);}}// open:设置请求方法和url,此时还没有发送http请求xhr.open("POST", "http://42.192.83.143:8089/AjaxMockServer/info");// 设置请求头xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//设置请求数据 
格式/类型// send:正式发送http请求,也可以设置请求正文(body)数据xhr.send("username=abc&password=123");//send(), send(body)两种方式
</script>

4.Ajax封装

<script>// 封装一个ajax函数,参数args为一个js对象// 定义args对象属性如下:// method: 请求方法// url: 请求服务器资源的路径// contentType: 请求正文的格式// body: 请求正文// callback: 回调函数,客户端接收到响应数据后,调用function ajax(args){//var ajax = function(){}let xhr = new XMLHttpRequest();// 设置回调函数xhr.onreadystatechange = function(){// 4: 客户端接收到响应后回调if(xhr.readyState == 4){// 回调函数可能需要使用响应的内容,作为传入参数args.callback(xhr.status, xhr.responseText);}}xhr.open(args.method, args.url);//如果args中,contentType属性有内容,就设置Content-Type请求头if(args.contentType){//js中,if判断,除了判断boolean值,还可以判断字符串,对象等,有值就为truexhr.setRequestHeader("Content-Type", args.contentType);}//如果args中,设置了body请求正文,调用send(body)if(args.body){xhr.send(args.body);}else{//如果没有设置,调用send()xhr.send();}}//调用ajax封装的函数//方法一:let request = {method: "POST",url: "http://42.192.83.143:8089/AjaxMockServer/info",contentType: "application/x-www-form-urlencoded",body: "username=abc&password=123",callback: function(status, response){//调用的时候传入了两个参数,定义对应的参数console.log("响应状态码:"+status+",响应正文:"+response)}};ajax(request);//ajax函数调用的json对象参数,也可以不声明,直接传入函数//方法二:// ajax({//     method: "POST",//     url: "http://42.192.83.143:8089/AjaxMockServer/info",//     contentType: "application/x-www-form-urlencoded",//     body: "username=abc&password=123",//     callback: function(status, response){//调用的时候传入了两个参数,定义对应的参数//         console.log("响应状态码:"+status+",响应正文:"+response)//     }// });
</script>

http://chatgpt.dhexx.cn/article/lwfEmweu.shtml

相关文章

C语言字符串数组赋值错误

直接上代码&#xff1a; #include"stdio.h"int main(){char a[10];for(int i 0; i<10;i){printf("第%d个&#xff1a;",i);scanf("%c",&a[i]);}return 0; }经典的错误&#xff0c;标准的零分&#xff01; 这样的赋值手法&#xff0c;是…

c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

C语言中二维字符数组应该怎样赋值&#xff1f; c语言二维数组如何定义字符串&#xff1f;&#xff1f;&#xff1f;&#xff1f;急。。。 二维字符数组的定义格式为&#xff1a;char 数组名[第一维大小][第二维大小]; 例如&#xff1a;char c[3][10]; //定义了一个3行10列的二维…

关于中字符串常量给字符数组赋值

结论 在定义字符数组时&#xff0c;可以同时初始化字符数组&#xff0c;即用字符串常量给字符数组赋值在定义完之后&#xff0c;则不允许用字符串常量给字符数组赋值。如需赋值&#xff0c;则使用strcpy()函数&#xff08;需包含头文件string.h&#xff09; #include <std…

C语言:字符数组赋值

字符数组&#xff1a;C语言学习中较麻烦的部分&#xff0c;C语言中没有字符串这种类型的数组&#xff0c;字符串只能存储在字符型数组中。 1、定义时直接赋值 char a[10]{"I LOVE C"};//可以直接省去花括号直接写成char a[10]I LOVE C"; 注意&#xff1a;此处的…

【C#】 Convert.ToInt16 、Convert.ToInt32、Convert.ToInt64 区别

一般写程序是用的都是Convert.ToInt32&#xff0c;为什么呢&#xff1f; 1.Convert.ToInt是数据类型转换成int类型 2. 有三种方法toint16,toint32,toint64 int16-数值范围&#xff1a;-32768 到 32767 int32-数值范围&#xff1a;-2,147,483,648 到 2,147,483,647 …

C# 中int short Int16 Int32 Int64详解

Java中没有Int32,Int64,,只有int,short,long Java中int就代表Int32 ,short就代表Int16&#xff0c;long就代表Int64 首先&#xff0c;几个基本的关键字&#xff1a; Int16 short, 占2个字节. -32768 ~ 32767 Int32 int, 占4个字节. -2147483648 ~ 2147483647 Int64 lon…

【C++】INT32_MAX

INT32_MAX INT32_MAX可以把它认为在limits.h下面的一个宏。关于宏&#xff0c;可以参考这篇文章&#xff0c;直接点击&#xff01;其实就是一个别称&#xff01;

python中int的取值范围_int32的取值范围是多少?

int32的数值取值范围为“-2147483648”到“2147483647”;而int64的数值取值范围为“-9223372036854775808”到“9223372036854775808”。 int32的取值范围 计算机中32位int类型变量的范围,其中int类型是带符号整数。 正数在计算机中表示为原码,最高位为符号位: 1的原码为000…

c语言unsigned int 范围,unsigned int 32比特数据范围为-2147

提到unsigned,大家应该都了解,有朋友问c语言中unsigned什么意思,还有人想问c语言中的unsigned是什么意思,这到底是咋回事?事实上unsigned呢,下面是小编推荐给大家的unsigned int,下面我们一起来看看吧! unsigned int 一、指代不同 1、int:定义整数类型变量的标识符。 …

C#中ToInt32以及类似函数用法介绍

C#中ToInt32以及类似函数用法介绍 作用程序举例程序逻辑程序代码 程序 作用 将指定的值转换为 32 位有符号整数。对应的还有ToInt16&#xff0c;ToInt64 指定的值可以是字符串、时间、位等数据类型。 程序举例 程序逻辑 当输入值整数时&#xff0c;当输入值大于0&#xff0…

C语言 —— int32_t uint32_t 及size_t

文章目录 int32_t和int区别使用原因stdint.h源码 int32_t和uint32_t的区别size_t在不同机器中定义不同&#xff1a;stdint.h源码 参考文档 int32_t和int区别 我们都知道&#xff0c;C语言的基本类型就char, short, int 等。但是我们在看其他源码时经常碰到int32_t, int8_t这种…

linux futex 进程同步,Linux的新式线程同步原语——Futex

在我的上一篇文章《本地POSIX线程库》http://www.linuxidc.com/Linux/2013-10/91409.htm 中&#xff0c;提到了Futex一词&#xff0c;发现好多读者误以为这是我的笔误&#xff0c;将Mutex错写为Futex了。其实Futex是Linux的一种全新的线程同步原语。本文将为您解读高效的Futex。…

futex同步机制分析之三内核实现

一、源码引入 前两篇从应用分析到了库&#xff0c;本篇到内核中看看&#xff0c;futex到底何方神圣&#xff1f;&#xff08;Linux3.1.1&#xff09; 先看一下futex.c和futex.h&#xff08;kennel/futex.c linux/futex.h&#xff09;: /*** struct futex_q - The hashed futex…

futex同步机制分析之一应用

futex同步机制分析之一应用 一、多线程&#xff08;进程&#xff09;的同步机制 c编程中最难的部分有哪些&#xff0c;估计绝大多数人都会首先提出来是多线程&#xff08;进程&#xff09;编程。为什么多线程编程难呢&#xff1f;一个主要的原因就是多线程的同步。在多线程同步…

FUTEX_SWAP补丁分析-SwitchTo 如何大幅度提升切换性能?

作者简介 胡哲宁&#xff0c;西安邮电大学计算机科学与技术专业大二学生。 Google SwitchTo 由于协程本身对操作系统的不可见性&#xff0c;协程中出现的 BUG 往往不能通过一些已有的工具去排查。在谷歌内部有一套闭源的用户态任务调度框架 SwitchTo, 这个框架可以为谷歌提供延…

futex问答

一、什么是futex&#xff1f; futex是Fast Userspace muTEX的缩写&#xff0c;该机制是由Rusty Russell、Hubertus Franke和Mathew Kirkwood在2.5.7版本的内核中引入&#xff0c;虽然名字中有互斥锁&#xff08;mutex&#xff09;的含义&#xff0c;但实际它是一种用于用户空间…

Futex系统调用,Futex机制,及具体案例分析

Futex 1、背景1.1 自己实现锁1.1.1 自旋锁1.1.2 sleep自旋1.1.3 小结 1.2 futex1.2.1 什么是Futex1.2.2 futex诞生之前1.2.3 futex诞生之后 2、Futex系统调用3、Futex机制4、具体案例分析4.1 在Bionic中的实现4.2 C语言实现 5、参考及扩展阅读 首先要区分一下futex系统调用和fu…

深度讲解futex问答(上)

一、什么是futex&#xff1f; futex是Fast Userspace muTEX的缩写&#xff0c;该机制是由Rusty Russell、Hubertus Franke和Mathew Kirkwood在2.5.7版本的内核中引入&#xff0c;虽然名字中有互斥锁&#xff08;mutex&#xff09;的含义&#xff0c;但实际它是一种用于用户空间…

数组中的字节数

##sizeof查看定义的数组所占用字节数 #include<iostream> int main(){using namespace std;int Inter [10];short sh [10];char ch [10];long lg [10];float fl [10];double dou [10];cout << "int style has " << sizeof Inter << " …

int转byte数组以及相关原理

前言 本文由int转byte数组这样的题目代码引发的思考&#xff0c;其中涉及到多个让我混淆的地方。 直接上代码 public byte[] toBytes(int number){byte[] bytes new byte[4];bytes[3] (byte)number;bytes[2] (byte) ((number >> 8) & 0xFF);bytes[1] (byte) ((…