面灵AI→

博世(中国)嵌入式 Linux 开发秋招面经

时间
2026-10
来源
牛客网

《面试题目》

  1. 自我介绍(英文版)。
  2. 你的家在哪里?你知道公司在江苏无锡吗?你对工作岗位有期望吗?
  3. 简历上的技术栈范围跨度这么广,为什么?
  4. 是否用过 AI 大模型进行分析?
  5. RTOS 与 Linux 之间的共同点、区别差异?
  6. Modbus RTU 协议本身是什么?数据帧格式是怎样的?数据传输中遇到失败,从应用层面怎么处理?
  7. 你做过 Qt 开发是吗?是否了解 C++?
  8. 实习中遇到的难题有哪些?
  9. 基于项目考察项目的架构设计及其功能,面试官提供了一个九轴传感器场景。

《参考解析》

Modbus RTU 的数据帧。RTU 模式走串口(RS-485/RS-232),帧结构是「地址 + 功能码 + 数据 + CRC 校验」,首尾靠 3.5 个字符时间的静默间隔来划界,这就是它不需要起始符的原因。地址是 1~247 的从站号,0 是广播;功能码常见 03 读保持寄存器、04 读输入寄存器、06 写单个寄存器、16(0x10)写多个寄存器;数据段里读请求是「起始地址 + 寄存器数量」,读响应是「字节数 + 数据」,异常响应把功能码最高位置 1 并带一个异常码。CRC16 低位在前、高位在后,这是新手最容易搞反的一处。它和 Modbus TCP 的差别在于 TCP 去掉了地址与 CRC,换成 7 字节 MBAP 头,由 TCP 自己保证可靠性。

传输失败时应用层怎么处理。先分清三类失败:一是物理与链路层问题,比如接线、终端电阻、波特率与校验位配置不一致,现象是完全没有响应;二是 CRC 校验失败或响应超时,说明帧被打断、线路有干扰或从站忙;三是从站返回异常码,比如非法数据地址、非法数据值,这属于业务层面的拒绝。应用层能做的:给每次请求设超时(典型 100ms1s)并重试 23 次,重试之间加退避,避免总线被一个卡死的从站占满;对 CRC 错误的帧直接丢弃重新请求,不要尝试用坏数据;对异常码要做区分处理,非法地址就该报配置错误而不是无脑重试;每次读写做幂等设计,写寄存器失败后重发前先回读当前值,避免重复累加这类副作用;再往上要记录失败次数并做降级,连续失败就标记该从站离线、告警,不要让主循环被一个离线设备拖住。多从站场景下还要注意轮询节奏与总线占用,必要时把轮询拆到不同周期。

RTOS 与 Linux 的共同点与差异。共同点:都做任务(进程/线程)调度、都有任务间通信与同步原语(队列、信号量、互斥量)、都做内存管理与中断处理,都要求开发者理解上下文切换与临界区。差异主要在定位:RTOS 面向资源受限的 MCU,内核小(几 KB 到几十 KB)、无 MMU 或只用 MPU、任务与内核同地址空间、调度目标是最坏情况下的确定性响应,中断延迟和任务切换时间可预测;Linux 面向应用处理器,有 MMU 与虚拟内存、进程隔离、丰富的驱动与文件系统,追求吞吐与公平性,普通内核不保证硬实时,需要 PREEMPT_RT 或双核(Cortex-A 跑 Linux + Cortex-M 跑 RTOS)方案才能满足强实时需求。落到回答上,可以举一个具体的判断标准:如果系统要求微秒级确定响应、内存只有几百 KB,选 RTOS;如果要做网络、文件、图形与复杂协议栈,选 Linux。

九轴传感器场景怎么讲架构。按数据流讲:传感器层(加速度计、陀螺仪、磁力计三颗器件,各自有量程、输出数据率与噪声特性)→ 采集层(I²C 或 SPI 读取,注意 I²C 的时钟拉伸与总线仲裁,SPI 注意片选与 DMA 搬运)→ 数据处理层(时间戳对齐与采样同步、零偏与温漂标定、低通或卡尔曼滤波、姿态解算,常见输出是欧拉角或四元数)→ 应用与通信层(通过串口/CAN/蓝牙上报,定义协议帧与上报频率)。面试官问「架构设计」时想听的是分层与耦合关系:驱动与算法解耦、采样与上报解耦(用环形缓冲区或队列跨任务传递)、故障处理(器件掉线怎么发现、超时怎么重试、数据异常怎么标记)。再补一句工程化的部分:标定参数怎么存、固件怎么升级、日志怎么留。

简历相关问题的答法。技术栈跨度广、Qt 与 C++ 这类问题,本质是让候选人自己证明「每一项都不是浅尝辄止」。稳妥的回答结构是:先说清哪些是项目里真正写过、写了多久、负责哪一部分,再说哪些只是了解,主动区分深浅比含糊地都说「熟悉」要加分。实习难题按「现象—定位手段—根因—修法—验证」讲一遍,别停在结论。