2015年6月17日-总结

时间:2022-08-25 14:31:23

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