嵌入式秋招面经总结

 CPU、寄存器、缓存、内存概述

- CPU:中央处理器,执行指令的核心组件。
- 寄存器:CPU内部的临时存储空间,存放快速访问的数据。
- 缓存(Cache):在寄存器和内存之间的高速存储,分为三级(L1、L2、L3),速度和价格依次降低。
- 内存:主要存储程序和数据的地方。

数据访问流程
1. CPU首先在寄存器中查找数据。
2. 如果寄存器未命中,则检查缓存。
3. 如果缓存未命中,则从内存中获取数据。

内存区域
- 栈区:
  - 存放函数参数和局部变量。
  - 由编译器自动分配和释放,效率高,但内存量有限(如iOS中为2M)。
- 堆区:
  - 通过`new`、`malloc`等动态分配的内存。
  - 需要程序员手动释放,可能导致内存泄漏。
- 静态区:
  - 存放全局变量和静态变量。
  - 程序结束时由系统释放。
- 常量区:
  - 存放常量,不允许修改。
  
- 代码区:
  - 存放函数体的二进制代码。

类型说明符

- 基本类型:`void`、`char`、`short`、`int`、`long`、`signed`、`unsigned`、`float`、`double`、`struct`、`enum`、`union`。
- 存储类型:`extern`、`static`、`register`、`auto`、`typedef`。
- 类型限制符:`const`(只读)、`volatile`。

变量理解

- extern:指示变量在其他文件中定义。
- static:
  - 限制变量作用域。
  - 局部变量存入静态存储区,延长生存周期。
- register:将频繁使用的变量放入寄存器以提高效率。
- auto:C语言默认存储类型。
- typedef:给类型或变量表达式起别名。
- const:只读变量。
- volatile:
  - 防止编译器优化。
  - 适用于中断和多线程环境。

C程序内存分配

- 堆、栈、静态存储区、文件分配区(常量字符串)、程序分配区(二进制代码)。

 sizeof与strlen

- sizeof:关键字,返回类型或数组的字节大小。
- strlen:计算字符串长度,直到遇到`\0`。

 函数参数传递

- 值传递、引用传递、指针传递、数组地址传递。

Const、指针、基本类型组合的意义

- const int x:只读变量。
- const char *x:指向常量的指针,指针内容可变,指向内容不可变。
- char *const x:常量指针,指针内容不可变,指向内容可变。
- const char *const x:指针和内容均不可变。

 数组与指针

- 物理地址:内存单元的真实地址。
- 逻辑地址:CPU生成的地址。

 Linux进程间通信

- 管道(pipe)、信号量、消息队列、信号、共享内存、套接字。

 strcpy与memcpy区别

- strcpy:复制字符串。
- memcpy:复制指定长度的内存内容。

 内存泄漏与内存溢出

- 内存泄漏:未释放的内存,导致可用内存减少。
- 内存溢出:程序请求的内存大于可用内存。

 switch的变量类型限制

- 允许:整形、布尔、字符、枚举。
- 不允许:字符串等非基本类型。

 防止头文件重复调用

- 使用#ifndef和#pragma once。

 实时操作系统

- 示例:FreeRTOS、Ucos。

 指针数组与数组指针

- 指针数组:数组元素为指针。
- 数组指针:指向数组的指针。

 结构体自增与双重指针自增

- 自增从右向左进行。

 寄存器的使用

- 存储频繁调用的数据,减少内存访问。

 获取全局变量与局部变量地址(gdb)

- 使用backtrace或bt命令。

 进程中的同步与异步

- 同步:通过锁实现。
- 自旋锁:忙等待,不阻塞线程。
- 互斥锁:阻塞线程,等待资源释放。

进程与线程的关系与区别

- 进程:资源分配的基本单位,包含一个或多个线程。
- 线程:进程中的执行单位,最小调度单位。

树的遍历(递归与非递归)

- 中序遍历:左子树 - 根节点 - 右子树,利用堆栈进行进栈和出栈操作。

剩余的大佬面经总结了  链接在下边
全部评论

相关推荐

1. 如何在嵌入式系统中实现蓝牙通信?2. 使用RTOS如何处理任务间的共享资源?3. 如何通过I2S实现音频数据的传输?4. 在FreeRTOS中如何实现任务的延时机制?5. 如何通过SPI接口读取EEPROM的数据?6. 使用PWM控制直流电机的速度的基本原理?7. 如何在嵌入式系统中实现文件系统的支持?8. 使用ADC读取光敏电阻的值的步骤?9. 如何在嵌入式系统中实现低功耗模式?10. 使用中断实现脉冲计数器的功能?11. 如何在嵌入式系统中实现网络时间同步?12. 使用MQTT协议实现设备的远程控制?13. 如何在FreeRTOS中实现任务的优先级继承?14. 使用CAN总线进行工业设备的监控与控制?15. 在FreeRTOS中如何实现软件定时器的使用?16. 如何使用DMA进行ADC数据采集?17. 在嵌入式系统中如何实现图形用户界面(GUI)?18. 使用HTTP协议实现设备的数据上传?19. 如何在FreeRTOS中实现任务的状态查询?20. 使用USB CDC实现设备的串口通信?21. 在嵌入式系统中如何实现音频录制功能?22. 如何通过网络实现设备的配置更新?23. 使用GPIO控制步进电机的步进?24. 在FreeRTOS中如何实现事件组的使用?25. 如何使用SD卡进行数据的备份与恢复?26. 在嵌入式系统中如何实现外部传感器的接口?27. 使用UART进行设备的故障诊断?28. 如何在FreeRTOS中实现互斥量的使用?29. 使用DAC输出模拟信号控制音量?30. 在嵌入式系统中如何实现系统的日志记录与分析?我面试看的是大佬的面经,链接放下边了  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
今天 11:45
北京理工大学 C++
_凡_:Cpp感觉确实不如java,cpp各种方向跟生殖隔离一样,而且岗位还少
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务