嵌入式面试笔试刷题(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)
文章目录 前言一、进程和线程的区别二、共享内存的原理三、中断有传参和返回值吗四、串口数据帧格式五、进程通信有几种,哪几种需要借助内核1.方式2.需要借助内核的 六、flash有哪几种类型七、指针的本质是什么八、指针和数组的区别九、使用宏定义交换变量不能使用中…...

24考研数据结构-第五章:树与二叉树
目录 第五章:树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. 链式存储逆向…...

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

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

Circle of Mistery 2023牛客暑期多校训练营5 B
登录—专业IT笔试面试备考平台_牛客网 题目大意:给出一个n个数的数组a,求一个排列,使其形成的其中一个置换环上的数的和>k,并使产生的逆序对数量最少 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
题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会…...

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

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 配置用户名和密码
无密码的其他配置项在:https://blog.csdn.net/Xeon_CC/article/details/132064295 elasticsearch.yml配置文件: 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 是一个已经存在的功能很多的类(两头进出的队列);利用deque的功能来实现queue的多种操作 该例只是复合的一种情况——设计模式 Adapter 9.1.1 复合下的构造…...

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

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

宝塔Linux面板怎么升级?升级命令及失败解决方法
宝塔Linux面板怎么升级到新版本?root账号ssh登录到云服务器后,执行宝塔Linux面板升级命令即可搞定,新手站长分享宝塔Linux面板升级命令: 宝塔面板升级到新版本 1、使用root账号ssh登录到云服务器上 ssh root你的云服务器ip地址…...

前端面试的性能优化部分(6)每天10个小知识点
目录 系列文章目录前端面试的性能优化部分(1)每天10个小知识点前端面试的性能优化部分(2)每天10个小知识点前端面试的性能优化部分(3)每天10个小知识点前端面试的性能优化部分(4)每天…...

2023年 Java 面试八股文(20w字)
目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象 难度系数:⭐ 2、重载与重写区别 难度系数:⭐ 3、接口与抽象类的区别 难度系数:⭐ 4、深拷贝与浅拷贝的理解 难度系数:⭐ 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,如果需要换成其他的 web 容器,可以如下配置。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 默…...

DNSlog注入(利用DNSlog平台将SQL盲注变成回显注入)
前言什么是UNC什么是DNSlog注入DNSlog注入的条件防止DNSlog注入的几个措施 sqli-labs试验 前言 前几天面试的时候,面试官问我知不知道OOB(带外数据)。 当时我蒙了,确实没听说过这个东西,然后面试官告诉我原来dnslog注入…...

vim学习笔记(致敬vim作者)
vim cheat sheet 30. vim 删除大法 vim 删除某个字符之后改行的其他的字符?删除某行之后的其他行?删除某个字符之后的其他字符?【1】删除单个字符? 跳到要删除的字符位置 按下d键然后按下shift 4键 【2】删除某行之后的其他行…...

力扣 -- 139. 单词拆分
一、题目 题目链接:139. 单词拆分 - 力扣(LeetCode) 二、解题步骤 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:bool wordBreak(str…...
百度秋招攻略,百度网申笔试面试详解
百度秋招简介 作为行业巨头,百度向社会提供的岗位一直都是非常吃香的,每年也都有很多考生密切关注,百度发布的招聘广告,以尽可能的让自己进入这家企业工作,实现自己的人生价值。那么百度每年的秋招时间是多久…...

nohup Java -jar 生成的nohup.out 文件一直增加,如何处理
目录 1 实现 1 实现 除了使用echo "" > filename清空文件内容之外,还有其他几种方法可以删除文件中的内容而不删除文件本身:使用truncate命令:truncate命令可以用来截断文件并清空内容。使用以下命令清空文件内容:t…...

静态页面与动态页面的区别及部署jpress应用
简述静态网页和动态网页的区别 静态网页: 1、首先是静态网页,静态网页每个网页中都有一个固定的URL,网页URL以htm、HTML、jpg、.gif、.mp4等常见形式为后缀,而且不含有问号; 2、静态网页内容一经发布到网页服务器上…...

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

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

第七节--结构体
lesson19: 一、结构的基础知识 1.数组是一组xx集合(1:10:10) 2.结构体是XX的集合(1:10:25) 二、结构的声明(看课件)(1:12…...

Docker学习(二十四)报错速查手册
目录 一、This error may indicate that the docker daemon is not running 报错docker login 报错截图:原因分析:解决方案: 二、Get "https://harbor.xxx.cn/v2/": EOF 报错docker login 报错截图:原因分析:…...

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

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