一、对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; }