直奔主题,简短的项目介绍,开始问题。
- 构造函数可以被定义为虚函数么?
1、如果定义为虚函数,那么子类继承后,如果需要调用,则只能显示调用
2、虚函数在子类中被覆盖后,子类将无法调用父类构造函数
- 构造函数可以被定义为private么?
class a{
a(){};
};
class c:public a{};
int main()
{
a d;//error
c b;//error
}
- c++类型转换操作有哪些,如何使用?
const int a=3;
int &b = const_cast<int&>(a);
//int c=a;//error
b=8;
static_cast:静态类型转换
1、基类与子类之间的转换:其中子类转为父类是安全的,父类转为子类是不安全,最好用dynamic_cast
2、用于基本类型之间的转换。enum,struct,int,char,float。static_cast不能进行无关类型指针之间的转
换,如非父类子类的转换
3、把任何类型表达式转为voidint *p=NULL;
void *q=static_cast<void*>(p);
4、static_cast不能用于去除const、volatile属性
dynamic_cast:动态转换,如父类和子类之间的转换,有条件的类型转换,如果不成功,会返回NULL;
1、安全的子类与基类之间的转换
2、必须要有虚函数,运行dynamic_cast的操作数必须具有多态性。
3、相同基类之间不同子类之间的交叉转换,但是结果为NULL
base *p1=new derived();
derived *p2=static_cast<derived*>(p1);//子类到父类,可以但不推荐
derived *p3=dynamic_cast<derived*>(p1);//子类到父类,安全
base *pb=new base();
derived *pb1=static_cast<derived*>(pb);//不安全,访问成员会越界
derived *pb2=dynamic_cast<derived*>(pb);//安全,结果为NULL
reinterpret_cast:重新解释,不进行二进制转换1、转换类型必须是指针,地址,引用,算术类型,函数指针或成员指针
2、可以把指针转换为整数,也可以把整数转换为指针,先把一个指针转换成整数,再把整数转换成指针, 仍是原来的指针,非32bit整数不能转换
3、最通用的就是函数指针的转换
4、很难保证移植性
- 函数重载的条件
- 什么时候必须用初始化列表初始化
1、const类型、引用必须放在初始化列表中,因为不允许赋值
2、如果类中有类对象成员,且该类没有默认的构造函数,那么就要在初始化列表中,显示调用其构 造函数初始化
3、考虑到效率,利用初始化列表。初始化列表是在构造函数之前,如果不在初始化列表中初始化, 那么成员变量相当于先初始化后,在进行赋值,这对于对象成员来说,效率是很大问题。
- socket套接字,服务器端的流程,如何判断可读可写,accept函数返回值是什么?
就是创建,然后bind绑定IP 和port,之后监听listen,收到请求后就accept建立连接,之后recv和send, 关闭。
读准备条件:
1、如果接收缓存中的数据byte数超过接收缓存当前阈值,套接字的读操作打开,返回一个大于0值,可以 在socket option 中的SO_RCVLOWAT 设置,在tcp和udp中 默认是1
2、连接半关的时候,如tcp中收到FIN信号,socket读操作打开,并返回0;
3、socket是listening socket,并且完成的connection不为0,listening socket 上的accept打开
4、如果socket is pending,A read operation on the socket will not block and will return an error (–1) with errnoset to the specific error condition. These pending errors can also be fetched and cleared by calling getsockoptand specifying the SO_ERROR socket option.
写操作准备条件:
1、同上
2、同上
3、 a socket using a non-blocking socket has completed the connection,or the connection failed.
4、同上
accept函数将从连接请求队列中获得连接信息,创建新的套接字,并返回该套接字的文件描述符。新创建 的套接字用于服务器与客户机的通信,而原来的套接字仍然处于监听状态。
- 空类的sizeof大小
算法题:
- 给一个可以排序的数组,找到Top k 数:
- 有1亿条url,找到出现次数最多的10条url
答:文件分块,满足内存限制要求,利用hash函数映射统计每块中url,得到其出现次数,然后在利用最小 堆,找到Top ten url
最后:C++基础知识答得不太好,套接字也不熟,还是很多坑没填好,继续看书去。