嵌入式软件工程师面试题收录(4)
嵌入式软件面试题收录4
最近收集了许多嵌软的面试题和相关知识,内容都是在很多文章中剪下来的!
目录
1.什么是物联网?物联网的含义是什么?
万物互联、实时共享,对物品进行智能化的识别、定位、跟踪、监控和管理的一种网络。
物联网架构主要分为三层:感知层、网络层、应用层。
感知层有许多传感器组成,主要工作是”完成信息采集和信号处理”。
网络层由各种网络协议(OSI模型)组成,主要工作是”对感知层的信息进行传输和加密”
应用层是物联网和用户的接口,实现人机交互,开展智能化的应用。
2.物联网通信实现的过程?
比如共享单车,用户通过扫描二维码,将开锁的信息发送至MQTT服务器。MQTT服务器通过识别用户信息和二维码的车辆信息,找到相应的共享单车,将开锁信息发送到相应的单车智能锁,从而实现单车的开锁功能。
3.什么是嵌入式?
以应用为中心,以计算机技术为基础,软硬件可裁剪,适用在对体积、功耗、性能等方面有严格要求的专用计算机系统。
简单的说,除了桌面PC和服务器之外,所有的控制类设备都是嵌入式。
4.什么是实时性?
实时性是指时钟信号能够准确的定时,各处的时钟能够达到一致。
Linux不属于实时操作系统,属于分时操作系统。RTOS是实时操作系统的英文缩写。
5.分时操作系统与实时操作系统
实时操作系统(RTOS)是指当有外界事物或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供响应及时和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则是按照任务的优先级,尽可能快地完成操作。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。
实时操作系统的特征是:多任务,有线程优先级,多种中断级别。
分时操作系统使一台计算机同时为(几个、几十个甚至几百个)许多终端用户服务的一种操作系统。把计算机与许多终端用户连接起来,分时操作系统将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。分时操作系统的特点是可有效增加资源的使用率。例如UNIX系统就采用剥夺式动态优先的CPU调度,有力地支持分时操作。
分时操作系统特征:
交互性:用户与系统进行人机对话。
多路性:多用户同时在各自终端上使用同一CPU。
独立性:用户可彼此独立操作,互不干扰,互不混淆。
及时性:用户在短时间内可得到系统的及时回答。
6.C与C++的异同?
首先,c与c++最本质的区别是,c是面向过程的语言,c++是面向对象的语言。
然后,c++比c多了一些关键字。(C有32个)
C++支持函数重载和函数默认值,而c两个都不支持。
c的结构体是不能有函数成员的,而c++的类可以有。
c的结构体数据成员默认访问权限是public。而c++的类成员默认访问权限是private。
c的结构体没有继承关系,而c++的类有继承关系。
7.C++与Java的异同?
C++的应用在中间件和底层,java的应用在高层。
Java取消了指针,让代码更简洁。
Java是运行在JVM上的,因为JVM可以安装在任何系统,所以java可移植性高。
C++也可以在不同的系统上运行,只是需要不同的编码。
C++用析构函数回收垃圾,java的GC算法可以自动回收。
8.Python与c的差别?
Python是脚本语言,不需要编译。而c需要编译。
Python是动态语言,不需要预定义变量。而c使用变量前需要定义。
9.什么是预处理?
c语言编译的整个流程是:源程序,预处理,编译,汇编,链接,可执行文件。
预处理:将#include的文件内容导进来文件里,将#define宏使用的地方做替换,选择#if等条件编译的内容。预处理后还是.c文件,不过文本大小变得更大了。
编译:把.c文件编译成.s汇编文件,其中进行了词法分析、语法分析、语义分析、生成中间代码、对代码进行优化等工作。
汇编:将.s汇编代码转换成机器码,产生目标文件(.obj)。
链接:将生成的.obj目标文件和系统库的.obj目标文件、库文件链接起来,最终生成可以在特定平台运行的可执行文件。
静态链接:在编译(代指整个编译环节)阶段就会把所有用到的库打包到自己的可执行程序中,其优点是具有较好的兼容性,不依赖外部环境,但是生成的程序比较大。
动态链接:在应用程序运行时,链接器去加载外部的共享库,并完成共享库和动态编译程序之间的链接。不同的程序可以共用代码库,节省内存空间。
10.什么是面向过程和面向对象?
面向过程就是把问题分解成一系列的步骤,在函数里面一步步实现步骤,根据需求调用函数。
面向对象就是把构成问题的事务分解成各个对象,调用对象里面的方法属性解决问题。三大特性:封装性、继承性、多态性。
简单来说,面向过程就是自项向下的编程,面向对象就是高度实物抽象化。
11.Linux由什么组成?
内核、bootloader、文件系统、shell、应用程序。
内核:Linux系统的核心。往下连接硬件、往上连接应用程序。
bootloader:一个单片机程序,用来引导系统启动。
shell:用户界面,提供用户与内核进行交互操作的一种接口。
12.Linux的启动过程
通电自检
加载BIOS
确定启动设备、加载Bootloader
加载内核、初始化initrd
运行初始化系统
打印用户登录提示符
13.进程有哪几种状态
就绪状态,运行状态,阻塞状态
14.什么是网络编程?
网络编程就是编写程序使互联网的多个设备之间进行数据传输。
15.STM32与ARM有什么区别?
ARM是一家设计芯片内核的公司。
现在的ARM内核分为三种系列:A、R、M。
A系列:面向高端产品。
R系列:面向实时性要求高的产品。
M系列:面向成本敏感型的产品。
STM32是ST(意法半导体)公司基于ARM公司的cortex-M3内核生产的32位系列的单片机。
16.瀑布模型的步骤。
瀑布模型将软件生命周期分为可行性研究和计划、需求分析、软件设计、编码、测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序。
不适合需求模糊或需求经常变动的系统。
17.说10个Linux的常用命令
cd / :进入家目录
cd ..:返回上一层
cd ../..:返回上两层
cd -:返回上次所在的目录
pwd:显示工作路径
man:查询命令帮助
ls:查看目录文件
mkdir -p dir0/dir1/dir2:创建一个目录树。-p代表递归。
touch:创建文件
rm:删除文件
rmdir:删除目录
mv:重命名/移动
mv (old)1.txt (new)2.txt:更改文件名。
mv 1.txt ../dir/:移动文件。(如果同名,会覆盖)
cp:复制
mount:挂载
find:搜索
grep:搜索
passwd:修改密码
gcc:预处理
arm-limux-gcc -o file -WALL
chmod:修改权限
chmod -rwxrwxrwx 读写执行 对象:个人、组、其他
cat:查看文件内容
tar、zip:压缩
tar参数:
-z:gz格式
-j:bz2格式
-c:压缩
-x:解压
-v:显示压缩或解压的内容
-f:必填
例如:tar -cjvf archive.tar.bz2 dir1 创建一个bzip2格式的压缩包
zip参数:
-m:压缩,删除源文件
-r:递归处理
unzip参数:
-c:将解压内容显示在屏幕上
18.TCP与DUP的区别
|
UDP |
TCP |
|
|
是否连接 |
面向无连接 |
面向连接 |
|
是否可靠 |
不可靠传输,不使用流量控制和拥塞控制 |
可靠传输,使用流量控制和拥塞控制 |
|
连接对象个数 |
支持单播,多播和广播 |
只能单播 |
|
传输方式 |
面向报文 |
面向字节流 |
|
首部开销 |
首部开销小,仅8字节 |
首部最小20字节,最大60字节 |
|
适用场所 |
适用于实时应用(IP电话、视频会议、直播等) |
适用于要求可靠传输的应用,例如文件传输 |
TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为。
对数据准确性要求高,速度可以相对较慢的,可以选用TCP
19.ARP和RARP的区别
ARP通过目标设备的IP地址查询目标设备的MAC地址。
RARP通过目标设备的MAC地址查询目标设备的IP地址。
20.Winsock的TCP网络通信模型

21.Winsock的UDP网络通信模型

22.TCP的三次握手

第一次握手:由客户端主动发起连接建立请求,发送数据包,将SYN置为 1 ,通常叫做发送SYN包,并且随机产生一个值:seq = J,然后将数据包发送给服务端,客户端进入SYN_SENT状态,等待服务端的确认。
第二次握手: 服务端收到SYN报文,对该报文进行回复,将报文的标志位SYN和ACK都置为 1 ,确认应答序号ack = J + 1,同样随机产生一个值seq = K,将数据报发送给客户端,服务端进入SYN_RCVD的状态。
第三次握手: 客户端接收到数据包之后检查ACK是否为 1 、ack是否为J + 1,如果正确,那么将ACK位置 1 ,ACK = K + 1,然后发送给服务端,此时客户端的状态变为ESTABLISHED,数据报到服务端,经过同样的检测,如果正确,服务端也变为ESTABLISHED,此时可以正常交换数据通信。
简单的说:三次握手由客户端发起,客户端发送一个SYN包,服务端发送一个SYN+ACK包,客户端再发送一个ACK包,三次握手建立成功。
23.TCP的四次挥手

第一次挥手:客户端发送一个FIN包来断开连接,并停止数据发送,客户端进入FIN_WAIT_1状态。
注意:TCP规定,FIN报文段即使不携带数据,也需要消耗掉一个序列号
第二次挥手: 服务端收到一个FIN包,回复一个ACK,确认序号需要进行加一操作,因为FIN包需要消耗一个序号。此时客户端进入CLOSE_WAIT转态,此时服务端依旧可以进行数据的发送,客户端依然有数据到来是要接收的,这个状态需要持续一段时间,这个时间就是CLOSE_WAIT状态的持续时间。
客户端接收到服务端的确认请求之后客户端进入FIN_WAIT_2状态,等待服务端发送FIN包
第三次挥手: 服务端将最后的数据都发送给客户端,然后发送一个FIN包,随即进入LAST_ACK状态
第四次挥手: 客户端收到来自服务端的FIN包,需要发出确认包,当确认包发出之后状态变为TIME_WAIT
注意:这个时候TCP连接还没有释放,需要经过 2 * MSL个时间才能释放,这个时候才进入CLOSED的状态
服务端只要收到了来自客户端的ACK包,就进入CLOSED的状态
简单的说:四次挥手由客户端发起,客户端发送一个FIN包来断开连接,服务端发送一个ACK包来确认,确认后客户端会进入等待状态,服务端再发送数据和FIN包,然后客户端再发送一个ACK包来确认。
注:很多内容都是小编翻阅很多优秀文章找来的,符合的就贴上去,不符合自己心意的就自己写理解!
更多推荐


所有评论(0)