嵌入式笔试面试题目

C++知识点

基础知识

程序编译的四个部分分别是什么?各阶段分别生成的是什么文件类型?

1.预处理阶段(Preprocessing)
        在预处理阶段,编译器会对源代码进行预处理。这包括展开宏定义、处理条件编译指令(如#ifdef`、'#ifndef'、'#if·等)、包含头文件等操作。预处理器生成一个经过预处理的源代码文件(通常以"
.i"或无扩展名命名),它是展开宏和包含头文件后的中间文件。

2.编译阶段(Compiling):
        编译阶段将预处理后的源代码转换为汇编代码。编译器会将源代码翻译成相应的汇编语言代码,这些代码描述了程序的逻辑结构以及计算机指令的实现。编译器生成的输出文件通常是以汇编语言代码的形式保存的(通常以"
.s"扩展名命名),它是经过语法和语义分析后的中间文件。
3.汇编阶段(Assembling)
        汇编阶段将汇编代码转换为机器码(二进制代码)。汇编器(assembler)会将汇编代码翻译成机器语言指令,生成可执行的目标文件。目标文件通常是以".o"或".obj"扩展名命名它包含了程序的二进制表示,但还未经过链接。

4.链接阶段(Linking)
        链接阶段将目标文件及其所需的库文件链接在一起,生成最终的可执行文件。链接器(linker)会解析目标文件之间的符号引用,将它们关联起来形成一个完整的程序。这个阶段还会将程序中使用到的库文件(如标准库等)链接到最终的可执行文件中。最终生成的可执行文件通常没有特定的扩展名,而是根据操作系统的约定(如'
.exe'、无扩展名等)。

++i与i++的区别?

区别是它们的返回值,如i初始值为5,++i就是6,i++就是5。

Switch() { case} 函数块,switch里面可以是什么类型的数据?可以是float吗?字符串呢?

因为Switch语句是基于整数的跳转表进行条件匹配,无法直接处理浮点数或字符串。在C++中可以用整数类型和字符常量。(使用字符常量作为 switch 语句的条件表达式时,实际上是将字符常量隐式转换为对应的整数值(即 ASCII 码值),然后再根据整数值进行条件匹配。

Static关键字的作用?

数组的下标可以为负数吗?

可以,数组下标指地址偏移量,根据偏移量能定位得到目标地址。

指针

指针和引用的区别

指针更加灵活,可以指向多个不同的对象,可以为空,并且可以进行地址运算等操作。而引用更加安全,一定非空,一旦初始化后就不能重新绑定,不需要进行空值检查,并且语法更加简洁清晰。

指针的高效性和灵活性如何体现?

它可以直接访问内存,避免了额外的拷贝操作,提高了内存操作的效率;同时,指针还可以用于动态数据结构的创建,如链表、树等,以及动态内存的管理,使得程序可以根据需要动态分配和释放内存,提高了内存利用率。此外,指针作为函数参数传递时,能够避免参数的拷贝,提高了函数调用的效率。

函数与类

拷贝构造函数里面为什么用的是引用?有什么作用?

1.避免无限递归调用:如果拷贝构造函数的参数是对象本身而不是引用,那么在调用拷贝构造函数时会创建一个新的对象,为了创建这个新对象,又会调用拷贝构造函数,导致无限递归调用,最终导致栈溢出。通过使用引用作为参数,可以避免这种无限递归调用的问题。

2.提高效率:使用引用作为参数传递对象时,只需要传递对象的地址而不是整个对象的副本,这样可以避免不必要的对象复制,提高了程序的执行效率。

3.避免对象切片问题:如果参数是对象本身而不是引用,在传递派生类对象给基类对象时,会发生对象切片问题,即只会复制基类部分的数据,而丢失了派生类的特有数据。通过使用引用,可以避免对象切片问题,确保复制了完整的对象。

派生类有哪些基类方法没继承?

1.基类的构造函数、析构函数和拷贝构造函数。2.基类的重载运算符。 3.基类的友元函数。

拷贝构造函数和构造函数的区别?

1.构造函数(Constructor)
        构造函数是用于初始化类的对象的特殊成员函数。构造函数在对象创建时调用,用于将对象的成员变量设置为特定的初始值。构造函数的目的是创建一个新的对象,并确保该对象的状态是有效的和可用的。构造函数在对象的生命周期开始时调用,它不涉及复制对象的操作,而是用于对象的初始构建。
2.拷贝构造函数(Copy Constructor):
        拷贝构造函数是一种特殊的构造函数,用于创建一个对象,并将其初始化为同类的另一个对象的副本。它的参数是同类的一个对象的引用(通常是'const'引用),用于指定要复制的原始对象。拷贝构造函数的目的是在对象的创建过程中实现对象的复制,以确保新对象与原对象具有相同的状态和数据。拷贝构造函数通常在以下情况下被调用:通过复制初始化(例如"Line obj2 = obj1;")或直接调用(例如"Line obj3(obi1);")

当对象作为参数传递给函数或从函数返回时,如果是按值传递或返回,将会触发拷贝构造函数的调用。
        因此,构造函数是用于对象的初始化,而拷贝构造函数是用于对象的复制和初始化。拷贝构造函数的功能不仅限于复制成员变是和操作,它的目的是创建一个新对象,并确保新对象的状态与原始对象相同。

Linux系统知识点

引导加载程序(Bootloader)

引导加载程序(Bootloader)是计算机系统启动时的第一个程序,其主要作用是初始化系统硬件并加载操作系统到内存中开始执行。Bootloader通常存储在系统的非易失性存储设备(如硬盘、固态硬盘、闪存等)的特定位置,如主引导记录(Master BootRecord,MBR)或启动扇区(BootSector)
Bootloader的功能通常包括以下几个方面:
1.硬件初始化:Bootloader 需要初始化系统硬件,包括处理器、内存、外部设备(如磁盘驱动器、图形显示适配器等)等,以便系统能够正常运行。
2.加载操作系统:Bootloader负责从存储设备中读取操作系统的核心部分(如内核)到系统内存中,并将控制权传递给操作系统,使其开始执行。通常,Bootloader会在系统启动时提供一个菜单或者选项,让用户选择要启动的操作系统或者引导其他的操作系统。
3.系统配置:Bootloader 可以根据用户的设置或者系统的配置文件来进行一些系统配置,例如设置启动参数、加载模块或者驱动程序、启动系统时的参数传递等。
4.错误处理:Bootloader 需要具备一定的错误处理能力,例如检测存储设备的错误、操作系统加载失败等情况,以便提供相应的错误提示或者修复措施。
Bootloader 的设计和实现对于系统的启动和运行至关重要,不同的操作系统和硬件平台可能会有不同的 Bootloader 实现方式和特点。

文件系统有哪些类型?

1.FAT (File Allocation Table):

  • FAT12:最早的FAT文件系统版本,用于较小容量的存储介质。
  • FAT16:支持更大容量的存储介质和更大的文件。
  • FAT32:支持更大容量和更大文件尺寸,广泛用于移动设备和Windows操作系统。

2.NTFS (New Technology File System):
        NTFS是Windows操作系统中常见的文件系统,支持大容量、大文件和高级功能如安全权限、压缩和加密。
3.exFAT (Extended File Allocation Table):
        exFAT是针对移动设备和闪存存储优化的文件系统,支持更大的文件和更大的存储容量。
4.ext (Extended File System):

  • ext2:Linux系统最早的文件系统,不支持日志功能。
  • ext3:在ext2的基础上增加了日志功能,提高了文件系统的稳定性和恢复能力。
  • ext4:是Linux上最常用的文件系统,支持更大的存储容量和更大的文件尺寸,具有更好的性能和稳定性。

5.APFS (Apple File System):
        APFS是苹果公司开发的用于macOS和iOS的现代文件系统,支持快照、加密、空间共享和快速文件系统恢复。
6.HFS+ (Hierarchical File System Plus):
        HFS+是早期苹果系统中常见的文件系统,已逐渐被APFS取代。
7.ZFS (Zettabyte File System):
        ZFS是一种先进的文件系统,具有强大的数据完整性保护、快照、压缩和RAID支持等功能,常用于高性能计算和数据存储系统。
8.Btrfs (B-tree File System):
        Btrfs是Linux上的新一代文件系统,支持快照、压缩、在线扩展和数据完整性保护。
9.ReFS (Resilient File System):
        ReFS是微软开发的用于Windows Server的高鲁棒性文件系统,具有高级的数据完整性和容错能力。
10.XFS (Extended File System):
        XFS是用于Linux系统的高性能文件系统,特别适合大型文件和大容量存储。

软件中断和硬件中断的区别?

Bash指令

怎么把CVTE_STN中的_识别并且将CVTE STN分开?

数据结构知识点

无论数据多少,复杂度最低,效率最高的排序算法是什么?

通信协议知识点

IIC最多能有多少个从机?

  • 7位地址空间:I2C使用7位地址空间来寻址从机设备,因此理论上可以有 27=12827=128 个可能的从机地址。然而,其中一些地址被保留用于特殊用途(如广播地址),因此实际可用的从机地址可能会少于128个。
  • 保留地址:I2C协议中有一些地址被保留用于特定用途,例如广播地址(0x00)和一些功能性地址。因此,不能将所有128个地址都用于从机设备。
  • 多主机冲突:如果在I2C总线上使用多个主机,必须确保地址冲突不会发生,以免多个主机同时访问同一个从机地址。

为什么说TCP是安全的连接方式?

CSDN嵌入式笔试面试题系列是CSDN提供的面向嵌入式系统工程师的一系列笔试,旨在评估面试者在嵌入式领域的知识和技能。 这些面试题涵盖了嵌入式系统的各个方面,包括硬件设计、嵌入式软件开发、嵌入式操作系统等。通过回答这些题面试者可以展示他们的专业知识、问题解决能力和团队协作能力。 作为一个嵌入式系统工程师,我会通过以下几个方面来回答这一系列的面试题: 1. 硬件设计:我会解释如何设计一个嵌入式系统的硬件架构,包括选择核心处理器、外设接口的设计和电路设计等。 2. 嵌入式软件开发:我会谈谈自己的嵌入式软件开发经验,包括使用哪些开发工具和编程语言,如何进行软件调试和优化。 3. 嵌入式操作系统:我会介绍我在嵌入式操作系统方面的经验和知识,包括熟悉的操作系统类型,如RTOS和Linux,以及如何进行任务调度和内存管理等。 4. 项经验:我会分享我在嵌入式中的经验,包括完成的项类型、任务分工和团队合作等。 5. 学习与发展:我会表达自己对嵌入式领域的学习态度和发展意愿,包括对新技术的关注和学习计划等。 综上所述,CSDN嵌入式笔试面试题系列是一系列用来评估嵌入式系统工程师技能的笔试。通过回答这些题面试者可以展示他们的专业知识和技能,并展示自己在嵌入式领域的学习态度和发展潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值