嵌入式linux面试题解析(三)——Linux应用编程部分一

嵌入式linux面试题解析(三)——Linux应用编程部分一

一、TCP与UDP的区别linux

    TCP:是面向链接的流传输控制协议,具备高可靠性,确保传输数据的正确性,有验证重发机制,不会出现丢失或乱序。面试

    UDP:是无链接的数据报服务,不对数据报进行检查与修改,无须等待对方的应答,会出现分组丢失、重复、乱序,但具备较好的实时性,UDP段结构比TCP的段结构简单,所以网络开销也小。编程

 

二、流量控制和拥塞控制windows

    拥塞控制
    网络拥塞现象是指到达通讯子网中某一部分的分组数量过多,使得该部分网络来不及处理,以至引发这部分乃至整个网络性能降低的现象,严重时甚至会致使网络通讯业务陷入停顿,即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机制。
    流量控制
    数据的传送与接收过程中极可能出现收方来不及接收的状况,这时就须要对发方进行控制,以避免数据丢失。网络

 

三、多线程如何同步数据结构

    Linux系统中多线程同步有最经常使用的是:互斥锁、条件变量和信号量。多线程

 

4进程间通信的方式优缺点并发

A、管道( pipe )socket

管道是一种半双工的通讯方式,数据只能单向流动,并且只能在具备亲缘关系的进程间使用。进程的亲缘关系一般是指父子进程关系。
B、有名管道 (named pipe) tcp

有名管道也是半双工的通讯方式,可是它容许无亲缘关系进程间的通讯。
C、信号量( semophore )

信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它常做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。
D、消息队列( message queue )

消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
E、信号 ( sinal )

信号是一种比较复杂的通讯方式,用于通知接收进程某个事件已经发生。
F、共享内存( shared memory

共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问。共享内存是最快的IPC方式,它是 针对其余进程间通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号量,配合使用,来实现进程间的同步和通讯。

G、套接字( socket )

套解口也是一种进程间通讯机制,与其余通讯机制不一样的是,它可用于不一样及其间的进程通讯。

优缺点:

    A、无名管道简单方便但局限于单向通讯的工做方式而且只能在亲缘进程之间实现管道的共享有名管道虽然能够提供给任意关系的进程使用可是因为其长期存在于系统之中,使用不当容易出错。

    B、消息队列能够再也不局限于父子进程而容许任意进程经过共享消息队列来实现进程间通讯并由系统调用函数来实现消息发送和接收之间的同步从而使得用户在使用消息缓冲进行通讯时再也不须要考虑同步问题使用方便,可是信息的复制须要额外消耗 CPU的时间不适宜于信息量大或操做频繁的场合。

    C、共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息,无须复制,快捷、信息量大是其优势。可是共享内存的通讯方式是经过将共享的内存缓冲区直接附加到进程的虚拟地址空间中来实现的所以,进程之间的读写操做的同步问题操做系统没法实现必须由各进程利用其余同步工具解决。另外,因为内存实体存在于计算机系统中因此只能由处于同一个计算机系统中的诸进程共享,不能网络通讯。

 

五、tcp链接创建的时候3次握手,断开链接的4次握手的具体过程

    创建链接采用的3次握手协议,具体是指:
    第一次握手是客户端connect链接到server,server accept client的请求以后,向client端发送一个消息,是第二次握手,第3次握手就是client向server发送的,就是对第二次握手消息的确认。以后client和 server就开始通信了。
    断开链接的4次握手,具体以下:
    断开链接的一端发送close请求是第一次握手,另一端接收到断开链接的请求以后须要对close进行确认,发送一个消息,这是第二次握手,发送了确认 消息以后还要向对端发送close消息,要关闭对对端的链接,这是第3次握手,而在最初发送断开链接的一端接收到消息以后,进入到一个很重要的状态 time_wait状态,最后一次握手是最初发送断开链接的一端接收到消息以后对消息的确认。

 

六、epoll与select的区别

    select在一个进程中打开的最大fd是有限制的,由FD_SETSIZE设置,默认值是2048。不过 epoll则没有这个限制,它所支持的fd上限是最大能够打开文件的数目,这个数字通常远大于2048,通常来讲内存越大,fd上限越大,1G内存都能达到大约10w左右。
    select的轮询机制是系统会去查找每一个fd是否数据已准备好,当fd不少的时候,效率固然就直线降低了,epoll采用基于事件的通知方式,一旦某个 fd数据就绪时,内核会采用相似callback的回调机制,迅速激活这个文件描述符,而不须要不断的去轮询查找就绪的描述符,这就是epoll高效最本质的缘由。
    不管是select仍是epoll都须要内核把FD消息通知给用户空间,如何避免没必要要的内存拷贝就很重要,在这点上,epoll是经过内核于用户空间mmap同一块内存实现的,而select则作了没必要要的拷贝

 

七、epoll中et和lt的区别与实现原理

    LT:水平触发,效率会低于ET触发,尤为在大并发,大流量的状况下。可是LT对代码编写要求比较低,不容易出现问题。LT模式服务编写上的表现是:只要有数据没有被获取,内核就不断通知你,所以不用担忧事件丢失的状况。
    ET:边缘触发,效率很是高,在并发,大流量的状况下,会比LT少不少epoll的系统调用,所以效率高。可是对编程要求高,须要细致的处理每一个请求,不然容易发生丢失事件的状况。

 

八、UNIX系统中进程由三部分组成:进程控制块,正文段和数据段。这意味着一个程序的正文与数据能够是分开的,这种分开的目的是为了?ABC

  A.可共享正文

  B.可共享数据

  C.可重入

  D.方便编程

 

九、什么是驱动模块?

    答:驱动模块在大多数场合称为"主程序",它接收测试数据并将这些数据传递到被测试模块.单元测试一个函数单元时,被测单元自己是不能独立运行的,须要为其传送数据,为此写驱动。

  驱动模块主要完成如下事情:

    A、接受测试输入;

    B、对输入进行判断;

    C、将输入传给被测单元,驱动被测单元执行;

    D、接受被测单元执行结果,并对结果进行判断;

    E、将判断结果做为用例执行结果输出测试报告。

 

10、若是可以执行完美的黑盒测试,还须要进行白盒测试吗?(白盒与黑盒的区别)

    答案:任何工程产品(注意是任何工程产品)均可以使用如下两种方法之一进行测试。

    黑盒测试:已知产品的功能设计规格,能够进行测试证实每一个实现了的功能是否符合要求。 白盒测试:已知产品的内部工做过程,能够经过测试证实每种内部操做是否符合设计规格要求,全部内部成分是否以通过检查。

软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看作一个黑盒子,测试人员彻底不考虑程序内部的逻辑结构和内部特性,只依据程序 的需求规格说明书,检查程序的功能是否符合它的功能说明。所以黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现如下几类错误:

    A、是否有不正确或遗漏的功能?

    B、在接口上,输入是否能正确的接受?可否输出正确的结果?

    C、是否有数据结构错误或外部信息(例如数据文件)访问错误?

    D、性能上是否可以知足要求?

    E、是否有初始化或终止性错误?

    软件的白盒测试是对软件的过程性细节作细致的检查。这种方法是把测试对象看作一个打开的盒子,它容许测试人员利用程序内部的逻辑结构及有关信息,设计 或选择测试用例,对程序全部逻辑路径进行测试。经过在不一样点检查程序状态,肯定实际状态是否与预期的状态一致。所以白盒测试又称为结构测试或逻辑驱动测 试。白盒测试主要是想对程序模块进行以下检查:

    A、对程序模块的全部独立的执行路径至少测试一遍。

    B、对全部的逻辑断定,取"真"与取"假"的两种状况都能至少测一遍。

    C、在循环的边界和运行的界限内执行循环体。

    D、测试内部数据结构的有效性,等等。

    以上事实说明,软件测试有一个致命的缺陷,即测试的不彻底、不完全性。因为任何程序只能进行少许(相对于穷举的巨大数量而言)的有限的测试,在未发现错误时,不能说明程序中没有错误。

 

十一、进程有三种状态:(   C )。
    A 、准备态、执行态和退出态           B 、精确态、模糊态和随机态
    C 、运行态、就绪态和等待态           D 、手工态、自动态和自由态

 

十二、文件系统的主要功能是(  A  )。
    A、实现对文件的按名存取                    B、实现虚拟存储          
    C、 提升外存的读写速度                     D、用于保存系统文档

 

1三、如下作法不利于嵌入式应用软件的移植的是 D 。
    A) 在软件设计上,采用层次化设计和模块化设计
    B) 在软件体系结构上,在操做系统和应用软件之间引入一个虚拟机层,把一些通用的、共性的操做系统API接口函数封装起来
    C) 将不可移植的部分局域化,集中在某几个特定的文件之中
    D) 在数据类型上,尽可能直接使用C语言的数据类型

 

1四、操做系统中同时存在着多个进程,它们(C )
    A、不能共享系统资源           B、不能调用同一段程序代码
    C、能够共享全部的系统资源        D、能够共享容许共享的系统资源

 

1五、 B )不是进程和程序的区别。
    A. 程序是一组有序的静态指令,进程是一次程序的执行过程
    B. 程序只能在前台运行,而进程能够在前台或后台运行
    C. 程序能够长期保存,进程是暂时的
    D. 程序没有状态,而进程是有状态的

 

1六、若是Boot Loader、内核、启动参数以及其余的系统映像四部分在固态存储设备上分别独立存放,则其存储结构的分配顺序应当是:_D____。                 
    A . 文件系统、内核、启动参数、Bootloader   
    B . 启动参数、Bootloader、内核、文件系统
    C . Bootloader、内核、启动参数、文件系统  
    D . Bootloader、启动参数、内核、文件系统  

 

1七、Boot Loader 的stage2一般使用C语言实现,以完成复杂的功能,并增长可读性和可移植性,如下哪一步骤属于stage2的内容:__D____  
    A . 为加载 Boot Loader 的 stage2 准备 RAM 空间
    B . 设置好堆栈
    C . 硬件设备初始化
    D . 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中

相关文章
相关标签/搜索