一、对yuv编码成JPEG和H264有了解,分片的大小为1024B,也就是1KB,每帧yuv应该是480*272*1.5 = 195 840B,也就是191.25KB,还是很大的,将yuv编码成h264文件,有效压缩了每一帧图像的大小,从几十兆可以压缩到几兆。
二、IO复用,select的使用方法和原理(epoll和select的区别)。进阶:libevent
三、TCP连接的三次握手和四次挥手;TCP报头的标志位有哪些,(SYN,ACK,FIN,RST,PSH,URG),有什么用;TCP客户/服务器异常,服务器进程终止,服务器主机崩溃或不可达,服务器主机崩溃后重启,服务器关机,会出现什么样的情况。
四、拷贝构造函数和赋值构造函数的区别,使用情况
A a;
A b = a; //调用拷贝构造函数
A a;
A b;
b = a;//调用赋值构造函数
拷贝构造函数直接开辟内存并进行拷贝
赋值构造函数会先判断是否是自身,然后将原来的内存释放掉,再新开辟内存并进行赋值。
五、堆排序的实现
void heapAdjust(vector<int> & A,int i,int n){
int child;
for(; 2*i+1 < n; i = child){//2*i+1 < n,因为从最后一个非叶节点往上调整大根堆
child = 2*i + 1;
if(child < n-1 && A[child] < A[child+1])//比较第i个节点的两个孩子节点的大小
++child;//右孩子大与左孩子,则如果替换将替换右孩子
if(A[child] > A[i]){
A[i] = A[i] ^ A[child];
A[child] = A[i] ^ A[child];
A[i] = A[i] ^ A[child];
}
else
break;
}
}
void heapSort(vector<int> & A,int n){
int i;
for(i = n/2-1; i>=0; --i)//n/2 - 1是最后一个非叶节点,构建大根堆
heapAdjust(A,i,n);
for(i = n-1; i > 0; --i){
A[i] = A[i]^A[0];
A[0] = A[i]^A[0];
A[i] = A[i]^A[0];
heapAdjust(A,0,i);
}
}
六、strcpy的实现
要像memcpy那样,考虑缓冲区重叠的情况
void * mymemcpy(void * dst,const void * src,size_t count)
{
assert(dst != NULL && src != NULL);
void * ret = dst;
char * pdst = (char *) dst;
char * psrc = (char *) src;
if(pdst >= psrc && pdst <= (psrc+count))
{
pdst = pdst + count - 1;
psrc = psrc + count - 1;
while(count --)
{
*pdst-- = *psrc--;
}
}
else
{
while(count --)
{
*pdst++ = *psrc++;
}
}
return ret;
}
char * mystrcpy(char * dst,const char * src)
{
assert(dst != NULL && src != NULL);
char * ret = dst;
mymemcpy(dst,src,strlen(src)+1);
return ret;
}