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

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

1、TCP与UDP的区别

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

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

2、流量控制和拥塞控制

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

3、多线程如何同步

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

4、进程间通讯的方式及优缺点

A、管道( pipe )

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

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

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

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

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

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

G、套接字( socket )

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

优缺点:

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

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

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

5、tcp连接建立的时候3次握手,断开连接的4次握手的具体过程

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

6、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则做了不必要的拷贝

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

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

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

  A.可共享正文

  B.可共享数据

  C.可重入

  D.方便编程

9、什么是驱动模块?

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

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

A、接受测试输入;

B、对输入进行判断;

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

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

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

10、如果能够执行完美的黑盒测试,还需要进行白盒测试吗?(白盒与黑盒的区别)

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

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

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

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

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

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

D、性能上是否能够满足要求?

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

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

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

B、对所有的逻辑判定,取"真"与取"假"的两种情况都能至少测一遍。

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

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

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

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

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

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

14、操作系统中同时存在着多个进程,它们(C )
    A、不能共享系统资源           B、不能调用同一段程序代码
    C、可以共享所有的系统资源        D、可以共享允许共享的系统资源

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

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

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

时间: 2024-10-01 01:27:23

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

嵌入式linux面试题解析(二)——C语言部分三

嵌入式linux面试题解析(二)--C语言部分三 1.下面的程序会出现什么结果#include <stdio.h>#include <stdlib.h> #include <string.h>void getmemory(char *p){    p=(char *) malloc(100);    strcpy(p,"hello world");}int main( ){    char *str=NULL;    getmemory(str); 

嵌入式linux面试题解析(二)——C语言部分二

嵌入式linux面试题解析(二)--C语言部分二 1..h头文件中的ifndef/define/endif 的作用?    答:防止该头文件被重复引用. 2.#include 与 #include "file.h"的区别?    答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h. 3.描述实时系统的基本特性    答 :在特定时间内完成特定的任务,实时性与可靠性. 4.全局变量和局部变量在内存中是否有区别?如果有,是

嵌入式linux面试题解析(一)——ARM部分二

嵌入式linux面试题解析(一)--ARM部分二 1.描述一下嵌入式基于ROM的运行方式基于RAM的运行方式有什么区别. 基于RAM的运行方式:需要把硬盘和其他介质的代码先加载到ram中,加载过程中一般有重定位的操作: 基于ROM:没有上面的操作. 基于ROM:速度较基于RAM的慢,因为会有一个把变量,部分代码等从存储器(硬盘,flash)搬移到RAM的过程:可用RAM资源比基于RAM的多: 基于RAM:速度较基于ROM的快,可用RAM比基于ROM的少,因为所有的代码,数据都必须存放在RAM中.

嵌入式linux面试题

基础试题(C语言) 一.ANSI C/C++方面的知识 一.1.简答题.下面的题目必须全部答对才给分(20分): 1. 如何在C中初始化一个字符数组. char s[100]={' '}; 2. 如何在C中为一个数组分配空间. char s[10]; s=malloc(10*sizeof(char)); 3. 如何初始化一个指针数组. int *pt[10]={NULL}; 4. 如何定义一个有10个元素的整数型指针数组. int *pt[10]={NULL}; 5. s[10]的另外一种表达方

嵌入式Linux C语言(三)——指针与函数

嵌入式Linux C语言(三)--指针与函数 指针对函数的功能有巨大的贡献,指针能够将数据传递给函数,并且允许函数对数据进行修改.指针对于函数的作用主要有两方面:将指针传递给函数和声明函数指针. 一.程序的栈和堆 程序的栈和堆是C语言程序运行的运行时元素. 1.程序栈 程序栈是支持函数执行的内存区域,通常和堆共享一块内存区域,通常程序栈占据内存区域的下部,堆用内存区域的上部.程序栈存放栈帧,栈帧存放函数参数和局部变量.调用函数时,函数的栈帧被推倒栈上,栈向上长出一个栈帧,当函数终止时,函数的栈帧

嵌入式linux QT开发(三)——GUI原理分析

嵌入式linux QT开发(三)--GUI原理分析 一.命令行程序 命令行程序是面向过程的程序设计. 命令行程序的特点: A.基于顺序结构执行 B.程序执行过程中不需与用户交互 C.程序执行结束给出最终运行结果 命令行程序适用场合: A.单任务场合 B.无交互.简单交互场合 C.服务器应用场合 二.GUI程序 GUI程序的特点: A.基于消息驱动模型的程序 B.程序执行依赖用户交互过程 C.程序执行过程中实时响应用户操作 D.一般程序执行后不会主动退出 GUI程序适用场合: A.多任务场合 B.

嵌入式 Linux网络编程(三)——UDP编程模型

嵌入式 Linux网络编程(三)--UDP编程模型 UDP编程模型: UDP循环服务器模型为: socket(...); bind(...); while(1) {    recvfrom(...);    process(...);    sendto(...); } server.c代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #inc

嵌入式linux C++语言(三)——封装(Encapsulation)

嵌入式linux C++语言(三)--封装(Encapsulation) 一.封装简介 C语言等面向过程编程中,数据以及数据的相关操作函数都是分离的独立个体:在C++等面向对象编程中,数据以及数据的相关操作被设计为对象,对象包括属性(数据)和操作(函数),两者共同构成对象实体(即类实体).面向对象编程使程序更模块化,更易读易写,提升了代码重用到一个更高的层次. 面向对象编程中,数据和数据的操作封装为了对象.封装可以隐藏实现细节,使得代码模块化,是把过程和数据包围起来,对数据的访问只能通过已定义的

Linux面试题汇总答案

转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识.4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块.5. 链接分为: 硬链接 和 符号链接 .6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息.7. 某文件的权限为:d-rw-_r--_r