自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 力扣1667. 修复表中的名字

表:Users在 SQL 中,user_id 是该表的主键。该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。修复名字,使得只有第一个字符是大写的,其余都是小写的。返回按user_id排序的结果表。返回结果格式示例如下。

2023-07-26 23:13:06 352

原创 C++面试

post请求不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,get请求的是静态资源,则会缓存,如果是数据,则不会缓存。2、post请求发送的数据更大,get请求有url长度限制。通常情况下,缓存中的数据都是有过期时间的,当某个热点数据过期后,如果大量请求同时访问该数据,此时缓存为空,请求就会直接访问数据库。(1)post请求更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,get请求的是静态资源,则会缓存,如果是数据,则不会缓存)

2023-07-20 15:10:45 159

原创 图解SQL面试题:查找不在表里的数据

就会把b.序号这一列里为空值(NULL)的行选出来,就是题目要求的不近视的学生。”,就是在“学生表”里的数据,但是不在“近视学生”表里的数据。遇到要查找“不在表里的数据,也就是在表A里的数据,但是不在表B里的数据。”,要求的是“学生姓名”,所以我们的输出答案应该是“学生姓名”,这在“学生”表里。其中上图黑色框里的sql解决的问题是:不在表里的数据,也就是在表A里的数据,但是不在表B里的数据。(“学生表”表中的学号与“近视学生”表中的学生学号一一对应)1)“不是近视眼”的学生,近视信息在“近视学生”表里。

2023-07-20 14:59:20 666

原创 蔚来真题:Redis跳跃表是如何添加元素的?

跳跃表 Skip List,也称之为跳表,是一种数据结构,用于在有序元素的集合中进行高效的查找操作。它通过添加多层链表的方式,提供了一种以空间换时间的方式来加速查找。跳跃表由一个带有多层节点的链表组成,每一层都是原始链表的一个子集。最底层是一个完整的有序链表,包含所有元素。每个更高层级都是下层级的子集,通过添加额外的指针来跳过一些元素。这些额外的指针称为“跳跃指针”,它们允许快速访问更远的节点,从而减少了查找所需的比较次数。跳跃表的平均查找时间复杂度为 O(log n),其中 n 是元素的数量。

2023-06-27 23:46:03 219

原创 C++面试

在以下情况下,使用 inline 修饰符可能会失效:过度使用 inline 会让程序的可读性和可维护性降低,因为 inline 函数的定义通常是放在头文件中的,当头文件包含了大量的 inline 函数时会增加编译时间和源代码文件的大小,同时也会增加代码库的依赖关系。在某些情况下,编译器可能会选择不将函数内联,例如函数体过于庞大,或者函数包含循环或递归等结构。这时候使用 inline 修饰符甚至可能会降低程序性能,因为函数调用和返回可能会比函数内部执行代码的开销更大。

2023-06-09 19:28:54 894

原创 C++面试

完美转发是在 C++11 中引入的一种技术,用于将函数传递的参数(包括左值和右值)转发到另一个函数中,同时保持参数的原始类型和值类别。在使用完美转发时,通常需要使用 std::forward 函数模板来实现参数转发。对于右值参数,std::forward 返回右值引用。对于左值参数,std::forward 返回左值引用。如果不使用 std::forward 来实现参数转发,而是直接使用对应的引用类型来传递参数,则会出现参数类型和值类别被截断的情况,导致代码出现编译错误或者运行时错误。

2023-06-09 15:12:40 805

原创 shell的uniq命令

也就是说,当重复的行不相邻时,uniq 命令是不起作用的。下面这里 -s 4 表示忽略前面四个字符,所以"who am i" 和 "Who am i" 判定为重复。下面这里 -f 1 忽略了第一列字符,所以"who am i" 和 "Who am i" 判定为重复。下面这里 -i 忽略了大小写,所以"who am i" 和 "Who am i" 判定为重复。-D: 显示所有重复出现的行列,有几行显示几行。-c: 在每列旁边显示该行重复出现的次数。-d: 仅显示重复出现的行列,显示一行。

2023-06-08 09:27:44 2063

原创 C++面试

unique_ptr是C++11标准引入的智能指针,其主要特点是拥有独有的所有权,即只有一个指针可以指向该对象。当unique_ptr指针被销毁时,它自动释放所指向的对象,无需手动释放。unique_ptr的主要优点有:消除了内存泄漏的风险:unique_ptr使用RAII技术,会在超出作用域时自动释放资源。避免了重复释放问题:unique_ptr的一个重要特点是独占所有权,因此它可以避免多个指针同时释放同一个对象的情况。更好的性能:unique_ptr比较轻量级,因此在运行时开销相对较小。

2023-06-06 19:55:37 516

原创 C++面试

而线程则可以通过共享变量等方式直接进行通讯。开销:创建一个进程的开销比创建一个线程的开销大,因为进程需要独立的虚拟地址空间、内存空间和系统资源。控制进程执行顺序:比如在一个多进程并行的程序中,有些进程需要等待其他进程执行完毕才能开始执行,这时可以使用信号量来控制进程执行的顺序。执行方式:进程之间相互独立,互不干扰,每个进程都有自己独立的处理器调度,而线程则是在同一个进程内执行,使用同一个进程的处理器调度。资源分配:每个进程都有独立的内存空间和系统资源,如文件描述符、环境变量等,而线程则共享所属进程的资源。

2023-06-06 18:38:06 480

原创 C++面试

C++11 STL 使用了一些原子操作来实现 shared_ptr 内部的线程安全,比如 std::atomic_fetch_add 和 std::atomic_fetch_sub 等函数,这些函数保证了在多个线程同时进行引用计数的修改时,可以保证最终结果的正确和准确。它们之间的关键区别在于内部的资源管理方式和所有权机制。安全访问被管理对象:当需要访问被 shared_ptr 管理的对象时,可以通过 weak_ptr 转换为 shared_ptr,并检测其是否已经被销毁,避免了访问已被释放的空指针的危险。

2023-06-06 17:43:12 457

原创 C++面试

二叉树是一种树形数据结构,它由一组节点和连接它们的边组成,每个节点最多有两个子节点。UDP 不能保证可靠的数据传输,但在实时应用中,如视频、音频数据的传输,UDP 可以提供更好的实时性和效率。总之,二叉树和图是计算机科学中最常见的数据结构之一,二叉树通常用于搜索和排序算法,而图主要用于模拟现实世界的复杂关系。数据域存放节点的信息,比如链表中存储的整数、字符串等,而指针域则会指向下一个节点的地址。通过 SSL/TLS 协议的加密方式,HTTPS 可以提供更高的安全性,保护用户的隐私信息和数据不被窃取和篡改。

2023-06-06 17:42:55 508

原创 C++面试

然后,将b赋值给变量c,由于b是一个左值,因此c实际上也是b的左值引用,但是由于b的类型是int&&,因此c也是int&&类型的左值引用。需要注意的是,虚拟内存的实现也存在一定的开销,例如处理页面失效、磁盘读写等过程所需的时间和性能开销。在指针常量中,const 修饰的是指针本身,而在常量指针中,const 修饰的是指针所指向的内存区域。增加了内存保护的功能,即在每个进程的地址空间中,操作系统将不同的对象(代码、数据、堆栈等)置于不同的页面中,从而增加了安全性和保护性,防止恶意程序进行越界访问等行为。

2023-06-05 14:02:06 436

原创 leetcode197. 上升的温度

可以使用“diffdate(a.日期, b.日期) = 1”或者“timestampdiff(day, a.日期, b.日期) = -1”,以此为基准,提取表中的数据,这里先用diffdate进行操作。红色框中的每一行数据,左边是“当天”数据,右边是“前一天”的数据。直接使用交叉联结的业务需求比较少见,往往需要结合具体条件,对数据进行有目的的提取,本题需要结合的条件就是“前一天”。例如:日期1(2019-01-02),日期2(2019-01-01),两个日期在函数里互换位置,就是下面的结果。

2023-06-04 13:20:53 836

原创 LRU算法

/ 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}lRUCache.put(4, 4);// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}lRUCache.put(2, 2);// 缓存是 {1=1, 2=2}// 返回 -1 (未找到)lRUCache.get(1);// 返回 -1 (未找到)lRUCache.put(1, 1);// 缓存是 {1=1}lRUCache.get(1);请你设计并实现一个满足。的平均时间复杂度运行。

2023-06-04 13:08:20 488

原创 力扣数据库178.分数排名

我们可以先提取出大于等于X的所有分数集合H,将H去重后的元素个数就是X的排名。比如你考了99分,但最高的就只有99分,那么去重之后集合H里就只有99一个元素,个数为1,因此你的Rank为1。在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。最后的结果包含两个部分,第一部分是降序排列的分数,第二部分是每个分数对应的排名。该表的每一行都包含了一场比赛的分数。假设现在给你一个分数X,如何算出它的排名Rank呢?如果两个分数相等,那么两个分数的排名应该相同。

2023-06-04 11:00:45 493

原创 AWK常用用法

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。

2023-06-03 11:45:09 889

原创 C++面经

在输入一个URL并按下回车键后,会经过以下过程:域名解析:浏览器会检查URL中的域名,并向DNS服务器发出请求,以获取该域名所对应的IP地址。建立连接:浏览器使用获取到的IP地址与Web服务器建立TCP连接。发送请求:浏览器向Web服务器发送HTTP请求,请求中包含请求方法(GET、POST等)、请求头(浏览器的信息、Cookie等)和请求体(表单数据等)。服务器响应:服务器收到请求后,会发送相应的数据给浏览器。这些数据通常是HTML、CSS、JavaScript等文件,以及图片、视频等其他资源。

2023-06-02 22:29:45 282

原创 每日面经(二十二)

在高并发场景下,为了保证应用的稳定性和性能,需要注意以下几点:数据库优化: 在高并发场景下,数据库经常会成为系统性能的瓶颈。因此,可以采用数据库读写分离、查询语句优化、索引优化等手段来提升数据库的性能。缓存优化: 缓存是提升系统性能的重要手段,可以采用多级缓存、缓存预热、缓存穿透、缓存雪崩等策略来提升缓存的效率。代码优化: 在高并发场景下,代码的性能也是至关重要的。可以通过尽可能减少HTTP请求、选择高效的算法、使用异步编程等方式来提升代码性能。

2023-06-02 15:43:13 742

原创 面试题 16.10. 生存人数

使用差分数组,可以把一个区间得每一个数加1得操作,变成2个端点得操作,时间复杂度是O(1)。这样直观得想法就是给出一个区间[x,y],就把区间[x,y]里面每个数字都加上1,最后扫描一遍[1900,2000]看看哪个点得值最大。问题可以看成问数轴1900到2000得范围内哪个点被覆盖得次数最多,覆盖是指题目给出得区间[出生日期,死亡日期]二维差分是在二维数组上进行的,然后再使用前缀和进行求解某一个点的影响次数。同样的,需要进行离散化,结合题目的范围,只需要离散化x轴。类似的题目2251. 花期内花的数目。

2023-05-27 10:12:28 38

原创 每日面经(二十一)

在 C++ 中,当我们声明一个函数时,编译器会将该函数名进行名称重整,以便让其能够和其它同名函数进行区分。但是,在某些情况下,我们需要禁用这种默认的名称重整,而是使用C语言中以一种特定的方式命名函数,这时就需要使用 extern "C"。具体来说,extern "C" 用于告诉编译器将函数名以C语言的方式进行处理,也就是不进行名称重整。这对于编写链接到动态链接库(DLL)或静态链接库(LIB)的程序非常有用,因为库文件中的函数名通常不进行名称重整。

2023-05-27 00:00:21 415

原创 每日面试(二十)

如果基类的指针指向了一个派生类的对象,并且调用了派生类中未定义的虚函数,那么在虚函数表中就找不到相应的函数地址,会导致程序访问了不存在的内存地址,从而引起内存访问越界的问题。使用动态绑定可以避免这个问题。如果主动关闭方不进入TIME-WAIT状态,而是直接关闭连接,那么在这个时间段内,网络中可能还有一些旧的报文没有被处理完毕,这些报文可能会被错误地发送到新的连接中,导致出现问题。:多态中,如果基类的指针指向了一个派生类的对象,并且调用了派生类中未定义的虚函数,就会导致内存访问越界或者访问非法内存的风险。

2023-05-20 23:55:01 111

原创 每日面试(十九)

虚函数表指针(VPTR):每个对象都有一个虚函数表指针(VPTR),用于指向该对象所属类的虚函数表,即 VPTR 指向对应的 VTABLE 表头。实例化的对象会存储一个虚函数表指针,根据指针中存储的值来找到对应类的虚函数表,并根据调用虚函数的具体情况来选择执行该表中的哪个函数。当一个类中至少包含一个虚函数时,创建该类的对象时会为每个对象创建一个虚函数表指针(VTABLE),用来指向存储着改类虚函数地址的虚函数表(VTABLE)。这些同步机制通常需要耗费较高的开销,因此也属于线程独占的资源。

2023-05-18 17:36:23 85

原创 每日面经(十八)

虚拟内存是一种计算机内存管理技术,它允许程序访问比实际物理内存更大的内存空间。通俗地说,虚拟内存是一种将系统硬盘空间视为内存的技术。虚拟内存通过在程序运行时将一部分程序数据从内存中转移到硬盘上的交换文件(也称为页面文件)中,从而释放出内存空间,使得多个程序可以同时运行在同一个物理内存上,提高了系统资源利用率。虚拟内存还能够将不同程序的内存地址空间同意映射到不同的物理内存地址空间上,从而实现内存隔离和保护。虚拟内存还能够实现内存共享和动态地址映射等一些高级功能。

2023-05-17 20:01:09 157

原创 网络安全简答题

当代理服务器得到一个客户的连接意图时,它将核实客户请求,并用特定的安全化的Proxy应用程序来处理连接请求,将处理后的请求传递到真实服务器上,然后接受服务应答,并进行进一步处理后,将答复交给发出请求的客户。双重宿主主机体系结构是由一台同时连接在内外网络的双重宿主主机提供安全保障的,而屏蔽主机体系结构则不同,在屏蔽主机体系结构中,提供安全的主机仅仅与被保护的内部网络相连。对网络攻击的检测和告警。异常检测基于一个假定:用户的行为是可预测的、遵循一致性模式的,且随着用户事件的增加,异常检测会适应用户行为的变化。

2023-05-11 20:56:10 959

原创 正则表达式练习

【a-zA-Z】如果中括号中有多个区间,区间之间不要留空格或其他分隔符。[^a-z] 中括号中第一个字符如果是^,表示区间取反。{n}花括号括起来一个数字,表示前面的单元重复n次。{m,n}m表示前面单元最小重复次数,n表示前面的单元重复次数。^.{,}$ 花括号中两个参数空表示重复次数任意0-n。8.字符串有1个或多个空白符号(\t\n\r等)9.字符串有0个或者若干个任意字符(除了\n)\s表示空白字符 包括\t\n\r...{1,} 表示1到n,+号也可以。{0,1}表示重复0-1次。

2023-05-06 17:06:09 106

原创 每日面经(十七)

引用和指针都可以用来间接访问变量,但是它们有以下区别:指针可以被赋值为真正意义上的空值,即指向地址0。而引用必须总是绑定到某个对象上。指针可以在声明时不初始化,而引用必须在声明时初始化。指针可以指向不同类型的对象,而引用只能指向其所绑定对象的类型。指针可以被重新指向另一个对象,而引用始终绑定到同一个对象上。指针可以进行指针运算,而引用不能。指向指针的指针可以通过多级间接访问对象,而引用只能通过单级间接访问对象。引用一定不能为NULL,指针可以为空。

2023-05-05 19:41:03 167

原创 每日面经(十六)

在TCP连接中,CLOSE_WAIT状态指的是一个TCP连接中的一方(通常是客户端)已经发送了FIN数据包,即表示希望关闭连接,但是另一方(通常是服务器端)还没有发送FIN数据包,即表示还没有确认关闭连接。CLOSE_WAIT状态的作用是等待服务器或者对方连接端的响应,一旦等到了响应,就会进入到最终的关闭状态,完成连接的关闭。CLOSE_WAIT状态通常在以下情况下出现:客户端发送了FIN数据包,请求关闭连接,但是服务器还没有响应;

2023-04-29 10:43:12 265

原创 每日面经(十五)

当TCP连接建立成功后,服务和客户端之间开始进行数据通信。如果此时客户端突然挂掉了,会导致TCP连接的异常中断。此时,TCP协议会采取以下机制来处理异常情况:服务端的TCP状态变为“ESTABLISHED”状态,因为此时已经成功建立连接,但是服务端无法检测到客户端的异常。客户端的TCP状态变为“CLOSED”状态,因为客户端已经挂掉了,没有办法继续维持连接。服务端会向客户端发送一个“Keep-Alive”探测包,用于检测客户端是否还存活。

2023-04-29 10:27:14 163

原创 每日面经(十四)

TCP 的ACK指的是确认号(Acknowledgement Number),它是 TCP 协议中用于实现可靠传输的重要机制之一。当发送方发送数据之后,接收方会向发送方返回一个带有ACK:当发送方收到带有ACK标志的应答包时,可以确认之前发送的数据已经成功到达了接收方,这样可以提高数据传输的可靠性。:确认号可以帮助接收方控制数据的流量以及避免数据丢失或者重复。

2023-04-29 09:56:55 144

原创 每日面经(十三)

操作系统在运行程序时会为其分配内存,其中最常见的是堆区和栈区。它们的区别如下:栈区:由操作系统自动分配和释放,存放函数的参数值、局部变量的值等。栈内存是连续的且大小固定的,一旦分配完成就不能动态地改变大小。栈内存的占用和释放是有系统自动完成的,不需要程序员手动管理。堆区:需要程序员手动分配和释放,存放动态分配的内存,大小可以动态地改变。堆内存通过程序调用malloc()等分配内存的函数来申请空间,通过free()等函数释放空间。

2023-04-27 19:42:08 62

原创 每日面经(十二)

请问,以上代码的输出结果是什么?如果将 MyClass 的成员变量 a 改为静态(即为 static int a;),请问输出结果会有什么变化?30303030因为 obj1 和 obj2 都会共享同一个静态变量 b,所以 MyClass::setB(30) 设置的是类的静态成员变量,而不是 obj1 和 obj2 的成员变量。因此,obj1.getB() 等于 MyClass::getB(),它们都返回类的静态成员变量 b,而不是 obj1 和 obj2 的成员变量 a。结果输出为 30,30。

2023-04-27 17:10:53 123

原创 每日面经(十一)

1.5倍扩容比2倍好的主要原因是:缩短了扩容次数:当vector需要多次扩容时,1.5倍扩容可以使扩容的次数更少,因为每次扩容的增量更大,从而减少了内存分配的次数和开销。减少了内存的浪费:2倍扩容可能会导致内存浪费现象,因为每次扩容时,会分配比实际需要更多的内存空间。而1.5倍扩容能够有效降低这种浪费,因为每次扩容后的内存块大小更接近实际需要的大小。降低了碎片化的可能性:2倍扩容可能导致内存块大小差异较大,从而容易形成内存碎片,影响内存的利用率。

2023-04-26 09:23:01 233

原创 每日面经(十)

MySQL要定义数据类型主要是为了规范化数据的存储和操作。定义数据类型可以有效地节省存储空间,提高数据的查询和操作效率,并保证数据的完整性和正确性。具体来说,定义数据类型有以下几个优点:空间效率:不同的数据类型占用不同的存储空间,在定义表的时候选择合适的数据类型可以有效地节省存储空间。例如,一个整数类型的字段要远比一个字符类型的字段占用更少的存储空间。查询效率:对于同一种数据类型的值,相同的比较和操作都可以使用相同的指令,这样可以提高数据的查询和操作效率。

2023-04-25 09:50:25 223

原创 C++ 智能指针 - 全部用法详解

智能指针虽然使用起来很方便,但是要注意使用智能指针的一些陷阱,否则会造成严重的内存报错或者内存泄露等问题!

2023-04-24 19:18:04 305 1

原创 每日面经(九)

这道问题可以采用分布式计算的思路来解决。具体来说,可以将这个100亿数据集分成多个子数据集,每个子数据集可以使用单机或者集群来处理。处理完每个子数据集后,可以在集群中合并所有结果,然后在合并后的结果中选取前100个最大值。值得注意的是,这个方案考虑到了数据规模较大,因此需要使用分布式计算或者集群计算的方式来处理数据。为了进一步提高性能和减少I/O操作,可以考虑使用内存映射文件或者DAG(有向无环图)等方式。同时,在实际实现时,也要注意数据的质量和异常值的处理,确保计算结果正确和可靠。

2023-04-24 19:16:23 72

原创 每日面经(八)

我们可以看到上边的进程-资源分配图其实是可以进行简化的,也就是说可以在图中找到一个既不阻塞又不与其他进程因请求资源而关联的进程,可以认为该进程会获得所需全部资源而执行,并且在执行结束后释放其拥有的资源,这相当于消去与之相关的请求边和分配边,成为孤立点。左边的图表示已经分配的资源,右边的图表示还需要分配的资源。每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。

2023-04-24 13:49:58 87

原创 每日面经(七)

在 C++ 中,通常可以将左值看作是存储在内存中的某个对象或变量的名称,而右值则指的是某个临时的值或表达式。任务的类型和处理时间:如果线程池中的任务需要比较长的时间才能完成,那么线程池中的线程数量可以适当增加,以充分利用空闲的 CPU 时间,提高程序性能。只有在使用虚拟内存的时候,程序才能使用比实际物理内存更大的内存空间,但是如果程序使用的内存空间超过了可用的虚拟内存空间,程序将崩溃;程序可以在虚拟内存中使用大量的内存,但是实际物理内存的大小是有限的,因此需要合理地分配内存资源,避免资源耗尽。

2023-04-23 18:08:07 89

原创 每日面经(六)

内存泄漏(memory leak)是指程序中已经不再使用的内存没有得到释放,导致系统内存的占用不断增加,甚至耗尽全部资源而导致程序崩溃的一种现象。当程序使用动态分配的内存时,需要手动申请内存、使用内存和释放内存。如果程序中使用的动态分配内存没有在合适的时间释放,就会导致内存泄漏。没有正确地使用free或delete释放掉申请的内存。代码中出现了死循环或递归调用导致内存被无限制地占用。堆栈数据结构中的指针、引用等没有被正确地处理,导致内存泄漏。

2023-04-23 16:53:01 86

原创 每日面经(五)

由于static修饰的类成员属于类,不属于对象,因此static类成员函数是没有this指针的,this指针是指向本对象的指针。派生类可以继承基类中除了构造/析构、赋值运算符重载函数之外的成员,但是这些成员的访问属性在派生过程中也是可以调整的,三种派生方式的访问权限如下表所示:注意外部访问并不是真正的外部访问,而是在通过派生类的对象对基类成员的访问。公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,都保持原有的状态,而基类的私有成员任然是私有的,不能被这个派生类的子类所访问。

2023-04-23 14:00:09 38

原创 每日面经(四)

1.malloc最多能申请多少内存地址空间限制是有的,但是malloc通常情况下申请到的空间达不到地址空间上限。内存碎片会影响到你“一次”申请到的最大内存空间。比如你有10M空间,申请两次2M,一次1M,一次5M没有问题。但如果你申请两次2M,一次4M,一次1M,释放4M,那么剩下的空间虽然够5M,但是由于已经不是连续的内存区域,malloc也会失败。系统也会限制你的程序使用malloc申请到的最大内存。

2023-04-22 21:46:36 436

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除