目录
问:TCP/IP为什么是三次握手 TCP三次握手和四次挥手 (2个问题)
问:c语言指针数组和数组指针的区别
指针数组本质上是数组,它的成员是指针变量
数组指针本质上是一个指针,它指向数组的起始位置,当它开始偏移时是偏移一整个数 组大小的
问:结构体字节对齐
结构体遵循字节对其原则
32位系统下遵守4字节对齐
64位系统下遵守8字节对其
在不足结构体内元素最大字节时,自动安装字节对齐原则进行补齐
问:TCP和UDP的区别?
TCP:----->安全
是面向连接的网络传输协议,比较安全
在传输的过程中,数据无重复,数据无丢失,数据无误
为了提高效率在传输较小的数据包时会产生沾包现象
数据传输过程中需要得到一个应答包才能继续进行数据传输
数据传输效率低,耗费资源多
UDP:----->快速
是面向无连接的网络传输协议,没那么安全
在传输过程中不会管数据有没有发送成功,会一直往下发数据
可能会导致数据的丢失
传输速度快,传输效率高
不会有沾包现象
问:同步通信和异步通信的区别
同步:数据的收发是同时进行的,必须都得到确认包才可以继续执行
异步:数据的收发是不同步的,可以不需要确认包也可以通信,多次发送消息,但只接 收一条
问:谈谈你对多线程的理解
多线程是任务器调度的最小单位
多线程可以同时执行,他们之间是相互独立的
多线程共享进程的资源
线程占用资源很小,大约8k
线程容易出现不稳定的现象
线程切换速度快,开销小
问:大小端验证(先说会有什么问题,再说如何解决)
在不同类型的主机下,存储方式可能不同,分为大端存储(地址低位存储数据高位), 小段存储(地址低位存储数据低位),而在网络中统一使用网络字节序(大端存储)在 进行数据的传输,所以需要将主机字节序转化为网络字节序,可以使用函数htons(2 字节)和htonl(4字节)来进行转换,也可以使用ntohs(2字节)和ntohl(4字节) 来将网络字节序转化为主机字节序
问:互斥锁相关问题
为了防止线程访问临界资源时对临界资源产生破坏对临界资源进行的保护
线程需要像获取锁资源才有权力对临界资源进行操作,得到锁资源后,其他进行无法访 问该临界资源,但该线程完成操作,释放锁资源,其他线程继续抢夺锁资源,以此类推,
但是互斥锁可能会导致死锁的现象发生
问:共享内存特点
共享内存是进程之间通信的一种方法
共享内存是在内存空间开辟一块空间,通过物理映射对这块空间进行操作
共享内存里的数据不会因为一次的读取而被刷新掉,而是会直到下一次覆盖才会消失
共享资源效率较高
问:讲一下对指针的理解
指针是内存地址,为了方便记忆内存地址,引入了指针变量来指向指针,
指针需要进行初始话,不然会产生野指针,野指针会导致程序运行的失败
指针变量有很多的类型,但是他的大小是8字节(64位系统下)4字节(32位系统下)
问:gcc4个步骤都是哪些
- 预处理:头文件的展开,宏的替换,删除注释
- 编译:语法的检查,生成一个汇编文件
- 汇编:生成一个二进制文件
- 链接:链接动态库,静态库
问:socket套接字的理解
是网络进行通信的产生的文件,在tcp服务端中创建出来的套接字会将他设置为监听状 态,来判断是否有客户端来进行链接,在确认有服务器链接后,会使用accept来创造 一个新的套接字来进行数据的收发,在服务端会创建一个套接字来进行数据的收发,在
UDP两端都会生成一个套接字来进行数据的传输
问:http协议和TCP协议和UDP协议之间的关系
http协议使用应用层,TCP和UDP是网络层,http使用TCP来进行通信的
问:IP地址和子网掩码如何决定网卡所在的网段
IP地址&上子网掩码来进行网段的划分
问:计算机网络中的osi七层模型和TCP/IP四成体系结构
Osi:物理层,数据层,网络层,传输层,会话层,表示层,应用层
TCP/IP:物理层,网络层,传输层,应用层
问:数据结构中栈和队列的区别
同:都是线性结构的
栈:数据的收发,在一端进行,遵守先进后出的原则
队列:数据的收发,在异端进行,遵守先进先出的原则
问:说一下顺序表和链表的区别
同:都是线性结构
顺序表:在物理层面上的连续的,可以使用下标连进行索引,是顺序存储
链表:在物理层面上不连续的,需要指针来进行索引和链接,是链式存储
问:TCP/IP为什么是三次握手 TCP三次握手和四次挥手 (2个问题)
1.第一次握手:客户端发送SYN包(SYN=1, seq=0)给服务器,并进入SYN_SENT状态,等待服务器返回确认包。
2.第二次握手:服务器接收到SYN包,确认客户端的SYN,发送ACK包(ACK=1 , ack=1),同时发送一个SYN包(SYN=1, seq=0),并进入SYN_RCVD状态。
3.第三次握手:客户端接收到服务器的SYN包,以及ACK包,进入establish状态,同时向服务器发送ACK包(ACK=1, ack=1)。此时三次握手包发送完毕,服务器也进入establish状态
1.第一次挥手,主动关闭方发送一个FIN包(FIN=1, seq = u)给被动方,进入FIN_WAIT_1状态;
2.第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1, ack=u+1);并进入CLOKSE_WAIT状态。主动方接受到ACK包后,进入FIN_WAIT_2状态。如果有数据没有发送完毕,则继续发送,直到发送完毕为止;
3.第三次挥手:被动方发送一个FIN包(FIN=1, seq=w),进入LAST_ACK状态.
4.第四次挥手:主动关闭方收到FIN包,回复一个ACK包(ACK=1, ack=w+1)。被动关闭方收到主动关闭方的ACK后关闭连接。
问:指针和指针变量分别是什么
指针是地址
指针变量是存放指针的变量
问:共享内存和消息队列的优缺点
1、共享内存表示的是多个进程共享一个外部的物理内存,效率比较高
2、共享内存具有时效性,存放到共享内存区域中的数据,如果不及时读取,下一次写入后,前面的数据会被覆盖
3、共享内存的操作不是一次性的,写入到共享内存中的数据,即使读取出去后,依然存在于共享内存,直到下一次被覆盖
1消息队列:放入消息队列中的消息需要进行封装,包括消息类型和消息数据
2消息队列的消息遵循先进先出原则,如果取出时不指定类型,则默认取第一个,如果指定了类型,则取第一个放入队列中的该消息
3消息队列独立于进程而存在,当一个进程将消息放入队列后,及时进程退出了,也不会删除消息队列中的该消息
4消息队列的大小为16KB
问:结构体中char和int占几字节
8字节