地平线 嵌入式软件开发 一面 拷打

地平线作为自动驾驶芯片头部公司,嵌入式软件岗一面考察范围覆盖 Linux 内核、RTOS、硬件接口协议、C++ 底层和系统调试能力。整体难度中等偏上,追问较多,纯背八股很难过,需要结合项目经历展开回答。

  1. 自我介绍,重点介绍和嵌入式或驱动相关的项目经历
  2. C++ 中 volatile 关键字的作用是什么?在嵌入式开发中什么场景下必须用它?
  3. 说说 RTOS 中优先级反转是什么问题,如何解决?
  4. 说说 DMA 的工作原理,使用 DMA 传输时需要注意哪些问题?
  5. Linux 内核中中断上半部和下半部的区别是什么?tasklet 和 workqueue 分别适合什么场景?
  6. 说说 Linux 设备树(Device Tree)的作用,驱动是如何通过设备树获取硬件信息的?
  7. 说说 I2C 和 SPI 协议的区别,各自适合什么应用场景?
  8. 用户态程序访问空指针触发 Segment Fault,从硬件到操作系统整个过程发生了什么?
  9. 说说 Linux 内核中 spinlock 和 mutex 的区别,分别在什么场景下使用?
  10. 说说 Cache 一致性问题在嵌入式多核场景下是如何产生的,有哪些解决手段?
  11. 说说 ELF 文件的结构,程序从编译到运行经历了哪些阶段?
  12. 说说 Linux 中断亲和性(IRQ affinity)是什么,在多核嵌入式系统中如何合理配置?
  13. 说说看门狗(Watchdog)的工作原理,软件层面如何正确使用它?
  14. 如果一个嵌入式系统上线后偶发性重启,你会从哪些方向入手排查?

总结

地平线一面整体偏底层,考察重心在 Linux 内核机制、嵌入式硬件接口和 C++ 底层原理三块。中断、DMA、Cache 一致性这类题目是地平线的高频考点,建议结合实际项目经历来回答,光背理论容易被追问到哑口无言。设备树和驱动框架也是必考方向,最好有实际写过 platform driver 或字符设备驱动的经验。偶发性重启排查这类开放题考察的是系统性思维,回答时要有条理地从硬件、软件、内存、电源等维度展开,不要只说一个方向。

嵌入式八股文专栏https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk

(专栏包括各类基础八股文以及大厂面试题等内容)

嵌入式八股文准备方法

分四个模块来准备,每个模块有侧重点:

C++ 基础:

  • 重点掌握内存模型(栈堆布局、对象生命周期)、智能指针原理、虚函数表机制、move 语义
  • volatile、const、inline、noexcept 这类关键字在嵌入式场景下的实际含义要能结合硬件说清楚
  • 不要只背语法,要能说出为什么,比如为什么析构函数要是虚函数,为什么 make_shared 更好

Linux 内核与驱动:

  • 内核模块、字符设备驱动、platform driver 框架至少要动手写过一个
  • 中断子系统(上下半部、tasklet、workqueue、threaded irq)、内存管理(虚拟内存、页表、mmap、kmalloc vs vmalloc)是必考方向
  • 设备树要能看懂基本结构,知道 compatible 属性如何匹配驱动,of_get_property 怎么用
  • 同步原语(spinlock、mutex、rwlock、RCU)要知道各自的使用限制,尤其是中断上下文不能睡眠这条规则

RTOS:

  • FreeRTOS 的任务调度、上下文切换、任务状态机要能画出来
  • 优先级反转和优先级继承是必考题,要能说清楚场景和解决方案
  • 信号量、互斥量、消息队列、事件组的区别和适用场景
  • 内存管理的五种 heap 方案(heap1~heap5)要了解基本差异

硬件接口与调试:

  • I2C、SPI、UART、CAN 的协议特点、时序、适用场景要熟
  • DMA 的工作原理、Cache 一致性问题(flush/invalidate 的时机)是嵌入式特有的高频考点
  • 调试工具:GDB + OpenOCD、逻辑分析仪、示波器的基本使用场景要能说
  • 偶发性 bug 的排查思路(看门狗复位原因、内存踩踏、栈溢出检测)要有系统性的方法论

备考节奏建议:先把 C++ 和 Linux 内核两块打扎实,这是所有嵌入式岗的基础盘,再根据目标公司偏 Linux 还是偏 MCU 决定 RTOS 和驱动的深度。地平线偏 Linux 和 SoC,FreeRTOS 了解即可,Linux 驱动和内核机制要重点投入。

全部评论
一看这问题,就是嵌入式底层的
点赞 回复 分享
发布于 03-22 19:48 陕西
感觉总结的很好
点赞 回复 分享
发布于 03-22 19:32 北京
感觉是一般的工作了
点赞 回复 分享
发布于 03-22 19:23 江苏

相关推荐

04-27 11:34
已编辑
武汉理工大学 Java
没有硬件嵌入式cpp,硬件兄弟不用看了高通电话面和一面4.7正值班突然打电话来,还以为要约面试,没想到直接面时间10min我们需要一个帮忙ai应用开发的,你是否有兴趣从事 AI 应用开发?介绍一下自己你有真实落地的工程项目经验吗?介绍一下你正在做的 RAG 项目,计划做成什么样、目前做到什么状态?你是否接触过大语言模型或相关 AI 工具?具体有哪些?如果入职做 AI 日志分析、客户服务对话类工具,你会如何开始学习并开展工作?你目前在武汉,是否方便到北京或上海的办公室实习?你可以从什么时候开始实习,实习时长能到几月份?4.9一面时间30min卡点进入的有点迟到了介绍一下自己(还特意提前背了英语自我介绍但是没用上)我们是高通wifi通信相关的,主要是无线通讯硬件领域这一块的 Wi-Fi 模块驱动、内存管理优化你这个是java应用相关啊,大三课多不多,可以实习吗?两个项目是demo还是实际落地部署过的经验?学校安排本科生导师吗?由于我们也不太擅长这两个项目啊,来介绍一下你这两个相关项目,用给小白新用户的方式给我们讲解一下完整流程你实际部署过,那你具体是怎么压测的?你这个压测有点简陋了,我问你,现在生产中出现情况你会怎么排查?嗯,现在没有前后端任何问题,就是单纯的流量大高并发,如何解决?降级熔断?rag讲讲相关过程?先来数据结构,经典的排序算法原理和时间复杂度来点网络知不知道网络协议?ISO 七程网络协议?tcp三次握手?tcp为什么三次握手?网络具体怎么保障数据传送?你了解wifi吗?生活中知道wifi协议吗?你说wifi4,wifi6e和wifi7,他们的改进在哪里?你知道具体底部协议吗?不知道的话,你知道wifi6e的e是什么意思吗?来点操作系统你了解linux内核吗?这两个项目都是软件吗?平时编程有没有涉及到什么底部具体使用?进程线程区别你在项目中用 C 做过多线程相关的高性能开发吗?30min没有手撕反问我们部门主要围绕硬件相关的底层软件开发,C++ 直接操作硬件资源哇,和电话面说的不一样啊,我还恶补学习,研究我那个rag具体项目和agent相关知识,但是啥也没用到哎哎哎
点赞 评论 收藏
分享
评论
1
23
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务