百度秋招 2020-09-26

笔试

1.简单求和

2.回溯

3.动态规划吧 

 

1面

问项目

线程之间的通信方式

1.共享内存 :主要是通过volatile关键字实现

2.消息传递 message 机制 

static

static

作用

  1. 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。
  2. 修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static。
  3. 修饰成员变量,修饰成员变量使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。
  4. 修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。

const

  1. 修饰变量,说明该变量不可以被改变;
  2. 修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);
  3. 修饰引用,指向常量的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改;
  4. 修饰成员函数,说明该成员函数内不能修改成员变量。

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异常

 

posted @ 2021-09-26 23:42  echo_nnnnnn  阅读(38)  评论(0)    收藏  举报