嵌入式面试经典30问:

1.讲一下ARM架构的特点和优势。

2.C语言中的volatile关键字的作用是什么?

3.请解释一下嵌入式系统中的软中断和硬中断的区别。

4.如何实现两个单片机之间的通信?请列举几种常用的通信协议。

5.什么是RTOS(实时操作系统)?请解释RTOS和普通操作系统的区别。
6.请解释一下UART和SPI的概念、特点和应用场景。

7.在嵌入式系统中,编写驱动程序时,有哪些常见的接口标准和驱动框架?

8.DMA(直接内存访问)是什么?它在嵌入式系统中的作用是什么?

9.在嵌入式系统中,如何进行实时任务调度和优先级管理?

10.请解释一下嵌入式系统中的中断嵌套和中断优先级的概念。

11.请解释一下嵌入式系统中的GPIO口、PWM和定时器的概念和应用场景。

12.在嵌入式系统开发中,什么是嵌入式Linux?它与传统的裸机系统有什么区别?

13.讲一下C语言和C++语言的区别和特点。

14.C语言中的指针是什么?请解释一下指针的作用和用法。

15.C++中的引用是什么?请解释一下引用和指针的区别。

16.什么是C语言中的结构体?请解释一下结构体的定义和使用。

17.C++中的类是什么?请解释一下类的定义和面向对象的概念。

18.在C语言中,如何动态分配内存?请解释一下malloc和free函数的使用。

19.在C++中,如何实现多态性?请解释一下虚函数和纯虚函数的概念。

20.C语言中的宏定义是什么?请解释一下宏定义的作用和用法。

21.C++中的命名空间是什么?请解释一下命名空间的作用和用法。

22.在C语言中,什么是文件操作?请解释一下文件的打开、读写和关闭操作。

23.请解释一下操作系统中的进程间通信(IPC)和线程间通信的概念和方式。

24.操作系统中的调度算法有哪些?请解释一下常见的调度算法和其特点。

25.操作系统中的页表是什么?请解释一下页表的作用和实现方式。

26.操作系统中的内核是什么?请解释一下内核的概念和功能。

27.请解释一下操作系统中的异常和中断的区别和联系。

28.请解释一下操作系统中的异常和中断的区别和联系。

29.请解释一下操作系统中的同步和互斥的概念和实现方式。

30.对于嵌入式开发工程师来说,如何进行持续学习和职业规划?

问题答案已经整理到专栏中了,关注我分享更多知识。
全部评论
第一个应该怎么回答好?
3 回复 分享
发布于 2024-03-27 00:38 北京

相关推荐

下面就根据我的实际情况,来和大家分享一下技术方面的经验吧。对于Linux方面的知识,就很遗憾没办法帮助到各位了(我就是个小菜鸡/(ㄒoㄒ)/~~)在这里我就只简单提一下需要准备哪些方面的知识,因为把所有内容都写在同一个帖子里太长了。C语言无论是嵌入式单片机还是嵌入式Linux,C语言都是必考的内容,可以说C语言是嵌入式软件工程师吃饭的家伙,相信C语言的重要性不用多说。C语言这块的话,随着不断复习,自己的一个熟练程度也会越来越高,所以最重要的就是多看多练。对于嵌入式工程师来说C语言基本上是要完全掌握并且熟练使用的,下面就先列出在笔试面试中C语言需要掌握的/比较重要的知识点:运算符优先级输入输出操作原码、反码、补码预处理关键字堆栈数组指针函数字符串结构体、联合体内存分配主要是这几个大的方向,输入输出是必须要熟练的,因为在笔试编程题里面是几乎必须要用到的,这个部分可以去刷算法题来熟悉一下。关键字所有的关键字都要了解,像是static、volatile、extern、sizeof都是比较常考的。堆栈和指针都是重中之重,一定要全面完整地学习。像是大题的话往往是考算法、数据结构以及对字符串的一系列操作。C++如果有时间的话最好去学一下,就封装、继承、多态之类的,所以推荐把其他部分内容复习完以后还有多时间的话可以学一学C++方面的一些知识。单片机单片机这部分主要是针对你在项目中常用的芯片,一般来说大部分人是以STM32为主。我就针对STM32来说说有哪些重要的知识点:GPIO中断定时器通信接口在这些里面最常被问到的就是中断和通信接口。其中通信接口主要就是IIC、SPI、UART。数据结构与算法数据结构对于嵌入式软件岗位来说,数据结构相对没有互联网行业的招聘那么重要,但还是属于必考的知识点。对于嵌入式岗位,数据结构可以选择性地学习,不用全部都学会,毕竟准备的时间是有限的,当然有充足的时间的话,当然建议都学会了,因为对于顶级大厂来说,数据结构是考核的相对重点。数据结构对于大多数不冲顶级大厂的同学来说,主要学数组、链表、队列、堆栈就可以了,至于二叉树之类的,在我整个秋招的过程中,几乎没有被问到。可能像是华为这种公司会考到。算法算法这部分建议牛客网刷一下题,起码刷个20道简单题,熟练一下做题的方法,输入输出这些,对字符串的操作这些,因为后面笔试基本上都会考两题大题,基本上刷个20题,稍微总结一下,然后加上平时的积累就问题不大了,如果想进华为这样的大厂,就要刷中等甚至困难的算法题了,这个看各位自己的取舍,也可以在牛客网上看看你想投的那家公司的笔试面试侧重点在哪里,比如说华为笔试就是考3道算法大题。网络网络这部分考得还是比较少的,有些公司会问,有些公司不问,如果是涂鸦智能这样做物联网的公司那肯定是会问的。这部分就需要知道一些基础,如果项目中有用到的话就需要将项目中用到的协议了解清楚,以及你在做这个项目的时候为什么要选择这个协议而不是另一个协议。我就在一个物联网项目中有使用到MQTT协议,那我就去单独学了这部分的知识,如果并没有项目涉及网络这一块的话就掌握一点基础知识就好了,即使不理解也死记硬背背下来,但是还是建议大家能在理解的基础上记忆,不然面试官稍微往深入问一点就答不出来了,最经典的两个问题:tcp和udp的区别三次握手四次挥手这部分内容比较少,就不单独展开来讲了,主要就是上面提到的两个问题,把那两个问题理解了去面试非网络领域的公司就没什么大问题了。操作系统操作系统这部分的基础知识是肯定要会的,尽管你可能像我这样在大学阶段只用过单片机,并且没在上面跑过uCOS或者FreeRTOS之类的实时操作系统的话强烈建议要去学一下这方面的知识,因为尽管是投的嵌入式单片机的岗位,往往也是要求会实时操作系统的。所以建议可以去学一下FreeRTOS或者RT-Thread之类的实时操作系统,有时间的话最好能够在自己的项目中实践一下,时间不够的情况下就把基础知识系统地先学一下。其次就是Linux,尽管投的是嵌入式单片机岗位,但嵌入式在广泛的一个定义里,大家还是默认是以Linux为主,所以Linux的基础知识也要会,因为有些公司在笔试的时候就会涉及到,这方面的话主要是要理解一些理论知识,知道线程进程,知道一些基础的指令,最好可以在ubuntu上写一个代码出来gcc编译一下。会这些Linux相关内容基本上就可以让你在笔试阶段不那么吃亏,当然只会这些是不足以支撑你去找一个纯Linux岗位的工作的。找工作流程对于大部分公司来说,招聘流程是这样的:投递简历→测评→技术笔试→技术一面(初试)→技术二面(复试)→HR面(终面)→offer谈薪。有部分公司是没有单独的HR面的,就是技术二面会换成综合面,前半段聊技术问题,后半段聊一些其他东西。一般来说技术一面的面试官是你将来入职后的同事,技术二面或者综合面试的面试官就是你将来入职后的主管。主要的流程就是这样,不同的公司会有不同的招聘流程,不过都是大差不差的。其他面经题目可以看这个牛油的总结,链接在下边***********************
点赞 评论 收藏
分享
1. push_back()左值和右值的区别是什么?2. move底层是怎么实现的?3. 完美转发的原理是什么?4. 空类中有什么函数?5. explicit用在哪里?有什么作用?6. 成员变量初始化的顺序是什么?7. 指针占用的大小是多少?8. 野指针和内存泄漏是什么?如何避免?9. malloc和new的区别是什么?10. 多线程会发生什么问题?线程同步有哪些手段?11. 什么是STL?12. 对比迭代器和指针的区别13. 线程有哪些状态,线程锁有哪些?14. 解释说明一下map和unordered_map15. vector中的push_back()和emplace_back()的区别、以及使用场景16. 如何实现线程安全,除了加锁还有没有其他的方式?17. vector扩容,resize和reserve的区别18. vector扩容为了避免重复扩容做了哪些机制?19. C++中空类的大小是多少?20. weak_ptr是怎么实现的?21. 虚函数的底层原理是什么?22. 一个函数f(int a,int b),其中a和b的地址关系是什么?23. 移动构造和拷贝构造的区别是什么?24. lamda表达式捕获列表捕获的方式有哪些?如果是引用捕获要注意什么?25. 哈希碰撞的处理方法26. unordered_map的扩容过程27. vector如何判断应该扩容?(size和capacity)28. 构造函数是否能声明为虚函数?为什么?什么情况下为错误?29. 类中static函数是否能声明为虚函数?30. 哪些函数不能被声明为虚函数?31. 如何保证类的对象只能被开辟在堆上?(将构造函数声明为私有、单例)32. 讲讲你理解的虚基类33. C++哪些运算符不能被重载?34. 动态链接和静态链接的区别,动态链接的原理是什么?35. C++中怎么编译C语言代码?答案附在面经中https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
02-24 14:38
一、进阶阶段(6 - 12 个月)深入学习知识体系操作系统:深入理解嵌入式操作系统的原理和机制,如实时操作系统(RTOS)。学习任务调度、中断处理、内存管理等核心概念。推荐研究 FreeRTOS 等开源 RTOS,并阅读相关的技术文档和书籍。通信协议:掌握常见的嵌入式通信协议,如 UART、SPI、I2C 等。了解这些协议的工作原理和应用场景,通过实际项目进行协议的编程实现。推荐阅读《嵌入式系统通信协议实战》。数据结构与算法:学习基本的数据结构(链表、栈、队列、树等)和算法(排序、搜索等),提高程序的效率和性能。可以参考《数据结构与算法分析(C 语言描述)》,并在在线编程平台上进行算法练习。开发工具进阶集成开发环境(IDE):熟练使用专业的嵌入式开发 IDE,如 Keil、IAR 等。掌握项目创建、代码编辑、编译、调试等全流程操作。版本控制工具:学会使用版本控制工具,如 Git,进行代码管理和团队协作。了解分支管理、合并冲突解决等基本操作。硬件平台拓展尝试使用更复杂的嵌入式开发板或模块,如 STM32 系列微控制器。深入了解其硬件架构、外设功能和编程方法。通过实际项目,如电机控制、传感器数据采集等,提升硬件开发能力。嵌入式C++面试冲刺可以看大佬面经  链接在下边https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
36
305
分享

创作者周榜

更多
牛客网
牛客企业服务