2024.5.21面试题

1、如何实现TCP的并发

使用进程
void handler(int signo)
{if(signo==SIGCHLD)
{
while(waitpid(-1,NULL,WNOHANG)!=0);
}
}
主函数
signal(SIGHLD,handler);
socket创建一个套接字
bind()绑定端口号和IP地址
listen()设置成被动监听
while(1)循环
{
accept设置阻塞连接
fock()创建子进程
if(pid>0)在父进程中关闭newfd
else(pid==0)在子进程中关闭sfd
recv()阻塞读取
send()发送消息
close(newfd);
exit()退出进程
}

使用线程

void *deal(void *arg)
{recv()
send()
close()
pthread exit(null)
主函数
sock()创建套接字
bind()绑定端口号和IP地址
listen()设置成被动监听
while(1)循环
{
accept设置阻塞连接
pthread——create创建线程
pthread——detach()设置分离式
close

2、TCP的三次握手
A向B发送请求连接申请
B向A发送我知道了;
B向A发送请求连接
A向B发送我知道了

3、四次挥手
A向B发送断开申请;
B向A发送我知道了;
B向A发送断开请求;
A向B发送我知道了;

4、TCP/IP协议分几层?TCP\IP属于哪一层
应用层、传输层、网络层、链路层
TCP属于传输层 IP属于网络层

5、UDP为什么丢包?怎么样处理?发生在那一层?为什么?
面向无连接(网络拥塞、缓冲区溢出),
处理:实现重传机制、增大缓冲区大小
发送在网络层,
udp供无连接的、不可靠的数据传输服务

6、TCP是同步还是异步,谈谈对同步异步的理解
同步
同步:在返回结果之前,调用者必须等待该操作完成。
异步:在一个进程未结束时还可以运行其他进程

7、什么是TCP的沾包现象?如何解决?
发送的数据包小且发送时间间隔短会把两个或者多个包合并成一个包进行发送
发慢点,发送端将每个包都封装成固定的长度

8、组播和广播的区别
广播播对网络中的每一台主机都发送消息   广播地址=网络号+255  不通过网络宽带
组播只能对加入多播组的主机发送消息,会占用大量网络宽带,组播地址时D类网【224.0.0.0-239.255.255.255】

9、阻塞IO和非阻塞IO的区别
阻塞io:在未读到数据时进程会一直阻塞直到读到数据后才开始运行进程
非阻塞io:进程会一直运行

10、并发和并行的区别
并发:在单处理器上运行多个进程.
并行:在多个处理器上运行多个进程.

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值