速看!这8道嵌入式面试题你都会吗?

2024-04-12 00:12
文章标签 面试题 嵌入式 速看

本文主要是介绍速看!这8道嵌入式面试题你都会吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是知微

正逢求职季,分享一些嵌入式面试当中经常会遇到的题目,希望这些干货对小伙伴们面试有用哦!

1、介绍一下static关键字的作用

在C语言中,static 关键字有几种不同的作用,根据其用途可以大致分类如下:

  • 局部变量:当static用于函数内的局部变量时,它使该变量的值在函数调用之间持久化,即变量在函数的多次调用间不会被重新初始化。它仍然只在声明它的代码块内可见。
  • 全局变量:将全局变量声明为static,可以限制其链接范围仅限于定义该变量的文件内部,也就是说,它不可以被其他文件通过extern外部声明所访问。
  • 函数:如果一个函数被声明为static,它的链接范围也将限制在其定义的文件内。在文件外部不可见,不能被其他文件调用。
  • 类成员:在面向对象的编程语言中,如C++或Java,static可以用来声明静态成员变量和成员函数。静态成员被该类的所有实例共享,不属于任何单独的对象实例。静态成员函数同样不属于任何单个对象,因而没有this指针,并且只能访问其类的静态成员。

2、介绍一下const关键字的作用

const 关键字在C语言中用来声明一个常量。被const修饰的变量在定义后不可更改。const可以用于不同的上下文中:

  • 局部变量:标记函数内的局部变量为常量,意味着该变量的值在其作用域内不能被改变。
  • 全局变量:用const修饰全局变量,可以设置跨文件的不可变数据。
  • 指针const用于指针时,可以让指针指向的值或者指针本身的值(指向的地址)不可变。例如,const int *ptr表示指向的int值不可改变,而int * const ptr表示指针ptr的值(地址)不可更改。
  • 函数参数:如果函数的参数被标记为const,意味着传递给函数的变量在函数内不会被改变,这对于引用和指针参数尤其重要,因为它告诉用户这些参数是用来读取而非修改的。
  • 类成员:在C++中,const可以用于成员函数,表明该成员函数不会修改其所属的对象。这样的成员函数可以被一个const对象调用。

3、头文件中的 ifndef/define/endif 是干什么用的?

#ifndef#define#endif 这三个预处理指令用于防止头文件重复包含。首次包含时,它会定义一个宏,如果该头文件被再次包含,#ifndef 检测到宏已定义,就会跳过头文件内容,避免重复定义错误。

4、用变量a定义

a)一个整型数
b) 一个指向整型数的指针
c) 一个指向指针的的指针,它指向的指针是指向一个整型数
d) 一个有10个整型数的数组
e) 一个有10个指针的数组,该指针是指向一个整型数的:
f) 一个指向有10个整型数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h) 一个有10个函数指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

a) int a; 
b) int *a;
c) int **a;
d) int a[10]; 
e) int *a[10];
f) int ( *a)[10];
g) int ( *a)(int);
h) int ( *a[10])(int);

5、new和malloc的区别

  1. 类型安全
    • new 是 C++ 中的运算符,它自动计算需要分配的空间大小,并返回正确的类型指针,无需类型转换。
    • malloc 是 C 语言中的库函数,它需要手动计算字节数,并返回 void* 类型,使用时通常需要强制类型转换。
  2. 构造/析构函数
    • new 在分配内存的同时调用对象的构造函数,为对象的成员赋予初始值。
    • malloc 仅分配内存,不调用构造函数,因此不初始化内存。
  3. 异常处理
    • new 分配内存失败时会抛出异常(bad_alloc)。
    • malloc 分配内存失败时返回 NULL
  4. 匹配操作
    • 使用 new 分配的内存应该用 delete 来释放。
    • 使用 malloc 分配的内存应该用 free 来释放。
  5. 内存分配方式
    • new 通常分配的是单个对象的内存。
    • malloc 用来分配一段指定大小的内存区域,适合分配数组形式的内存块。
  6. 重载
    • new 可以被重载以提供自定义的内存分配行为。
    • malloc 不能被重载,因为它是 C 标准库中的一个函数。

6、嵌入式系统中经常要用到无限循环,如何用C编写死循环

  • 使用 while 循环:
while(1) {// 这里放置循环体内的代码
}
  • 使用 for 循环:
for(;;) {// 这里放置循环体内的代码
}
  • 使用 do-while 循环:
do {// 这里放置循环体内的代码
} while(1);
  • 使用 goto 语句:
LOOP_START: // 这里放置循环体内的代码
goto LOOP_START;

虽然 goto 方法可以实现

7、隐式转换规则

如下代码的输出结果是?为什么?

#include <stdio.h>
int main(void)
{
unsigned int a = 6;
int b = -20;if (a + b > 6)
printf("a+b大于6\n");
else
printf("a+b小于6\n");return 0;
}

输出结果

a+b大于6

解析

因为编译器会将有符号数b转换成为一个无符号数,即此处 a+b 等价于 a+(unsigned int)b

该程序运行在32bit环境下,b的值为0xFFFFFFFF-20+1 = 4294967276,即a+b将远远大于6。

C 语言按照一定的规则来进行此类运算的转换,转换的顺序为:

double>float>unsigned long>long>unsigned int>int

8、sizeof和strlen的区别是什么?

  1. sizeof() 是一个运算符,而 strlen() 是一个函数。
  2. sizeof() 计算的是变量或类型所占用的内存字节数,而 strlen() 计算的是字符串中字符的个数。
  3. sizeof() 可以用于任何类型的数据,而 strlen() 只能用于以空字符 ‘\0’ 结尾的字符串。
  4. sizeof() 计算字符串的长度,包含末尾的 ‘\0’,strlen() 计算字符串的长度,不包含字符串末尾的 ‘\0’。

以上就是今天要分享的内容了!

📢你的每一次👍点赞 ⭐收藏 📝评论,都是我更新的动力,如有错误请留言指正,非常感谢!

这篇关于速看!这8道嵌入式面试题你都会吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895563

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题: 虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

深入探索嵌入式 Linux

摘要:本文深入探究嵌入式 Linux。首先回顾其发展历程,从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构,涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域,广泛应用于消费电子、工业控制、汽车电子和智能家居等领域。关键技术有内核裁剪与优化、设备驱动程序开发、实时性增强和电源管理等。最后展望其未来发展趋势,如与物联网融合、人工智能应用、安全性与

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`