嵌入式暑期实习面经分享

最近刚结束暑期实习,现在回忆起来,之前找实习的经历还是蛮痛苦的...现在分享一下之前的实习面经吧,赞一波人品,大家秋招加油!

## 高通实习 4.10

1.STM32智能手表项目你觉得做的最出彩的地方是什么

2.STM32智能手表项目遇到了什么困难

3.多个任务间如何进行数据交互

4.任务优先级怎么安排

5.C语言如何实现“封装“?让结构体外部看不到某些成员的具体类型(不透明指针)

6.按键是不是用了中断?它如何更新显示的页面的

7.LVGL是什么东西

8.低功耗是怎么设计的

9.用堆栈来切换页面/低功耗策略的设计是自己想的还是看博客

10.FreeRTOS里的线程和进程有什么区别

11.如何对全局变量这种存储进行优化

12.如果要显示历史数据,该用什么方法传数据

13.U-Boot启动流程

14.启动介质用过哪些?如何直接从SRAM启动

15.概述一下项目里那几个字符设备驱动的开发流程

16.了不了解块设备、网络设备

17.了解MMU吗?MMU的工作原理

18.MMU除了内存映射,还有什么功能

- 当时回答的是PTE的权限检查,面试官好像想让我答和cache相关的东西...

19.了解Cache吗?知道它的大概作用还是在使用的时候遇到过什么问题

看看博客把,cache应该和os无关,属于体系结构的知识了

[计算机体系架构——一文读懂Cache(一) - 知乎](https://zhuanlan.zhihu.com/p/386919471)

[Cache与MMU的爱恨纠缠_有cache一定要有mmu吗-CSDN博客](https://blog.csdn.net/setul/article/details/128243607)

20.DMA与Cache一致性的问题是怎么发生的,怎么解决

21.从high level的角度,不是从code角度。你觉得cache的不一致最直观该怎么解决(比如DMA造成的缓存一致性问题),Linux内核是怎么解决

- 提供一些API,对于invalid cache情况做操作

22.知道C语言里Cache有什么操作吗?比如刷cache,知道含义吗

- 完全不了解

23.用ARM板的时候有去了解ARM体系结构吗,知不知道CPU的特权等级、相关寄存器

- 不太了解,后面强行借RISC-V回答了一波...

24.CPU什么时候会切换特权等级,切换时的具体流程

25.OS内核态下CPU是什么特权等级

26.page fault的处理流程,什么时候会分配物理页

27.从CPU的角度,函数调用时是如何传参的

总结:

1.感觉STM32手表项目虽然是本科做的,而且我投的是Linux驱动开发,但是面试还是可能会被问到,当时做的时候很多细节都忘了,而且代码设计的也不好,比如用全局变量来在多个任务间共享数据,还被面试官说了。

2.简历上的项目一定得完全掌握透彻,就算都是自己写的代码,时间长了也可能忘,还是得再好好复习下

3.感觉体系结构这块还是有很多需要学的,比如cache相关的,当时有点被问懵了

4.感觉自己的简历可能和底软还是不是很match,简历上4个项目,2个都是Linux应用开发的,这次面试都没被问,后面还是需要再做个什么项目

5.面试官问“你懂xxx吗”的时候,不要只回答个“懂一点”就结束了,可以直接开始解释,不需要等他继续问

## 海康BSP实习 4.29

1.是保研吗?学校的保研是看成绩还是比赛,排第几名

2.老家在哪,未来期望工作地点

3.本科做的都是MCU吗?这些竞赛挑一个介绍一下

4.刚才提到你是离线规划的路径,运行中如果小车超出了离线规划的路径,该如何返回

5.在做电机开发的时候可能会关注电机的哪些参数

6.在开发电机的时候,会不会实现让电机旋转来让小车精确前进1m这样的功能

7.比赛是几个人参加的?本科其他的比赛都是MCU开发吗?

8.讲一下研究生阶段Linux主要做了哪些开发

9.讲一下uboot、内核的移植也裁剪是怎么做的

- 忘完了,这部分完全自己给自己**埋坑**啊woc

10.字符设备驱动开发的关键函数

11.实习能实习多久

12.研究生课题做的怎么样

13.未来想做算法还是上层应用还是驱动还是硬件,为什么

反问:

1.如果能来实习,会做哪些业务?

- 安卓的BSP,和Linux驱动差不多
- 业务方面,主要是类似希沃教育屏之类的产品,相机是小部分

2.面试结果多久通知

3.实习生会有培养方案吗?

- 会有导师带,根据实际情况决定干什么
全部评论

相关推荐

因为一面面了很多技术问题了(裤兜子都被扒光了),二面主管面主要是,未来的实习内容和方向啥的。就面了20分钟,自我介绍完基本就是闲聊。面到10分钟就没问题了,后面就是反问了。1、未来想做的方向(我回答说是驱动,可能想涉及一下内核)2、rtos内核看了哪些部分(第一个问题我说原因的时候,说看过rtos的内核,蛮有趣的,给自己埋坑了,后面回答了些任务创建,任务切换的内容)3、简要说一下,任务切换如何根据系统节拍,去做的?调度期间做了哪些事?4、为啥从driver入手开始往内核看,是单纯因为感兴趣吗,还是啥(我说因为本科跟硬件相关一点,感兴趣)5、能实习多久?在哪个城市?6、实习期间想获得什么?(我说想适应企业节奏,不想自己闭门造车,想对驱动有个系统性的认识)反问问了他如果我能加入影石,我能获得什么(倒反天罡(),面试官介绍了一下他们是一个全链路打通的流程,从sensor到driver,isp啥的,巴拉巴拉,专业术语。东西比较多,会根据兴趣分配岗位。先是一个点做透做精再去干其他的。对于一些想混个经历的实习生就可能会安排一些打杂的活,对于一些想全身心投入,安排的内容会深一点,压力会比较大。公司对校招生和实习生培养体系完善。映象突然就拉满了,想进,感觉能进去的话,可能会比较有收获,后续如果通过还有一个hr面
查看6道真题和解析
点赞 评论 收藏
分享
一、学习方向选择以下仅代表笔者个人看法:嵌入式软件总体分为linux和mcu方向。这两个方向的应用场景不同,导致无法在同一份工作中既做Linux,又做mcu。因此,如果在时间不充裕的情况下,大家根据自身情况挑一个方向去学习就够了。mcu方向(也称为嵌入式软硬件方向)更专注于软硬件结合,也就是说除了软件部分之外,还需要懂硬件。如果在软件和硬件分的没那么开的公司,作为一名嵌入式软件工程师,不仅要自己写代码,还需要自己画原理图,画PCB。在软硬件分开的情况下,基本要求是要能看的懂电路原理图,这也是大多数转行者很容易忽视的点。linux方向由于岗位较少,通常需要驱动/内核/应用一起做,仅有部分公司或者原厂才会放出单一的岗位出来,如单独的linux驱动岗位,内核/应用岗位等,这个方向比较偏软件一点。但由于岗位较少,门槛也就稍微高一些。二、mcu方向学习路线0基础的同学建议按照步骤走(再次重申是个人看法,如果你觉得不对,就不要看下去了):1、掌握基本电路知识,重点主要为电容、电感及滤波电路,还有一个傅立叶变换(可以看刘陈版本的电路分析基础这本书或者是b站进行学习)2、模电(主要掌握二极管、稳压管、三极管、mos管、放大电路、运算放大器、反馈电路);笔者个人推荐的书籍是黄丽亚的第三版模拟电子技术基础,学完前7章就够了。当然,也可以选择其他版本的,看个人喜好。3、数电(主要掌握进制转换,反码补码、逻辑电路、触发器、寄存器、AD转换及存储器知识),推荐书籍为华中科技大学的电子技术基础(数字部分)。上述三步就是为了打牢硬件基础,能看懂电路原理图。4、接下来学习一款EDA工具的使用,不要再去学嘉立创了!企业里边只有三大EDA工具:Altium Designer/Candence/Pads,任意挑一个去学习。个人比较推荐学习AD,可以在b站上看凡亿教育的课程进行学习。5、学习C语言,个人还是推荐谭浩强红色的那本高校书籍,当然也有其他优秀课程,大家可以自行选择。C语言的学习是一个持续加深的过程,前期先掌握基础就行,需要学习的是前1-7章,第8章的指针变量/数组指针,第9章的结构体/共用体/枚举/typedef。6、学习stm32,不要再浪费时间去学51老古董了。个人推荐正点原子,资料很充足,按照资料学基本就够了。同时一定要学标准库,前期不要把精力浪费在学hal库上,hal库等后边自己看一下就行。学习方法是买一款开发板(F1/F4都可以),跟着资料一步一步学,掌握基本常用外设如串口/GPIO/定时器/中断/PWM/输入捕获/LCD/ADC/IIC/SPI/485/CAN/IAP等。ps:学习过程中不要只看,一定要做!看懂了不等于你掌握了,毕竟实践是检验真理的唯一标准!7、做完上述步骤,恭喜你已经打好基础了,进一步继续深入学习c语言的提高部分,把前边说的第8章的二维指针/数组指针/指针数组等等指针的高阶用法掌握,以及动态内存分配函数等;还有第9章的链表;此处笔者推荐看人民出版社的c和指针一书,进行c语言的加深学习。这本书需要掌握如编译的底层原理/指针的高阶用法/递归函数/单向或者双向链表/预处理器等。8、完成c语言的进阶学习之后,开始学习stm32内核,这里推荐看CM3权威指南这本资料,主要看前9章内容,至少要知道寄存器组/PendSV/SVC/systick定时器等,为学习RTOS打好基础。9、开始学习RTOS,自行挑选一款rtos进行学习(ucos/freertos/rt-thread),笔者是同时学了ucos和free,个人比较推荐从ucos学起(也是正点原子的资料),毕竟资料比较多,底层原理讲的比较细,比如任哲老师的嵌入式实时操作系统原理及应用就是以ucosii进行讲解的。当然大家也可以选择其他的,这个阶段建议还是多看资料,少看课。因此笔者并没有什么推荐的课程。ps:到这一步要开始做32和rtos的项目了,做完项目以后就可以去投实习/秋招,这个程度已经够找工作了。10、学习常用数据结构:数组/堆/栈/链表/树/哈希表/队列,图不要求掌握,树学二叉搜索树就够,在弄清楚基本数据结构以后再去力扣上进行刷题,比如要知道栈不仅可以用数组实现,还可以用链表实现。ps:这一步想进大厂必不可少,毕竟面试都是要手撕的!11、学习RTOS源码,弄清楚任务调度/任务通信/时钟及延时/内存管理等。为什么要先去学习数据结构再回来看rtos源码,就是因为其源码中包含大量链表和队列的使用,如freertos中列表与列表项中涉及到双向链表的插入和删除操作,这样才能看得懂源码。ps:到这一步已经够卷了,笔者觉得不用担心找不到工作了。接下来说的东西可以入职以后再进行学习12、其他通用中间件的学习,如网络协议(mqtt/lwip协议等),选一个进行学习。还有图形库lvgl/ewmin等,也是选择一个进行学习。学习方法也是找资料,我依然用的是正点原子。13、学习代码版本管理工具git的使用,需要掌握常用命令,如克隆,提交,上传以及创建分支等。学习方法笔者推荐是看官网。三、linux方向学习路线linux方向笔者还在摸索中,因此就简单说一下1、先学会使用linux系统,学会Linux基本命令使用,学习方法推荐b站尚硅谷。2、学习gcc、make工具链的使用及makefile脚本。3、学习c++,主要掌握面向对象特性,如类和对象/继承/重载/多态/封装/虚函数/智能指针/动态内存等。推荐书籍为c++ primer第五版以及菜鸟编程网站。4、Linux应用编程,如进程/线程、文件io、网络编程等。推荐资料--正点原子。5、学习QT开发,推荐资料正点原子。6、Linux下的裸机开发(推荐买板子学习,如imx6ull;掌握常用外设以及CortexA处理器架构),推荐资料--正点原子或者韦东山。ps:学习linux驱动需要有电路原理图能力。7、Linux驱动开发(结束裸奔,上操作系统了, 包括移植uboot/linux内核/根文件系统等、掌握Linux三大类驱动,包括字符设备/块设备/网络设备驱动),同时需要掌握GDB调试。可以看到嵌入式两个方向的内容都非常多,因此大家选一个学,找工作足够了。本次讲解就到这里,感谢观看!
点赞 评论 收藏
分享
评论
7
35
分享

创作者周榜

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