技术标签: 面试 linux 嵌入式软件面试题收录 嵌入式硬件
最近收集了许多嵌软的面试题和相关知识,内容都是在很多文章中剪下来的!
目录
万物互联、实时共享,对物品进行智能化的识别、定位、跟踪、监控和管理的一种网络。
物联网架构主要分为三层:感知层、网络层、应用层。
感知层有许多传感器组成,主要工作是”完成信息采集和信号处理”。
网络层由各种网络协议(OSI模型)组成,主要工作是”对感知层的信息进行传输和加密”
应用层是物联网和用户的接口,实现人机交互,开展智能化的应用。
比如共享单车,用户通过扫描二维码,将开锁的信息发送至MQTT服务器。MQTT服务器通过识别用户信息和二维码的车辆信息,找到相应的共享单车,将开锁信息发送到相应的单车智能锁,从而实现单车的开锁功能。
以应用为中心,以计算机技术为基础,软硬件可裁剪,适用在对体积、功耗、性能等方面有严格要求的专用计算机系统。
简单的说,除了桌面PC和服务器之外,所有的控制类设备都是嵌入式。
实时性是指时钟信号能够准确的定时,各处的时钟能够达到一致。
Linux不属于实时操作系统,属于分时操作系统。RTOS是实时操作系统的英文缩写。
实时操作系统(RTOS)是指当有外界事物或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供响应及时和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则是按照任务的优先级,尽可能快地完成操作。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。
实时操作系统的特征是:多任务,有线程优先级,多种中断级别。
分时操作系统使一台计算机同时为(几个、几十个甚至几百个)许多终端用户服务的一种操作系统。把计算机与许多终端用户连接起来,分时操作系统将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。分时操作系统的特点是可有效增加资源的使用率。例如UNIX系统就采用剥夺式动态优先的CPU调度,有力地支持分时操作。
分时操作系统特征:
交互性:用户与系统进行人机对话。
多路性:多用户同时在各自终端上使用同一CPU。
独立性:用户可彼此独立操作,互不干扰,互不混淆。
及时性:用户在短时间内可得到系统的及时回答。
首先,c与c++最本质的区别是,c是面向过程的语言,c++是面向对象的语言。
然后,c++比c多了一些关键字。(C有32个)
C++支持函数重载和函数默认值,而c两个都不支持。
c的结构体是不能有函数成员的,而c++的类可以有。
c的结构体数据成员默认访问权限是public。而c++的类成员默认访问权限是private。
c的结构体没有继承关系,而c++的类有继承关系。
C++的应用在中间件和底层,java的应用在高层。
Java取消了指针,让代码更简洁。
Java是运行在JVM上的,因为JVM可以安装在任何系统,所以java可移植性高。
C++也可以在不同的系统上运行,只是需要不同的编码。
C++用析构函数回收垃圾,java的GC算法可以自动回收。
Python是脚本语言,不需要编译。而c需要编译。
Python是动态语言,不需要预定义变量。而c使用变量前需要定义。
c语言编译的整个流程是:源程序,预处理,编译,汇编,链接,可执行文件。
预处理:将#include的文件内容导进来文件里,将#define宏使用的地方做替换,选择#if等条件编译的内容。预处理后还是.c文件,不过文本大小变得更大了。
编译:把.c文件编译成.s汇编文件,其中进行了词法分析、语法分析、语义分析、生成中间代码、对代码进行优化等工作。
汇编:将.s汇编代码转换成机器码,产生目标文件(.obj)。
链接:将生成的.obj目标文件和系统库的.obj目标文件、库文件链接起来,最终生成可以在特定平台运行的可执行文件。
静态链接:在编译(代指整个编译环节)阶段就会把所有用到的库打包到自己的可执行程序中,其优点是具有较好的兼容性,不依赖外部环境,但是生成的程序比较大。
动态链接:在应用程序运行时,链接器去加载外部的共享库,并完成共享库和动态编译程序之间的链接。不同的程序可以共用代码库,节省内存空间。
面向过程就是把问题分解成一系列的步骤,在函数里面一步步实现步骤,根据需求调用函数。
面向对象就是把构成问题的事务分解成各个对象,调用对象里面的方法属性解决问题。三大特性:封装性、继承性、多态性。
简单来说,面向过程就是自项向下的编程,面向对象就是高度实物抽象化。
内核、bootloader、文件系统、shell、应用程序。
内核:Linux系统的核心。往下连接硬件、往上连接应用程序。
bootloader:一个单片机程序,用来引导系统启动。
shell:用户界面,提供用户与内核进行交互操作的一种接口。
通电自检
加载BIOS
确定启动设备、加载Bootloader
加载内核、初始化initrd
运行初始化系统
打印用户登录提示符
就绪状态,运行状态,阻塞状态
网络编程就是编写程序使互联网的多个设备之间进行数据传输。
ARM是一家设计芯片内核的公司。
现在的ARM内核分为三种系列:A、R、M。
A系列:面向高端产品。
R系列:面向实时性要求高的产品。
M系列:面向成本敏感型的产品。
STM32是ST(意法半导体)公司基于ARM公司的cortex-M3内核生产的32位系列的单片机。
瀑布模型将软件生命周期分为可行性研究和计划、需求分析、软件设计、编码、测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序。
不适合需求模糊或需求经常变动的系统。
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:将解压内容显示在屏幕上
UDP |
TCP |
|
是否连接 |
面向无连接 |
面向连接 |
是否可靠 |
不可靠传输,不使用流量控制和拥塞控制 |
可靠传输,使用流量控制和拥塞控制 |
连接对象个数 |
支持单播,多播和广播 |
只能单播 |
传输方式 |
面向报文 |
面向字节流 |
首部开销 |
首部开销小,仅8字节 |
首部最小20字节,最大60字节 |
适用场所 |
适用于实时应用(IP电话、视频会议、直播等) |
适用于要求可靠传输的应用,例如文件传输 |
TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为。
对数据准确性要求高,速度可以相对较慢的,可以选用TCP
ARP通过目标设备的IP地址查询目标设备的MAC地址。
RARP通过目标设备的MAC地址查询目标设备的IP地址。
第一次握手:由客户端主动发起连接建立请求,发送数据包,将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包,三次握手建立成功。
第一次挥手:客户端发送一个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包来确认。
注:很多内容都是小编翻阅很多优秀文章找来的,符合的就贴上去,不符合自己心意的就自己写理解!
文章浏览阅读549次。本书为大学计算机基础课程的配套实验教材内容包括Windows 7安装与桌面应用、电子文档的制作与编排、电子表格的制作规范与方法、演示文稿应用、互联网应用、数据库基础与数据处理(Access)、程序设计基础与算法、计算机实用工具的使用等¥27.70定价:¥39.80(6.96折)本书为大学计算机基础课程的配套实验教材内容包括Windows 7安装与桌面应用、电子文档的制作与编排、电子表格的制作规范与..._计算机专业群新技术案例
文章浏览阅读1w次,点赞6次,收藏61次。在日常开发过程中,有时候会遇到需要在app中嵌入网页,此时使用WebView实现效果,但在默认情况下是无法点击图片查看大图的,更无法保存图片。本问将就这一系列问题的实现进行说明。项目的知识点:1.加载网页后如何捕捉网页中的图片点击事件;2.获取点击的图片资源后进行图片显示,获取整个页面所有的图片;3.支持查看上下一张的图片以及对图片缩放显示;4.对图片进行保存;_抖音小程序中 打开web-view之后 页面生成的图片如何点击下载
文章浏览阅读4.1k次,点赞5次,收藏34次。当我们谈论Python的面向对象思想时,主要指的是Python中的类和对象的概念以及与之相关的特性和原则。面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式,它将程序中的数据和操作数据的方法组织在一起,形成对象,通过对象之间的交互来实现程序的功能。在Python中,面向对象编程主要围绕以下几个核心概念展开:(1):类是面向对象编程的基础,它是一种自定义的数据类型,用于描述对象的属性和行为。_python中的类和对象,属性和方法
文章浏览阅读293次。artistic -> blendartistic -> mask_unity shader node
文章浏览阅读558次。相机参数修改:加速度和角速度发表在两个话题,用上述方法将其发表在一个话题上。修改VINS-MONO包:_vins调参
文章浏览阅读4.8k次,点赞11次,收藏40次。十进制转二进制_c++十进制转二进制
文章浏览阅读254次。1104 Sum of Number Segments (20 分)Given a sequence of positive numbers, a segment is defined to be a consecutive subsequence. For example, given the sequence { 0.1, 0.2, 0.3, 0.4 }, we have 10 segme..._pat b1049 c
文章浏览阅读1.9w次,点赞4次,收藏3次。问题: “linux/config.h: No such file or directory”原因与解决方法: 原因是2.6.19之后的内核没有了config.h文件,因此直接把对应的include注释掉即可。 或者添加头文件#include_conin.h 没有那个文件或目录
文章浏览阅读289次。做网站的微信分享,之前一直获取不到缩略图和描述。后来总结了下经验。分享给大家参考。首先做微信分享我们需要一个 已经认证了的微信公众号 去绑定要分享的网站。然后设置服务器的白名单重点就是获取jssdk文件了。看文档说明wx.config({debug:true,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在p..._php 微信分享缩略图
文章浏览阅读1.2k次。简单背包问题(0032)Time limit(ms): 1000Memory limit(kb): 65535Submission: 5792Accepted: 1753Didn't trying 搜索 动态规划 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。 _设有 一个 背包 能承 受重量 s(s>0), 又有 n(n>=1) 件物 品, 其 重 量 列 表 为w=
文章浏览阅读2.8w次,点赞108次,收藏390次。一文看懂Web后端开发前言由于网络上系统地介绍后端开发的文章实在太少,而最近有恰巧有许多同学问我“什么是后端开发?”、“你为什么喜欢后端开发?”、“做后端都需要学什么?”,那么我们就来讲一讲,到底什么才是后端开发。定义后端开发(Back-End Development,也称服务端开发、服务器端开发等)是创建完整可运行的Web应用服务端程序(服务端程序和资源合称为后端,即在服务器上运行的、不涉及用户界面的部分)的过程,是Web应用程序开发的一部分。后端开发者使用Java、Golang等语言及其衍生的各_web后端开发
文章浏览阅读1.8k次。简介:材料的结构影响其性能,对半导体材料的结构进行表征,可以通过其电子能带结构解析材料的光电性能,因此对半导体材料的能带结构测试十分关键。本文简述了紫外可见近红外分光光度计(UV-VIS-NIR)的基本原理、仪器结构及其在半导体材料带隙分析中的应用。1. UV-VIS-NIR仪器简介紫外可见近红外分光光度计(UV-VIS-NIR)可覆盖UV-VIS-NIR全波段光谱范围,实现紫外、可..._紫外可见分光光度计uv/vis/nir(积分球)可以测能带结构吗