当前位置: 首页 > news >正文

嵌入式面试笔试刷题(day6)

文章目录

  • 前言
  • 一、进程和线程的区别
  • 二、共享内存的原理
  • 三、中断有传参和返回值吗
  • 四、串口数据帧格式
  • 五、进程通信有几种,哪几种需要借助内核
    • 1.方式
    • 2.需要借助内核的
  • 六、flash有哪几种类型
  • 七、指针的本质是什么
  • 八、指针和数组的区别
  • 九、使用宏定义交换变量不能使用中间变量
  • 十、do { ... } while(0) 结构的作用
  • 总结


前言

本篇文章继续讲解嵌入式面试笔试刷题,希望大家能够继续坚持哦。

一、进程和线程的区别

1.定义:进程是程序的执行实例,是资源分配和调度的单位;线程是进程中的执行单元,是CPU调度和执行的基本单位。

2.资源占用:每个进程都有独立的内存空间、文件描述符和其他系统资源,进程之间的通信需要使用进程间通信(IPC)机制。而线程是在进程内部共享进程的资源,包括内存空间和文件描述符等,线程之间可以直接共享数据,因此线程间通信更加方便。

3.调度和切换:在操作系统中,进程是一个独立的单位,由调度器进行调度和切换。切换进程时需要保存和恢复进程的上下文,开销较大。而线程是进程内部的执行单元,线程的切换开销比进程的切换小很多。因此,多线程的程序在切换和调度上更加高效。

4.执行并发性:由于进程之间具有独立的内存空间和资源,不同进程间的执行是相互独立的,可以同时执行不同的任务。而线程共享进程的资源,线程之间执行可以并发或并行,可以更充分利用系统的多核处理器提高执行效率。

5.容错性:由于进程的独立性,一个进程的崩溃不会影响其他进程的执行。而线程是在进程内部执行,一个线程的错误可能会导致整个进程崩溃。

二、共享内存的原理

通过将一块内存区域映射到多个进程的地址空间,使得这些进程可以直接访问和共享相同的内存内容,从而实现数据的交互和共享。

三、中断有传参和返回值吗

中断通常不直接支持传参和返回值。这是因为中断是一种异步事件处理机制,它的执行是由硬件或者特定的事件触发,并且不像函数调用那样由程序主动发起。

四、串口数据帧格式

1.起始位
2.数据位
3.奇偶校验位
4.停止位

五、进程通信有几种,哪几种需要借助内核

1.方式

1.管道
2.命名管道
3.共享内存
4.信号量
5.消息队列
6.套接字
7.信号

2.需要借助内核的

需要借助内核的通信方式包括管道、共享内存、信号量、消息队列和套接字。

六、flash有哪几种类型

1.NOR Flash:NOR Flash 主要用于存储程序代码和执行读操作。它提供了快速的随机访问速度和较长的擦除寿命。NOR Flash 的特点是可以按字节进行读写操作,且具有较低的擦除和写入时间。因此,它适用于需要频繁执行读操作的应用,如嵌入式系统中的引导程序和固件存储。

2.NAND Flash:NAND Flash 主要用于大容量存储和数据存储,例如移动设备和固态硬盘(SSD)。相对于 NOR Flash,NAND Flash 具有较高的存储密度和较低的成本,但访问速度较慢,通常以页为单位进行读写操作。NAND Flash 的特点是具有较高的数据传输速率和较高的擦写寿命,适用于需要大容量存储和频繁写操作的应用。

3.eMMC:eMMC(Embedded Multi-Media Card)是一种内嵌式多媒体卡,集成了 NAND Flash 存储芯片和控制器。它通常用于嵌入式设备和移动设备中,提供了可靠的存储解决方案。eMMC 的特点是小巧便携、低功耗,且支持随机读写操作。

4.UFS:UFS(Universal Flash Storage)是一种新型的高速闪存存储标准,可提供更快的数据传输速率和更高的性能。它被广泛用于高端移动设备和存储解决方案中。UFS 具有较低的延迟、更高的带宽和更好的可靠性,支持高速读写操作。

七、指针的本质是什么

指针的本质是一个变量,但它存储的是一个内存地址,而不是实际的数据。

指针的存储方式取决于计算机架构和编程语言。在大多数计算机体系结构中,内存地址通常使用二进制表示,并根据特定的内存寻址方案进行存储。指针变量本身也是存储在内存中的,它占用一定的内存空间,用于存储目标地址。

八、指针和数组的区别

1.数据结构:数组是一种数据结构,用于存储一系列相同类型的数据元素。它是连续的内存块,每个元素在内存中的位置相邻。指针是一个变量,存储了一个内存地址,它可以指向任何数据类型的数据,包括数组。

2.内存分配:数组在定义时需要指定长度或者使用动态内存分配(如C++中的new运算符),编译器在编译时为数组分配指定长度的内存空间。指针可以通过赋值操作指向任何有效的内存地址,包括数组的首地址或者其他内存区域。

3.大小和访问:数组的大小是固定的,一旦定义后不能改变。通过索引可以直接访问数组中的元素,索引从0开始。指针本身的大小取决于系统的位数(通常为4字节或8字节),通过解引用操作符(*)可以访问指针指向的内存位置,可以通过指针的算术运算来访问数组中的不同元素。

4.数组名 vs. 指针变量:在C语言中,数组名实际上是指向数组首元素的指针常量。它可以被隐式转换为指针类型,所以可以使用指针的方式对数组进行操作。然而,数组名本身不能被赋值或修改。指针变量可以重新赋值来指向不同的内存位置。

5.参数传递:作为函数参数传递时,数组通常以指针的形式传递。在函数内部,无法得知数组的长度,因此需要额外的参数来传递数组的长度信息。指针作为函数参数可以提供灵活的传递和访问内存的能力。

九、使用宏定义交换变量不能使用中间变量

#include <stdio.h>#define SWAP(a, b)  do { \(a) = (a) ^ (b); \(b) = (a) ^ (b); \(a) = (a) ^ (b); \} while(0)int main() {int x = 10;int y = 20;printf("Before swap: x = %d, y = %d\n", x, y);SWAP(x, y);printf("After swap: x = %d, y = %d\n", x, y);return 0;
}

在上面的示例中,我们定义了一个名为 SWAP 的宏函数,它使用了位异或运算符(^)来交换数据。通过连续进行三次异或操作,可以实现两个变量的值互换,而无需使用临时变量。

需要注意的是,宏函数使用 do { … } while(0) 结构来确保宏定义中的多个语句都能够正常运行,并且可以在条件语句中使用宏函数。

这样,在调用 SWAP(x, y) 时,宏展开后的代码会执行三次位异或运算,实现 x 和 y 的交换。最终,x 的值变成了原来 y 的值,y 的值变成了原来 x 的值。

十、do { … } while(0) 结构的作用

在宏定义的使用中使用 do { … } while(0) 结构的主要目的是为了确保宏定义在展开时可以正常工作。

宏定义本质上是文本替换,编译器在代码中找到宏的调用,并将其展开为宏定义中的代码。如果宏定义只是简单地展开为一行代码,那么在某些情况下可能会导致意想不到的行为。

使用 do { … } while(0) 结构可以解决以下两个问题:

1.语法上的问题:如果宏定义只是一个单独的语句,并且在某些情况下需要在条件语句中使用宏,例如:if (condition) MACRO(x); else …。这样的话,如果宏定义展开后只是一个语句,那么编译器在展开后的输出代码中会导致语法错误。通过使用 do { … } while(0) 结构,可以确保宏定义受到分号(;)的约束,从而避免语法错误。

2.嵌套问题:如果宏定义展开后包含多个语句,并且在代码中使用了条件语句、循环等结构,例如:

#define MACRO(x) do { \statement1; \if (condition) { \statement2; \} \} while(0)

如果宏定义展开后的代码中缺少大括号,那么在使用该宏时嵌套结构可能会导致逻辑错误。通过使用 do { … } while(0) 结构,宏定义中的多个语句都被包含在一个块作用域中,确保了这些语句的正常执行。

总结来说,使用 do { … } while(0) 结构是为了保证宏定义在展开时在语法和逻辑上都是正确的。这种结构在宏定义中是一种常用的技巧,以确保宏在使用时能够像正常的代码一样正常工作。

总结

本篇文章就讲解到这里,下篇文章继续讲解。

相关文章:

嵌入式面试笔试刷题(day6)

文章目录 前言一、进程和线程的区别二、共享内存的原理三、中断有传参和返回值吗四、串口数据帧格式五、进程通信有几种&#xff0c;哪几种需要借助内核1.方式2.需要借助内核的 六、flash有哪几种类型七、指针的本质是什么八、指针和数组的区别九、使用宏定义交换变量不能使用中…...

24考研数据结构-第五章:树与二叉树

目录 第五章&#xff1a;树5.1树的基本概念5.1.1树的定义5.1.2 基本术语5.1.3 树的性质 5.2二叉树的概念5.2.1 二叉树的定义与特性5.2.2 几种特殊的二叉树5.2.3 二叉树的性质5.2.4 完全二叉树的性质5.2.5 二叉树的存储结构1. 顺序存储重要的基本操作非完全二叉树2. 链式存储逆向…...

构建稳健的微服务架构:关键的微服务设计原则和最佳实践

在现代软件开发中&#xff0c;微服务架构正逐渐成为构建复杂应用程序的首选方法之一。微服务架构的核心理念是将应用程序划分为一系列小型、自治的服务&#xff0c;每个服务专注于一个特定的业务功能。然而&#xff0c;要实现一个稳健的微服务架构并不仅仅是将功能拆分成微服务…...

消息队列常见问题(1)-如何保障不丢消息

目录 1. 为什么消息队列会丢消息&#xff1f; 2. 怎么保障消息可靠传递&#xff1f; 2.1 生产者不丢消息 2.2 服务端不丢消息 2.3 消费者不丢消息 3. 消息丢失如何快速止损&#xff1f; 3.1 完善监控 3.2 完善止损工具 1. 为什么消息队列会丢消息&#xff1f; 现在主流…...

Circle of Mistery 2023牛客暑期多校训练营5 B

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;给出一个n个数的数组a&#xff0c;求一个排列&#xff0c;使其形成的其中一个置换环上的数的和>k&#xff0c;并使产生的逆序对数量最少 1<n<1e3;-1e6<k<1e6;-1e6<ai<1e6 tips:关于置换环是什…...

VC9、VC10、VC11等等各对应什么版本的Visual Studio,以及含义

文章目录 1、_MSC_VER 定义编译器的版本2、示例 1、_MSC_VER 定义编译器的版本 MS VC 15.0 _MSC_VER 1910 (Visual Studio 2017) MS VC 14.0 _MSC_VER 1900 (Visual Studio 2015) MS VC 12.0 _MSC_VER 1800 (VisualStudio 2013) MS VC 11.0 _MSC_VER 1700 (VisualStudio…...

两数相加 LeetCode热题100

题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会…...

Python基础 P2数字类型与优先级进阶练习

文章目录 Python基础 P2数字类型与优先级进阶练习1.闰年判断器2.进制转换及求和3.单位转换 Python基础 P2数字类型与优先级进阶练习 1.闰年判断器 简介 对于闰年的判断就是判断输入的内容类型是否符合要求&#xff0c;然后通过逻辑判断和运算得出该年份是否为闰年 举个栗子 …...

CAPL通过继电器实现CAN容错性自动化测试

系列文章目录 文章目录 系列文章目录前言一、环境搭建1.硬件环境2.软件环境3.继电器线路连接图:二、容错性测试方法1.CAN_H与CAN_L短路2.CAN_H与GND短路3.CAN_L与GND短路4.CAN_H与电源短路5.CAN_L与电源短路6.CAN_H断路7.CAN_L断路三、CAPL自动化测试1.测试用例目录2.测试报告…...

elasticsearch 配置用户名和密码

无密码的其他配置项在&#xff1a;https://blog.csdn.net/Xeon_CC/article/details/132064295 elasticsearch.yml配置文件&#xff1a; xpack.security.enabled: true xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: /path/to/elastic-certi…...

侯捷 C++面向对象编程笔记——9 复合 委托

9 复合 委托 9.1 Composition 复合 类似于c中结构里有结构——class里有class deque 是一个已经存在的功能很多的类&#xff08;两头进出的队列&#xff09;&#xff1b;利用deque的功能来实现queue的多种操作 该例只是复合的一种情况——设计模式 Adapter 9.1.1 复合下的构造…...

状态模式——对象状态及其转换

1、简介 1.1、概述 在软件系统中&#xff0c;有些对象也像水一样具有多种状态&#xff0c;这些状态在某些情况下能够相互转换&#xff0c;而且对象在不同的状态下也将具有不同的行为。为了更好地对这些具有多种状态的对象进行设计&#xff0c;可以使用一种被称为状态模式的设…...

Linux一阶段复习

Linux之父是林纳斯本纳第克特托瓦兹 Apache发布目录&#xff1a;/var/www/html nginx发布目录&#xff1a;/usr/share/nginx/html/ 配置dns的文件 &#xff1a; /etc/resolv.conf nginx的配置文件&#xff1a;/etc/nginx/ yum源的配置文件&#xff1a;/etc/yum.repos.d/ …...

宝塔Linux面板怎么升级?升级命令及失败解决方法

宝塔Linux面板怎么升级到新版本&#xff1f;root账号ssh登录到云服务器后&#xff0c;执行宝塔Linux面板升级命令即可搞定&#xff0c;新手站长分享宝塔Linux面板升级命令&#xff1a; 宝塔面板升级到新版本 1、使用root账号ssh登录到云服务器上 ssh root你的云服务器ip地址…...

前端面试的性能优化部分(6)每天10个小知识点

目录 系列文章目录前端面试的性能优化部分&#xff08;1&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;2&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;3&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;4&#xff09;每天…...

2023年 Java 面试八股文(20w字)

目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象 难度系数&#xff1a;⭐ 2、重载与重写区别 难度系数&#xff1a;⭐ 3、接口与抽象类的区别 难度系数&#xff1a;⭐ 4、深拷贝与浅拷贝的理解 难度系数&#xff1a;⭐ 5、sleep和wait区别 难度系数&a…...

银河麒麟服务器ky10-server在线一键安装docker

脚本代码 # ---------------在线安装docker------------------- yum install docker -y # 修改docker拉取源为国内 rm -rf /etc/docker mkdir -p /etc/docker touch /etc/docker/daemon.json cat >/etc/docker/daemon.json<<EOF{"registry-mirrors": [&q…...

spring boot中web容器配置

web容器配置 spring boot 默认的web容器是 tomcat&#xff0c;如果需要换成其他的 web 容器&#xff0c;可以如下配置。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 默…...

DNSlog注入(利用DNSlog平台将SQL盲注变成回显注入)

前言什么是UNC什么是DNSlog注入DNSlog注入的条件防止DNSlog注入的几个措施 sqli-labs试验 前言 前几天面试的时候&#xff0c;面试官问我知不知道OOB&#xff08;带外数据&#xff09;。 当时我蒙了&#xff0c;确实没听说过这个东西&#xff0c;然后面试官告诉我原来dnslog注入…...

vim学习笔记(致敬vim作者)

vim cheat sheet 30. vim 删除大法 vim 删除某个字符之后改行的其他的字符&#xff1f;删除某行之后的其他行&#xff1f;删除某个字符之后的其他字符&#xff1f;【1】删除单个字符&#xff1f; 跳到要删除的字符位置 按下d键然后按下shift 4键 【2】删除某行之后的其他行…...

力扣 -- 139. 单词拆分

一、题目 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 二、解题步骤 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:bool wordBreak(str…...

百度秋招攻略,百度网申笔试面试详解

百度秋招简介 作为行业巨头&#xff0c;百度向社会提供的岗位一直都是非常吃香的&#xff0c;每年也都有很多考生密切关注&#xff0c;百度发布的招聘广告&#xff0c;以尽可能的让自己进入这家企业工作&#xff0c;实现自己的人生价值。那么百度每年的秋招时间是多久&#xf…...

nohup Java -jar 生成的nohup.out 文件一直增加,如何处理

目录 1 实现 1 实现 除了使用echo "" > filename清空文件内容之外&#xff0c;还有其他几种方法可以删除文件中的内容而不删除文件本身&#xff1a;使用truncate命令&#xff1a;truncate命令可以用来截断文件并清空内容。使用以下命令清空文件内容&#xff1a;t…...

静态页面与动态页面的区别及部署jpress应用

简述静态网页和动态网页的区别 静态网页&#xff1a; 1、首先是静态网页&#xff0c;静态网页每个网页中都有一个固定的URL&#xff0c;网页URL以htm、HTML、jpg、.gif、.mp4等常见形式为后缀&#xff0c;而且不含有问号&#xff1b; 2、静态网页内容一经发布到网页服务器上…...

华为数通HCIA-华为VRP系统基础

什么是VRP? VRP是华为公司数据通信产品的通用操作系统平台&#xff0c;作为华为公司从低端到核心的全系列路由器、以太网交换机、业务网关等产品的软件核心引擎。 VRP提供以下功能&#xff1a; 实现统一的用户界面和管理界面 实现控制平面功能&#xff0c;并定义转发平面接口…...

基于Azure OpenAI Service 的知识库搭建实验⼿册

1.概要 介绍如何使⽤Azure OpenAI Service 的嵌⼊技术&#xff0c;创建知识库&#xff1b;以及创建必要的资源组和资源&#xff0c;包括 Form Recognizer 资源和 Azure 翻译器资源。在创建问答机器⼈服务时&#xff0c;需要使⽤已部署模型的 Azure OpenAI 资源、已存在的…...

第七节--结构体

lesson19: 一、结构的基础知识 1.数组是一组xx集合&#xff08;1&#xff1a;10&#xff1a;10&#xff09; 2.结构体是XX的集合&#xff08;1&#xff1a;10&#xff1a;25&#xff09; 二、结构的声明&#xff08;看课件&#xff09;&#xff08;1&#xff1a;12&#xf…...

Docker学习(二十四)报错速查手册

目录 一、This error may indicate that the docker daemon is not running 报错docker login 报错截图&#xff1a;原因分析&#xff1a;解决方案&#xff1a; 二、Get "https://harbor.xxx.cn/v2/": EOF 报错docker login 报错截图&#xff1a;原因分析&#xff1a…...

一种SpringBoot下Scheduler定时任务优雅退出方案

背景 近期业务中有一个定时任务发现每次服务部署时&#xff0c;偶发性的会触发问题&#xff0c;这里记录一下问题的跟进解决。 分析现象 该定时任务每2分钟执行一次&#xff0c;完成数据的更新处理。同时服务部署了多个服务器节点&#xff0c;为保证每次只有一个服务器节点上…...

DNS部署与安全详解(上)

文章目录 一、DNS二、域名组成1. 域名组成概述2. 域名组成 三、监听端口四、DNS解析种类1. 按照查询方式分类&#xff1a;2. 按照查询内容分类&#xff1a; 五、DNS服务器搭建过程1. 先确保服务器的IP地址是固定的2. 安装DNS软件 一、DNS DNS全称Domain Name Service&#xff0…...