字节 嵌入式软件开发一面 被连环追问拷打了一个小时

一面约在下午三点,面试官上来自我介绍了一下,说是做底层驱动和系统方向的,然后直接开始问。

整体节奏很快,基本上每个问题答完他都会继续追问,没有给你喘息的机会。八股问得不算多,但每道都往深里挖,答浅了他会直接说"你再想想"或者"还有呢"。项目聊了大概十五分钟,他对细节很感兴趣,问了不少实现层面的东西。最后手撕一道算法,难度中等,给了二十分钟。

面完整个人是麻的。

题目

  1. 中断处理函数里能不能用 printf,为什么?如果一定要在中断里输出调试信息怎么办?
  2. volatile 和 const volatile 分别在什么场景下使用?volatile 能保证线程安全吗?
  3. 讲一下 DMA 的工作原理,传输过程中 CPU 在做什么?DMA 和 Cache 之间会有什么一致性问题,怎么解决?
  4. I2C 通信中从设备没有响应 ACK,可能是哪些原因?你会怎么排查?
  5. 程序上电后到执行 main 之前经历了哪些步骤?.data 段和 .bss 段分别是怎么处理的?
  6. 嵌入式设备在现场偶发性死机,没有调试器连接,你会怎么定位问题?
  7. 讲一下优先级反转,FreeRTOS 里是怎么解决的?互斥锁和二值信号量在这个问题上有什么本质区别?
  8. 裸机开发和带 RTOS 开发最本质的区别是什么?什么情况下裸机反而比 RTOS 更合适?
  9. 你了解哪些低功耗优化手段?从硬件和软件两个角度分别说说。
  10. memcpy 和 memmove 的区别是什么?什么情况下用错了会出问题?
  11. 讲一下你理解的堆和栈的区别,嵌入式里栈溢出会有什么现象,怎么检测?
  12. 定时器除了计时还能做什么?PWM 输出的原理是什么,占空比怎么控制?
  13. SPI 全双工通信时,主设备发送数据的同时从设备也在发数据,这个过程是怎么工作的?如果只想读数据不想发,应该发什么?
  14. 你在项目里有没有遇到过多任务访问同一个外设的情况,怎么处理的?如果在中断里也要访问这个外设,互斥锁还能用吗?
  15. 手撕:给你一个已排序的整数数组和一个目标值 target,数组中的元素可以重复使用,找出所有加起来等于 target 的组合,结果不能有重复组合。

核心嵌入式面试八股文总结:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk

总结

面试官技术很扎实,问的问题都很实际,不是纯背书能过的那种。项目部分他会顺着你说的细节继续挖,比如你说用了 DMA,他就会问 Cache 一致性的问题;你说用了 FreeRTOS,他就会问优先级反转。所以项目里用过什么最好真的搞清楚原理,不然很容易被追问到哑口无言。

手撕题难度不算高,但要注意剪枝和去重的处理,写完他会让你分析时间复杂度。

整体体验还不错,面试官没有刁难的意思,就是问题密度比较高,节奏快,需要反应快一点。等结果中。

全部评论

相关推荐

02-28 13:25
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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