嵌入式经典面试题及解析

author author     2023-04-03     446

关键词:

嵌入式经典面试题及解析

基础部分考察

1、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 60 24 * 365)UL

考点

01

#define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)

02

懂得预处理器将为你计算常数表达式的值,因此直接写出你如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

03

意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

04

如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。

2、写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) ? (A) : (B))

考点

01

#define 标示在宏中应用的基本知识。这是很重要的。因为在 嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

02

三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比IF-then-else更优的代码,了解这个用法是很重要的。

03

懂得在宏中小心地把参数用括号括起来

04

我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b);

3、预处理器标识#error的目的是什么?

编译程序时,只要遇到 #error 就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。

下面举个例子:
程序中往往有很多的预处理指令
#ifdef XXX
...
#else

#endif

当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译:
#ifdef XXX
...
#error "XXX has been defined"
#else
#endif

这样,如果编译时出现错误,输出了XXX has been defined,表明宏XXX已经被定义了。

4、嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?

这个问题有几个解决方案,我首选的方案是:
while(1)

一些程序员更喜欢如下方案:
for(;;)

因为这个题目没有确切表达到底怎么回事,面试官将用这个作为一个机会去探究他们这样做的基本原理。

第三个方案是用 goto
Loop:
...
goto Loop;

应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。

5、用变量a给出下面的定义

a) 一个整型数(An integer)

b)一个指向整型数的指针( A pointer to an integer)

c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r

d)一个有10个整型数的数组( An array of 10 integers)

e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)

f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )

答案是

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

6 、下面的代码输出是什么,为什么?
void foo(void)

unsigned int a = 6;
int b= -20;
(a+b> 6) ? puts("> 6") : puts("<= 6");

考点

这个问题测试你是否懂得C语言中的整数自动转换原则,有些开发者懂得极少这些东西。

不管如何,这无符号整型问题的答案是输出是 ">6"。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。

因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是非常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。

7、评价下面的代码片段
unsigned int zero =0;
unsigned intcompzero = 0xFFFF;
/1‘‘s complementof zero /

对于一个int型不是16位的处理器来说,上面的代码是不正确的。应编写如下:
unsigned intcompzero = ~0;

这一问题真正能揭露出应试者是否懂得处理器字节的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。
添加微信17727800897获取更多学习资源

c#经典面试题及答案

1.请你说说.net中类和结构的区别?答:结构和类具有大体的语法,但是结构受到的限制比类多。结构不能声明默认的的构造函数,为结构的副本是编译器创建和销毁的,所以不需要默认的构造函数和析构函数,结构是值类型。所... 查看详情

宅家30天,吃透这份测试工程师面试700道题解析,成功定级阿里p7

...f1f;小编今天说的这富含的15个互联网大厂测试工程师核心面试700题解析整理!内容包括:软件测试基础210道面试题及答案解析Linux54道面试题及答案解析MySQL80道面试题及答案解析web测试10道面试题及答案解析接口测试35道... 查看详情

2021年linux面试题及答案解析,精选题轻松搞定大厂面试官

前言最近针对互联网公司面试问到的知识点,总结出了软件测试员面试涉及到的绝大部分面试题及答案分享给大家,希望能帮助到你面试前的复习且找到一个好的工作,也节省你在网上搜索资料的时间来学习。1、绝... 查看详情

java程序员面试题大全含答案(2018--2019)

java程序员面试题大全含答案(2018--2019)1、10道经典java面试题_实习生必问!2、15个Java线程并发面试题和答案3、15个高级Java多线程面试题及回答4、2018年java分布式相关最新面试题5、2018最新java技术面试题与答案6、4个Spring常见面... 查看详情

springcloud面试题及答案300道,springcloud面试题总结(持续更新)

...很长时间搜集,本套SpringCloud面试题大全,有大量经典的SpringCloud面试题以及答案 查看详情

嵌入式面试经典30问

...面试官考的问题回答不上了,所以今天为大家准备了嵌入式工程师面试经常遇到的30个经典问题,希望可以帮助大家提前准备,不再惧怕面试。一、基础问题:1 查看详情

嵌入式面试经典30问

...面试官考的问题回答不上了,所以今天为大家准备了嵌入式工程师面试经常遇到的30个经典问题,希望可以帮助大家提前准备,不再惧怕面试。一、基础问题:1 查看详情

2021网易java高级面试题及答案,知识点总结+面试题解析

三、堆空间基本描述JVM启动时创建堆区,是内存管理的核心区,通常情况下也是最大的内存空间,是被所有线程共享的,几乎所有的对象实例都要在堆中分配内存,所以这里也是垃圾回收的重点空间。堆栈关... 查看详情

常见的10道web前端面试题及答案分享!

Web前端经典面试题有哪些?Web前端在近几年是越来越火热了,很多人看到了前端的待遇好,更看到了前端行业的发展前景,所以纷纷投入到学习前端技术学习中来。下面千锋给大家总结整理一些Web前端经典面试题&... 查看详情

java面试题及答案2020_java面试题答案1(代码片段)

java面试题及答案2020持续更新。。本文收集了一些经典的Java面试题及其答案1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象... 查看详情

嵌入式面试经典30问

嵌入式面试经典30问  在经过4个多月的学习后,学员们最关心的问题莫过于如何拿到高薪offer问题了。 但是很多同学说很害怕面试,看见面试官会露怯,怕自己的知识体系不完整,怕面试官考的问题回答不上了,所以... 查看详情

50道css基础面试题及答案

1介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?标准盒子模型:宽度=内容的宽度(content)+border+padding+margin低版本IE盒子模型:宽度=内容宽度(content+border+padding)+margin2box-sizing属性?用来控制元素的盒子... 查看详情

android面试题及答案整理(2022年最新android面试题大全带答案)(代码片段)

...套Android面试题大全,Android面试题大汇总,有大量经典的Android面试题以及答案,包含Android语言常见面试题、Android工程师高级面试题及一些大厂Android开发面试宝典,面试经验技巧等,应届生,实习生,... 查看详情

一些经典的嵌入式c面试题汇总(代码片段)

👇关注「Linux大陆」,一起进步!👇#error的作用是什么?#error 指令让预处理器发出一条错误信息,并且会中断编译过程。下面我们从Linux代码中抽取出来一小段代码并做修改得到示例代码:这段示例... 查看详情

解析js中作用域闭包——从一道经典的面试题开始

...的作用域,闭包,私有变量,this对象概念呢?就从一道经典的面试题开始吧!题目:创建10个<a>标签,点击时候弹出相应的序号先思考一下,再打开看看//先思考一下你会怎么写,是不是这样?可是结果呢,弹出来的都是10,... 查看详情

蓝桥杯嵌入式第十四届蓝桥杯嵌入式[模拟赛2]客观题及详细题解

题1解析USART_CR1:控制寄存器1,其中的M位定义了数据字的长度,由软件对其设置和清零。USART_CR2:控制寄存器2。USART_BRR:波特率寄存器。USART_DR:数据寄存器。(如果现场不记得,可以查阅芯片手册)答案:A题2解析在STM32微控... 查看详情

嵌入式面试经典30问

...面试官考的问题回答不上了,所以今天为大家准备了嵌入式工程师面试经常遇到的30个经典问题,希望可以帮助大家提前准备,不再惧怕面试。一、基础问题:1、讲一下stm32的时钟系统2、C语言中堆和栈的区别࿱... 查看详情

100道mysql数据库经典面试题解析(收藏版)(代码片段)

前言100道MySQL数据库经典面试题解析,已经上传github啦https://github.com/whx123/JavaHome/tree/master/Java面试题集结号公众号:捡田螺的小男孩数据库1.MySQL索引使用有哪些注意事项呢?可以从三个维度回答这个问题:索引哪些情况会失效,... 查看详情