c++面试八股文
分配方式:栈由系统分配与释放,堆由程序员来申请与释放。
·
- 堆和栈的区别?
分配方式:栈由系统分配与释放,堆由程序员来申请与释放
大小限制:
响应方式
分配空间的效率:
- c++和c的区别
c++面向对象,class可以封装属性与实现
c面向过程 - 红黑树和b+树的区别
BST:二叉搜索树,根节点左子树小于根,右子树大于根;
AVL:平衡二叉搜索树,根节点到叶子节点的高度差不大于1
红黑树:节点非黑即红
b+树:高度矮 - 产生死锁的必要条件?已经如何预防死锁?
1.循、不剥夺、请求保持
2.剥夺死锁产生的必要条件。
银行家算法:解释一下 - TCP 和 UDP 的区别?
tcp:面向连接、字节流、可靠传输、全双工
可靠靠什么来保证?拥塞控制、流量控制
udp:数据报,不面向连接,不保证数据可靠 - TCP 状态中 time_wait 的作用
防止客户端第四次挥手发送的ack包丢失,要进行重传。等待2msl事件 - HTTP 2.0 与 HTTP 1.0 的区别 ?
- static 关键字的作用?函数体内 模块中 类中
- const 关键字的作用?
- 指针传递、引用传递
值:传的是对实参的拷贝,对形参的值的修改不影响实参
引用:传实参的地址,被调函数的形参也会在栈开辟空间,存放实参的地址。被调函数对形参修改,以间接寻址的方式来修改实参的值。
指针传递:指针传递参数本质上是值传递,它所传递的是一个地址值。值传递的过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本,当栈帧回退的时候这个局部变量就不存在了。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值(这里是在说实参指针本身的地址不会变)。 - 哈希表处理冲突的方法?
- C++ 面向对象的三大特性和五个原则?
封装继承多态;五个原则????七大原则 开接一单,里迪合。
封装?c++中的class - 多态的实现?
- 深拷贝和浅拷贝的区别?
浅拷贝:对一个对象进行拷贝,会调用拷贝构造函数,而未定义这个函数会调用默认拷贝构造函数。一次构造函数,两次析构函数。两个对象的指针成员所指内存相同,会对同一块内存释放两次,造成了内存泄漏。
深拷贝:定义拷贝构造函数后,使得拷贝后的指针对象成员有自己的内存,进行了深拷贝。一次构造,一次拷贝构造,两次析构。 - C++ 源代码到可执行代码的详细过程 ?
预编译
编译
汇编
链接-静态链接:从静态链接库拷贝到可执行程序。动态链接:程序运行时,导入动态库
装入 - 虚函数和纯虚函数的区别?
右值引用与std::move? - 左值引用和右值引用?
左值引用-对左值的引用,可以放在等号左边,具名(可以取地址)
右值引用-只能放在等号右边(不具名)如:字面值10,非引用类型的函数调用;将亡值。
std::move移动语义,可以将右值赋值左值。移动构造比拷贝构造效率更高,不用重新分配资源,只用完成资源转移。(对象赋值,避免资源的重新分配)
更多推荐
已为社区贡献1条内容
所有评论(0)