百度移动软件开发面试准备
1. 虚函数与纯虚函数的区别
- 虚函数:在基类中声明为
virtual
,可以在派生类中重写。可以有实现。 - 纯虚函数:在基类中声明为
virtual
并赋值为0,表示该函数没有实现,派生类必须重写。用于定义接口。
2. C++中如何实现一个接口
在C++中,接口通常通过纯虚类实现。一个类中只包含纯虚函数,且不包含任何实现。例如:
cpp复制代码class Interface { public: virtual void method() = 0; // 纯虚函数 };
3. 用malloc申请内存的时候需要传参,为什么free的时候不用?
malloc
需要参数来指定要分配的内存大小,而free
只需要指向要释放的内存的指针。free
会根据指针找到对应的内存块并释放。
4. vector和数组的区别
- 数组:大小固定,内存分配在栈上,不能动态调整。
- vector:大小可变,内存分配在堆上,支持动态调整和丰富的成员函数。
5. 对象可以在栈中开辟吗
是的,C++中的对象可以在栈上创建。例如:
cpp复制代码class MyClass { public: int value; }; MyClass obj; // 在栈上创建对象
6. 什么是抽象类,抽象类可以实例化吗
抽象类是包含至少一个纯虚函数的类。抽象类不能被实例化,只能被继承。
7. map怎么实现
std::map
通常使用红黑树(自平衡二叉搜索树)实现,提供有序的键值对存储,支持快速查找、插入和删除。
8. vector怎么实现
std::vector
通常使用动态数组实现,支持动态扩展。当容量不足时,会分配更大的内存并复制原有元素。
10. 哈希表怎么实现
哈希表使用哈希函数将键映射到数组索引。处理冲突的方法包括链式法(使用链表存储冲突的元素)和开放地址法(寻找下一个空位)。
11. 打开一个网页,输入一个网址,一直到页面显示,经历的过程是什么
- DNS解析:将网址解析为IP地址。
- 建立TCP连接:与服务器建立连接。
- 发送HTTP请求:请求网页数据。
- 服务器响应:返回网页数据。
- 浏览器渲染:解析HTML、CSS、JavaScript并显示页面。
12. TCP和UDP的区别
- TCP:面向连接,可靠传输,流量控制,适合需要保证数据完整性的应用(如HTTP)。
- UDP:无连接,不可靠传输,适合实时应用(如视频会议)。
13. TCP粘包是什么,怎么解决这个问题
粘包是指多个TCP数据包在接收时被合并为一个包。解决方法包括:
- 使用定长包:每个包有固定长度。
- 使用分隔符:在包之间添加特定分隔符。
- 使用包头:在包头中包含包的长度信息。
14. 列举几个HTTP状态码,说出他们的含义
- 200 OK:请求成功。
- 404 Not Found:请求的资源未找到。
- 500 Internal Server Error:服务器内部错误。
15. 状态码第一位是什么含义
HTTP状态码的第一位表示响应的类别:
- 1xx:信息性状态码。
- 2xx:成功状态码。
- 3xx:重定向状态码。
- 4xx:客户端错误状态码。
- 5xx:服务器错误状态码。
16. HTTP请求头、请求体
- 请求头:包含请求的元信息,如请求方法、URL、HTTP版本、用户代理等。
- 请求体:包含请求的具体数据,通常在POST请求中使用。
17. URL的组成部分
- 协议:如
http
或https
。 - 主机名:如
www.example.com
。 - 端口(可选):如
:80
。 - 路径:如
/path/to/resource
。 - 查询字符串(可选):如
?key=value
。 - 片段标识符(可选):如
#section
。