嵌入式学习

笔记

 面试题

1. IO多路复用原理?
   单线程处理多个I/O操作:传统的I/O模型中,每个I/O操作都需要一个线程或进程来处理。而在IO多路复用中,一个线程可以同时监视多个I/O操作。

   使用select、poll或epoll等机制:在Unix/Linux系统中,常用的IO多路复用机制包括select、poll和epoll。这些机制允许程序员指示内核等待多个文件描述符上的事件,并在其中之一发生时唤醒程序,以便程序可以执行相应的I/O操作。

   事件驱动:当一个或多个文件描述符上发生了I/O事件(如数据可读或可写),内核会通知程序,并返回哪些文件描述符上发生了事件。程序可以根据这些事件来进行相应的处理。

   非阻塞I/O:通常与IO多路复用一起使用的是非阻塞I/O。通过将文件描述符设置为非阻塞模式,程序可以在没有数据可读或可写时立即返回,而不必等待数据就绪。

2. 实现IO多路复用可以使用哪些函数完成?
    select函数和poll函数。

3. select和poll的区别?
1)接口和用法:
select():使用三个fd_set类型的参数来传递文件描述符集合,分别表示要监视可读、可写和异常事件的文件描述符。
poll():使用一个 struct pollfd 数组来传递文件描述符及其所关注的事件,可以通过设置结构体的成员来指示关注的事件类型。
2)可扩展性:
select():受到文件描述符数量的限制,通常在几百到一千个文件描述符时性能较好,但在更大规模下性能会下降。
poll():理论上没有文件描述符数量的限制,因此在大规模文件描述符的情况下,poll() 的性能可能会比 select() 更好。
3)复杂度:
select():在使用过程中,需要不断更新 fd_set,并且在每次调用 select() 后需要重新设置 fd_set,因此代码可能会比较繁琐。
poll():由于是通过数组来传递文件描述符和关注的事件,因此相对来说更简洁一些。
4)可移植性:
select():是POSIX标准的一部分,因此在几乎所有的UNIX和类UNIX系统上都可以使用。
poll():也是POSIX标准的一部分,但在某些较老的UNIX系统上可能不支持,或者支持不完全。


4. 在UDP通信过程中,能否使用connect函数?为什么?有什么好处?
    能。好处:能够实现数据的稳定传输,可以避免在和某个端点进行通信时被其他端点打断。还可以提高传输效率。

5. OSI七层网络体系结构有哪些?
    应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

6. 四层网络体系结构?
    应用层、传输层、网络层、网络接口层。

7. ARP、HTTP、TFTP、IP、UDP、TCP说出全称和所在层?
    ARP:地址解析协议。网络接口层。
    HTTP:超文本传输协议。应用层。
    TFTP:简单文件传输协议。应用层。
    IP:网际协议。网络层。
    UDP:用户数据报协议。传输层。
    TCP:传输控制协议。传输层。

8. 100.0.125.2对应的默认子网掩码是多少?
    255.0.0.0

9. 顺序表和链表的区别?
    顺序表:线性表的顺序存储,逻辑上相邻的元素在物理位置上也相邻;能够随机存取;存储密度高(每个结点只需要存储本身的数据);进行插入和删除元素时,需要移动大量的元素,插入和删除元素的时间复杂度为O(n);空间可能会存满;扩容的时候不方便。
    链表:线性表的链式存储,逻辑上相邻的元素在物理位置上可以不相邻;插入和删除操作方便,时间复杂度为O(1);存储密度低(每个结点除了存储本身的数据外,还需要存储指向下一个结点的指针);只要堆空间足够,就不存在存满的情况。

10. 进程和线程的区别?
1)定义:
进程:是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位。
线程:是进程中的一个执行单元,是操作系统进行调度的最小单位,也是程序执行的最小单位。
2)资源分配:
进程:每个进程都有独立的地址空间、内存、数据栈以及其他资源,如文件描述符、信号处理等。
线程:线程是进程的一部分,共享相同的地址空间和其他进程资源,如文件描述符、信号处理等。
3)通信和同步:
进程:进程间通信较为复杂,通常需要通过IPC(Inter-Process Communication)机制来实现,如管道、消息队列、共享内存等。
线程:线程间共享相同的地址空间,因此线程间通信更加简单直接,可以通过共享内存、信号量等来实现同步和通信。
4)创建和销毁开销:
进程:创建和销毁进程的开销较大,需要分配和释放独立的地址空间和其他资源。
线程:创建和销毁线程的开销较小,因为线程共享了大部分进程的资源,只需分配一些额外的线程私有数据即可。
5)并发性:
进程:进程是操作系统调度的基本单位,不同进程之间的执行是互相独立的,因此进程间的并发性较低。
线程:线程是进程内的执行单元,因此同一进程内的多个线程可以并发执行,实现更好的并发性和性能。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值