百度秋招 2020-09-26
笔试
1.简单求和
2.回溯
3.动态规划吧
1面
问项目
线程之间的通信方式
1.共享内存 :主要是通过volatile关键字实现
2.消息传递 message 机制
static
static
作用
- 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。
- 修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static。
- 修饰成员变量,修饰成员变量使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。
- 修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。
const
- 修饰变量,说明该变量不可以被改变;
- 修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);
- 修饰引用,指向常量的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改;
- 修饰成员函数,说明该成员函数内不能修改成员变量。
const 的指针与引用
- 指针
- 指向常量的指针(pointer to const)
- 自身是常量的指针(常量指针,const pointer)
- 引用
- 指向常量的引用(reference to const)
- 没有 const reference,因为引用只是对象的别名,引用不是对象,不能用 const 修饰
tcp的拥塞控制
慢启动 拥塞避免 快重传 快恢复
epoll以及epoll的触发方式
windows里如何实现类似的
做题:最小公共子串
2面
面向对象的3个特性
如何实现多态
内存碎片产生的原因,种类和处理方式
https://www.cnblogs.com/jingzhishen/p/3644715.html
tcp的拥塞控制
c++11的新特性有哪些
https://www.cnblogs.com/loskyer/p/8984142.html
智能指针的底层实现
右值引用举例
右值引用就是必须绑定到右值(一个临时对象、将要销毁的对象)的引用,一般表示对象的值。
右值引用可实现转移语义(Move Sementics)和精确传递(Perfect Forwarding),它的主要目的有两个方面:
- 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。
- 能够更简洁明确地定义泛型函数。
什么是右值
做题:二叉树的最长路径
3面
做题:
后插法
子集
虚构函数可以抛出异常嘛
c++没有明确禁止 但是不建议 当抛出异常之后会开始进行一个栈展开来找到能catch这个异常的地方当函数内没有,就会结束函数并且释放其变量内存,这时候如果析构函数再抛出异常好像会使得进程结束
静态函数可以内联嘛
- 虚函数可以是内联函数,内联是可以修饰虚函数的,但是当虚函数表现多态性的时候不能内联。
- 内联是在编译器建议编译器内联,而虚函数的多态性在运行期,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性时(运行期)不可以内联。
inline virtual唯一可以内联的时候是:编译器知道所调用的对象是哪个类(如Base::who()),这只有在编译器具有实际对象而不是对象的指针或引用时才会发生。
new失败了会怎样
new和malloc有什么区别?
malloc(差) new(好)
堆 自由存储区(堆/静态存储区/空)
返回void*,需强转 返回对象类型指针
需要指定内存大小 无需指定内存大小
分配内存失败返回NULL 失败抛出bac_alloc异常
浙公网安备 33010602011771号