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

嵌入式软件工程师面试题——2025校招社招通用(八)

说明:

  • 面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);
  • 文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但在这里博主希望每一个题目,大家都要经过认真思考,答案不重要,重要的是通过题目理解所考知识点,好应对题目更多的变化;
  • 博主与大家一起学习,一起刷题,共同进步;
  • 写文不易,麻烦给个三连!!!

1.继承时访问级别如何变化?

分析:
在 C++ 中,继承是可以降低父类的访问级别的。
按照访问级别不同,继承可分为以下3种。

  • public (公用继承):基类成员保持自己的访问级别;
  • protect (受保护继承):基类的 public 和 protected成员在派生类中为 protected 成 员。基类的 private 成员保持为 private;
  • private (私有继承):基类的所有成员在派生类中为 private 成员。

如果没有自定义, C++ 将使用默认继承保护级别,使用class 保留字定义的派生类默认 具有 private 继承。使用 struct 保留字定义的类默认具有public 继承。友元关系是不可以继 承的。static 成员属于类,而非对象,在继承层次中只有一个这样的成员。既可以通过基类 访问 static 成员,也可以通过派生类访问。

答案: 在C++ 中有public、protect 和 private 等3种继承访问级别。子类继承的时候,通过声明为 protect 或者 private 可以降低父类的访问级别。

2.什么是浅复制和深复制?

答案:

  • 浅复制是指将一个对象的内容简单地拷贝到另一个对象中,包括成员变量的值和指针的地址。这意味着原始对象和副本对象共享相同的指针,它们指向相同的内存地址。如果对其中一个对象进行修改,会影响到另一个对象。这可能导致潜在的问题,特别是当对象销毁时,可能会出现重复释放内存或访问无效内存的情况。

  • 深复制是指创建一个新的对象,并将原始对象的内容完全复制到新对象中,包括成员变量的值和指针所指向的内容。这意味着原始对象和副本对象有各自独立的内存空间,彼此之间不会互相干扰。对任何一个对象的修改都不会影响到另一个对象。

为了实现深复制,通常需要重载拷贝构造函数和赋值运算符,确保在复制对象时,指针所指向的内容也得到复制。可以使用动态内存分配来创建新的对象,使得两个对象在内存中是彼此独立的。
下面是一个示例,展示了浅复制和深复制的区别:

#include <iostream>
#include <cstring>class Person {
public:Person(const char* name) {size_t len = std::strlen(name) + 1;this->name = new char[len];std::strcpy(this->name, name);}// 浅复制Person(const Person& other) {this->name = other.name;  // 只是拷贝指针,共享相同的内存}// 深复制Person& operator=(const Person& other) {if (this != &other) {delete[] this->name;size_t len = std::strlen(other.name) + 1;this->name = new char[len];std::strcpy(this->name, other.name);}return *this;}~Person() {delete[] name;}void PrintName() {std::cout << "Name: " << name << std::endl;}private:char* name;
};int main() {Person person1("Alice");Person person2 = person1;  // 浅复制person1.PrintName();  // 输出 "Name: Alice"person2.PrintName();  // 输出 "Name: Alice"person2 = Person("Bob");  // 深复制person1.PrintName();  // 输出 "Name: Alice"person2.PrintName();  // 输出 "Name: Bob"return 0;
}

3.C++ 支持参数个数不确定的函数吗

分析: 支持,可变参数模板(Variadic Templates)和va_list机制

  • 可变参数模板(Variadic Templates):可变参数模板是C++11引入的特性,它允许定义接受任意数量参数的函数模板。使用可变参数模板,可以在函数模板定义中使用…语法,表示参数的可变个数。通过递归展开模板参数包,可以访问和处理每个参数。
#include <iostream>
using namespace std;// 可变参数模板的递归终止函数
void print() {cout << endl;
}// 可变参数模板的递归展开函数
template<typename T, typename... Args>
void print(T first, Args... args) {cout << first << " ";print(args...);
}int main()
{   print(1, 2, 3);print(1.0, 2.0);print(1, 2, 3, "hello", 4.5);return 0;
}

在上述示例中,print函数是一个可变参数模板函数。当递归展开时,每次都会打印第一个参数,并将剩余的参数传递给下一次递归调用,直到参数列表为空时终止。

  • va_list机制:va_list机制是C语言中的一个特性,C++也支持使用C头文件中的相关函数和宏来处理可变参数。通过使用va_list、va_start、va_arg和va_end等宏,可以在函数内部访问和处理可变数量的参数。

答案: 是的,C++支持参数个数不确定的函数。C++中有两种主要的方法来实现参数个数不确定的函数:可变参数模板(Variadic Templates)和va_list机制。

#include <iostream>
#include <cstdarg>
using namespace std;// 使用va_list机制的可变参数函数
void print(int count, ...) {va_list args;va_start(args, count);for (int i = 0; i < count; ++i) {int value = va_arg(args, int);cout << value << " ";}va_end(args);cout << endl;
}int main() {print(5, 1, 2, 3, 4, 5);return 0;
}

在上述示例中,print函数接受一个整数参数count和可变数量的整数参数。使用va_list、va_start、va_arg和va_end宏,可以在函数内部遍历并访问可变数量的参数。

4.指针形参与引用形参有什么区别

分析:
函数的形参可以是指针,此时将复制实参指针。与其他非引用类型的形参一样,该类 形参的任何改变也仅作用于局部副本。如果函数将新指针赋给形参,主调函数使用的实参指针的值没有改变。
被复制的指针只影响对指针的赋值。如果函数形参是非 const 类型的指针,则函数可通过指针实现赋值,修改指针所指向对象的值。

#include <iostream>
using namespace std;void reset(int *p)
{*p = 0;p = 0;
}int main()
{   int i = 42;int *p = &i;cout << "i: " << *p << '\n';    // 打印 42 cout << p << endl;              // 0x61ff08reset(p);cout << "i: " << *p << endl;    // 打印 0cout << p << endl;              // 0x61ff08return 0;
}

答案: 指针形参是指函数的参数是指针,它不会像引用形参那样通过函数调用影响实参的值,但
是调用后它会修改实参的对象。程序中建议尽量少使用指针形参,这样会使程序的可读性下降。

5.静态函数能访问类的私有成员

分析:
类的静态成员函数可以访问类的私有成员,但是静态成员函数只能直接访问类的静态 私有成员,因为静态成员函数是不可以直接访问非静态的成员的。但是静态成员函数可以借助对象名和指针来访问类的非静态私有成员。

静态函数是不可以直接访问类的私有变量的。但可以通过宏定义替换 private为 public等方法来实现对类的私有成员的访问。

答案: 静态函数只能直接访问类的静态私有成员,静态函数不可以直接访问类的非静态私有
成员,但是可以通过自定义的一些特殊方法比如宏替换访问类的非静态私有成员。

6.什么是函数模板?什么是类模板?

答案:
函数模板技术定义了参数化的非成员函数,这使得程序能够使用不同的参数类型调用 相同的函数。而至于使用何种类型,则是由编译器确定并从模板中生成相应类型的代码。 编译器确定了模板函数的实际类型参数,称之为模板的实例化。

T Add(T a, Tb)
{T res;res = a + b;return res;
}

类模板描述了能够管理其他数据类型的通用数据类型。类模板技术通常用于建立包含 其他类型的容器类,例如,队列、链表和堆栈等。对于这些容器类来说,无论哪种数据类 型,其操作方式是相同的,但是对具体的数据类型却又是专用的。标准模板库STL 就大量使用了这种技术。

template<class T>
class TemplateSample
{
private:T& eentity;
public:void F(T& arg);
};

7.变量的声明和定义有什么区别

答案:
为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入 extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。

说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。

8.C 语言的关键字 static 和 C++ 的关键字 static 有什么区别

答案:
在 C 中 static 用来修饰局部静态变量和外部静态变量、函数。而 C++中除了上述功能外,还用来定
义类的成员变量和函数。即静态成员和静态成员函数。

注意: 编程时 static 的记忆性,和全局性的特点可以让在不同时期调用的函数进行通信,传递信息,而 C++的静态成员则可以在多个对象实例间进行通信,传递信息。

9.一个指针可以是 volatile 吗

答案:
可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例:子中断服务子程序修改
一个指向一个 buffer 的指针时,必须用 volatile 来修饰这个指针。

**说明:**指针是一种普通的变量,从访问上没有什么不同于其他变量的特性。其保存的数值是个整型数据,和整型变量不同的是,这个整型数据指向的是一段内存地址。

相关文章:

嵌入式软件工程师面试题——2025校招社招通用(八)

说明&#xff1a; 面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但在这里博主希望每一个题目&#xff0c;大家都要…...

背包笔记

01背包 朴素版01背包 cin >> n >> m; f[0][0] 0; for(int i 1; i < n; i ) {for(int j 0; j < m; j ){f[i][j] f[i - 1][j];//第i个物品不选if(j - v[i] > 0){f[i][j] max(f[i][j], f[i - 1][j - v[i]] w[i]);//选第i个物品}} }cout << f[n…...

【Redis 速通】Redis 在 Linux 上的单机服务快速搭建与部署(附完整流程步骤及命令代码)

Redis 单机版安装与部署 Written By: Xinyao Tian 概述 本文档主要描述了 Redis 的生产环境安装及配置方法。 主要步骤 编译及安装 进入 root 用户并上传 Redis 源码安装包 查看 Redis 源码安装包的上传情况: [rootcentos-host redis]# pwd /opt/redis [root centos-ho…...

前端JavaScript

文章目录 一、JavaScript概述JS简介1.ECMAScript和JavaScript的关系2.ECMAScript的历史3.什么是javas&#xff1f;4.JavaScript的作用&#xff1f; 三者之间的作用JS基础1.注释语法2.引入js的多种方式3.结束符号 变量与常量变量1.JavaScript声明2.var与let的区别常量 基本数据类…...

C语言程序设计(第五版)谭浩强 第三章课后题答案

第三章 1、假如我国国民生产总值的年增长率为7%&#xff0c; 计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为 ,其中r为年增长率&#xff0c;n为年数&#xff0c;p为与现在相比的倍数。 #include<stdio.h> #include<math.h>int main(){float r,…...

uni-app 解决钉钉小程序日期组件uni-datetime-picker不兼容ios问题

最近在使用uni-app开发 钉钉小程序 &#xff0c;遇到一个ios的兼容性问题 uni-datetime-picker 组件在模拟器上可以使用&#xff0c;在真机上不生效问题 文章目录 1. 不兼容的写法&#xff0c;uni-datetime-picker 不兼容IOS2. 兼容的写法&#xff0c;使用 dd.datePicker 实现。…...

【C++入门 三】学习C++缺省参数 | 函数重载 | 引用

C入门 三 1.缺省参数1.1 缺省参数概念1.2 缺省参数分类 2. 函数重载2.1 函数重载概念2.2 C支持函数重载的原理--名字修饰(name Mangling) 3.引用3.1引用概念3.2引用特性3.3 常引用3.4 使用场景1. 做参数2. 做返回值 3.5 传值、传引用效率比较3.6引用和指针的区别 4.引用和指针的…...

视频增强修复软件Topaz Video AI mac中文版支持功能

Topaz Video AI mac是一款使用人工智能技术对视频进行增强和修复的软件。它可以自动降噪、去除锐化、减少压缩失真、提高清晰度等等。Topaz Video AI可以处理各种类型的视频&#xff0c;包括低分辨率视频、老旧影片、手机录制的视频等等。 使用Topaz Video AI非常简单&#xff…...

C# 使用Thread类建线程

C# 使用Thread类建线程 目录 C# 使用Thread类建线程引言Thread类启动线程优先级后台运行线程状态线程名称线程ID最后 引言 线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。线程是我们程序常用的并行运行控制手段&#xff0c;…...

asyncio协程框架

asyncio 基本用法 asyncio 包含以下几个主要的组件&#xff1a;协程 asyncio 支持使用 async/await 语法定义协程&#xff08;coroutine&#xff09;。协程是可以暂停和恢复执行的函数&#xff0c;可以实现非阻塞式的异步编程。 import asyncioasync def coroutine():print(H…...

TSINGSEE智慧安防:AI人员入侵检测算法的工作原理及应用场景概述

人员入侵检测算法基于视频分析技术&#xff0c;自动对视频画面进行分析识别&#xff0c;可以对危险区的人员闯入、靠近等行为进行实时进行检测并预警&#xff0c;无需人工干预&#xff0c;协助管理者对场所的安全问题进行监管&#xff0c;可以广泛运用在学校、园区、工地、车站…...

Python:PDF转长图像和分页图像

简介&#xff1a;随着电子化文档的普及&#xff0c;PDF文件的使用频率越来越高。有时我们需要将PDF中的内容转化为图片格式进行分享或编辑&#xff0c;那么如何才能轻松地完成此任务呢&#xff1f;本文将为你展示一个Python工具&#xff1a;如何将PDF文件转化为图片&#xff0c…...

第48天:内置对象方法、 前端基础之BOM和DOM

内置对象方法 RegExp对象 // 定义正则表达式两种方式 var reg1 new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;// 正则校验数据 reg1.test(jason666) reg2.test(jason666)/*第一个注意事项&#xff0c;正则表达式中不能有空格…...

CMake系列EP02: 构建可执行程序和库

文章目录 cmake --buildmessage命令切换生成器使用ninja构建项目切换生成器的工作原理 构建和链接静态库和动态库add_library命令add_executable命令构建OBJECT类型的库条件编译opion命令option更多信息 指定编译器构建类型切换构建类型&#xff1a; 设置编译器选项cmake调试设…...

比亚迪今年的薪资。。

大家或许已经对比亚迪在西安的宣讲会有所耳闻&#xff0c;那场面真的是座无虚席。如果你稍微迟到了一些&#xff0c;那么你可能只能在门外或是走廊听了。 事实上&#xff0c;许多人早早地抵达了&#xff0c;只要稍微晚到&#xff0c;就可能错过了室内的位置。 更令人震惊的是&…...

【OpenCV实现图像找到轮廓的不同特征,就像面积,周长,质心,边界框等等。】

文章目录 概要图像矩凸包边界矩形 概要 OpenCV是一个流行的计算机视觉库&#xff0c;它提供了许多图像处理和分析功能&#xff0c;其中包括查找图像中物体的轮廓。通过查找轮廓&#xff0c;可以提取许多有用的特征&#xff0c;如面积、周长、质心、边界框等。 以下是几种使用…...

数仓建模—数仓建设概论

数仓建设概论 文章目录 数仓建设概论什么是数据仓库数据仓库对企业的意义1.全面掌握企业数据2.支持企业的决策制定3. 可靠性高怎么做数据仓库建1. 需求分析2. 设计数据仓库架构3. 数据采集4. 数据清洗5. 数据结构设计6. 数据分析7. 数据可视化8. 数据维护总结前面我们介绍了关于…...

Docker dnmp 多版本php安装 php8.2

Laravel9 开发需要用到php8.1以上的版本&#xff0c;而dnmp只支持到php8.0。安装php8.2的步骤如下&#xff1a; 1. 从/services/php80目录复制一份出来&#xff0c;重命名为php82&#xff0c;extensions目录只保留 install.sh 和 install-php-extensions 这两个文件 2. 修改.en…...

Distilling the Knowledge in a Neural Network【论文解析】

Distilling the Knowledge in a Neural Network 知识蒸馏 摘要1 引言摘要 提高几乎任何机器学习算法性能的一种非常简单的方法是在相同的数据上训练许多不同的模型,然后对它们的预测进行平均处理[3]。不幸的是,使用整个模型集合进行预测既繁琐又可能过于计算密集,特别是如果…...

基于深度学习的自动驾驶汽车语义分割与场景标注算法研究。

自动驾驶汽车是当前研究的热点领域之一&#xff0c;其中基于深度学习的语义分割与场景标注算法在自动驾驶汽车的视觉感知中具有重要作用。本文将围绕自动驾驶汽车的语义分割与场景标注算法展开研究。 一、研究背景 随着人工智能技术的不断发展&#xff0c;自动驾驶汽车逐渐成…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...