嵌入式开发面试问题总结(持续更新)

面试问题总结

c/c++

封装、继承和多态
  • 封装:将属性和方法封装起来,并加以权限区分。
  • 继承:子类继承父类的特征和行为,复用了从基类复制而来的数据成员成员函数(基类私有成员无法被访问),其中构造函数、析构函数、友元函数、静态数据成员、静态成员函数都不能被继承,提高了代码的复用率。(虚继承解决菱形继承问题)。
  • 多态:同一种类型的对象在不同的情况下表现出不同的行为。简单来说,就是同一个方法在不同的对象上可以有不同的实现。

1G内存这个可以malloc 1.2G空间?为什么?

malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。

单例模式

单例模式 (Singleton): 保证一个类只有一个实例(懒汉式,饿汉式)。

类模板和函数模板

c++17之前类模板支持自动类型推导,函数模板不支持自动类型推导。

自动类型转换和自动类型推导

  • 自动类型转换:在某些情况下,编译器会自动将一个类型转换为另一个类型。这种转换也称为隐式类型转换。
    • 数值类型之间的隐式类型转换。
    • 派生类指针和基类指针之间的隐式类型转换。
    • 用户自定义类型(类单个参数的构造函数)。
  • 自动类型推导:自动类型推导是指编译器根据表达式的上下文来推断变量的类型。

虚析构和纯虚析构

关键字virtual,纯虚析构函数必须要提供函数体,纯虚析构会使基类是抽象类,不能实例化对象。

缺省参数

缺省参数是指在定义函数时给某个参数设置一个默认值,当函数被调用时,如果没有传递该参数,就会使用默认值。调用时只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数。

sizeofstrlen 的区别

  • sizeof 是一个操作符,strlen 是库函数。
  • sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为‘\0‘的字符串作参数。
    • 如果 strlen 函数调用的字符串没有以 '\0' 结尾,那么该函数的行为是未定义的。
  • 编译器在编译时就计算出了sizeof的结果。而 strlen 函数必须在运行时才能计算出来。并且 sizeof 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。
  • 数组做sizeof的参数不退化,传递给 strlen 就退化为指针了。
    • 对于一个空的类,里面没有任何成员和变量和函数,对该类的实例求sizeof得到的结果是1,本来应该是0,但是必须在内存中占有一定空间,至于占多少内存由编译器决定,大部分都是1
    • 如果在类中添加构造函数和析构函数仍然是1
    • 如果把析构函数标记为虚函数,就会在实例中添加一个指向虚函数表的指针,所以大小是4或者8

gcc编译过程

  • 预处理:头文件包含、宏替换、条件编译、删除注释。
  • 编译:词法、语法、语义分析,检查无误后编译成汇编文件。
  • 汇编:将汇编文件转换成二进制目标文件。
  • 链接:将各个二进制文件+库文件+启动代码链接成可执行文件。

逻辑短路

执行逻辑运算时,如果能够确定整个表达式的结果,就不再继续计算表达式的其余部分。

  • 逻辑与 (&&) 的短路:当使用 && 运算符时,如果第一个操作数为假(false),则整个表达式的结果已经确定为假,因此不会计算第二个操作数。
  • 逻辑或 (||) 的短路:当使用 || 运算符时,如果第一个操作数为真(true),则整个表达式的结果已经确定为真,因此不会计算第二个操作数。

好处:

  • 避免不必要的计算:如果表达式的结果已经确定,就不需要执行后续的计算,这可以提高程序的效率
  • 防止潜在的错误:例如,在数组索引检查中,如果第一个条件已经满足,就不需要执行可能引发越界的第二个条件检查。
  • 简化代码逻辑:有时候可以利用逻辑短路来简化复杂的条件判断。

单片机

UARTIICSPI通信协议

串口协议:串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成 本,特别适用于远距离通信,但传送速度较慢。

  • 是设备间接线通信的一种方式。
  • 数据一位一位地顺序传送。
  • 双向通信,全双工(两条线,一条发送数据(TX),一条接收数据(RX))。
  • 传送速度相对较慢。

IIC协议:集成电路总线;是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式(只有一根双向的数据线SDA)。

  • 简单性和有效性:由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。

  • 多主控(multimastering):任何能够进行发送和接收的设备都可以成为主总线。

  • IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控 器件产生。

SPI协议:串行外设接口;是一种高速的,全双工,同步的通信总线。

  • MISOMaster Input Slave Output,主设备数据输入,从设备数据输出。
  • MOSIMaster Output Slave Input,主设备数据输出,从设备数据输入。
  • SCKSerial Clock,时钟信号,由主 设备产生。
  • CSChip Select,片选信号,由主设备控制。

网络编程

arp欺骗

发送真实的目的ip和目的mac但源ip和源mac是假的arp应答包。

字节序

字节序是多字节数据在内存中的存放顺序,大端(高字节放在低地址);小端(低字节放在低地址)。

系统编程

上下文

上下文信息是CPU执行程序时所需的状态信息集合,包括寄存器状态、程序计数器、堆栈信息等,它允许操作系统管理进程切换、中断处理和系统调用。

上下文切换是操作系统在不同进程或任务之间保存和加载这些状态信息的过程,尽管它对系统性能有影响,但对于多任务处理和响应中断是必不可少的。

数据库

数据结构与算法

其他

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/843805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高通Android 12/13打开省电模式宏开关

1、添加到SettingsProvider配置项宏开关 默认节电助手自动开启百分比battery saver frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java private void loadGlobalSettings(SQLiteDatabase db) {在该方法中添加 ......final i…

人脸识别--DeepFace(五)

DeepFace 是由 Facebook 于 2014 年开发的一种深度学习模型,用于人脸识别和验证。它是当时最先进的人脸识别系统之一,展示了深度学习在计算机视觉任务中的巨大潜力。DeepFace 的主要贡献在于它使用了深度卷积神经网络(CNN)来学习人…

亚信安慧AntDB数据库与华为数据存储完成兼容性互认证

迎接数智时代,供给核心科技。日前,湖南亚信安慧科技有限公司(简称:亚信安慧)与华为技术有限公司(简称:华为),完成了AntDB数据库产品与OceanProtect备份一体机及Oceanstor…

一千题,No.0036(D进制的A+B)

输入两个非负 10 进制整数 A 和 B (≤230−1)&#xff0c;输出 AB 的 D (1<D≤10)进制数。 输入格式&#xff1a; 输入在一行中依次给出 3 个整数 A、B 和 D。 输出格式&#xff1a; 输出 AB 的 D 进制数。 输入样例&#xff1a; 123 456 8输出样例&#xff1a; 1103…

【算法】位运算算法——丢失的数字

题解&#xff1a;丢失的数字(位运算算法) 目录 1.题目2.题解3.位运算异或4.总结 1.题目 题目链接&#xff1a;LINK 2.题解 哈希数组查漏高斯求和排序位运算异或… 3.位运算异或 class Solution { public:int missingNumber(vector<int>& nums) {int ret 0;for…

Bash Bug(破壳漏洞,Shellshock) - CVE-2014-6271

Shellshock 在本文中&#xff0c;我们将深入探讨2014年发现的破壳漏洞&#xff08;CVE-2014-6271&#xff09;&#xff0c;这是一个影响Unix和类Unix系统的Bash&#xff08;Bourne Again SHell&#xff09;的重大安全漏洞。我们将讨论这个漏洞的工作原理&#xff0c;展示如何复…

界面组件Kendo UI for Angular教程 - 构建强大的PDF阅读器(二)

如今当用户需要处理PDF文件时&#xff0c;通常不得不下载应用程序或者浏览器插件&#xff0c;控制用户如何与PDF交互并不是一件容易的事。如果我们提供PDF作为内容&#xff0c;用户可以下载它并使用浏览器或PDF本身提供的控件进行交互。然而&#xff0c;一些企业可能希望控制用…

从入门到精通:Linux进程控制

在计算机操作系统中&#xff0c;进程&#xff08;Process&#xff09;是一个非常重要的概念。进程控制是操作系统的核心功能之一&#xff0c;对于Linux操作系统尤其如此。本文将详细介绍Linux操作系统中的进程控制&#xff0c;从入门到精通&#xff0c;涵盖进程的创建、终止、等…

咖啡看书休闲时光404错误页面源码

源码介绍 咖啡看书休闲时光404错误页面源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 源码效果 源码下载 咖啡看书…

Java中的多态性:理解和应用面向对象的核心概念

多态性是面向对象编程&#xff08;OOP&#xff09;的核心概念之一&#xff0c;在Java中扮演着至关重要的角色。多态允许对象采取多种形式&#xff0c;增强了程序的灵活性和可扩展性。本文将深入探讨Java中的多态性&#xff0c;包括其定义、工作原理&#xff0c;以及如何在实际编…

QT:协议概述

文章目录 概念帧结构&#xff1a;通信流程 示例&#xff1a;请求帧&#xff1a;响应帧&#xff1a; 概念 帧结构&#xff1a; | SOF (1 byte) | Frame Length (1 byte) | Command (1 byte) | Data Field (N bytes) | Checksum (1 byte) | 通信流程 示例&#xff1a; 请求帧&a…

电解式模具清洗机清洗模具的特点

电解式模具清洗机的特点可以归纳如下&#xff1a; 清洗效果显著&#xff1a; 电解式模具清洗机能够对模具进行深度清洁&#xff0c;有效去除模具表面的污垢、油污、除锈、硫化物、塑胶积碳等&#xff0c;使模具恢复原有的光洁度。清洗前后对比明显&#xff0c;模具更加光亮&am…

守护景区安全:探讨景区视频监控方案的搭建及必要性

据新闻报道&#xff0c;5月25日&#xff0c;安徽黄山景区内发生雷击&#xff0c;闪电击中飞来石景点的护栏&#xff0c;多人被碎石砸中受伤。景区工作人员表示&#xff0c;飞来石附近本就属于雷区&#xff0c;当天曾发过两次雷电预警。 随着旅游业的繁荣发展&#xff0c;越来越…

SpaceX间接「颠覆」了手机?星链如何直连手机通信?

SpaceX 旗下的星链项目推出了一个极具颠覆性的技术——direct to cell&#xff08;DTC&#xff09;&#xff0c;即通过卫星直接与手机建立通信。这项技术无需对手机进行任何改装&#xff0c;大多数普通手机都可以直接接入星链的卫星网络&#xff0c;实现全球范围内的手机信号覆…

MySQL:将空字符串改为NULL

在关系性数据库中Oracle&#xff0c;MySQL&#xff0c;MssSQL中&#xff0c;空字符串()和NULL是两个概念 空字符串顾名思义代表是一个为空的字符串&#xff0c;并不是没有值&#xff0c;而NULL代表没有值或未知值 所以有很多小伙伴&#xff0c;使用IFNULL&#xff0c;ISNULL&…

如何从异步调用中返回响应

想象一下,你打电话给朋友并让他帮你查一些资料。虽然这可能需要一段时间,但你会在电话里等待,直到朋友给你需要的答案。这就是同步调用的行为: function findItem() {var item;while (item_not_found) {// 查找}return item; }var item = findItem(); // 使用 item doSome…

一个 ComfyUI 节点,它使用 的 LLMs 功能对您的输入执行任何操作以进行任何类型的输出-anynode

网址 https://github.com/lks-ai/anynode 一个 ComfyUI 节点&#xff0c;它使用 的 LLMs 功能对您的输入执行任何操作以进行任何类型的输出。

c#对操作系统的时间无法更新?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Linux 共享内存

Linux 共享内存 1. shmget函数2. shmat函数3. shmdt函数4. shmctl函数5. 注意&#xff1a; 多线程共享进程的地址空间&#xff0c;如果多个线程需要访问同一块内存&#xff0c;用全局变量就可以了。 在多进程中&#xff0c;每个进程的地址空间是独立的&#xff0c;不共享的&am…

152.找出峰值(力扣)

代码解决 class Solution { public:// 函数用于找到山峰元素的索引vector<int> findPeaks(vector<int>& mountain) {vector<int> result; // 用于存储山峰元素的索引// 遍历数组&#xff0c;从第二个元素到倒数第二个元素for(int i 1; i 1 < mount…