随笔分类 - C++面试题
摘要:右值引用的作用 右值引用(Rvalue Reference)是 C++11 引入的重要特性,主要用于实现移动语义和完美转发。它的作用是优化资源管理、提高性能,并支持更灵活的编程模式。 1. 右值引用的定义 右值引用使用 && 表示,例如 int&&。 右值引用只能绑定到右值(临时对象、字面量、即将销
阅读全文
摘要:栈空间使用情况 有栈协程: 每个协程都有自己的独立栈空间。栈是程序运行时用于存储局部变量、函数调用的返回地址等信息的内存区域。在有栈协程中,当协程切换时,它会保存自己的栈状态,包括栈指针、栈中的局部变量等。 例如,在一个有栈协程中调用了一个深度嵌套的函数,这些函数的局部变量和调用信息都会在协程的栈上
阅读全文
摘要:std::function std::function 是 C++ 标准库中定义在 头文件中的一个类模板,它是一个通用的多态函数封装器,可以用来存储、复制以及调用任何可调用对象,如普通函数、Lambda 表达式、函数对象、绑定表达式等。 主要特点 通用性:能够封装各种类型的可调用对象,无论是简单的函
阅读全文
摘要:一、递归的应用场景 (一)树形结构相关问题 文件系统遍历 在计算机的文件系统中,目录和文件构成了一棵树。例如,一个根目录下有多个子目录,每个子目录又可以包含更多的子目录和文件。递归可以很好地遍历这种结构。以遍历一个文件夹中的所有文件为例,算法可以先处理根目录下的文件,然后对每个子目录递归调用遍历函数
阅读全文
摘要:进程的特征 独立性:进程是独立的执行单元,拥有自己的内存空间和系统资源 并发性:多进程可以同时运行,彼此独立。 动态性:进程是程序的一次执行过程,是动态产生和消亡的。 资源拥有:进程拥有自己的资源,如内存、文件句柄等。 进程的优缺点 优点 隔离性和稳定性:每个进程拥有独立的地址空间,这意味着它们之间
阅读全文
摘要:内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使⽤的内存的情况。内存泄漏并⾮指内存 在物理上的消失,⽽是应⽤程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因⽽造成了内存的浪 费。可以使⽤Valgrind, mtrace进⾏内存泄漏检查。 有什么类别? (1)
阅读全文
摘要:constexpr 是 C++11 引入的关键字,用于指示编译器在编译时计算常量表达式。这个关键字可以用于变量、函数和构造函数,具有以下几个主要特点和用途: 定义与用途 常量表达式:使用 constexpr 声明的变量或函数可以在编译时求值,以优化运行时性能。 适用于编译时计算:可以在编译时计算值,
阅读全文
摘要:1.static关键字 static关键字可以用来修改变量和函数的生命周期、作用域和访问权限。 修饰变量,函数,成员变量,成员函数,成员局部变量。 当用来修饰变量的时候,静态变量存在于程序的整个周期内,不会因为函数运行完而消亡。 静态函数是在函数体前面加上关键字static,静态函数属于类但是不属于
阅读全文
摘要: 
阅读全文
摘要:1.linux下,如何debug查看内存泄露问题? 在linux系统中可以使用top命令实时显示系统中进程的内存使用情况。free命令显示了系统中空闲和已使用的内存。 使用valgrind是一个强大的内存调试和分析工具,它可以检测内存泄漏和其他内存相关的问题。 '''valgrind --leak-
阅读全文
摘要:std::unique_ptr: 独特所有权模型,一个std::unique_ptr在同一时间内只允许有一个对象实例。它不允许被复制,但可以被移动。 std::shared_ptr:共享所有权模型,多个std::shared_ptr可以指向同一对象,通过引用计数机制来管理对象的生命周期。当最后一个指
阅读全文
摘要:C++三大特性包括了封装、继承、多态。 封装: 封装是将数据属性和操作这些数据的函数(方法)捆绑在一起的过程。它隐藏了实现细节,只暴露出一个可以被外界访问的接口。 封装允许开发者将对象的实现细节保护起来,只提供必要的操作界面,从而减少错误和提高代码的可维护性。 继承: 继承是一种机制,允许一个类(称
阅读全文
摘要:1.多态的类型 多态性有四种类型:重载多态、强制多态、参数多态和包含多态。 前两种可以统称为专用多态。 之前讲过普通函数的重载和类的成员函数的重载,它们都属于重载多态。 上面说的整型变量和浮点型变量相加时,需要先把整型变量强制转换为浮点型再进行加法运算,这就是强制多态。 从概念上讲,强制多态就是将一
阅读全文
摘要:select poll epoll 三者的区别 1.select poll epoll的区别 select函数原型 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *t
阅读全文
摘要:单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。下面是一个使用C++实现的线程安全的单例模式的例子: class Singleton { private: static std::atomic<Singleton*> instance; // 静态私有
阅读全文
摘要:这里模拟了一个队列,5个消费者线程和5个生产者线程来共同使用队列里面的数据处理。包括了阻塞和非阻塞的出队入队方法。注意在添加线程时使用到了std::ref引用,在传参给线程时不能直接传入queue的引用,要使用std::ref才是真正意义上的引用,当直接使用queue编译器是不会通过的,因为其实直接
阅读全文
摘要:Vector扩容在Linux平台下面GCC编译器扩容的大小是2倍,在VS下扩容大小是1.5倍; 选择2倍的扩容大小也是因为扩大2的时候,vector的操作可以接近到常数级别的O(1),因为空间变得很大了,基数大了相对的时间复杂度就小了。 但是扩容2倍这样的话,后面申请的空间是一定会大于之前申请的全部
阅读全文
摘要:std::map 和 std::unordered_map 都是C++标准模板库(STL)中的关联容器,用于存储键值对(key-value pairs),但它们在底层实现和性能特征上有所不同。 std::map 底层实现:std::map 是基于红黑树(Red-Black Tree) 实现的。红黑树
阅读全文

浙公网安备 33010602011771号
ヾ(≧O≦)〃嗷~