
C++面试题记录
文章平均质量分 50
基础知识
fantongl
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
13_构造函数和析构函数的调用时机
1. 拷贝构造函数的调用时机用类的一个对象去初始化另一个对象时当函数的形参是类的对象时(也就是值传递时),如果是引用传递则不会调用当函数的返回值是类的对象或者引用时。原创 2021-09-06 19:46:59 · 285 阅读 · 0 评论 -
右值引用
右值和左值、左值:在C++11中可以取地址的,有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)右值引用和左值引用左值引用就是对一个左值进行引用的类型。右值引用就是对一个右值进行引用的类型,事实上,由于右值通常不具有名字,我们也只能通过引用的方式找到他的存在。我们可以将一个右值引用绑定到表达式,自勉之常量或者返回右值的表达式,但是不能将右值引用绑定到左值上。右值引用指向将要被销毁的对象变量是左值,因此我们不能把右值引用直接绑定到变量上我们可以销毁一个移后源对象,也可以原创 2021-09-06 16:32:10 · 293 阅读 · 0 评论 -
一个C++源文件从文本到可执行文件经历的过程
一个C++源文件从文本到可执行文件经历的过程0. 步骤预处理、编译、汇编、链接1. 预处理首先是源代码文件helloworld.cpp和相关头文件预处理成一个.i文件,预处理的过程主要是处理那些源代码文件中只能以“#”开始的预处理命令。g++ -E helloworld.cpp -o helloworld.i1.1. 预处理主要规则如下:将#define删除,并将宏定义展开处理一些条件预编译指令,如#ifndef,#ifdef,#elif,#endif等,将不必要的代码过滤掉。处理#i转载 2021-08-31 15:05:50 · 324 阅读 · 0 评论 -
C++四种类型转换
C++四种类型转换1. 隐式类型转换2. 显式类型转换2.1 static_cast2.2. dynamic_cast2.3. const_cast2.4. reinterpret_castC++的四种强制类型转换,分别为static_cast、dynamic_cast、const_cast、reinterpret_castC++风格的强制类型转换的好处是,能够更清晰的表明他们要干什么。1. 隐式类型转换大多数表达式中,比int类型小的整型数值首先提升为较大的整数类型在条件中,非布尔值转换为布转载 2021-08-28 19:46:24 · 218 阅读 · 0 评论 -
12_智能指针
智能指针0. 普通指针存在的问题0.1 悬垂指针当有多个指针指向同一个基础对象时,如果某个指针delete了该基础对象,对这个指针来说它是明确了它所指的对象被释放掉了,所以她不会再对所指对象进行操作,但是对于剩下的其他指针来说并不清楚所指对象已被删除。1. 为什么会有智能指针C++程序员需要自己善后自己动态开辟的内存,一旦忘记释放,内存就泄露。智能指针可以帮助程序员自动释放自己开辟的内存智能指针将基本类型指针封装为类对象指针,并在析构函数里编写delete语句删除指针指向的内存空间。2. 智原创 2021-08-23 16:41:30 · 182 阅读 · 0 评论 -
11_哈希表
哈希表1. 冲突解决方案2. 哈希表的查找时间复杂度1. 冲突解决方案线性探查:该元素的哈希值对应的桶不能存放元素时,循序往后一一查找,直到找到一个空桶为止,在查找时也一样。二次探查:该元素的哈希值不能存放元素时,就往后寻找1^2, 2^2个位置双散列函数法:当第一个散列函数发生冲突时,使用第二个散列函数进行哈希,作为步长开链法:在每一个桶中维护一个链表,由元素哈希值寻找到这个桶,然后将元素插入到对应的链表中,‘建立公共溢出区,当发生冲突时,将所有冲突的数据放在公共溢出区。2. 哈希表的查原创 2021-08-23 11:38:47 · 98 阅读 · 0 评论 -
10_树的问题
二叉查找树1. 特征左子树上所有节点的值均小于或等于他的根节点的值右子树上所有节点的值均大于或等于他的根节点的值左右子树也分别为二叉排序树二叉平衡树(AVL树)1. 介绍AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树树高不超过1,和红黑树相比,AVL数是严格的平衡二叉树,2. 局限性由于维护这种高度平衡(即所有节点的左右子树高度差绝对值不超过1),不管是执行插入还是删除操作,只要不满足平衡条件,就必须通过旋转来保持平衡,而旋转是非常原创 2021-08-23 11:25:26 · 128 阅读 · 0 评论 -
09_memcpy的实现
memcpy的实现简单版本/** * @description: * @param {void*} src 原串指针 * @param {void*} dest 目的串指针 * @param {int} len 长度 * @return {*} */void* memcpy(void* src, void* dest, int len){ // 不在函数内申请空间,所以需要进行判断 if(dest == NULL || src == NULL ) {转载 2021-08-19 10:52:33 · 91 阅读 · 0 评论 -
Nginx问题汇总
Nginx问题汇总(1) 什么是Nginx(2) 为什么用Nginx(3) Nginx的性能为什么这么高(4)Nginx如何处理高并发请求(5) 什么是反向代理和正向代理(6) 什么是负载均衡(7) Nginx限流算法(8) 说明三种限流算法(9) 漏桶流算法和令牌桶算法(9.1) 漏桶流算法(9.2) 令牌桶算法(10) Nginx的负载均衡算法怎么实现的,策略有哪些(11) Nginx的惊群问题(11.1) 惊群问题的产生(11.2) 如何解决惊群问题(11.3) 原理参考链接:(1) 什么是Ngi转载 2021-08-10 18:21:48 · 506 阅读 · 0 评论 -
同步和异步、阻塞和非阻塞
同步和异步、阻塞和非阻塞(1) 同步和异步同步和异步关注的是消息通信机制同步,是指在发出一个调用时,在没有得到结果之前,该调用就不返回异步,是指在发出一个调用之后,这个调用就直接返回了,所以没有携带调用结果(2) 阻塞和非阻塞阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.阻塞:指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回非阻塞:调用不能立刻得到结果之前,该调用不会阻塞当前进程。(3)I/O多路复用I/O多路复用指的其实是在单个线程通过转载 2021-08-09 17:34:52 · 125 阅读 · 0 评论 -
08_C++虚函数
(1) 面向对象的三大特性封装:隐藏了类的实现细节和成员数据,实现了代码模块化继承:使得子类可以复用父类的成员和方法,实现了代码重用多态:一个接口,多个实现。通过父类调用子类的成员函数,实现了接口重用。(2) 虚函数实现原理C++的虚函数是实现多态的机制,他是通过虚函数表实现的,虚汗是是每个类中存放虚函数地址的指针数组,类的实例在调用函数时会在虚函数表中寻找函数地址进行调用,如果子类覆盖了父类的函数,那么子类的虚函数表会指向子类实现的函数地址,否则指向父类的函数地址。(3) 构造函数为什么一原创 2021-08-03 11:02:21 · 120 阅读 · 0 评论 -
C++进程内存分布
(1)C++进程内存分布1、内存分布分为五部分,从高地址到低地址依次为:栈、堆、未初始化的数据段(bss)、初始化的数据段、代码段2、栈地址空间向下、堆地址空间向上3、代码段(text):存放程序的二进制代码4、初始化的数据(Data):它包含有程序员初始化的全局变量和静态变量,5、未初始化的数据段(bss):这个段的数据在程序开始之前由内核初始化为0,包含所有初始化为0和没有显示初始化的全局变量和静态变量6、堆:堆是动态内存分配通常发生的部分,其地址分配由低到高7、栈:存放自动变量,以及每原创 2021-07-28 18:27:32 · 1192 阅读 · 0 评论 -
14_C++引用
(1)C和C++的区别1、C是面向过程的语言、C++是面向对象的语言,C++中有“封装、继承、多态”的特性,封装隐藏了实现的细节,是的代码模块化;继承通过子类继承父类的方法和属性,实现了代码重用;多态则是“一个接口、多个实现”,通过子类重写父类的虚函数,实现接口重用2、C和C++内存管理的方法不一样。C使用了malloc和free,C++除此之外还使用了new/delete3、C++中还有函数重载和引用等概念,而C没有(2)指针和引用的区别1、指针是一个新的变量,指向另一个变量的地址,我们可原创 2021-07-28 17:52:59 · 116 阅读 · 0 评论 -
03_指针知识汇总
1. 64位和32位格数据类型大小32位编译器(字节)64位编译器(字节)备注取值范围char11char*48因为32位的寻址空间是232,即32bit,所以大小为4字节,64位寻址空间位264,故8字节int44-2^31 - 2 ^ 32 - 1unsigned int44float44dobule44long48unsigned long48long long原创 2021-07-28 10:52:57 · 81 阅读 · 0 评论 -
07_Linux命令知识
07_Linux命令知识1.创建文件夹,(强制)mkdir -p /home/tianyiyi/workspace2. 查看Linux下句柄相关信息lsof 2.1 Linux下句柄总数lsof | wc -l原创 2021-07-27 14:25:20 · 101 阅读 · 0 评论 -
06_内联函数
@TOC(06_内联函数)(1) 内联函数的定义定义: 当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用.(2) 内联函数的定义优点: 当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.缺点: 滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理原创 2021-07-27 11:42:38 · 506 阅读 · 0 评论 -
05_内存对齐
(1)内存对齐(2)内存对齐原则结构体变量的起始地址能够被其最宽的成员大小整除结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节结构体总体大小能够被最宽的成员的大小整除,如不能则在后面补充字节(3) 例子#include <stdio.h>struct A{ char a; int b; short c;};int main(){ static struct A *a; static s原创 2021-07-26 16:23:45 · 87 阅读 · 0 评论