2017年8月8日
1.tcp和udp的区别?
a.tcp是面向连接的,udp是无连接的
b.每一条tcp仅支持一对一通信,udp支持1对1、1对多、多对1和多对多的通信
c.tcp提供可靠交付的服务,udp使用尽最大努力交付
d.tcp面向字节流,udp面向报文
e.tcp有拥塞控制,udp没有拥塞控制
f.tcp首部开销最少20个字节,udp首部开销只有8个字节
2.指针和引用的区别?
a.指针可以有const,引用不可以有const
b.指针可以为空,引用不可以为空
c.sizeof引用的大小为引用所指变量的大小,sizeof指针的大小为指针所属类型的大小
d.指针的值可以改变,引用的值可以改变
e.指针可以有多级,引用只能是一级
3.进程间通信的方式?最高效的是哪种方式?
a.管道
b.消息队列
c.共享内存
d.套接字
其中共享内存最高效,共享内存是一个进程映射一段可以被其他进程所访问的内存 也就是说 一个进程创建,多个进程访问。
4.有名管道和无名管道的区别?
无名管道只能在具有亲缘关系的进程间使用(进程的亲缘关系是指父子进程关系)
有名管道允许无亲缘关系进程间的通信
5.C++多态是如何实现的?虚函数表存放在什么地方?
多态可以通过 虚函数、覆盖、抽象类、模板。虚表指针存储在对象的内存空间,所以虚函数表也应该存储在对象的内存空间。(虚函数表里有虚表指针)
6.tcp在传输的过程中是如何保证可靠连接的?
超时重传,发送端在发送数据后为每一个数据包保留一个记录,同时发送端发送数据包是启动一个计时器,当计时器过期时仍未收到该数据包的确认,发送端将重新发送该数据包。发送方只有收到数据包的确认消息后,才清除该数据包记录。
7.list和vector的区别?
a.vector是连续存储的,list是离散存储的
b.list是双向的,vector是单向的
8.智能指针?
9.C++11的新特点?
a.支持long long类型
b.可以对 vector,struct等等进行列表初始化 vector<int> a= {1,2,3,4,5,6};
c.推出了nullptr 空指针
d.using 类型别名:和关键字typedef的作用一样用来声明一个类型的别名
10.STL迭代器失效的解决办法?(不通过改代码的方式)
11.vector当空间不够存放数据时,然后会申请一篇更大的空间,把原来的数据拷贝过去。
12.构造函数和析构函数可以为虚函数吗?构造函数和析构函数里面会调用虚函数吗?
构造函数不能声明为虚函数,因为虚函数对应一个虚表指针,这个虚表指针是存储在对象的内存空间的,如果构造函数是虚的,就需要通过虚表指针来调用,可是对象的内存空间还不存在,也就是说虚表指针不存在。
析构函数可以声明为虚函数,而且有时必须声明为虚函数,在类的继承中,如果有基类指针指向派生类,delete基类指针的时候,如果析构函数不是虚函数,会直接析构掉基类,派生类的析构函数不会被执行,直接后果是内存泄漏。
在构造函数中可以调用虚函数,但是最好不要这样做,因为在调用构造函数时,这时候类里面的变量可能还未被初始化,虚函数这时候可能会访问内存中未知的区域。
在析构函数里面可以调用虚函数,但最好不要这样做,因为调用析构的时候类里面的变量可能已经被析构了,虚函数这时可能会访问内存中未知的区域,比较容易出错。
13.类的私有成员是这个类的 is还是has
14类的保护成员的作用?