流媒体软件工程师笔试题

1) 以下程序的abcLen=?  程序有什么问题?

struct ABC 

{

  int aa;

  int bb;

char cc[0];

};

 

ABC abc;

int abcLen=sizeof(abc); //abcLen=?

abc.aa=11;

abc.bb=12;

memcpy(abc.cc,"aaaa",5);

 

答案:

abcLen=8; cc的数据长度为0不占用空间,但是如果struct ABC里面只有char cc[0],那么sizeofabc=1;就好像struct ABC{}; 一样,sizeof(abc)也为1

 

memcpy(abc.cc,"aaaa",5); //能够得到正确的答案,但是存在abc.cc内存越界问题;一般我们在编程中也经常也这样使用,特别是在协议扩展的时候,这样使用特别方便,但是记得一定要首先为ABC aac 这个对象new 一段内存,用来保存cc地址开始的内容。

 

2)编写下面函数的赋值操作

class A

{

private:

char *ptr;

}

 

 

答案:

一般默认的赋值操作符是浅拷贝,而因为有消息缓存指针的变量,当这个消息类有两个对象时,如果一个消息赋值给另外一个消息,则会涉及到深拷贝的问题,所以要重新定义赋值操作符

赋值运算符和复制构造函数都是用已存在的B对象来创建另一个对象A不同之处在于:赋值运算符处理两个已有对象,即赋值前B应该是存在的;复制构造函数是生成一个全新的对象,即调用复制构造函数之前A不存在。
CTemp a(b); //复制构造函数,C++风格的初始化
CTemp a=b; //仍然是复制构造函数,不过这种风格只是为了与C兼容,与上面的效果一样
在这之前a不存在,或者说还未构造好。

CTemp a;
a=b; //赋值运算符
在这之前a已经通过默认构造函数构造完成。

 

3)写出下面类D的内存布局

class A{

public:

virtual aa()=0;

 

};

 

class B

{

public :

virtual bb();

protected:

int m_bb;

};

 

class C:public B

{

public:

virtual cc();

private:

int m_cc;

};

 

class D:public B,public C

{

public:

virtual dd();

private:

int m_dd;

 

};

 

 

4)写一个线程池,实现多个任务的调度;

 

 

 

5MFC子类化,怎么理解,内存DC和兼容的DC有什么区别?

 

 

6socket模型,select模型和完成端口模型的区别,各有什么好处?

 

 

7)SQL 语句:查询某张表中不重复的最上面的10条记录;

 

8ddraw 离屏表面的原理?

 

9H264打包和解包流程,Rtp over tcpRtp over udp,怎么设计?

10)使用过哪些设计模式,在NVR SDK如何架构?

 

11STL ,两个vector向量,如何根据自定义的规则进行排序?

答案:泛型算法的sort函数?

 

12http协议的Getpost有什么区别,使用过onvif协议吗?

你可能感兴趣的:(c,c++)