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

嵌入式-C++面经1

一、问题总览

1.1 HR面

1.自我介绍
2.有什么兴趣爱好?
3.平时如何提高代码能力?
4.你说会刷题,平时用什么软件刷题?
5.期望薪资
6.未来有什么规划。

1.2 专业一面

1.详细讲讲 reactor模式的概念。
2.熟悉哪些设计模式?
3.递归是什么,递归是怎么实现的
4.继承,多态的作用。
5.虚函数。
6.了解内存分区吗,详细讲一下
7.static关键字
8.vector、list、deque 对比,什么时候使用?
9.讲讲智能指针
10.哪些手段可以避免死锁?
11.进程间通信有哪些方式

1.3 专业二面

1.虚函数,虚函数表
2.智能指针
3.C++STL
4.了解linux吗
5.数据库相关的知识
6.TCP
7.设计模式


二、HR面

3.平时如何提高代码能力?

答:
1.吃透核心概念、掌握数据结构与算法
2.读优质源码,模仿经典实现
3.多场景编码,适应不同需求
4.重视代码规范
5.学会调试与排错:掌握调试工具(GDB、VS Code Debugger),设置断点、查看调用栈、监控变量变化
6.参与真实项目,主动优化旧代码
7.输出倒逼输入:写技术博客、做分享、教别人编程,能帮你梳理知识漏洞


三、专业一面

1.详细讲讲 reactor模式的概念。

答:

  • 定义
    Reactor 模式(反应堆模式)是一种事件驱动(Event-Driven)的并发编程模式,其核心思想是通过一个事件循环(Event Loop) 监听并分发事件,将 I/O 操作与业务逻辑解耦,从而提高系统的响应速度和资源利用率。
  • 核心概念与组件:
    1.事件源(Event Source)
    2.事件多路分发器(Event Multiplexer)
    3.事件处理器(Event Handler)
    4.反应器(Reactor)
  • 工作流程:
    Reactor 模式的典型执行流程如下:
    初始化:Reactor 注册事件源(如 Socket)和对应的事件处理器(如 “接收连接”“读取数据”)。
    事件循环:Reactor 启动事件多路分发器,阻塞等待事件源就绪(如客户端连接请求、数据到达)。
    事件触发:当某个事件源就绪(如 Socket 可读),事件多路分发器将其标记为就绪状态。
    事件分发:Reactor 根据就绪事件,找到对应的事件处理器,调用其处理方法(如handleRead())。
    业务处理:事件处理器执行具体业务逻辑(如解析数据、处理请求),期间可能触发新的事件(如 “写响应”),并再次注册到 Reactor 中。

2.熟悉哪些设计模式?

答:
设计模式的分类(经典 23 种)
1.单例模式(Singleton):保证一个类仅有一个实例,并提供全局访问点(如日志工具、配置管理器)。
2.工厂模式(Factory):通过工厂类统一创建对象,避免直接使用new,降低耦合(如不同数据库的连接工厂)。

3.递归是什么,递归是怎么实现的

答:
递归指函数直接或间接调用自身来解决问题的方式

实现原理:
递归的底层依赖函数调用栈实现,每次递归调用都会触发以下步骤:

  • 1.压栈(Push):
    当函数调用自身时,系统会在栈中为新的函数调用创建一个栈帧(Stack Frame),存储当前函数的参数、局部变量和返回地址(即调用结束后回到哪里继续执行)。
  • 2.递归执行:
    新的函数调用开始执行,若未达到基线条件,会继续压栈并调用自身,直到某个调用触发基线条件。
  • 3.出栈(Pop):
    当函数达到基线条件并返回结果时,对应的栈帧会被弹出,结果传递给上一层调用,依次向上直到最外层函数返回最终结果。

优点:代码简洁直观
缺点
栈溢出风险:递归深度过大会导致栈帧过多,超出栈的最大容量
效率问题:频繁的栈操作和重复计算(如未优化的斐波那契递归)会导致性能损耗。

4.继承,多态的作用。

答:
继承和多态是面向对象编程(OOP)的两大核心特性,它们共同作用于代码的复用性、扩展性和灵活性

  • 继承的作用
    继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,并可以在此基础上添加新的属性或重写父类方法。其核心价值在于代码复用和建立类之间的层次关系。

    1. 代码复用,减少重复
    2. 为多态奠定基础
  • 多态的作用
    多态是指同一操作作用于不同对象时,产生不同的执行结果。其核心是 “接口复用”,通过统一的接口实现不同的具体逻辑,降低代码耦合度。

    1. 统一接口,简化调用
    2. 提高代码扩展性
  • 继承与多态的协同作用
    继承让子类共享基础逻辑,避免重复劳动;
    多态让父类接口可以适配各种子类实现,使系统易于扩展和维护。

继承:核心是 “复用”,通过层级关系让子类共享父类功能,减少重复代码。
多态:核心是 “扩展”,通过统一接口适配不同实现,使代码更灵活、易扩展。

5.虚函数。

答:
虚函数是 C++ 中实现多态的核心机制,它允许子类重写父类的方法,使得通过父类指针或引用调用方法时,能自动执行子类的具体实现。

6.了解内存分区吗,详细讲一下


在程序运行时,操作系统会将内存划分为不同区域(分区),每个区域有特定的用途、生命周期和访问规则。

  • 从低地址到高地址,内存通常分为以下几个区域:
    代码区 → 常量区 → 全局/静态存储区 → 堆区 → 栈区 → 内核区
    (不同系统的地址分布可能略有差异,但逻辑分区一致)

7.static关键字

答:
static 是 C/C++ 中一个多功能的关键字,可用于修饰变量、函数和类成员,其核心作用是控制作用域、生命周期或链接属性。

  • 在函数内部用 static 修饰的变量,称为局部静态变量。
  • 在函数外部用 static 修饰的变量,称为全局静态变量。
  • 用 static 修饰的函数,称为静态函数。

8.vector、list、deque 对比,什么时候使用?

img

9.讲讲智能指针

答:

  1. 智能指针是 C++ 中用于自动管理动态内存的类模板,其核心作用是避免手动调用delete释放内存时可能出现的内存泄漏、double free(重复释放)等问题。
  2. 智能指针通过RAII(资源获取即初始化) 机制,在对象生命周期结束时(如离开作用域)自动释放所指向的内存。

10.哪些手段可以避免死锁?

答:

  • 死锁是多线程 / 多进程并发编程中,多个线程因互相等待对方持有的资源而永久阻塞的问题。
  • 避免死锁的核心是破坏死锁产生的四个必要条件(互斥、持有并等待、不可剥夺、循环等待)

11.进程间通信有哪些方式

答:

  1. 匿名管道
  2. 命名管道
  3. 共享内存
  4. 消息队列
  5. 信号
  6. 信号量
  7. 套接字

http://www.hskmm.com/?act=detail&tid=29397

相关文章:

  • 合并区间 - MKT
  • 如何防止员工向第三方 AI 泄露数据?滤海 AI DLP 全方位技术防护方案解析
  • 20232322 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 实验1 现代c++编程初体验
  • 冬天快乐
  • P2441M 见过的 tricks
  • 企业大数据战略定位
  • OpenAI加码个性化消费AI技术布局
  • 线性回归 C++ 实现
  • 内存分区
  • Spring Data JPA学习笔记
  • P1112 波浪数 题解
  • 20232411 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 使用 Pascal 实现英文数字验证码识别系统
  • PWN手的成长之路-15-jarvisoj_level2_x64
  • 2025.10.12——1绿
  • 价值博弈场的工程实现:构建数字文明的价值免疫系统——声明Ai生成
  • 基于 Rust 的英文数字验证码识别系统设计与实现
  • 2025年两联供室内机厂家最新权威推荐榜:技术实力与市场口碑
  • 2025武汉商铺装修防水厂家最新权威推荐榜:专业施工与品质保
  • 2025铝合金微弧氧化厂家权威推荐榜:表面处理技术实力深度解
  • 2025杉木木方厂家最新权威推荐榜:优质木材与稳定供应口碑之
  • 2025年厂房保养厂家最新权威推荐榜:专业维护与成本控制优选
  • 使用C语言实现重写stm32的启动文件
  • 2025中医师承权威推荐榜:名师带徒与临床实践深度解析
  • 让我们开始 CSS 的学习之旅
  • 2025液压无损扒胎机厂家权威推荐榜:高效无损与耐用性能深度
  • Linux环境下的UDEV机制及其与守护进程的关联
  • 在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
  • [转] 基于ubuntu-base进行根文件系统的修改与打包