360视频面问题整理

1.大端序和小端序:

 端序(Endianness),又称字节序、尾序、位序。在计算机领域是指机器存放多字节数据的字节顺序。在涉及到低层数据存储和网络数据传输研究中都会涉及端序。

大端序(Big-Endian,大尾序):高位字节放在内存的低地址,低位字节放在内存的高地址;0x12345678的大端字节序为:[0x12, 0x34, 0x56, 0x78],地址从左至右依次升高

小端序(Little-Endian,小尾序):低位字节放在内存的低地址,高位字节放在内存的高地址;0x12345678的小端字节序为:[0x78, 0x56, 0x34, 0x12],地址从左至右依次降低

在UDP和TCP等网络应用中,为避免字节序带来的麻烦,套解字接口库规定凡是在网络中交换的多字节整数(short、int、long、long long和它们的unsigned版本)一律采用网络字节序传输。所谓网络字节序,其实就是大端字节序。也就是说发数据时,先从主机字节序转成网络字节序,然后发送;收数据时,先从网络字节序转成主机字节序,然后使用。
– 小端机A,0x12345678,主机序[0x78,0x56,0x34,0x12]转成网络序[0x12,0x34,0x56,0x78],发送给B和C
– 大端机B,接收网络序[0x12,0x34,0x56,0x78],转成主机序[0x12,0x34,0x56,0x78],0x12345678
– 小端机C,接收网络序[0x12,0x34,0x56,0x78],转成主机序[0x78,0x56,0x34,0x12],0x12345678

大小端序跟硬件的体系结构有关,所有x86系列的pc机都是小端序,跟操作系统无关(网上都这么说,可是无法验证,但在x86系列的pc上的solaris系统是小端序,sun sparc平台的solaris是大端序,这个本人验证过)

方法一:

#include 
using namespace std;
 
typedef struct
{
    unsigned char a1: 1;
    unsigned char a2: 1;
    unsigned char a3: 1;
    unsigned char a4: 1;
    unsigned char a5: 1;
    unsigned char a6: 1;
    unsigned char a7: 1;
    unsigned char a8: 1;
}Data;
 
int main(int argc, char** argv)
{
    unsigned char a = 0xab;//10101011
    Data *test = (Data*)&a;
    cout<<(unsigned int)test->a1<<(unsigned int)test->a2;
    cout<<(unsigned int)test->a3<<(unsigned int)test->a4;
    cout<<(unsigned int)test->a5<<(unsigned int)test->a6;
    cout<<(unsigned int)test->a7<<(unsigned int)test->a8<

方法二:

#include 
using namespace std;


int main()
{
	int num = 1;
	if (*(char*)&num == 1)
		cout << 0 << endl;
	else
		cout << 1 << endl;
	system("pause");
	return 0;
}

 

2.动态内存管理

参考;https://blog.csdn.net/xinwenhuayu/article/details/86212171

 

3.Http三次握手和四次分手

在http工作之前,Web浏览器通过网络和Web服务器建立链连接,该连接是通过TCP来完成的,该协议和lp共同组成Internet,即著名的TCP/IP协议族,因此Internet也被称为TCP/IP网络,HTTP是比TCP更高的应用层协议,一般TCP接口的端口号是80。

360视频面问题整理_第1张图片

当建立协议时,tcp进行了3次握手:


1.客户端发送了一个带有SYN的TCp报文到服务器,这个是三次握手的开始。表示客户端想要和服务器建立连接。主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机由SYN=1知道,A要求建立联机;

2.服务器接收到客户端的请求,返回客户端报文,这个报文带有SYN和ACK标志,询问客户机是否准备好。主机B收到请求后腰确认联机的信息,向A发送ack number =(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

3.客户端再次响应服务端一个ACK,表示我已准备好。知己A收到后检查acak number是否正确,及第一次发送的seq number=(主机B的seq+1),ack=1,主机B收到后确认seq的值与ack=1则连接建立成功。


 

 

当终止协议的时候,tcp进行了4次握手:


1、TCP发送一个FIN,用来关闭客户到服务端的连接。 

2、服务端收到这个FIN,他发回一个ACK,确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。

 3、服务端发送一个FIN到客户端,服务端关闭客户端的连接。 

4、客户端发送ACK报文确认,并将确认的序号+1,这样关闭完成。


 更多信息参考:https://www.cnblogs.com/qdhxhz/p/8470997.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(剑指offer)