百度 C++ 一面
1 自我介绍
2 对于Const关键字的理解
先介绍了const首先是定义一个常量用的 后来就结合指针(顶层和底层) 介绍了一下具体情况
后面他又结合具体例子,比如 结合类中的成员函数(常函数和成员函数区别和联系) 来和我简单聊了
3 对于static 关键字的理解
static 是定义一个静态变量用的
定义全局静态变量和局部静态变量:在变量前面加上static关键字。初始化的静态变量会在数据段分配内存,未初始化的静态变量会在BSS段分配内存。直到程序结束,静态变量始终会维持前值。只不过全局静态变量和局部静态变量的作用域不一样;
定义静态函数:在函数返回类型前加上static关键字,函数即被定义为静态函数。静态函数只能在本源文件中使用;
在变量类型前加上static关键字,变量即被定义为静态变量。静态变量只能在本源文件中使用;
在c++中,static关键字可以用于定义类中的静态成员变量:使用静态数据成员,它既可以被当成全局变量那样去存储,但又被隐藏在类的内部。类中的static静态数据成员拥有一块单独的存储区,而不管创建了多少个该类的对象。所有这些对象的静态数据成员都共享这一块静态存储空间。
在c++中,static关键字可以用于定义类中的静态成员函数:与静态成员变量类似,类里面同样可以定义静态成员函数。只需要在函数前加上关键字static即可。如静态成员函数也是类的一部分,而不是对象的一部分。所有这些对象的静态数据成员都共享这一块静态存储空间。
然后 又结合类中的static 问在类的成员函数中 定义一个静态变量的生命周期
类成员函数静态变量的作用域:和类的静态变量没有差别,所有的成员函数都共享这个静态变量,所有的对象共享同一份数据
存储及生命周期:在静态存储区,整个程序运行期间一直存在。4 STL容器
首先介绍了一下STL的常见容器
问了map以及unordered_map的区别
接着问了vector的扩容机制
后面问了怎么让vector避免多次扩容
这块回答的不太好,但是主题思想是对的
其实面试官的一次是在一开始就申请好足够大的空间,这是需要调用reverse函数来完成的。
可以重点看一看reverse和resize的区别 其中reverse只改变容量,不添加元素,但是resize有两个参数,既改变容量,又向容器中添加元素。
5. 聊聊项目中的问题
- 针对YOLOV3项目的做的事情
大概讲了一下项目以及做的工作 - 服务器的项目
- 单例模式
- 怎么处理高并发的问题
这里高并发,我主要说的是用epoll 以及线程池的操作来实现。 因为线程池里面的线程是分离状态,可以不断的从队列中取出工作任务来执行。(问题总结中有相关解释)
- RAII机制介绍,以及优缺点
RAII,即Resource Acquisition Is Initialization,在初始化中获取资源。
RAII机制,通过在栈上创建临时变量,这样临时变量就接管了堆上内存的控制权,当该临时变量声明周期结束时,则对应的堆上内存自然就被释放了。
RAII机制保证了异常安全,并且也为程序员在编写动态分配内存的程序时提供了安全保证。缺点是有些操作可能会抛出异常,如果放在析构
函数中进⾏则不能将错误传递出去,那么此时析构函数就必须⾃⼰处理异常。这在某些时候是很繁琐的。
6. 手撕代码
首先 写了一个单例模式,这个还是因为自己太菜了,昨天还看了代码,但是面试太紧张给忘了 死活写不出来
写了一个链表的结点
问了直接构造初始化以及 构造函数体内初始化的区别(少了一遍拷贝构造)
写在函数内部的话,是先用默认构造初始化了一遍,再到函数内部赋值一遍。所以应该优先用初始化列表。更何况如果是没有默认构造的类型,只能通过初始化列表搞。
其次 手撕了一个反转链表,没什么难度,又让我用递归写..我递归学的不好,没写上来(真是太菜了。。)
然后 写了一个反转数字
但是后面问我,当前这个反转数字的程序有哪些可能存在的问题,我没太上说来,后面想想应该是爆int的问题。
6 反问
问 对新人有哪些 素质和技能的期待
答 针对C++的话,会CUDA编程和GPU并行优化的话 话更有优势一点。
#百度面试#