- 博客(47)
- 收藏
- 关注
原创 C++中如何实现一个单例模式?
4.删除拷贝构造函数和赋值操作符:为防止外部通过拷贝构造函数和赋值操作符创建新的实例,需要删除或私有化拷贝构造函数和赋值操作符;1.懒汉模式:实例只有在需要使用时才被创建。单利模式是指对象在整个程序中只有一个实例,提供一个访问方法供全局访问。3.公有化访问方法:提供一个接口供外部访问静态实例,通常为getInstance。1.私有化构造函数:将构造函数定义为私有,以防外部通过构造函数创建其它实例。2.静态实例:在内部提供一个静态实例,该实例是整个程序中该对象的唯一实例。
2025-05-14 17:12:06
312
原创 C++中的Lambda函数
Lambda函数是C++11中引入的一个新特性。它的作用是当开发者在某个地方需要一个函数时,可以临时定义一个函数,而不用重新定义一个传统的函数。2.Lambda函数可以简化代码。它是一个临时定义的函数,而不是一个完整的函数。1.Lambda函数可以简化回调函数,尤其在STL中;
2025-05-14 17:03:15
123
原创 左值引用和右值引用的区别
(1)绑定对象:左值引用的绑定对象是持续储存的,而右值引用的绑定对象是临时或即将销毁的;(2)生命周期:左值引用可以延长绑定对象的生命周期,而右值引用是对临时资源的引用;(3)是否修改:左值引用可以被用来修改其所引用的对象,而右值引用不涉及修改。(2)左值引用绑定的表达式通常是能够持续储存的,例如变量和对象;(3)由于绑定对象可以持续储存,因此左值引用的地址可以被修改。(2)右值应用的绑定对象通常是临时或即将销毁的对象;(1)左值引用使用的绑定符号是&;(1)右值引用的绑定符号是&&;
2025-05-12 15:58:15
159
原创 C++中的移动语义有什么用?是怎么实现的?
1.移动语义是C++11中引入的特性。对于一些大型或含有资源的对象(如文件句柄),复制构造函数是昂贵的。移动语义允许将对象从源资源“移动”到新资源中,而不使用构造函数,这对时间和资源的开销较小。2.移动语义配合移动构造函数和移动赋值操作符实现。它的实现过程是将对象从源资源转移到新的资源上,然后使源资源失效。
2025-05-12 15:47:41
128
原创 C++中map和unordered_map的区别是什么?
唯一性:理论上哈希表不允许容器中出现相同的元素。·时间复杂度:查询操作的时间复杂度为O(1),删除或插入元素在最差情况下时间复杂度是O(n)。·迭代器稳定性:由于底层是红黑树,所以无论进行什么操作迭代器指向的容器都不会发生改变。·迭代器稳定性:当发生重哈希时,迭代器指向的元素可能会发生改变,即迭代器是不稳定的。·时间复杂度:访问、插入和删除的时间复杂度都是O(log n);·唯一性:不允许容器中出现键值相同的元素;·元素顺序:将元素按照键值的顺序存放;·元素顺序:容器中存放的元素没有顺序;
2025-05-06 18:01:36
199
原创 C++中std::map、std::list和std::deque的底层实现是怎样的?
它的底层是双向链表,提供高校的插入和删除操作。·访问随机元素的时间复杂度是O(1),在容器中间插入或删除元素的时间复杂度是O(n)。·插入和删除操作的时间复杂度是O(1),但访问随机元素的时间复杂度可能是O(n);·它的底层是动态数组,支持在头部和尾部高效的插入或删除元素,以及访问随机元素;·虽然容器中元素的存储空间是不连续的,但其迭代器依然有顺序。·它删除、插入和查找操作的时间复杂度都是O(log n);·容器内的键值排序是有序的,默认是按照键值从小到大排序;·不支持访问随机元素,只能顺序访问;
2025-04-30 17:44:41
279
原创 对于C++中的STL,push_back()和emplace_back()有什么区别?
一般来说emplace_back()的性能是要优于push_back()的,因为它避免了多余的移动和复制操作。·语法为:container.emplace_back(args...),接收一个对象构造函数的参数列表;·语法为:container.push_back(),接收一个值或一个对象的移动/复制副本;·在将对象添加或移动到容器的末尾前,需要先调用构造函数实例化对象,然后再执行移动或复制操作。·直接在容器的内存上调用构造函数,省去了复制或移动的过程。
2025-04-30 17:31:39
265
原创 C++中vector的扩容过程是怎样的?
1.底层原理:vector的底层是动态数组,其在内存中是连续存储的。三个迭代器分别指向容器的起始位置、最后一个元素和容器的末尾。两个变量分别为size和capacity,其中size为容器中元素的数量,而capacity为容器所占的内存。当初始化vector容器时,会初始化一块空间用来存储元素,初始化空间的大小由构造函数的参数决定,缺省时默认为0。2.扩容机制:当容器中的元素数量等于其占有的内存空间时,vector会向系统申请一块更大的内存,然后将旧内存中的所有元素移动过去。
2025-04-29 17:15:36
183
原创 C++中的vector和list有什么区别?
(1)插入或删除元素:在队头或队尾插入或删除元素时可以实现O(1)的时间复杂度;(2)访问元素:O(1)的时间复杂度。vecetor:(1)当需要在队首或队尾快速插入或删除元素时;list:(1)当需要快速在任意位置插入或删除元素时;时间复杂度:(1)插入或删除元素时:在任意位置都是O(1)的时间复杂度;(2)访问元素:O(n)的时间复杂度。内存管理:由于在内存上是连续的,所以可以利用缓存机制来快速访问元素。内存管理:由于离散储存在内存上,因此在插入元素时不需要移动大量内存。内存分配:分配在连续的内存上;
2025-04-29 17:09:32
227
原创 C++中深拷贝与浅拷贝的区别?
3.特点:(1)速度快;(2)若原始对象包含指针,则可能出现多个对象指向同一动态分配内存的现象,有内存泄漏的风险。1.不但拷贝对象本身,也递归地复制其占有的动态分配内存。即每一个对象都有自己的动态分配内存。2.操作方法:不能通过简单的复制构造函数或赋值操作实现,需要自定义构造函数或赋值操作符。3.特点:(1)速度较慢;(2)没有内存泄漏的风险。1.只拷贝对象本身,而不拷贝其所指的动态分配内存。2.操作方法:使用复制构造函数或赋值操作符;
2025-04-28 11:58:51
292
原创 C++中常用的STL
5.unordered_set:基于哈希表,提供时间复杂度为O(1)的查询服务;4.forward_list:单向链表,每个元素仅存储下一个元素的引用;1.set:基于红黑树,用于存储唯一的元素集合。3.priority_queue:优先级队列,将元素按优先级排列。3.list:双向链表,提供高效的数据插入或删除服务;1.vector:动态数组,提供快速的随机访问;2.multiset:允许容器中存放相同的元素;4.mutimap:允许容器中出现相同的键值;3.map:基于红黑树,按顺序存储键值对;
2025-04-28 11:54:39
166
原创 构造函数有哪些种类?
4.移动构造函数:将同一类型实例的右值引用作为参数,用于利用生命周期即将结束的对象的内存资源;7.初始化列表构造函数:将初始化列表作为参数初始化成员变量,是C++中效率最高的构造函数。3.拷贝构造函数:将同一类型的实例化对象作为参数,用于复制已有的对象;2.参数化构造函数:传入参数的构造函数,允许构造函数初始化成员变量;6.委托构造函数:使用同一类型的其它构造函数完成对对象的初始化;5.转化构造函数:允许将其它的数据或值转化为当前类型;1.默认构造函数:没有参数,执行默认的初始化操作;
2025-04-26 12:56:00
124
原创 什么是构造函数和析构函数?构造函数和析构函数可以是虚函数吗?
如果构造函数是虚函数,那么编译器在编译阶段就无法得知具体需要使用哪个构造函数。·可以有很多个构造函数。如果没有参数,则构造函数会进行一些默认的初始化操作;·如果没有定义构造函数,那么在创建类的实例对象时,编译器会使用一个默认的构造函数,执行一些默认初始化操作。(2)如果构造函数是虚函数,那么在初始化派生类时就有多个构造函数可以选择,会造成初始化操作的二义性。·如果没有定义析构函数,编译器在销毁对象时会调用默认的析构函数,执行一些默认的清理操作。构造函数是用于创建化实例对象,并进行一些默认初始化操作的函数。
2025-04-26 12:45:51
213
原创 力扣347:前K个高频元素
以上代码中:pair<int,int>为pri_que中的数据类型;说明:map[nums[i]]++这句会执行将key为nums[i]的value进行++操作。如果没有nums[i]的key,则会先创建一个<nums[i],0>,再对value进行++操作;2.如何得知nums中每个元素出现的次数呢?unordered_map<int,int>,key为nums中的元素,value为该元素出现的次数;小顶堆中只维护K个元素,当新来的元素比队尾的元素还大时,弹出队头的元素,在队尾放入新的元素;
2025-04-25 11:43:11
329
原创 背包问题递推公式总结:
1.0-1背包:经典问题(最大价值): 二维数组: 滚动数组:方案问题(怎么把背包装满):2.完全背包:经典问题(最大价值):方案问题: 二维数组: 滚动数组:
2025-04-24 17:50:05
166
原创 什么是虚函数表?
3.虚函数表的意义是通过基类指针或引用调用虚函数时,程序使用虚函数表调用正确的派生类中的虚函数。·动态绑定:当通过基类指针或引用调用虚函数时,程序通过虚函数指针选择正确的基类中的虚函数并调用。·虚函数表指针:编译器会在含有虚函数的类的内存空间中隐式地创建一个虚函数表指针;·虚函数表的创建:当一个类中含有虚函数时,编译器会为该类自动创建一个虚函数表;1.虚函数表是C++中用来实现动态绑定(运行时多态)的一种机制;2.虚函数表是一个存有指向虚函数实现指针的数组;
2025-04-24 11:55:46
90
原创 虚函数是怎么实现的?
4.虚函数的重写:派生类会继承基类的虚函数表。当添加新的虚函数时,会在虚函数表中创建指向新虚函数的指针。当类中含有虚函数时,编译器会自动在该类的虚函数表中添加一个指向该虚函数的指针。2.虚函数表指针:编译器会在每一个含有虚函数的类的内存空间中隐式地添加一个虚函数表指针。这样可以通过虚函数表指针访问每个类的虚函数表。1.虚函数表:当一个类中含有至少一个虚函数时,编译器会自动为其创建一个虚函数表。5.动态绑定:在通过基类指针或基类引用调用虚函数时,程序可以使用虚函数表找到正确的虚函数并调用。
2025-04-24 11:42:41
153
原创 C++中重载和重写的区别?
1.重载:在同一代码段中声明一些同名的函数,但它们的参数列表必须不同。编译器会根据参数的顺序或类型选择执行哪个函数;2.重写:在派生类中修改基类的方法或提供具体实现。(4)关键字:重写函数必须使用override关键字,以明确该函数是对基类成员函数的重写。(2)参数列表:重载函数的参数列表必须不同,而重写函数的参数列表必须相同;(3)返回值:重载函数的返回值可以不同,而重写函数的参数返回值必须相同;(1)重载发生在同一代码区中,而重写发生在继承体系中;重载和重写都是C++实现多态的手段。
2025-04-23 17:41:36
191
原创 C++面向对象的三大特性?
3.多态:是指将同一种方法作用于不同的对象可能会有不同的结果。多态可以允许以一种统一的方式处理不同的数据类型,提高了代码的可维护性。多态可通过虚函数实现。通过在派生类中重写基类中的虚函数可以实现动态绑定。2.继承:是指派生类继承其基类属性和方法的能力。通过继承,派生类可以复用基类的代码、对基类的代码进行重写、或在不改变基类的情况下对修改或添加基类中的功能。1.封装:将数据和方法封装成抽象的类,类将其中的成员变量和成员函数隐藏起来,仅通过公共的接口和外界进行交互,防止外界对类的修改或不确定访问;
2025-04-23 17:36:01
179
原创 C++中虚函数和纯虚函数有什么区别?
(2)派生类实现:在派生类中,可以使用虚函数的默认实现,也可以对虚函数进行重写;若一个类中含有纯虚函数,则该类是一个抽象类,不可实例化抽象类。(3)虚函数可以有实现,即在派生类中,可以选择使用虚函数的默认实现,也可以对其进行重写;(4)对于虚函数,可以使用基类的指针或引用进行动态绑定,实现多态。(2)纯虚函数不允许有实现,而必须在派生类中实现虚函数;(1)实现:虚函数可以有实现,而纯虚函数不允许有实现;(2)虚函数在基类中声明,在派生类中提供实现代码;(1)在虚函数后加上=0即可将虚函数变为纯虚函数;
2025-04-23 12:08:02
188
原创 C++中怎么实现多态?
(2)抽象类:如果一个类中包含至少一个纯虚函数,则这个类就是一个抽象类。(1)如果一个类包含虚函数,则编译器会自动为其创建一个虚函数表,表中存放该类中所有虚函数的地质;(1) 函数重载:允许在同一个代码块内定义多个同名的函数,只要确保它们的参数列表不同;1.C++中有两种实现多态的方式,即静态多态(编译时多态)和动态多态(运行时多态)。(1)虚函数:在基类中可以定义虚函数,在派生类中提供虚函数的具体实现,即重写;(3)程序运行时,程序会根据对象的实际类型找到对应的地质,执行函数。
2025-04-23 11:33:44
177
原创 什么是C++中的智能指针?有哪些智能指针?它们实现的原理都是什么?
3.weak_ptr:弱引用,避免了shared_ptr可能出现的循环引用问题。weak_ptr仅观察shared_ptr管理的对象而不拥有对象,即不会增加引用计数。2.shared_ptr:允许多个对象访问特定的资源,适用于管理需要共享所有权的对象。当引用计数为0时,释放对象。它维护一个指向动态分配内存的指针,当指针所指的对象被销毁时自动释放内存,以免造成内存泄漏。1.unique_ptr:一种独占指针,一次只能有一个unique_ptr访问特定的资源,适用管理于不需要共享所有权的对象。
2025-04-22 11:41:00
136
原创 进程的同步与互斥机制是怎么样的?如何实现进程见的同步与互斥?
除此之外,常用的进程同步机制还有临界区和互斥锁:将可能引发互斥的代码段称为临界区。进程进入临界区是需要先获取互斥锁,离开时需要释放互斥锁。互斥是为了保证在同一时刻只有一个进程能够访问共享资源。在某一进程访问共享资源时,其它进程不可访问。常用的进程同步机制是信号量。信号量是一种特殊的变量,它表示系统中某一共享资源的数量和状态。P操作:相当于“查询操作”,检查某一共享资源是否可用。若可用则调用资源并减少信号量;进程同步是指在某一时间段内调度并发的进程按照一定的顺序和时间间隔执行;V操作:相当于“归还操作”。
2025-04-21 12:02:36
201
原创 进程之间的通信方式有哪些?
5.信号量:是一种锁机制,用于控制不同进程对共享资源的访问。防止某一进程访问共享资源时有其它进程也想要访问该共享资源。当共享资源可用时使用资源并进行减操作、归还资源时进行加操作。6.共享内存:一个进程划出一块内存,其它进程也可以访问该内存。共享内存是进程之间最高效的通信方式;1.管道:一种半双工通信机制,只允许信息的单向传递。只能用于有父子关系的进程之间;用于服务器与客户端之间的通信。但可以用于没有依赖关系之间的进程;3.消息队列:允许进程之间互相发送与接收消息,使用链表为消息分配优先级;
2025-04-21 11:55:14
184
原创 进程调度算法
3.按剩余时间调度:当一个新的进程到来时,将其运行需要的整个时间与当前进程运行的剩余时间比较,如果新进程的运行时间较短则优先执行,反之先运行完当前进程;5.优先级队列:为每个进程分配一个优先级,优先执行优先级较高的进程。2.谁短谁调度:按照进程运行所需的时间进行调度,优先执行较短的进程。如果短进程一直到来,则有可能造成长进程的“饥饿”;4.时间片调度:为每一个进程分配一个时间片,运行进程需要消耗时间片。若一个进程的时间片消耗完毕则运行下一个进程;将不同的进程分为不同的优先级队列,每个队列有自己的调度算法。
2025-04-21 11:45:56
208
原创 结构体和类的区别?
结构体(struct)中只能含有成员变量而不含有成员函数,而类(class)中可以出现成员函数;在C++中,struct中也可以含有成员函数。1.struct中的成员默认为public,而class中的成员默认为private;2.在继承中,struct默认为public,class默认为private;3.class可以用来定义模板函数,而struct不行。
2025-04-18 17:47:50
91
原创 常量指针和指针常量的区别?
常量指针:本质是一个指针,意为被该指针所指的变量不能通过该指针改变,但指针的指向可以发生改变;有时可以同时使用const定义一个指针,即表示该指针的不变性,又表示该指针所指对象的不变性。指针常量:本质是一个常量,意为该指针的指向不能发生改变,而被指针所指的对象可以修改。
2025-04-18 17:45:04
77
原创 static关键字和const关键字有什么区别?
在函数中:使用static定义的变量为静态变量,其生命周期贯穿整个程序的运行过程,且在第一次进入函数时被初始化。当函数运行完毕后,静态变量不会被释放,下次调用该函数时,静态变量的状态保持不变。静态成员函数:所有类中的静态函数都保持一致,静态成员函数只能访问静态成员变量。在调用静态成员函数时可以不用事先实例化类的对象,而可以直接通过类名调用静态成员函数。在类中:静态成员变量:不属于该类实例的一部分,所有类中的静态变量共享一份数据,因此特别要注意静态成员变量的内存安全;常量变量:表示所定义的变量值不能被改变;
2025-04-18 17:40:26
118
原创 用户态和和心态有什么区别?用户态和核心态在什么情况下会发生切换?
用户态和核心态都是操作系统为了保护系统资源与实现权限管理设置的两种运行模式。这种设置可以控制程序对操作系统核心和计算机硬件资源的操作和访问。可以访问操作系统的核心部分,且能够直接访问或操作计算机的硬件资源。用户态:程序只能访问有限的资源、执行受限的指令集,不能访问操作系统的核心部分,也不能访问或操作计算机的硬件资源;2.当程序执行或计算机外设发生错误时,系统会切换至核心态,由操作系统检测并处理错误。1.程序或进程需要计算机硬件资源或操作系统核心提供服务时,会由用户态切换到核心态;在什么状态下会发生切换?
2025-04-18 17:11:57
160
原创 并发和并行有什么区别?
而并发是在一个时间段内执行多个任务,这些任务可能不是同时进行的,因此需要事件触发或时间片的方法对这些任务进行调度。并发:指在一个时间段内完成多项任务,这些任务有可能是交错执行的,因此需要对任务进行调度。并行是指多个处理单元(如多核CPU)同时独立地执行不同的子任务,它们之间不会相互影响;并行:指在同一时刻同时执行多个任务;
2025-04-18 17:01:54
75
原创 线程和进程有哪些区别?
资源开销:每个进程都独占一块资源,因此进程的创建与销毁的开销更大;进程间的切换需要恢复整个进程的状态,因此进程的上下文切换开销更大;而多个线程共用一块内存,因此线程创建与销毁的开销更小。通信与同步:每个进程都占有独立的内存,因此进程之间的通信需要依靠一些特殊的机制,例如消息队列、共享内存、管道等;而线程之间共用一块内存,可以直接对内存中的数据进行读写,因此通信更为方便。安全性:由于每个进程都占有独立内存,因此一个进程的崩溃不会影响其它进程;线程:线程是进程的子任务,是程序运行的基本单元。
2025-04-18 16:58:15
192
原创 UDP怎么实现数据的可靠传输?
发送端:发送端在数据包定义添加一个首部,包含时间戳,用于计算RTT(数据传输往返所需要的时间)和RTO(超时重传的时间),然后以等-停的方式发送数据包,即收到接收端的确认报文后再发送下一个数据包。如果在超时时间内没有接收到接收端的确认信息,发送端则会重新发送数据包;UDP是一种无连接的通信协议,常用于音视频数据的传输,因为即使丢失一两个数据包也不会产生太大的影响。接收端:根据数据包的的序列号保证所收到数据的有序性,并更新首部的时间戳后将其添加在确认报文后发送给发送端。2.超时重传:避免数据丢失;
2025-04-17 17:56:58
229
原创 TCP如何实现流量控制?
确认应答:接收方成功接收数据时向发送方发送的ACK确认报文也是实现TCP流量控制中的重要一环。滑动窗口大小可以随ACK报文一同发送给发送方。接收方缓冲区:TCP报文中的窗口大小字段根据接收方剩余的缓冲区域大小动态调整。滑动窗口大小:每个TCP报文都含有一个窗口大小字段,该字段的含义是发送方可以直接发送多少字节的数据而不用等待确认消息;流量控制:发送方会根据TCP报文中的窗口大小动态地调整自己发送数据的流量。窗口大则增大流量,反之减小流量;TCP进行流量控制的原因是为了防止接收端来不及处理发送端发送的数据。
2025-04-17 17:46:36
149
原创 拥塞控制是如何实现的?
4.快速恢复:TCP经过快速重传后并不会恢复到慢起动阶段,而是将慢起动阈值设为原先的一半,并将拥塞窗口设为慢起动阈值加上经过确认但未重新传输的数据包数量。随着其不断收到接收方发送的ACK确认报文,会以指数的形式提升其数据传输的速度;3.快速重传:当发送方收到重复的确认消息时认为发生了丢包。此时它会迅速重新传输发生丢包的数据,而不必进行超时等待;2.拥塞控制:当数据传输速率达到一个阈值(慢起动阈值)时,发送方就会以线性的方式增加数据传输速率;拥塞控制在数据传输时动态调整数据传输的速率,以防网络发生过载。
2025-04-17 17:40:35
113
原创 TCP连接如何确保可靠传输?
3.数据校验:接收端会通过校验和来检验其收到数据包的完整性。如果在传输过程中发生错误,接收端会丢弃数据包并等待发送端重传;2.确认应答:接收端在收到数据包后会想发送端发送ACK确认。4.超时重传:发送端会设置一个超时时间,如果在该时间内没有收到接收端发送的ACK确认则认为发生了丢包,重传数据。TCP连接通过差错控制(序列号、确认应答、数据校验)、超时重传、流量控制和拥塞控制实现可靠传输。6.拥塞控制:TCP连接采用慢启动、拥塞控制、快速重传、快速恢复等算法避免在数据传输过程中发生拥塞。
2025-04-17 17:32:36
203
原创 C++内存分区
由开发人员管理,用于动态分配内存。开发人员可使用new、malloc、delete、free等关键字管理堆区的内存。·BSS段:存储未初始化的静态变量和常量。·数据段:存储初始化的静态变量和常量;由程序管理,用于存储局部变量和函数上下文参数的传递。用于存储程序中的可执行代码和函数的二进制指令。用于存储静态变量和常量。用于存储程序中的常量。
2025-04-17 14:57:13
106
原创 指针和引用的区别
对于指针,可以使用解引用符*获得指针所指对象的值,也可以用地址操作符&查看指针所指的地址。在使用时必须先初始化,且从始至终只能指向一个变量,不能更改。指针的本质是变量,所以可以置为NULL或nullptr使其指向空地址。指针的是指向某一变量存储位置的变量。它的本质是指向某一块内存的地址。指针常用于内存管理、参数传递和某些特殊数据结构的操作。引用在定义时就必须初始化,不存在为空的情况。引用常用于参数传递、重载操作符或变量的别名。查看引用所指代的对象不需要使用操作符。指针时变量,可以改变其所指的对象。
2025-04-17 14:44:31
149
原创 静态变量、局部变量和全局变量都有什么区别?
生命周期:存在于整个函数运行期间,在程序运行到首次进入函数时初始化,并在程序运行结束时销毁。生命周期:整个程序运行期间。在程序开始执行时初始化,程序运行结束后销毁。用途:希望某个变量仅在函数内部被使用,但每次使用时其值保持不变。用途:循环变量,或函数执行过程中储存临时信息的变量。生命周期:进入函数时初始化,函数结束后自动销毁。作用域:仅在声明它的函数或代码段中可见。作用域:仅在声明它的函数或代码段中可见。存储区域:全局/静态区。存储区域:全局/静态区。
2025-04-16 17:57:33
279
原创 字符串最后一个单词的长度
对于给定的若干个单词组成的句子,每个单词均由大小写字母混合构成,单词间使用单个空格分隔。输出最后一个单词的长度。本题考点:如果用cin读取字符串,则读取不到空格。应用getline(cin,str)读取整行内容。除此之外,保证每个单词非空,由大小写字母混合构成,且总字符长度不超过 103103。在一行上输入若干个字符串,每个字符串代表一个单词,组成给定的句子。在一行上输出一个整数,代表最后一个单词的长度。
2025-04-15 18:04:16
174
原创 HTTP请求报文和相应报文是怎样的?有哪些常见的请求字段?
请求行:包括方法(Method),例如Post(向指定资源发送处理请求)、Get(获取指定资源)、Delete(删除指定资源)、Put(更新指定资源等);资源路径:指定资源的URI;空行位于请求头和请求体之间,标志着请求头的结束和请求体的开始。空行位于响应头和响应体之间,用于区分响应头和响应体。请求报文包括请求行、请求头、空行和请求体。服务器处理客户端的请求后,返回给客户端的报文。Content-Length:请求体的长度;Content-Type:请求体的类型。响应体:服务器向客户端发送的数据主体。
2025-04-15 18:02:13
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人