网络编程-day6

面试问题总结

1.IO多路复用的原理?
答:
创建一个存放文件描述符的容器,初始化放入需要用到的文件描述符,阻塞检测容器中文件描述符是否有对应事件发生,只要有一个相关事件到来,则解除所有文件描述符的阻塞,并执行到来事件所对应的函数;由于所有文件描述符的阻塞都已解除,那么下次执行时,需再一次初始化容器中的文件描述符。
详细过程如下:
1)用户空间发起系统调用,将监听到的fd集合从用户空间拷贝到内核空间
2)内核遍历fd集合,检查数据是否就绪
3)如果遍历一遍后发现没有fd就绪,则会将当前用户进程阻塞,让出CPU给其他进程
4)当客户端将数据发送到服务端,进入内核后,会通过数据库包找到对应的socket
5)socket检查是否有阻塞等待的进程,如果有则唤醒该进程
6)用户进程恢复运行后,会再遍历fd集合进行检查,此时它会检查到某些fd已经就绪了,它会给这些fd打上标记,然后结束阻塞,返回到用户空间
7)用户空间知道有事件就绪,遍历fd集合,找到就绪的fd,进行相应的事件处理,例如将数据从内核缓冲区拷贝到应用程序缓冲区
8)最后执行逻辑处理
2.实现IO多路复用可以使用哪些函数完成?
答:
select、poll、epoll
3.select和poll的区别?
答:
1)支持一个进程所能打开的最大连接数不同
select:单个进程所能打开的最大连接数由FD_SETSIZE宏定义,其大小是32个整数的大小(在32位的机器上,大小就是32*32=1024,同理64位机器上FD_SETSIZE为32*64=2048),当然我们可以对进行修改,然后重新编译内核,但是性能可能会受到影响,这需要进一步的测试。
poll:poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的。
2)传入文件描述符的方式不同
select:是检测不同的文件描述符集合,包括读、写、异常文件描述符集合
poll:将检测的文件描述符放入一个文件描述符结构体数组中
3) 传入超时参数方式不同
select是地址传递而poll是值传递
4)解除阻塞后的处理方式不同
select解除阻塞时,会将集合中未被事件触发过的文件描述符清除,而poll不会清除
4.在UDP通信过程中,能否使用connect函数?为什么?有什么好处?
答:
1)客户端通过 connect 绑定服务端的地址和端口,对 UDP 而言,可以有一定程度的性能提升。原因:
如果不使用 connect 方式,每次发送报文都会需要这样的过程:连接套接字→发送报文→断开套接字→连接套接字→发送报文→断开套接字 →………
如果使用 connect 方式,就会变成下面这样:连接套接字→发送报文→发送报文→……→最后断开套接字
我们知道,连接套接字是需要一定开销的,比如需要查找路由表信息。所以,UDP 客户端程序通过 connect 可以获得一定的性能提升。
2)可以跟指定的端点建立唯一的通道,在通信过程中,不受其他端点的影响
5.OSI的7层网络体系结构有哪些?
答:
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
6.四层网络体系结构有哪些?
答:
网络接口层、网络层、传输层、应用层
7.ARP、HTTP、TFTP、IP、UDP、TCP说出全称和所在层?
答:
ARP:地址解析协议,网络接口层
HTTP:超文本传输协议,应用层
IP:网际协议,网络层
UDP:用户数据报协议,传输层
TCP:传输控制协议,传输层
8.100.0.125.2对应的默认子网掩码是多少?
答:
A类地址:1.0.0.0-127.255.255.255    子网掩码:255.0.0.0
B类地址:128.0.0.0-191.255.255.255    子网掩码:255.255.0.0
C类地址:192.0.0.0-223.255.255.255    子网掩码:255.255.255.0
D类地址(组播):224.0.0.0-239.255.255.255    无子网掩码
E类地址(保留):240.0.0.0-255.255.255.255    无子网掩码
9.顺序表和链表的区别?
答:
1)数据元素访问角度:
顺序表具有按数组下标随机访问的特点,链表不是一种随机存储结构,不能随机存取元素
2)数据元素存储角度:
顺序表不用为表示节点间的逻辑关系而增加额外的存储开销,链表要占用额外的存储空间存储元素之间的关系,存储密度降低
3)存储空间大小:
顺序表的特点是逻辑上相邻数据元素,物理存储位置相邻,并且顺序表的存储空间需要预先分配,存储空间是静态分配的。
在链表中逻辑上相邻的数据元素,物理存储位置不一定相邻,它使用指针实现元素之间的逻辑关系。并且链表的存储空间是动态分配的。
4)数据元素的插入和删除:
在顺序表中做插入和删除操作时,需要遍历数组元素,当数组元素较大时,顺序表效率低。
在链式表中做插入和删除运算方便。
10.进程和线程的区别?
答:
1)最本质的区别:
进程是操作系统分配资源的最小单位,线程是操作系统能够进行运行调度的最小单位
2)区别:
(1)从属关系不同:线程属于进程,而进程不属于线程
(2)描述的侧重点不同:进程是系统分配资源的最小单位,而线程是系统调度的最小单位
(3)共享资源的方式不同:进程之间是不能共享资源的,线程之间可以共享资源(内存、打开的文件)
(4)上下文切换的速度不同:线程上下文切换的速度是比较快的,而进程的上下文切换比较慢
(5)操纵对象不同:进程是由操作系统操纵的,而线程是有程序员可以编码进行操纵的
2)联系:
(1)线程被包含在进程之中,一个线程指的是进程中一个单一顺序的控制流,一个线程只能属于一个进程,而一个进程可以并发多个(至少有一个)线程,每条线程并行执行不同的任务。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
(3)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
(4)在Unix System V 及SunOS中线程也被称为轻量进程,但轻量进程更多指内核线程,而把用户线程称为进程。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值