嵌入式开发面试问题总结(持续更新)
面试问题总结
c/c++
封装、继承和多态
- 封装:将属性和方法封装起来,并加以权限区分。
- 继承:子类继承父类的特征和行为,复用了从基类复制而来的数据成员和成员函数(基类私有成员无法被访问),其中构造函数、析构函数、友元函数、静态数据成员、静态成员函数都不能被继承,提高了代码的复用率。(虚继承解决菱形继承问题)。
- 多态:同一种类型的对象在不同的情况下表现出不同的行为。简单来说,就是同一个方法在不同的对象上可以有不同的实现。
1G内存这个可以malloc 1.2G空间?为什么?
malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。
单例模式
单例模式 (Singleton): 保证一个类只有一个实例(懒汉式,饿汉式)。
类模板和函数模板
在c++17之前类模板支持自动类型推导,函数模板不支持自动类型推导。
自动类型转换和自动类型推导
- 自动类型转换:在某些情况下,编译器会自动将一个类型转换为另一个类型。这种转换也称为隐式类型转换。
- 数值类型之间的隐式类型转换。
- 派生类指针和基类指针之间的隐式类型转换。
- 用户自定义类型(类单个参数的构造函数)。
- 自动类型推导:自动类型推导是指编译器根据表达式的上下文来推断变量的类型。
虚析构和纯虚析构
关键字virtual,纯虚析构函数必须要提供函数体,纯虚析构会使基类是抽象类,不能实例化对象。
缺省参数
缺省参数是指在定义函数时给某个参数设置一个默认值,当函数被调用时,如果没有传递该参数,就会使用默认值。调用时只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数。
sizeof 和 strlen 的区别
sizeof是一个操作符,strlen是库函数。sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0‘的字符串作参数。- 如果
strlen函数调用的字符串没有以'\0'结尾,那么该函数的行为是未定义的。
- 如果
- 编译器在编译时就计算出了
sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。 - 数组做
sizeof的参数不退化,传递给strlen就退化为指针了。- 对于一个空的类,里面没有任何成员和变量和函数,对该类的实例求
sizeof得到的结果是1,本来应该是0,但是必须在内存中占有一定空间,至于占多少内存由编译器决定,大部分都是1。 - 如果在类中添加构造函数和析构函数仍然是
1。 - 如果把析构函数标记为虚函数,就会在实例中添加一个指向虚函数表的指针,所以大小是
4或者8。
- 对于一个空的类,里面没有任何成员和变量和函数,对该类的实例求
gcc编译过程
- 预处理:头文件包含、宏替换、条件编译、删除注释。
- 编译:词法、语法、语义分析,检查无误后编译成汇编文件。
- 汇编:将汇编文件转换成二进制目标文件。
- 链接:将各个二进制文件+库文件+启动代码链接成可执行文件。
逻辑短路
执行逻辑运算时,如果能够确定整个表达式的结果,就不再继续计算表达式的其余部分。
- 逻辑与 (
&&) 的短路:当使用&&运算符时,如果第一个操作数为假(false),则整个表达式的结果已经确定为假,因此不会计算第二个操作数。 - 逻辑或 (
||) 的短路:当使用||运算符时,如果第一个操作数为真(true),则整个表达式的结果已经确定为真,因此不会计算第二个操作数。
好处:
- 避免不必要的计算:如果表达式的结果已经确定,就不需要执行后续的计算,这可以提高程序的效率。
- 防止潜在的错误:例如,在数组索引检查中,如果第一个条件已经满足,就不需要执行可能引发越界的第二个条件检查。
- 简化代码逻辑:有时候可以利用逻辑短路来简化复杂的条件判断。
单片机
UART、IIC和SPI通信协议
串口协议:串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成 本,特别适用于远距离通信,但传送速度较慢。
- 是设备间接线通信的一种方式。
- 数据一位一位地顺序传送。
- 双向通信,全双工(两条线,一条发送数据(
TX),一条接收数据(RX))。 - 传送速度相对较慢。
IIC协议:集成电路总线;是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式(只有一根双向的数据线SDA)。
-
简单性和有效性:由于接口直接在组件之上,因此
IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。 -
多主控(
multimastering):任何能够进行发送和接收的设备都可以成为主总线。 -
IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控 器件产生。
SPI协议:串行外设接口;是一种高速的,全双工,同步的通信总线。
MISO–Master Input Slave Output,主设备数据输入,从设备数据输出。MOSI–Master Output Slave Input,主设备数据输出,从设备数据输入。SCK–Serial Clock,时钟信号,由主 设备产生。CS–Chip Select,片选信号,由主设备控制。
网络编程
arp欺骗
发送真实的目的ip和目的mac但源ip和源mac是假的arp应答包。
字节序
字节序是多字节数据在内存中的存放顺序,大端(高字节放在低地址);小端(低字节放在低地址)。
系统编程
上下文
上下文信息是CPU执行程序时所需的状态信息集合,包括寄存器状态、程序计数器、堆栈信息等,它允许操作系统管理进程切换、中断处理和系统调用。
上下文切换是操作系统在不同进程或任务之间保存和加载这些状态信息的过程,尽管它对系统性能有影响,但对于多任务处理和响应中断是必不可少的。
数据库
数据结构与算法
其他
相关文章:
嵌入式开发面试问题总结(持续更新)
面试问题总结 c/c 封装、继承和多态 封装:将属性和方法封装起来,并加以权限区分。继承:子类继承父类的特征和行为,复用了从基类复制而来的数据成员和成员函数(基类私有成员无法被访问),其中构…...
意外发现openGauss兼容Oracle的几个条件表达式
意外发现openGauss兼容Oracle的几个条件表达式 最近工作中发现openGauss在兼容oracle模式下,可以兼容常用的两个表达式,因此就随手测试了一下。 查看数据库版本 [ommopenGauss ~]$ gsql -r gsql ((openGauss 6.0.0-RC1 build ed7f8e37) compiled at 2…...
使用Keepalived提高吞吐量和负载均衡ip_hash.
一 . Nginx使用Keepalived提高吞吐量案例 Keepalived[表示把连接保持一定长连接数来提高吞吐量] 1.1没有使用keepalived参数 upstream tomcats {server 192.168.28.102:8080; } server {listen 88;server_name www.tomcats.com;location / {proxy_pass http://to…...
网络故障与排除(一)
一、Router-ID冲突导致OSPF路由环路 路由器收到相同Router-ID的两台设备发送的LSA,所以查看路由表看到的OSPF缺省路由信息就会不断变动。而当C1的缺省路由从C2中学到,C2的缺省路由又从C1中学到时,就形成了路由环路,因此出现路由不…...
C++之运算符重载
1、运算符重载 //Complex.h #ifndef _COMPLEX_H_ #define _COMPLEX_H_class Complex { public:Complex(int real_, int imag_);Complex();~Complex();Complex& Add(const Complex& other); void Display() const;Complex operator(const Complex& other);privat…...
使用springdoc-openapi-starter-webmvc-ui后访问swagger-ui/index.html 报错404
按照官网说明,引入 springdoc-openapi-starter-webmvc-ui后应该就可以直接访问swagger-ui.html或者swagger-ui/index.html就可以出现swagger页面了,但是我引入后,访问提示报错404. 在我的项目中,有其他依赖间接引入了org.webjars…...
深入理解计算机系统 家庭作业4.52
练习题4.3 p.254 \sim\seq\seq-full.hcl文件内已经说的很清楚了哪些不能更改,哪些是题目要求更改的控制逻辑块. 依据家庭作业4.51的答案,在seq-full.hcl文件内更改对应的HCL描述即可 以下答案注释了#changed的就是更改部分 #/* $begin seq-all-hcl */ ######################…...
深度学习:手撕 RNN(2)-RNN 的常见模型架构
本文首次发表于知乎,欢迎关注作者。 上一篇文章我们介绍了一个基本的 RNN 模块。有了 这个 RNN 模块后,就像搭积木一样,以 RNN 为基本单元,根据不同的任务或者需求,可以构建不同的模型架构。本节介绍的所有结构&#…...
【Linux进程篇】Linux进程管理——进程创建与终止
W...Y的主页 😊 代码仓库分享💕 目录 进程创建 fork函数初识 写时拷贝 fork常规用法 fork调用失败的原因 进程终止 进程退出场景 _exit函数 exit函数 return退出 进程创建 fork函数初识 在linux中fork函数时非常重要的函数,它从已…...
Python爬虫实战(实战篇)—17获取【CSDN某一专栏】数据转为Markdown列表放入文章中
文章目录 专栏导读背景结果预览1、页面分析2、通过返回数据发现适合利用lxmlxpath3、进行Markdown语言拼接总结 专栏导读 在这里插入图片描述 🔥🔥本文已收录于《Python基础篇爬虫》 🉑🉑本专栏专门针对于有爬虫基础准备的一套基…...
Go语言-big.Int
文章目录 Go 语言 big.Int应用场景:大整数位运算使用举例: go sdk中crypto/ecdsa 椭圆曲线生成私钥相关结构中就有使用 Go 语言 big.Int Go 语言 big.Int 参考URL: https://blog.csdn.net/wzygis/article/details/82867793 math/big 作为 Go 语言提供的…...
getContentView(mBinding.getRoot()); 会导致内存泄露吗?里面有SurfaceView ViewBinding
在上述代码中,ActivityTestingBinding 是一个 Data Binding 库生成的类,用于绑定 XML 布局到 Activity 中。inflate(getLayoutInflater()) 用于将布局文件解析并转换为对应的视图层次结构。然后 getWindow().setFlags() 设置窗口属性,保持屏幕…...
基于transformers框架实践Bert系列6-完形填空
本系列用于Bert模型实践实际场景,分别包括分类器、命名实体识别、选择题、文本摘要等等。(关于Bert的结构和详细这里就不做讲解,但了解Bert的基本结构是做实践的基础,因此看本系列之前,最好了解一下transformers和Bert…...
cesium绘制编辑区域
npm 安装也是可以的 #默认安装最新的 yarn add cesium#卸载插件 yarn remove cesium#安装指定版本的 yarn add cesium1.96.0#安装指定版本到测试环境 yarn add cesium1.96.0 -D yarn install turf/turf token记得换成您自己的!!! <t…...
数据库攻防之MySQL
MySQL 是最流行的关系型数据库,与此同时也是 web 应用中最好的关系型数据库管理应用软件。我们在渗透过程中碰到的 PHP 站点大部分都会搭配 MySQL 数据库,因此它是红队攻防中最常遇到的数据库。 0x01 MySQL简介 MySQL 是典型的关系型数据库,…...
八国多语言微盘微交易所系统源码 单控点控 K线完好
安装环境linux NGMySQL5.6PHP7.2(函数全删)pm2管理器(node版本选择v12.20.0) config/ database.php 修改数据库链接 设置运行目录 public 伪静态thinkphp...
爪哇,我初学乍道
>>上一篇(学校上课,是耽误我学习了。。) 2016年9月,我大二了。 自从我发现上课会耽误我学习,只要我认为不影响我期末学分的,我就逃课了。 绝大多数课都是要签到的,有的是老师突击喊名字…...
【MySQL精通之路】全文搜索(5)-限制
主博客:【MySQL精通之路】全文搜索功能-CSDN博客 全文搜索仅支持InnoDB和MyISAM表。 分区表不支持全文搜索。参见“分区的限制和限制”。 全文搜索可用于大多数多字节字符集。 例外的是,对于Unicode,可以使用utf8mb3或utf8mb4字符集ÿ…...
动态规划part03 Day43
LC343整数拆分(未掌握) 未掌握分析:dp数组的含义没有想清楚,dp[i]表示分解i能够达到的最大乘积,i能够如何分解呢,从1开始遍历,直到i-1;每次要不是j和i-j两个数,要不是j和…...
Activity->Activity生命周期和启动模式
<四大组件 android:name"xxx"android:exported"true" // 该组边能够被其他组件启动android:enabled"true" // 该组件能工与用户交互 </四大组件>Activity常用生命周期 启动Activity 2024-05-29 03:53:57.401 21372-21372 yang …...
告别目标跟丢!手把手教你用BoT-SORT和OpenCV GMC搞定复杂场景下的多目标跟踪
告别目标跟丢!手把手教你用BoT-SORT和OpenCV GMC搞定复杂场景下的多目标跟踪 在智能监控和自动驾驶等实际应用中,多目标跟踪(MOT)技术常常面临动态相机和目标快速移动带来的挑战。传统算法在目标遮挡、镜头晃动等复杂场景下容易出…...
Qwen2.5-Coder-1.5B应用案例:快速生成网页爬虫代码实战
Qwen2.5-Coder-1.5B应用案例:快速生成网页爬虫代码实战 1. 引言:为什么选择Qwen2.5-Coder生成爬虫代码 在日常开发工作中,网页爬虫是数据采集和分析的重要工具。传统编写爬虫代码需要开发者熟悉HTTP请求、HTML解析、反爬机制处理等多个技术…...
LiuJuan Z-Image效果对比展示:BF16 vs FP16在人像细节与稳定性上的差异
1. 1. 1. 1. 1. 1. 1. 1. 1. 概述 1. 1. 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1…...
Java医疗系统通过等保三级测评前,这8个高危漏洞必须在72小时内闭环(附OWASP Top 10映射清单)
第一章:医疗Java系统等保三级合规性基线与高危漏洞判定标准在医疗行业,Java系统承载着电子病历、HIS、LIS、PACS等核心业务,其安全合规性直接关系患者隐私与公共健康。等保三级要求系统具备完善的身份鉴别、访问控制、安全审计、入侵防范及可…...
HY-MT1.5-1.8B助力内容本地化:一键翻译33种语言,保留原文格式
HY-MT1.5-1.8B助力内容本地化:一键翻译33种语言,保留原文格式 1. 引言 1.1 多语言翻译的挑战与机遇 在全球化的数字时代,内容本地化已成为企业出海、文化交流和技术传播的关键环节。传统翻译工具往往面临三大痛点:语言覆盖有限…...
Python多线程/多进程内存爆炸真相:GIL锁外的隐性开销、共享对象深拷贝黑洞与零拷贝迁移方案
第一章:Python智能体内存管理策略入门导论Python智能体(如基于LLM的Agent、ReAct架构或Tool-Calling系统)在运行过程中频繁创建、传递与销毁对象,其内存行为远超普通脚本应用。理解CPython底层的引用计数、循环垃圾回收࿰…...
Java 企业级应用:基于 SpringBoot 集成 Pixel Dream Workshop 构建内容中台
Java 企业级应用:基于 SpringBoot 集成 Pixel Dream Workshop 构建内容中台 1. 企业内容中台的业务场景与挑战 现代企业面临内容生产的三大痛点:创意产出效率低、设计资源不足、多平台适配成本高。以电商行业为例,一个中型电商平台每月需要…...
Transformer解码器实战:用PyTorch手写Masked Self-Attention(附避坑指南)
Transformer解码器实战:用PyTorch手写Masked Self-Attention(附避坑指南) 1. 为什么需要Masked Self-Attention 在文本生成任务中,模型需要遵循自回归特性——即生成当前词时只能依赖已生成的词。想象你正在玩文字接龙游戏&#x…...
智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制
智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制 1. 项目概述 Anything to RealCharacters 2.5D转真人引擎是一款专为RTX 4090显卡优化的图像转换系统,能够将卡通、二次元、2.5D风格的图像高质量转换为写实真人照片。该系统…...
手把手教你用Verilog写一个纯组合逻辑的FP32加法器(附完整代码与避坑指南)
手把手教你用Verilog实现纯组合逻辑FP32加法器(附完整代码与避坑指南) 在数字电路设计中,浮点运算单元一直是性能优化的关键路径。相比时序逻辑实现,纯组合逻辑的FP32加法器能在一个时钟周期内完成所有计算,显著提升吞…...
