6.24 联洲 嵌入式 提前批 二面
(Momenta 实习经历 & 基础知识考察)
-
自我介绍
- 回答:学历,实习,常用语言
-
Momenta 实习三个项目讲一下
- 回答:简单说了一下产出
-
Arxml 生成脚本是怎么设计的
- 回答:
- 数据类型复杂,结构嵌套,内存对齐(字段的顺序不能变)
- AUTOSAR定义的标签很多,树形结构抽象出来放在不同文件,序列化单独实现,Optional
- 触发方式多(周期性,数据到达触发,服务调用触发,初始化触发),代码复杂分支结构用策略模式替代
- CI/CD自动化集成与校验,提示接口变更与错误
- 回答:
-
假设嵌入式方面有类似的工作,设计上需要注意什么
- 回答:版本管理,理解需求,实现最小原型,留出后续扩展空间(这个回答好像不是很满意)
-
嵌入式场景,不同固件版本和配置,一般怎么处理
- 回答:HSM逆版本刷新固件锁死,防止安全降级攻击,测试的时候关闭Anti-Rollback(感觉回答偏了)
-
举个具体的例子,假设我有ABC三个板子,配置文件的版本分别是123,我如果想用C的配置在旧的固件版本上运行,在设计上需要注意什么
- 回答:配置与代码解耦,兼容性方面问题加上错误处理与异常抛出,保证程序不panic(这个应该回答HAL方面的,定义硬件抽象API,封装对GPIO、UART、SPI等的操作接口,具体芯片的底层实现切换即可)
-
数据结构、计组、操作系统都学过吧,问一些基础问题,首先常用的数据结构
- 回答:链表,队列,栈,哈希表,树,图,并查集,字典树,位图
-
Linux的中断讲一下
- 回答:中断用于异步通知CPU事件需要处理,避免轮询,分为硬中断和软中断(这里应该还有异常,除零错误,缺页异常),硬中断是外设发信号给CPU,软中断延迟处理。然后说了一下系统调用,syscall,通过中断向量表找到系统调用处理函数 (这里回答得不够全,Linux中断的具体实现忘了)
-
内存泄漏的问题怎么排查
- 回答:使用valgrind memcheck,主要有Definitely lost,Indirectly lost,Possibly lost
-
不使用工具怎么排查
- 回答:直接对malloc,free进行插桩,或者对mmap和brk写一个动态库hook?或者用backtrace?(这里不是很确定想问什么)
-
嵌入式环境中还用valgrind吗
- 回答:可以使用htop,ps观察程序内存是否持续增长(好像不是很满意,但确实不能用,因为占用太高了)
-
Makefile 中的 configure.ac 是什么
- 回答:生成对应平台的Makefile,自己很少写,一般用cmake或者bazel
-
硕士毕业设计做的什么
- 回答:推荐系统相关,点击率预测,语义解耦
-
为什么没写奖学金
- 回答:太菜了没有
-
(智力题)140g的盐,有2g和7g的砝码,天平,最少几次分出50g和90g
- 回答:已经宕机了,回答是从9开始2,相当于90=910,用1,2,4可以组合出2+4+4=10,所以是4次
- 回复:为什么不考虑第一次平分?第一次702,第二次再平分352,第三次用7-2分出15,20,得到70+20
-
coding,一个数组,大于等于limit的放右边降序,剩下的放左边(不用有序)
- 回答:最多应该就做到原地+o(nlogn)
- 首先双指针swap,再std::sort(arr.begin() + i, arr.end(), std::greater
());
-
反问
答案整理:Linux中断
外设触发IRQ信号 → CPU检测到中断 → 保存上下文 → 根据IDT跳转ISR入口 → 调用ISR → ISR处理硬件状态 → 清除中断标志 → 调度软中断/Tasklet → 恢复上下文 → 返回用户程序
-
中断向量表(IDT)
- Linux 内核启动时,会建立中断描述符表(IDT),每个条目对应一个中断向量号和处理函数地址。
- 硬件中断到来时,通过 IDT 跳转执行对应的中断处理函数。
-
中断处理程序注册
- 驱动模块通过 request_irq() 注册中断处理函数,内核把处理函数与 IRQ 号关联。
- 内核维护 irq_desc 结构体,保存每个 IRQ 的状态和处理函数链表。
-
顶半部(Top Half)——中断服务例程(ISR)
- ISR 是快速响应中断的函数,读取设备状态、清除中断标志。
- ISR 运行在中断上下文,不允许睡眠。
- ISR 不能执行耗时任务,尽快返回。
-
底半部(Bottom Half)——软中断、Tasklet 和工作队列
- 为避免 ISR 过长,耗时任务推迟到底半部处理。
- Linux 提供多种底半部机制:
- SoftIRQ:软中断,上下文不可睡眠
- Tasklet:基于软中断的轻量级机制,保证执行顺序
- Workqueue:可睡眠,可以调度到用户态进程上下文
-
中断屏蔽和嵌套
- Linux 内核自动屏蔽当前 CPU 的中断,避免中断嵌套。
- 支持本地和全局中断屏蔽,确保临界区安全。