七月份投了CVTE内推进行了电话面试,由于准备得不是很充分,答得不是很好。面试内容主要包括:c++基础、数据库、网络编程、Linux基础等。题目如下:
1、介绍一下 C++中的引用?
答案网上都有就不重复了。
2、 数组可以引用吗?(当时好像答错了)
答:不能建立数组的引用是说,数组的元素不能是引用。而int (&b)[3] = a;b本身是一个引用,b不是数组。b的引用是数组名a.如果建立数组的元素的引用,则为:int& b[3];但是int& b[3];C++不支持,因为引用不可以作数组中的元素。
原因是它不支持传统意义的复制,传统意义的复制:int a = b;a和b在内存中分别占用,内容一致。如果int &a = b;因此这种复制,内存中a并不分配新的内存,自然会错误。
一句话,你可以创建对数组的引用,但你不能创建一个元素都是引用的数组。
3、 多态和引用关系?
答案网上都有就不重复了。
4、 New和malloc区别?为什么在c++中使用new?他们的返回类型是否相同?
答:(1)malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
(2)对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc /free.
(3)因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete.注意new/delete不是库函数。
new 建立的是一个对象,malloc分配的是一块内存
返回类型不同:malloc 函数返回的是 void * 类型,void* 表示未确定类型的指针。malloc 向系统申请分配指定size个字节的内存空间new 返回指定类型的指针,并且可以自动计算所需要大小
5、 怎么确认一个类中对象的个数?(推荐Effective c++系列里面讲得很全面)
class AllMembers{
public:
AllMembers() // 构造函数
{
++num;
}
AllMembers(const AllMembers&) // 拷贝构造函数
{
++num;
}
~AllMembers() // 析构函数
{
--num;
}
static size_t number() // 返回实例化对象个数
{
return num;
}
private:
static size_t num; // 对象计数器
};
6、 讲讲智能指针?(可以看看Boost库)
7、 Tcp为什么采用四次挥手?
8、 点播视频采用tcp还是udp?
答:udp速度快
9、 Shell 查找当前目录和子目录下的.c文件?
答:find
. -name *.c
10、数据库中查找两个表中相同的数据(NAME)?
答:select A.* from A,B where A.ID = B.ID and A.NAME = B.NAME
11、说一说C++11的新特性
12、static和const有什么区别?
13、http和tcp的区别
答:TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据
14、linux下文件系统删除一个文件
15、CLOSE_WAIT和TIME_WAIT的区别
TIME_WAIT 是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。由于TIME_WAIT的时间会非常长,因此server端应尽量减少主动关闭连接。
CLOSE_WAIT是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入CLOSE_WAIT状态。但如果服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多CLOSE_WAIT状态的连接。此时,可能是系统忙于处理读、写操作,而未将已收到FIN的连接,进行close。此时,recv/read已收到FIN的连接socket,会返回0。
16、数据库3范式
1、第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列
2、第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。
第二范式就是非主属性非部分依赖于主关键字。
3、第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。