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

嵌入式八股(持续更新)

嵌入式八股(持续更新)

一、C++

1. inline和宏定义的区别:

  • inline是一个关键字,是建议编译器直接将函数体插入到调用处,避免频繁调用函数造成的开销;inline只是建议,是否将函数内联需要编译器自己判断函数是否复杂等情况;一般用于频繁调用的简单函数;
  • 宏定义:是预处理指令集,在编译前进行文本替换,不会进行类型检查;

2. malloc/free和new/delete的区别
malloc和new都用于动态内存管理,但是他们属于不同的机制;

  • malloc/free:是C标准库函数,返回的是void*,需要强制类型转换;不会调用构造函数和析构函数;
  • new/delete:是C++运算符,C++特有,自动返回正确类型的指针;自动调用构造函数和析构函数;

3. 空指针、野指针如何避免?

  • 空指针是创建一个指针但是没有指向任何内容,是一个合法的操作;一般用于指针初始化;
  • 野指针是指向的内容是不可预测或无效的;避免的话,首先就是指针指向的内存删除后,将指针删除或者nullptr;其次可以使用智能指针或者RAII方法;

4. struct和union的区别?

  • struct和union都是结构体,允许将多个数据类型组合在一起;
  • struct会为每一个对象都分配一个内存空间,允许一次使用多个对象;
  • union所有对象共用同一块内存(内存总量即为最大对象的内存空间),每次只能使用一个对象;

5. 什么是工厂模式?

  • 工厂模式就是将类的创建和使用分离,通过构造一个工厂抽象类,由该类来生产对象,用户只需要提供要使用的类型即可;

6. vector和list的底层逻辑

  • vector是一个封装了动态数组的类,包含3个指针,分别指向头、要插入的位置指针以及最大内存指针;
  • list的底层是双向链表,适合频繁的插入,但是不适合随机访问;

7. 动态链接/静态链接

  • 静态链接时在编译的时候就将依赖库的代码一起编译进入最终的可执行文件中;可执行文件大;不依赖于外部的库文件;
  • 动态链接是在程序运行的过程中才加载所需要的库代码,依赖共享库;可执行文件小,依赖外部库文件;

8. 函数重载和函数重写的区别?

  • 函数重载就是在同一个作用域中定义函数名相同,但是输入输出参数不同的函数,这样我们在访问这些函数的时候只需要不同的输入参数即可区分;
  • 函数重写就是实现多态时候用到的方法,基类中父函数必须为虚函数,子类中通过覆盖重写父函数;

9. 编译流程

  • 预处理:对宏定义、头文件库以及预处理条件进行预处理(.i)
  • 编译:将预处理后的代码编译为汇编语言(.s)
  • 汇编:将汇编语言转为机器码(.o)
  • 链接:将多个.o文件以及库文件链接到一起

10. 长连接、短链接?

  • 短链接就是客户端与服务器进行通信,每次通信完成后都断开连接;
  • 长连接是通信后不断开连接,只到一方主动断开;

11. vector的数据储存在栈上还是堆上?

  • vector的元数据(指针、容量、指向堆内存的指针)储存在栈上、数组的具体元素储存在堆上

12. C++智能指针的了解?weak_ptr的用处?shared_ptr循环引用问题?

  • C++智能指针就是创建的指针使其在生命周期结束后自动销毁的技术(RAII),避免内存泄漏;类别包括shared_ptr、unique_ptr以及weak_ptr;
  • shared_ptr会出现循环引用的逻辑闭环错误,即两个对象都持有对方的shared_ptr指针,这样这两个指针永远也无法销毁;
  • 解决办法就是一个使用shared_ptr(强引用),一个使用weak_ptr(弱引用);

13. linux调度策略?cfs?

  • linux目前主要流行的调度策略为(CFS,Completely Fair Scheduler)完全公平调度器,用于普通非实时的进程;
  • 原理:调度器会为每一个进行设置一个虚拟运行时间(vruntime),表示该进程已经运行的时间,调度器每次都会选择vruntime最小的进程来运行,来保证公平性;

14. 对上下文切换的理解?如何通过代码优化来减少频繁的上下文切换开销?

  • 上下文切换是操作系统调度的基本机制,但在高并发场景中会造成明显性能损耗。我们可以通过减少线程数或线程池、降低锁竞争(避免频繁的阻塞)、使用协程、优化系统调用等方式来显著减少上下文切换带来的开销;

15. 对于linux内存管理的了解?对虚拟内存的了解?

  • Linux 的内存管理机制是操作系统中最核心、最复杂的部分之一。它负责高效地分配、回收和保护进程使用的内存资源,同时提供虚拟内存、分页机制、缓存管理等功能;
  • 虚拟内存是物理内存的映射,为了使进程看到的内存空间是连续的,其通过页表完成地址转换;

16. poll/select/epoll的区别?

17. OSI七层模型?

  • (物理层->链路层)->网络层->传输层->(会话层->表示层->应用层)
  • TCP四层模型:网络接口层->网络层->传输层->应用层;
  • 对应协议:物理层(以太网,MAC等);网络层(IP);传输层(TCP、UDP);应用层(HTTP、FTP等);
http://www.dtcms.com/a/286264.html

相关文章:

  • 【算法训练营Day14】二叉树part4
  • windows终端美化(原生配置+Oh My Posh主题美化)
  • 客诉:危机到信任的重建
  • Flutter 应用如何设计通知服务
  • Flutter——Android原生View是如何通过Flutter进行加载
  • 2025年Flutter开发主流技术栈
  • Flutter 多语言(国际化)入门教程
  • 企业如何让内部视频仅限公司官网或指定域名播放?
  • 低代码开发实践博客
  • C++语法 匿名对象 与 命名对象 的详细区分
  • IDEA 中 Maven 配置:当前项目与新项目的统一设置方法
  • 【Docker基础】Docker Compose核心配置文件深度解析:从YAML语法到高级配置
  • 【数据结构】栈的深入解析--用C语言实现
  • Linux 环境下 NNG 通讯库:在嵌入式设备上应用
  • [2025CVPR-目标检测方向] CorrBEV:多视图3D物体检测
  • Docker 与 GPU 训练
  • 排序【各种题型+对应LeetCode习题练习】
  • 线程控制:互斥与同步
  • IDEA高效开发:Database Navigator插件安装与核心使用指南
  • Python趣味算法:抓交通肇事犯(车牌号谜题解析)
  • nginx定制http头信息
  • 腾讯云云服务器深度介绍
  • 面试150 克隆图
  • 通缩期的 “反脆弱” 研发:新启航逆势投入 30% 营收突破 3D 白光干涉测量技术
  • 深孔加工的方法及检测方法探究 —— 激光频率梳 3D 轮廓检测
  • 29、鸿蒙Harmony Next开发:深浅色适配和应用主题换肤
  • 计算机网络基础:从协议到通信全解析(大致框架)
  • 基于 WinForm 与虹软实现人脸识别功能:从理论到实践
  • VisualXML全新升级 | 新增BusLoad计算
  • python控制linux命令反馈