MT笔试题

前言

   某团硬件工程师的笔试题,个人感觉题目的价值还是很高的,分为选择题和编程题,选择题考的是嵌入式基础知识,编程题是两道算法题,一道为简单难度,一道为中等难度

目录

  • 前言
  • 选择题
  • 编程题

选择题

  1. C语言中变量有一系列的命名规则,下列选项中,属于错误的C语言变量命名规则的是:
    A、C语言中变量名是字母、数字、下划线组合
    B、变量命名中不允许出现空格
    C、C语言变量的开头只能是字母或数字
    D、变量名不可以是关键字,且严格区分大小写

答案:选C
解析:C语言变量命名规则


  1. 关于字符设备驱动的并发和竞态,下列说法正确的是:
    A、并发是多个执行单元不同时被执行
    B、竞态是并发的执行单元对共享资源的访问导致的竞争状态
    C、竞态是自发的导致的竞争状态
    D、并发是两个执行单元同时被执行

答案:选B
解析:并发是多个执行单元同时、并行被执行,而并发的执行单元对共享资源的访问会导致竞态,因此A、D错。竞态条件通常不是自发的,而是由并发执行单元(进程、线程等)之间的相互干扰造成的,因此C错。
参考:避免竞态的方式是给访问的共享资源添加锁:嵌入式驱动学习第一周——内核的锁机制


  1. 在我们使用FreeRTOS任务通知功能时,我们可以使用函数xTaskNotify()来发送任务通知,在FreeRTOS中,任务通知更新的方法不包括:
    A、覆盖接收任务的通知值
    B、增加接收任务的通知值
    C、减少接收任务的通知值
    D、不覆盖接受任务的通知值

答案:C
解析:任务通知可以通过如下方法更新接收任务的通知值:不覆盖接收任务的通知值 ( 如果上次发送给接收任务的通知还没被处理 ) 、覆盖接收任务的通知值、更新接收任务通知值的一个或多个 bit、增加接收任务的通知值,因此选C
参考:FreeRTOS(8)----任务通知


  1. C语言的fopen函数中,mode字符规定了打开文件的模式,下列选项中,对于打开文件的模式描述错误的是:
    A、‘r’ 表示以只读方式打开文件,但是该文件必须存在
    B、‘a+’ 表示以附加方式打开可读写的文件,且原文件内容会被保留
    C、‘rb+’ 表示读写一个二进制文件,文件如果不存在就会建立对应的文件
    D、‘w+’ 会将文件长度清零,文件如果不存在会建立对应的文件

答案:C
解析:考察的是fopen函数,'rb+'如果文件不存在会出错
参考:【C标准库】详解fopen函数 一篇让你搞懂fopen函数


  1. C语言中,如果输入整数v是2的幂,下面表达式中哪个会返回True:
    A、(~v & (v-1)) == 0
    B、(v | (v-1)) == 0
    C、(v & (v-1)) == 0
    D、(v | (v+1)) == 0

答案:C
解析:带入特值,由于v是2的幂,那么就只有一位上是1,假设v是0b0100,那么(~v & (v-1))不为0,A错误;(v | (v-1))也不为0,故B错误;(v & (v-1)) 为0,因为v-1就使得原本1的那位是0,其后面的位为1,做与运算即都为0;(v | (v+1))不为0,故D错


  1. 下列程序中横线处该填什么
int main() {
	unsigned char counter;
	TMOD=0x01;
	TH0 = (65536 - 46083) % 256;
	TL0 = (65536 - 46083) % 256;
	TF0 = 0;
	P0 = 0xff;
	counter = 0;
	TR0 = 1;
	while(1) {
		while(TF0 = 1) {
			counter++;
			if (counter == 20) {
				________________
				counter = 0;
			}
			TH0 = (65536 - 46083) % 256;
			TL0 = (65536 - 46083) % 256;
		}
	}
}

   A、P0=0;
   B、P0=1;
   C、P0=0x01;
   D、P0=~P0;

答案:D
解析:要实现灯的亮灭功能的话,就需要每次都是取反,而不是限定为一个值


  1. 在CAN中线的设备通信协议中,帧由不同的段组成,不同类型的帧所包含的段也不一样,其中遥控帧不包括的段为:
    A、仲裁段
    B、数据段
    C、控制段
    D、帧起始

答案:B
解析:CAN总线的遥控帧包括了:
   帧起始——表示帧开始的段;
   仲裁段——表示该帧优先级的段。可请求具有相同 ID 的数据帧;
   控制段——表示数据的字节数及保留位的段;
   CRC段——检查帧的传输错误的段;
   ACK段——表示确认正常接收的段;
   帧起始——表示遥控帧结束的段;
参考:详解CAN总线:CAN总线报文格式—遥控帧


  1. 在嵌入式软件开发中,SDIO总线主要是为SDIO卡提供一个高速的I/O能力,SDIO总线能够支持的通信包括wifi、GPS、camera sensor等。关于SDIO总线设备,描述错误的是:
    A、SDIO的信号传输模式有SPI、1-bit、4-bit三种
    B、SDIO的每次操作都是由HOST在CMD线上发起一个CMD,对于有的CMD,DEVICE需要返回Response,有的设备不需要
    C、在SDIO总线定义中,DAT1信号线用来传输数据
    D、SDIO总线采用HOST-DEVICE设计,所有的通信都是由HOST端发出命令开始的

答案:C
解析:在SDIO总线定义中,DAT1信号线复用为中断线。在SDIO的1BIT模式下DAT0用来传输数据,DAT1用作中断线。在SDIO的4BIT模式下DAT0-DAT3用来传输数据,其中DAT1复用作中断线。
参考:[SDIO].SDIO总线详解


  1. 下列选项中,对操作系统功能介绍错误的是哪一个
    A、可以管理文件
    B、可以提供用户接口
    C、没法管理设备
    D、可以管理存储

答案:C
解析:现代操作系统通常提供文件系统来管理文件,包括创建、读取、写入、删除和修改文件等操作,**故A对;**操作系统通常提供用户界面,使用户能够与计算机系统进行交互。这包括命令行界面、图形用户界面(GUI)、应用程序接口(API)等,故B对;操作系统通常管理存储资源,包括内存管理和存储设备管理。内存管理涉及到为进程分配内存空间,以及内存的分页、交换等操作;而存储设备管理涉及到文件系统的管理,包括文件的存储、检索和访问等,故D对;操作系统通常管理设备,包括输入/输出设备(如键盘、鼠标、显示器)、存储设备(如硬盘、固态硬盘)和网络设备(如网卡)等,故C错
参考:操作系统的主要功能是什么


  1. 关于网络设备,以下选项说法有误的是:
    A、sk_buff结构是内核网络部分最重要的数据结构之一
    B、在设置网络设备参数时,需要用到net_device结构
    C、head指向数据缓冲的内核首地址,end指向当前数据包的尾地址
    D、网络协议与分层结构相配合,将便于维护

答案:C
解析:sk_buff是Linux网络中最核心的结构体,它用来管理和控制接收或发送数据包的信息。各层协议都依赖于sk_buff而存在。内核中sk_buff结构体在各层协议之间传输不是用拷贝sk_buff结构体,而是通过增加协议头和移动指针来操作的,故A对net_device数据结构存储着特定网络设备的所有信息,故B对headend指向缓冲区的头部和尾部,而data和tail指向实际数据的头部和尾部。每一层会在headdata之间填充协议头,或者在tailend之间添加新的协议数据,故C错D对
参考:网络设备驱动介绍(浅析)
   Linux内核中sk_buff结构详解
   Linux网络技术学习(二)—— net_device数据结构解析添加链接描述
   Linux驱动开发之网络设备 & 读书笔记


  1. 关于对全局变量OSIntNesting的描述错误的是:
    A、可以作为调度器是否可进行调度的标志
    B、OSIntNesting大于0的时候,表示系统当前处于中断处理状态
    C、在正常任务执行(即非中断状态)时,OSIntNesting的值为0
    D、不能记录中断嵌套的层数

答案:D
解析:全局变量OSIntNesting最重要的就是两个用途,一个是记录中断嵌套层数故D错。每当有一个嵌套中断发生时,其值就加1,有中断结束时,就减一,故B、C对。第二个用途是作为调度器是否可进行调度的标志,以保证调度器不会再中断服务程序中进行任务调度,故A对。当OSIntNesting大于0的时候,将调度器加锁,OSIntNesting等于0的时候,调度器解锁
参考:OSIntNesting


  1. 下列哪项不属于网络设备驱动的层次结构
    A、网络设备与媒介层
    B、数据链路层
    C、设备驱动功能层
    D、网络协议接口层

答案:D
解析: “网络协议接口层” 则通常属于操作系统的网络协议栈中,不直接涉及到设备驱动的层次结构。


  1. 在以下关于字符设备、块设备、网络设备的定义中,哪一项描述有误?
    A、网络设备由专门的网络接口来实现
    B、块设备可以从设备的任意位置读取一定长度
    C、字符设备是面向流的设备,读取数据需要按照先后顺序进行
    D、网络设备中的应用程序可以直接访问网络设备驱动程序

答案:D
解析:网络设备通常由专门的网络接口来实现。这个网络接口可能是物理上的设备,如网卡或无线网卡,也可以是虚拟的设备,如虚拟网卡,故A对;块设备是一种存储设备,以固定大小的块为单位进行数据读写操作。每个块通常具有相同的大小,例如512字节或4KB故B对;字符设备是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序,故C对。在通常情况下,应用程序无法直接访问网络设备驱动程序。网络设备驱动程序位于操作系统内核中,而应用程序运行在用户空间。操作系统通常会提供一些接口来让应用程序与网络设备进行通信,故D错
参考:


  1. 在FreeRTOS中,空闲任务是一种特殊的任务,有区别于其他用于任务,关于空闲任务的描述错误的是:
    A、如果某个任务要调用函数vTaskDelete()删除自身,那么这个任务的任务控制块TCB将会在空闲任务重释放
    B、空闲任务的堆栈大小是可随意修改的
    C、空闲任务的优先级是可随意修改的
    D、当FreeRTOS的调度器启动后就会自动的创建一个空闲任务

答案:B
解析:当 FreeRTOS 的调度器启动以后就会自动的创建一个空闲任务,这样就可以确保至少有一任务可以运行,故D对;如果某个任务要调用函数 vTaskDelete()删除自身,那么这个任务的任务控制块 TCB 和任务堆栈等这些由 FreeRTOS 系统自动分配的内存需要在空闲任务中释放掉,如果删除的是别的任务那么相应的内存就会被直接释放掉,不需要在空闲任务中释放,故A对;空闲任务的堆栈的起始地址和大小均被定义成一个常量,不能被修改,故B错
参考:FreeRTOS 空闲任务


  1. 以下C代码运行的结果是什么:
#include <stdio.h>

int main() {
	int numbers[5];
	int *p;
	p = numbers;   *p = 10;
	p++;   *p = 20;
	p = &numbers[2];    *p = 30;
	p = numbers + 3;    *p = 40;
	p = numbers;        *(p + 4) = 50;
	for (int n = 0; n < 5; n++)
		printf("%d", numbers[n]);
		printf(" ");
	return 0;
}

   A、1020304050
   B、编译错误
   C、运行错误
   D、10 20 30 40 50

答案:A
解析:函数名是指向数组的第一块数据的地址的,指针加减就是在数组上的下标变化,注意的是for循环没有加{},因此最外面的是在for循环执行完才打印一个空格的


  1. 在Linux中,有一个名为file的文件,内容如下所示:

one
two
three
four
five
six
seven
eight
nine
ten

   请问以下哪个命令可以打印 three four five这3行:
   A、sed -n ‘3, 6p’ file
   B、cat file | head -5 | tail -3
   C、cat file | head -3 | tail -5
   D、sed -n ‘2,5p’ file1

答案:B
解析:A打印出来是three,four,five,six,B打印出来是three,four,five,C打印出来是one,two,three,D打印出来是two,three,four,five


  1. AT89S52单片机中,在外部中断响应的期间,中断请求标志位查询占用了:
    A、2个机器周期
    B、3个机器周期
    C、4个机器周期
    D、1个机器周期

答案:A
解析:有点偏冷门了


  1. 在Linux中,关于虚拟内存相关的说法正确的是:
    A、页是虚拟内存与物理内存的交换单元,最小的单位是64KB
    B、在页表结构中,有效位为1代表虚拟地址未被分配
    C、在一个进程中,每个线程之间的虚拟内存是独占的
    D、CPU与内存之间通过MMU将虚拟内存地址翻译成物理内存地址

答案:D
解析:管理内存的最小单元就是页,页面的大小常见的有4KB,但是还有8、16、64KB等,故A错;页表中,如果有效位为1,地址字段指向该虚拟页对应的物理页在内存中的起始位置。如果有效位为0,地址字段为空时表明该虚拟页还没有被分配,不为空时指向该虚拟页在磁盘中的起始位置,故B错;线程之间通常共享相同的地址空间,但是进程之间是独占的,故C错
处理器的MMU(内存管理单元)会将虚拟内存映射到物理内存,过程如下:
(1)CPU生成一个虚拟地址传递给MMU
(2)MMU会根据虚拟地址生成PTE地址,然后到内存中查询PTE
(3)内存返回PTE给MMU
(4)MMU解析PTE,得到物理地址,传送回内存
(5)最后内存将数据传给CPU。
在这里插入图片描述

参考:内存管理:页表
   关于虚拟内存和物理内存的映射和地址转换


  1. 8051的结构与功能(没把选项记下来)

解析:

CPU核心:8051的核心是一个基于哈佛结构的8位CPU,拥有128字节的RAM,4K字节的ROM(程序存储器),以及4个8位通用寄存器。它支持8位和16位算术运算,包括加减乘除和逻辑运算。
  
存储器: 8051包含了一定量的RAM用于数据存储,以及ROM用于程序存储。它还支持外部扩展的RAM和ROM。
  
I/O端口: 8051拥有多个通用输入/输出端口,用于连接外部设备和传感器,如LED、键盘、LCD显示器等。
  
定时器/计数器: 8051集成了多个定时器和计数器,用于定时、计数和延时等应用。这些定时器/计数器可以用于生成精确的时间间隔、测量外部信号脉冲宽度、计数事件等。
  
串行通信接口(UART):8051包含了一个串行通信接口,支持异步串行通信协议,如RS-232。这使得8051能够与其他设备进行串行通信,如PC、传感器、显示器等。
  
中断控制器: 8051包含了中断控制器,支持多种中断源和优先级,使得它能够及时响应外部事件和处理异步任务。
  
电源管理: 8051支持多种低功耗模式,可以有效管理功耗,延长电池寿命,适用于电池供电的应用。


  1. 若给定如下定义:
int array[8];
int *p;

   如果指令指针p指向array数组,那么,*(p+3)表示的是:

   A、元素a[4]对应的地址
   B、元素a[3]对应的数据
   C、元素a[3]对应的地址
   D、元素a[4]对应的数据

答案:B
解析:没什么好说的,就是考察指针与数组

编程题

  1. 第一道题是一道字符串查找替换,将题目中的'mt''Mt''mT''MT'全部替换为'$$'
    输入是一串字符串,输出是替换后的字符串

输入:I love mt, I work in Mt
输出:I love $$, I work in $$


解析:这道题就是字符串的查找替换,可以遍历字符串,直到最后一位的前一位,然后判断当前位字符是否为’m’或’M’,是的话下一位是否为’t’或’T’,是的话就替换这两个为$并且让索引额外加一

  1. 第二道题的描述大致如下:
    给定一个n×n的矩阵,其中的值全由0和1组成。对于给定的一个i,如果在 i×i 的矩阵中发现1的数量与0的数量相等,则为完美矩阵,那么输出所有的i (1 ≤ i ≤ n),对应完美矩阵的数量。 1 ≤ n ≤ 200
    输入:第一行是数字n,第二行到第n行为矩阵具体的值
    输出:输出n行,每行为对应的 i 的完美矩阵数量

输入:
4
1010
0101
1100
0011
输出:
0
7
0
1

解析:遍历n次,当n为奇数行时直接跳过,每次都用一个i×i的窗,初始先判断其中1的个数减去0的个数记为tmp。然后移动窗的过程中用新加入的列或者行中1的个数减去出去的列或行中1的个数,记为tmp1。如果tmp+tmp1=0就说明达到平衡,计数加一。

   暴力解题会超时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/447137.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱

1 基本定义 一维信号NLM非局部均值滤波算法是一种基于非局部均值思想的滤波方法&#xff0c;它通过对信号进行分块&#xff0c;计算每个块与其他块之间的相似度&#xff0c;以非局部均值的方式去除噪声。该算法的主要思想是在一定范围内寻找与当前块相似的块&#xff0c;以这些…

基于网络爬虫的购物平台价格监测系统的设计与实现

通过对网络爬虫的购物平台价格监测系统的业务流程进行梳理可知&#xff0c;网络爬虫的购物平台价格监测系统主要由前台买家模块、后台卖家模块以及管理员模块构成。前台功能包含登录功能、注册功能、系统首页功能、唯品会商品详情浏览、唯品会商品收藏、唯品会商品点赞、唯品会…

RDD算子介绍(二)

1. coalesce 用于缩减分区&#xff0c;减少分区个数&#xff0c;减少任务调度成本。 val rdd : RDD[Int] sc.makeRDD(List(1, 2, 3, 4), 4) val newRDD rdd.coalesce(2) newRDD.saveAsTextFile("output") 分区数可以减少&#xff0c;但是减少后的分区里的数据分布…

政安晨:【深度学习处理实践】(五)—— 初识RNN-循环神经网络

RNN&#xff08;循环神经网络&#xff09;是一种在深度学习中常用的神经网络结构&#xff0c;用于处理序列数据。与传统的前馈神经网络不同&#xff0c;RNN通过引入循环连接在网络中保留了历史信息。 RNN中的每个神经元都有一个隐藏状态&#xff0c;它会根据当前输入和前一个时…

SRS(Simple Realtime Server)

SRS(Simple Realtime Server - github) SRS 中文官网 docker安装srs ##&#xff08;安全组放开1935端口、8080端口&#xff09; docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp ossrs/srs:5推流 ## 不需要加端口 ffmpeg…

深度学习armv8/armv9 cache的原理

文章目录 1、为什么要用cache?2、背景:架构的变化?2、cache的层级关系 ––big.LITTLE架构&#xff08;A53为例)3、cache的层级关系 –-- DynamIQ架构&#xff08;A76为例)4、DSU / L3 cache5、L1/L2/L3 cache都是多大呢6、cache相关的术语介绍7、cache的分配策略(alocation,…

Python读取influxDB数据库

1. influxDB连接 首先用InfluxDBStudio软件连接influxDB数据库来查看所有表&#xff1a; 2. 写sql语句来查询数据 然后和平时写sql查询语句一样&#xff0c;先创建连接client&#xff0c;然后调用其query函数来查询获取数据 self.client influxdb.InfluxDBClient(hostinflu…

前端文件上传

文件上传方式 前端文件上传有两种方式&#xff0c;第一种通过二进制blob传输&#xff08;formData传输&#xff09;&#xff0c;第二种是通过base64传输 文件相关的对象 file对象其实是blob的子类 blob对象的第一个参数必须是一个数组&#xff0c;你可以把一个file对象放进去…

HCS-华为云Stack-计算节点内部网络结构

HCS-华为云Stack-计算节点内部网络结构 图中表示的仅为计算节点是两网口的模式&#xff0c;如果是四网口模式&#xff0c;系统会再自动创建一个网桥出来 图中未画出存储平面和Internal Base平面&#xff0c;它们和tunnel bearing、External OM-样&#xff0c;都是通过trunk0的…

模型驱动架构MDA

MDE 模型驱动工程&#xff08;MDE, Model-Driven Engineering&#xff09;是软件工程的一个分支&#xff0c;它将模型与建模拓展到软件开发的所有方面&#xff0c;形成一个多维建模空间&#xff0c;从而将工程活动建立在这些模型的映射和转换之上。[1] MDE的基本原则是将模型视…

《量子计算:下一个大风口,还是一个热炒概念?》

引言 量子计算,作为一项颠覆性的技术,一直以来备受关注。它被认为是未来计算领域的一次革命,可能改变我们对计算能力和数据处理的理解。然而,随着技术的不断进步和商业应用的探索,人们开始思考,量子计算到底是一个即将到来的大风口,还是一个被过度炒作的概念? 量子计…

空间复杂度(数据结构)

概念&#xff1a; 空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 。 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复…

软考73-上午题-【面向对象技术2-UML】-UML中的图4

一、构件图&#xff08;组件图&#xff09; 1-1、构件图的定义 展现了&#xff0c;一组构件之间的组织和依赖。 构件图专注于系统的静态实现图。 构件图与类图相关&#xff0c;通常把构件映射为一个、多个类、接口、协作。 【回顾】&#xff1a; 类图展示了一组对象、接口、…

C++之map与set的使用与原理+拓展avl树(详解)

前言&#xff1a;map和set是C里面的两种常用STL容器&#xff0c;他们被设计为关联式容器&#xff0c;这两个容器存储的元素都是唯一的&#xff0c;并且每个元素与键&#xff08;key&#xff09;相关联&#xff0c;简单来说就是两个存储不重复元素的容器。那就有人有疑问了&…

PostgreSQL中In, Exists在SQL查询中到底有无区别

前言 SQL查询当中&#xff0c;In和Exists子查询到底有无区别&#xff1f;记得很多年以前&#xff0c;确实是有相关的使用戒条的&#xff0c;或者说存在一些使用的惯用法。试图完全抹开两者的区别&#xff0c;就有点过了。 两者的主要区别&#xff1a; 从目的上讲&#xff0c…

微信小程序开发系列(二十七)·小程序生命周期详细介绍

目录 1. 小程序生命周期介绍 2. 应用生命周期 3. 页面生命周期 1. 小程序生命周期介绍 一个小程序完整的生命周期由 应用生命周期、页面生命周期 和 组件生命周期 三部分来组成。 应用生命周期&#xff1a;是指应用程序进程从创建到消亡的整个过程。 小程序的生命&#…

python——By.ID/By.NAME

一、通过元素的id属性来定位元素 from selenuim import webdriver from selenuim.webdriver.common.by import Bydriver webdriver.Chrome() driver.maximize_window() driver.get(http://xxx) time.sleep(3)# 通过By.ID找到唯一页面元素后&#xff0c;输入abcd driver.find_…

简析内部审计数字化转型的方法和路径

简析内部审计数字化转型的方法和路径 内部审计是一种独立的、客观的确认和咨询活动&#xff0c;包括鉴证、识别和分析问题以及提供管理建议和解决方案。狭义的数字化转型是指将企业经营管理和业务操作的各种行为、状态和结果用数字的形式来记录和存储&#xff0c;据此再对数据…

华为OD机试 - 模拟数据序列化传输(Java JS Python C C++)

题目描述 模拟一套简化的序列化传输方式,请实现下面的数据编码与解码过程 编码前数据格式为 [位置,类型,值],多个数据的时候用逗号分隔,位置仅支持数字,不考虑重复等场景;类型仅支持:Integer / String / Compose(Compose的数据类型表示该存储的数据也需要编码)编码后数…

VSCode安装C语言编译环境

目录 一、在vscode下载C/C扩展 二、配置gcc环境 1.访问网站&#xff1a;https://sourceforge.net/projects/mingw-w64/files/ 2.解压并复制bin目录 三、配置gcc环境 四、在cmd检查是否配置成功 五、vscode配置gcc环境 六、在vscode运行C文件 运行.c代码 七、在vscode运…