自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】移动语义与右值引用底层原理

结合通用引用(Universal Reference):以下代码输出什么?

2025-02-22 20:22:38 622

原创 【C++】智能指针的底层原理与使用场景

现象:use_count始终≥1,资源永不释放。解决:将其中一个指针改为weak_ptr。:以下代码输出什么?管理跨线程缓存数据,通过。

2025-02-22 13:45:34 340

原创 【C++】模板元编程原理与应用

(Template Metaprogramming, TMP)是。的技术,本质是将运行时逻辑迁移到编译期完成。:如何用模板元编程实现编译期判断素数?

2025-02-22 13:31:43 426

原创 【C++】虚函数与多态的实现原理及应用

以下代码输出什么?输出:Derived。

2025-02-22 13:13:42 369

原创 【C++】static关键字的用法和底层原理

静态函数无this指针,无法访问对象成员(需通过对象指针/引用间接访问)。static关键字在C++中根据上下文有四大核心作用,是静态成员变量,因此这个赋值操作会影响到所有的。首次执行时在站外分配,生命周期与程序相同。位于全局/静态存储区.data或.bss。:以下代码输出什么?

2025-02-22 12:59:05 362

原创 【C++】const关键字的作用及常见应用场景

用于定义“常量”,限制程序对变量的修改,提升代码安全性和可读性。1.:值不可变2.

2025-02-22 12:30:31 528

原创 【C++】面向对象的三大特性

封装:通过隐藏实现细节和暴露接口来保护数据,确保对象的内部状态不被随意修改。继承:子类可以继承父类的属性和方法,复用代码并扩展功能。多态:同一接口可以根据不同对象表现出不同的行为,提高了代码的灵活性和扩展性。

2025-02-20 19:20:16 394

原创 【C++八股】内存对⻬

是指编译器按照安排数据在内存中的存储位置,以提高程序的执行效率和可移植性。

2025-02-19 21:13:08 544

原创 【C++八股】野指针和悬空指针

未被初始化的指针,指向随机的内存地址。

2025-02-19 21:07:22 174

原创 【C++八股】智能指针

当引用计数为零时,自动删除所指向的对象。std::unique_ptr 是一种独立智能指针,独占内存资源,不能被其他独立智能指针共享,拥有自动释放内存的功能。旨在管理动态分配对象的生命周期,支持多个指针共享同一对象的所有权。实例指向同一个对象,当引用计数降为零时,自动释放所管理的对象,从而有效防止内存泄漏。智能指针⽤于管理动态内存的对象,其主要⽬的是在避免内存泄漏和多次释放资源。时,会同时分配对象和控制块的内存,避免了多次内存分配,提高了性能。被销毁时,它所管理的对象也会被自动销毁,从而有效防止内存泄漏。

2025-02-13 21:48:41 369 2

原创 【C++八股】内存泄漏

内存泄漏(Memory Leak)是指程序在动态分配内存后,未能及时释放已分配的内存,导致这些内存无法被再次使用,从而造成系统内存的浪费。当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确释放,就会造成内存泄漏。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使⽤,就会产⽣ Heap Leak.包括:共享指针,独占指针,弱指针。等没有使⽤相应的函数释放掉,导致系统资源的浪 费,严重刻可导致系统效能降低,系统运行不稳定。

2025-02-13 21:40:19 190

原创 【C++八股】C++内存管理

2.堆 :堆用于存储动态分配的内存的区域,由程序员手动分配和释放。使用 new 和 delete 或 mal1oc 和 free 来进行堆内存的分配和释放。1.栈 :栈用于存储函数的局部变量、函数参数和函数调用信息的区域。栈上的内存分配和释放是⾃动的,速度较快。栈上的变量生命周期与其所在函数的执行周期相同,而堆上的变量生命周期由程序员显式控制。堆是一种动态分配的内存区域,⽤于存储程序运⾏时动态分配的数据。栈是⼀种有限的内存区域,⽤于存储局部变量,函数调用信息等。栈和堆都是⽤于存储程序数据的内存区域。

2025-02-12 22:40:12 243

原创 【C++八股】C++强制类型转换

关键字:和const_castintfloat。

2025-02-12 22:25:30 207

原创 【C++八股】静态局部变量/全局变量/局部变量的区别和使用场景

static。

2025-02-12 22:19:29 436

原创 【C++八股】struct和Class的区别

2. 默认继承控制 struct:结构体的继承默认是 ,即基类的成员默认以公有方式继承给派生类。 class:类的继承默认是 ,即基类的成员默认以私有方式继承给派生类。3. 面向对象特性 struct:结构体通常用于简单的数据存储,不具备类中的丰富的封装、继承和多态等特性。 class:类是C++中的核心面向对象特性,支持封装、继承和多态等特性。总结

2025-02-11 22:29:13 221

原创 【C++八股】什么是函数指针,如何定义和使⽤场景

函数指针的定义与普通指针稍有不同。它需要声明指向特定类型函数的指针。基本格式返回类型 (*指针名称)(参数类型);//定义指向该函数的指针:int是函数返回的类型。是指针变量的声明。(int, int)是该函数的参数类型。函数指针的关键点。

2025-02-11 22:19:18 395

原创 【C++八股】std::atomic —— 原子操作

是 C++11 引入的模板类,主要用于多线程编程中的原子操作,确保在多个线程访问或修改共享变量时不会产生数据竞争。在多线程环境下,普通变量的操作不是原子的,可能被多个线程同时访问和修改,导致数据竞争。示例(非原子操作可能导致错误):这里 不是原子操作,两个线程可能会同时读取 ,然后都执行 ,导致最终结果错误。解决方案:使用 ✅ 确保 的所有操作都是原子的,消除了数据竞争。✅ 适用于多线程环境,提供无锁原子操作,避免数据竞争。✅ 比 更高效,但只适用于简单变量(int、指针等)。✅

2025-02-09 20:55:37 529 1

原创 【C++八股】 前置 ++i vs. 后置 i++ 的区别

中,

2025-02-09 20:36:31 284

原创 【C++八股】volatile/extern/static

在 C++ 里,volatile关键字用于告诉编译器,确保,而不是使用寄存器缓存的值。1.volatile。

2025-02-09 20:25:02 332

原创 【C++八股】const和define的区别

只是文本替换,没有类型检查,容易出错。在 C 和 C++ 中,

2025-02-09 19:55:08 290

原创 【C++八股】constexpr 和 const 区别

在 C++ 中,constexpr和const都用于,但两者的作用和适用场景不同,尤其在方面存在本质区别。const✅:表示变量是,不能被修改。✅const可能是运行期变量✅const变量在编译时确定,它可能依赖运行时计算。constexpr✅:表示变量、函数、对象的值。✅constexpr变量(必须是编译时常量)✅constexpr变量,不能依赖运行时计算。(2)constexpr函数✅constexpr函数如果,则;如果传入,则。

2025-02-08 16:05:58 411

原创 【C++八股】new 和 malloc 的区别

在 C++ 中,new和malloc都可以用来malloc✅:在分配一块,返回void*指针。✅:调用malloc()进行。✅void*free()✅ageStudent*new✅:在分配一块,返回。✅:调用new,不仅分配内存,还会进行初始化。

2025-02-08 15:58:54 549

原创 【C++八股】const和define的区别

✅。

2025-02-08 15:53:35 149

原创 【C++八股】define 与 inline 的区别

但它们的实现方式、适用场景和副作用都不同。

2025-02-08 15:49:36 831

原创 【C++八股】define 和 typedef 的区别

但它们的本质不同,使用场景也有所区别。

2025-02-08 15:43:37 477

原创 【C++八股】static关键字

用于修改变量、函数、类成员的存储方式和作用域。面试中常考 的作用、使用场景、与普通变量的区别。作用:局部变量的生命周期变为整个程序运行期间,但作用域仍然在当前函数内。✅ 特点:✅ 应用场景:计数器、状态保持等。✅ 作用:限制全局变量的作用域,使其只能在当前文件内访问。1)普通全局变量(作用域跨文件)(2) 修饰全局变量(作用域仅限当前文件)✅ 总结:✅ 应用场景:防止变量污染,避免多个文件中的变量重名。(1)普通函数(可跨文件调用)(2) 修饰函数(作用域仅限当前文件)✅ 总

2025-02-08 15:33:45 631

原创 【C++八股】const 关键字

关键字用于定义常量,防止变量被修改,增强代码安全性和可读性。面试中常考 在变量、指针、函数等场景的使用。2. 修饰指针 口诀: 在 前修饰值,在 后修饰指针。3. 修饰函数参数✅ 防止参数在函数内部被修改,提高代码安全性。✅ 优点:避免拷贝,提高效率。(1) 修饰值传递2) 修饰指针(3) 修饰引用(常用)4. 修饰函数返回值(1) 修饰返回值(防止修改返回值)(2) 修饰成员函数✅ 面试重点: 成员函数不能修改成员变量!

2025-02-08 15:23:28 552

原创 【C++八股】整型 short int long 和 long long

整型(Integer)主要包括shortintlong和long long,它们的区别主要在于和,这些通常依赖于编译器和操作系统。

2025-02-08 15:13:21 450

原创 【C++八股】指针和引用的区别

⽤于动态内存分配、数组操作以及函数参数传递;引用通常⽤于函数参数传递、操作符。

2025-02-08 14:58:12 216

原创 【C++】const和函数参数

将。

2024-06-19 17:08:06 442 1

原创 【网络编程】进程间的通信

进程间通信意味着两个不同进程间交换数据,操作系统中应提供两个进程可以同时访问内存空间。

2024-06-15 15:18:02 299

原创 【网络编程】多进程服务器端

换言之,如果父进程未主动要求获得子进程的结束状态值,操作系统将一直保存,并让子进程长时间处于僵尸进程状态。向exit函数传递的参数值和main函数的retum语句返回的值都会传递给操作系统。进程完成工作后(执行完mian函数)应被销毁,但有时这些进程将编程僵尸进程,占用系统中重要资源。父进程和子进程一样繁忙,不能只调用waitpid函数等待子进程终止。也就是说,将子进程变成僵尸进程的正是操作系统。,进程发现自己的子进程结束时,请求操作系统调用特定函数。父进程fork函数返回子进程ID,子进程返回0。

2024-06-15 14:52:34 440

原创 【网络编程】套接字的多种可选项

可以看出,套接字可选项是分层的。IPPROTOIP层可选项是IP协议相关事项IPPROTO TCP层可选项是TCP协议相关的事项,SOLSOCKET层是套接字相关的通用可选项。

2024-06-14 16:36:57 992

原创 【网络编程】域名及网络地址

DNS(Domain Name System,域名系统),是对IP地址和域名进行互相转换的系统,其核心是DNS服务器。域名:提供网络服务的服务器端也是通过IP地址去份额,但IP地址难记,因此将容易记、易表述的域名分配并取代IP地址。DNS服务器:用IP地址、或域名进入网页,接入过程不同。域名是默认DNS赋予服务器的虚拟地址,非实际地址。DNS可以将虚拟地址转化为实际地址。一般不会轻易改变服务器域名,但会相对频繁地改变服务器 IP 地址。

2024-06-14 15:58:31 372

原创 【网络编程】优雅断开套接字连接

Linux的close函数和Windows的closesocket函数意味着完全断开连接。完全断开不仅指无法传输数据,而且也不能接收数据。2台主机正在进行双向通信,主机A发送完最后的数据后,调用close函数断开了连接,之后主机A无法再接收主机B传输的数据。实际上,是完全无法调用与接收数据相关的函数。

2024-06-14 15:36:19 316

原创 【网络编程】基于UDP的服务器端/客户端

UDP可看作是信件邮寄,邮寄过程可能会信件丢失,是一种不可靠的数据传输服务。但UDP性能更高,实现更加简洁。流控制是区分UDP和TCP的最重要标志。IP的作用就是让离开主机B的UDP数据包传递给主机B,UDP根据端口号将传到主机的数据包交付给最终的UDP套接字。

2024-06-13 21:42:55 872

原创 【网络编程】TCP原理

TCP套接字中的I/O缓冲write函数调用后并非立即传输数据,read函数调用后也非马上接收数据。write函数调用瞬间,数据将移至输出缓冲;read函数调用瞬间,从缓冲读取数据。这些IO缓冲特性可整理如下。TCP会控制数据流,不会因为缓冲溢出而丢失数据。对方套接字建立连接的过程。连接过程中套接字之间的对话如下。

2024-06-13 17:20:00 511

原创 【网络编程】基于TCP的服务器端/客户端

链路层链路层是物理连接领域标准化的结果,是最基本的领域,专门定义LAN,WAN,MAN等网络标准。IP层选择传输数据的路径。IP是面向消息的、不可靠的协议。每次传输数据会帮选择一条路径,但并不一致,若发送路径错误则选择其他路径;若发送数据丢失或错误则无法解决。IP协议无法应对数据错误。TCP/UDP层TCP和UDP层以IP层提供的路径信息为基础完成实际的数据传输,故该层又称为传输层。IP层只关注一个数据包的传输过程。

2024-06-12 21:27:22 2391 3

原创 【网络编程】地址族与数据序列

IP是Internet Protocol简写,是为了收发网络数据而分配给计算机的值,端口号是为区分程序中创建的套接字而分配给套接字的序号。网络地址分为两类:IPv4(4个字节地址族),IPv6(6个字节地址族)向套接字分配网络地址,bind函数负责。

2024-06-12 16:43:31 256

原创 【网络编程】套接字类型与协议设置

收发数据的套接字内部有缓冲(buffer),即字节数组。通过套接字传输的数据将保存到该数组。因此,收到数据不意味着马上调用read函数。只要数组不超过数组容量,则可能在数据填充满缓存后通过1次read函数读取全部,也可能分多次读取。因此,面向连接的套接字不存在数据边界。传输数据的计算机通过3次调用write函数传递100字节数据,但接收数据计算机只通过1次read函数调用就接收全部的100个字节。协议:计算机对话的通信规则,简而言之是为了完成数据交换而定好的约定。按序传输数据,传输的数据不存在数据边界。

2024-06-12 16:23:47 220

空空如也

空空如也

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

TA关注的人

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