网络编程day6

1、C语言中指针数组和数组指针的区别?
指针数组本质上是个数组,其中各个元素都是指针变量
数组指针本质上是个指针变量,其储存的地址为数组的地址
2、结构体字节对齐
字节对齐的原则有两个:    1、结构体中的每个成员在分配内存时,要以数据类型对齐一次
                        2、所有成员分配内存结束后,整体要对齐一次:

                                                32位系统与其中最大字节成员和4字节中的小者对齐

                                                64位系统与其中最大字节成员和8字节中的小者对齐
3、TCP和UDP的区别
TCP和UDP都是传输层的协议,用于网络传输
TCP趋于稳定,提供面向连接的 可靠的数据传输服务,传输过程中数据无误、数据无丢失、数据无失序、数据无重复
TCP会给每个数据包编上编号,称之为序列号
传输效率低,耗费资源多
数据收发不同步
为了提高效率TCP会把多个较小并且发送间隔短的数据包粘合一起发送,称之为沾包现象

UDP趋于快速
面向无连接的,不保证数据可靠的,尽最大努力传输的协议
传输过程可能出现丢失、重复、失序等现象
数据传输效率高、实用性强
限制每次传输的数据大小,多出的部分直接删除
收发同步 不沾包

4、什么是同步 \异步通信
在同步通信中,发送方和接收方在通信过程中是同步工作的。发送方发送数据后,必须等待接收方确认收到数据,然后才能发送下一批数据。
同步通信的优点是简单、高效,因为数据传输是连续的,没有等待时间。缺点是如果接收方处理数据的速度慢于发送方,可能会导致数据丢失或需要额外的缓冲区来存储数据。
在异步通信中,发送方和接收方不需要同步工作。发送方可以在任何时间发送数据,而接收方可以在任何时间接收数据。这种通信方式的优点是灵活,可以适应不同的数据传输速率和处理能力。
缺点是相比于同步通信,异步通信可能会有更多的开销,因为需要额外的位来标记数据的开始和结束,且数据传输不是连续的。
5、多线程的理解
线程是任务器调度的最小单位,一个进程可以包含多个线程,多个线程共享进程资源,线程几乎不占用资源,操作开销小、任务切换效率高然而由于多个线程共同使用进程的资源导致操作上容易出现不安全的状态
同一进程中的多个线程在访问临界资源时,会出现抢占的现象,称之为竞态,导致数据错误等情况

1、大小端验证
不同主句在存储多字节整数时,由于cpu架构不同存储方式也不同分为大小端存储
其中地址地位存储高位数据的为高位,地址地位存储低位数据的为低位
可以使用指针或共用体验证
定义一个整形变量num存储多字节整数,定义一个char类型指针变量存储num的地址,强转num,而后对地址地位的一字节数据判断,若指针内存储num高位则为大端存储,反之小端
定义一个共用体,其中包含至少一个多字节的数据类型,例如整数或长整数。
将共用体的地址转换为一个字符指针。
检查这个指针指向的第一个字节。
如果第一个字节是多字节数据类型的最高位字节(即大端),则系统是大端存储;如果第一个字节是最低位字节(即小端),则系统是小端存储。

2、互斥锁相关问题
在C语言中线程的互斥问题通过互斥锁来解决
本质上是一个特殊的临界资源,该资源同时只能被一个线程拥有,当一个线程试图区锁定另一个线程锁定的互斥锁时,该线程会阻塞等待,直到用于该互斥锁的线程解锁
互斥锁存在死锁问题
当两个或两个以上的线程被永久阻塞时,因为每个线程都在等待其他线程释放它们需要的资源,当多个互斥锁被不同的线程以不同的顺序获取时,很容易发生死锁。
3、共享内存的特点
共享内存表示的是多个进程共享一个外部的物理内存,效率比较高
共享内存具有时效性,存放到共享内存区域中的数据,如果不及时读取,下一次写入后,前面的数据会被覆盖
共享内存的操作不是一次性的,写入到共享内存中的数据,即使读取出去后,依然存在于共享内存,直到下一次被覆盖
4、指针的理解

5、gcc编译四步骤
预处理:展开头文件,替换宏定义,删除注释
编译:检查语法错误,有错报错,无措继续生成汇编文件
汇编:生成一个不可执行的二进制文件
链接:链接库函数,最终生成二进制可执行文件


1、对socket的理解
socket是套接字文件类型,使用socket函数创建一个文件描述符并生成两个缓存区,一个用于接收信息,另一个用来发送信息。套接字的基本操作包括,socket创建套接字,bind将套接字与特定的网络地址信息绑定,listen允许服务器监听客户端的连接请求,accept和connect连接与接收连接,send/sendto/recv/recvfrom close等操作
2、http协议和TCP UDP协议之间的关系
http协议是一种应用层协议主要用于从网络传输超文本到本地浏览器,TCP和UDP都是传输层协议,负责于网络中传输数据。HTTP协议通常运行在TCP之上,因为http需要保证数据的完整和顺序正确

3、ip地址和子网掩码如何决定网卡所在的网段
ip地址&子网掩码 =子网网段
4、计算机网络中的OSI七层模型和TCP/IP四层体系结构
应用层、表示层、会话层、传输层、网络层、链路层、物理层
应用层、传输层、网际层、网络接口层
5、栈和队列的区别
栈和队列都属于操作受限的线性表
栈插入和删除只能在同一段进行,不能在中间进行相关操作
队列插入和删除只能在异端进行,不能在中间进行操作
栈允许先进后出后进先出,队列则是先进先出 后进后出

1、顺序表和链表的区别
顺序表和链表都属于线性表;顺序表是存储结构为顺序结构的线性表,使用连续的存储空间进行操作如数组或使用堆区空间;链表是存储结构为链式结构的线性表,数据元素的存储地址不一定连续;顺序表插入和删除元素要移动大量元素效率低,链表则不需要移动大量元素效率高;顺序表存储数据元素有上限,链表则没上限;顺序表可以通过下标等方式直接定位元素,访问元素效率高,链表则必须遍历整个链表找到其上一个节点或下一个节点(双向链表);

2、三次握手和四次挥手
三次握手必须由客户端发起
第一次握手,客户端发送SYN包给服务器,并进入SYN_SENT状态等待服务器返回确认包
第二次握手,服务器接收到SYN包确认其内容并发送ACK包,同时发送SYN包,并进入SYN_RCVD状态
第三次握手,客户端接收到服务器的SYN包,以及ACK包,进入establish状态,同时向服务器发送ACK包,此时三次握手包发送完毕,服务器也进入establish状态

四次挥手可以由服务器或客户端发起
第一次挥手 关闭发起方发送一个FIN包,给被动 并进入FIN_WAIT_1状态
第二次挥手 被动方收到FIN包 给主动方发送一个ACK包,并进入CLOKSE_WAIT状态,主动方接收到ACK包后,进入FIN_WAIT_2状态,如果有数据没有发送完毕,则继续发送,直到发送完毕为止;
第三次挥手 被动方发送一个FIN包,进入LAST_ACK状态
第四词挥手 主动关闭方收到FIN包后恢复一个ACK包,被动关闭方收到主动关闭方的ACK后关闭连接

3、指针 和指针变量
指针就是地址,地址就是指针
指针变量是用于存储地址的变量,也就是存放指针的变量

4、共享内存和消息队列的优缺点
消息队列的优点有:可以避免命名管道的同步和阻塞问题;可以提前查看紧急情况;可以跨主机跨进程跨网络通信
        缺点:数据块有长度限制;全部数据块总长度也有上限
共享内存的优点:多个进程共享一个外部的物理内存,利用效率高
                            

5、结构体中一个char 一个int结构体占字节长度多少
8字节,在结构分配内存时要按数据类型对齐一次char是1字节,int是4字节对齐结果是4字节,而后int占4字节,共8字节,而后所有成员分配内存结束后,整体要对齐一次 64位系统与其中最大字节成员和8字节中的小者对齐,也就是8字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值