没有合适的资源?快使用搜索试试~ 我知道了~
C++题目汇总终稿 701
需积分: 0 0 下载量 60 浏览量
2022-08-08
21:03:31
上传
评论
收藏 3.23MB DOCX 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/86372322/0001-5fa35008b59c49805f6f0241f532700c_thumbnail-wide.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
69页
背景:这几天在看《高性能Mysql》,在看到创建高性能的索引,书上说mysql的存储引擎InnoDB采用的索引类型是B+Tree,那么,大家有没有产生这样一个疑
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/86372322/bg1.jpg)
C++面试题目汇总
![](https://csdnimg.cn/release/download_crawler_static/86372322/bg2.jpg)
C++面试题目汇总
I
目录
1:进程与线程的区别?......................................................1
2:进程间的通信方式?.....................................................1
3:线程间的通信方式?.....................................................1
4:栈和堆的区别?.........................................................1
5:C++和 C 的区别?........................................................3
6:红黑树和 B 树的区别?...................................................3
7:产生死锁的必要条件?已经如何预防死锁?.................................7
8:TCP 和 UDP 的区别? .....................................................8
9:TCP 状态中 time_wait 的作用? ..........................................8
10:HTTP 2.0 与 HTTP 1.0 的区别 ? .........................................8
11:HTTP 与 HTTPS 的区别? .................................................9
12:TCP 的三次握手和四次挥手的过程? .....................................12
13:事务具有四个特性?...................................................13
14:树的先序、中序和后序的非递归实现?...................................14
15:树的层次遍历?.......................................................16
16:static 关键字的作用? ................................................17
17:const 关键字的作用? .................................................17
18:指针和引用的区别?...................................................17
19:哈希表处理冲突的方法?...............................................17
20:C++ 面向对象的三大特性和五个原则?...................................18
三大特性.............................................................18
五大原则.............................................................18
21:多态的实现?.........................................................19
22:深拷贝和浅拷贝的区别?...............................................19
23:vector 的实现原理 ....................................................19
24:C++ 源代码到可执行代码的详细过程 ?..................................19
25:memcpy 和 strcpy 的区别 ? ............................................22
26:vector 删除数据时有什么需要注意的吗 ? ...............................22
27:虚函数和纯虚函数的区别?.............................................22
28:C++中 overload,override,overwrite 的区别?............................22
29:C++中 4 种强制类型转换 ?.............................................23
30:有了 malloc/free,为什么还要 new/delete?.............................25
31:map 可以用结构体作为健值吗,已经注意事项? ...........................26
32:Volatile 的作用? ....................................................27
33:了解哪些 c++11 特性?.................................................35
1. nullptr...........................................................35
2. 类型推导..........................................................35
3. 区间迭代..........................................................37
4. 初始化列表........................................................37
5. 模板增强..........................................................37
6. 构造函数..........................................................38
7. Lambda 表达式.....................................................39
8. 新增容器..........................................................42
9. 正则表达式........................................................44
10. 语言级线程支持...................................................45
11. 右值引用和 move 语义..............................................45
34:右值引用和 move 语义?................................................47
35:STL 里 resize 和 reserve 的区别? ......................................48
36:vector 和 deque 的区别? ..............................................49
![](https://csdnimg.cn/release/download_crawler_static/86372322/bg3.jpg)
C++面试题目汇总
II
37:不同排序算法的比较?.................................................50
38:大端和小端的区别,以及如何判断一台机器是大端还是小端?...............55
39:malloc 分配内存的原理? ..............................................56
40:构造函数不能为虚函数,析构函数可以,构造函数中为什么不能调虚函数?...56
41:stl 中 unordered_map 和 map 的区别 ? .................................58
42:C/C++中 extern 的用法 ?..............................................59
43:I/O 模型 .............................................................59
![](https://csdnimg.cn/release/download_crawler_static/86372322/bg4.jpg)
C++面试题目汇总
1
1:进程与线程的区别?
2:进程间的通信方式?
3:线程间的通信方式?
一、为什么引入进程?
进程是为了提高 CPU 的执行效率,减少因为程序等待带来的 CPU 空转以及其他计算机软硬件资源的浪
费而提出来的。
二、为什么引入线程?
为了减少进程切换和创建的开销,提高执行效率和节省资源 。
三、线程和进程的区别?
调度:线程是独立调度的基本单位,进程是拥有资源的基本单位。在同一进程中,线程的切换不会引
起进程的切换;在不同的进程中,进行线程切换,则会引起进程的切换。
拥有资源:进程是拥有资源的基本单位,线程不拥有资源,但线程可以共享器隶属进程的系统资源。
并发性:进程可以并发执行,而且同一进程内的多个线程也可以并发执行,大大提高了系统的吞吐量。
系统开销:创建和撤销进程时,系统都要为之分配或回收资源,在进程切换时,涉及当前执行进程 CPU
环境的保存以及新调度的进程 CPU 环境的设置;而线程切换时只需保存和设置少量寄存器内容,因此开销
很小,另外,由于同一进程内的多个线程共享进程的地址空间,因此这些线程之间的同步与通信比较容易
实现,甚至无须操作系统的干预。
通信方面:进程间通信需要借助操作系统,而线程间可以直接读/写进程数据段来进行通信。
四、进程间通信方式
管道( pipe )
有名管道 (named pipe)
信号量( semophore )
消息队列( message queue )
信号 ( signal )
套接字( socket )
五、线程间通信方式
事件(Event);
信号量(semaphore);
互斥量(mutex);
临界区(Critical section)
六、什么时候用进程?什么时候用线程?
进程与线程的选择取决以下几点:
需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的;
线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用
程序的响应;
因为对 CPU 系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;
并行操作时使用线程,如 C/S 架构的服务器端并发线程响应用户的请求;
需要更稳定安全时,适合选择进程;需要速度时,选择线程更好;
I/O 密集型和 CPU 密集型适合多线程。
4:栈和堆的区别?
1、在申请方式上
栈(stack): 现在很多人都称之为堆栈,这个时候实际上还是指的栈。它由编译器自动管理,无需我
们手工控制。 例如,声明函数中的一个局部变量 int b 系统自动在栈中为 b 开辟空间;在调用一个函数时,
系统自动的给函数的形参变量在栈中开辟空间。
堆(heap): 申请和释放由程序员控制,并指明大小。容易产生 memory leak。
在 C 中使用 malloc 函数。
如:char *p1 = (char *)malloc(10);
在 C++中用 new 运算符。
如:char *p2 = new char(20);
![](https://csdnimg.cn/release/download_crawler_static/86372322/bg5.jpg)
C++面试题目汇总
2
但是注意 p1 本身在全局区,而 p2 本身是在栈中的,只是它们指向的空间是在堆中。
2、申请后系统的响应上
栈(stack):只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
堆(heap): 首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍
历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点
的空间分配给程序。另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,
代码中的 delete 或 free 语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等
于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。
3、申请大小的限制
栈(stack):在 Windows 下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思
是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS 下,栈的大小是 2M(也有的说是 1M,总之
是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示 overflow。因此,能从栈获得
的空间较小。例如,在 VC6 下面,默认的栈空间大小是 1M(好像是,记不清楚了)。当然,我们可以修改:
打开工程,依次操作菜单如下:Project->Setting->Link,在 Category 中选中 Output,然后在 Reserve 中
设定堆栈的最大值和 commit。
注意:reserve 最小值为 4Byte;commit 是保留在虚拟内存的页文件里面,它设置的较大会使栈开辟较
大的值,可能增加内存的开销和启动时间。
堆(heap): 堆是向高地址扩展的数据结构,是不连续的内存区域(空闲部分用链表串联起来)。正是
由于系统是用链表来存储空闲内存,自然是不连续的,而链表的遍历方向是由低地址向高地址。一般来讲
在 32 位系统下,堆内存可以达到 4G 的空间,从这个角度来看堆内存几乎是没有什么限制的。由此可见,
堆获得的空间比较灵活,也比较大。
4、分配空间的效率上
栈(stack):栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放
栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。但程序员无法对其进行控制。
堆(heap):是 C/C++函数库提供的,由 new 或 malloc 分配的内存,一般速度比较慢,而且容易产生内
存碎片。它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法在堆内存中搜索可用的
足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程
序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。这样可能引发用户态和核心态
的切换,内存的申请,代价变得更加昂贵。显然,堆的效率比栈要低得多。
5、堆和栈中的存储内容
栈(stack):在函数调用时,第一个进栈的是主函数中子函数调用后的下一条指令(子函数调用语句
的下一条可执行语句)的地址,然后是子函数的各个形参。在大多数的 C 编译器中,参数是由右往左入栈
的,然后是子函数中的局部变量。
注意:静态变量是不入栈的。当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针
指向最开始存的地址,也就是主函数中子函数调用完成的下一条指令,程序由该点继续运行。
堆(heap):一般是在堆的头部用一个字节存放堆的大小,堆中的具体内容有程序员安排。
6、存取效率的比较
这个应该是显而易见的。拿栈上的数组和堆上的数组来说:
void main()
{
int arr[5] = { 1,2,3,4,5 };
int *arr1 = NULL;
arr1 = new int[5];
for (int j = 0;j <= 4;j++)
{
arr1[j] = j + 6;
}
int a = arr[1];
int b = arr1[1];
}
上面代码中,arr1(局部变量)是在栈中,但是指向的空间确在堆上,两者的存取效率,当然是 arr
剩余68页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![avatar](https://profile-avatar.csdnimg.cn/bec13d90053c4ac7afbd6c48f242f784_weixin_35795357.jpg!1)
xhmoon
- 粉丝: 15
- 资源: 329
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0