嵌入式面试常见问题(六)—各大公司面试题_嵌入式软件工程师面试题目及答案

1)何为数据结构?

2)问了队列、栈、链表的概念和特征,队列和栈在项目中的应用场景。什么情况下用栈,什么情况下用队列和链表。

4、网络的概念

总结:

1、简历中有的项目,一定要会,不会的东西不写,写上去的东西保证自己每个细节都懂,也就是确实是自己做的项目,不是捏造的项目。

2、大厂面试注重基础,因为大公司会培养你,只要你基础扎实就行,所以基础很重要,整个面试一个多小时,大部分时间在linux系统、编程能力、数据结构、计算机网络基本概念上。

3、大厂面试喜欢问你对于某个常见的东西自己的理解,因为书上的名词大家都会说,但是你自己理解的

肯定是不一样的。比如富士康的一个面试官问过:你认为OSI七层网络模型和生活中给的什么很像?

答案:快递业务。

2、CVTE面试

岗位:嵌入式软件工程师。面试时间:20分钟

面试
1、简历中写了做过海思音视频项目,所以问了海思项目是怎么学的?(考察自学能力)。

2、问:学海思项目,是因为兴趣,还是为了毕设?

回答:是因为兴趣,因为自己毕设是51单片机。

问:如果一个Linux和51单片机进行通讯,让我怎么设计通讯协议,然后问我怎么进行检验。

回答:可以设计串口,加奇偶校验,并且检查数据包的总字节数。

问:如果字节总个数是对的,但是有些位错了,那应该怎么去检查?
(不该说自己的毕设是51单片机的,因为自己本身不了解51单片机,所以这一块答得一般)后来面试官
知道我对51单片机没怎么学过,是春招后才准备现学现用的,就没有继续问下去了。

3、二叉树学过吗?

回答:学过,但是后面没怎么用,几乎忘光了,比较熟悉和常用的是链表。

4、如何判断一个链表有环?

回答:快慢指针

5、线程和进程的区别?

6、线程和进程间的通讯方式有哪些?

7、访问临界资源时应该怎么办?

8、线程和进程的API,知道哪些?

回答:我把API名字和API的参数是什么都说了,面试官就没继续往下问了

9、工作的意向地点

10、对于加班的看法(据说CVTE加班很猛,另外两个是多益和三七)(广州)

11、有没有转管理层的意向?

12、有什么问题想问的?

回答:如果有幸入职贵公司,请问是否会有一些培训制度?

总结:除了一开始的那个怎么设计单片机和Linux通信协议没答好,其他的问题答得还可以,HR挺有耐心挺温柔的,也会在面试时一步步引导。从面试过程可以看出,很多公司,面试官一般都是根据你的简历和你的回答,来决定下一个问题。所以千万不要自己给自己挖坑,简历写的东西,必须要会,自己回答的东西,自己必须要会。所以面试官比较随和的情况下,可以通过自己的回答,把面试官引导到全是自己熟悉的领域。

3、富士康面试

岗位:嵌入式软件工程师。面试时间:30分钟。
薪资:试用期基本工资7200,转正按情况加(0-1000),算月工资8000,加班有加班费,算上加班费
大概9~10K,13薪。
所应聘部门是基于高通平台,做通信模块的。

1、自我介绍
2、如何理解交叉编译?
3、OSI七层网络和TCPIP网络模型区别?以及每一层名称。
4、你觉得网络分层协议和生活中什么比较像?(快递业务)
5、什么是上下文切换(我从中断上下文方面讲。然后他问为什么响应中断要保护现场,中断处理流程是
什么)
6、你如何理解异步(我从文件IO中的异步非阻塞回答)
7、你是XXXX专业,是不是和嵌入式不太匹配,都是自学的吗?
8、数据结构学的怎么样?
9、计算机操作系统学的怎么样?
10、你熟悉哪些数据结构?
11、如何理解数据结构和算法的关系?
12、你是XXXX专业,是如何学习嵌入式的?(我都是做项目,项目中学习)
13、C语言和其他编程语言有什么关系,处于一个什么地位?(更底层)
14、你如何理解编程语言和日常说话语言的关系?
15、你如何理解指针?(也是一种变量而已,只是存储的内容是地址,所以可以叫指针变量)
16、什么是系统调用?
17、用户程序运行在usr space还是kernel space?
18、普通调用和系统调用的区别?
19、系统调用用什么函数(ioctl等)?
20、数据结构学的怎么样,学过红黑树吗?讲一讲。
回答:红黑树,Red-Black Tree 「RBT」是一个自平衡(不是绝对的平衡)的二叉查找树(BST),树上的每
个节点都遵循下面的规则:
1)每个节点都有红色或黑色
2)树的根始终是黑色的 (黑土地孕育黑树根)
3)没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点,并没有说不能出现连续的黑色
节点)
4)从节点(包括根)到其任何后代NULL节点(叶子结点下方挂的两个空节点,并且认为他们是黑色的)
的每条路径都具有相同数量的黑色节点)
补充:二叉查找树,Binary Search Tree 「BST」,要想了解二叉查找树,我们首先看下二叉查找树有
哪些特性:
1)某节点的左子树节点值仅包含小于该节点值

2)某节点的右子树节点值仅包含大于该节点值

3)左右子树每个也必须是二叉查找树

21、讲一讲冯诺依曼和哈佛体系的区别
总结:他特别喜欢问你是如何理解某个东西的,这样的问法比单问你知识点牛多了,就是看你到底有没有对底层原理有理解,然后用通俗的话表达出来。

4、小米面试

岗位:嵌入式软件工程师(相机驱动岗)。面试时间:40分钟。
以下问题面试者全部答出,已offer,薪资请去小程序offershow上查。

1、请进行一个简单的自我介绍(2分钟)

2、C语言全局变量可否定义在头文件中?

回答:不能,并且这不是一个好的习惯。

3、全局变量和局部变量是否可以重名?

回答:可以重名。只是作用域不同,局部变量在局部生效。

4、extern C 的作用?

回答:extern C 的主要作用就是为了能够正确实现C++代码调用其他C语言代码,即在C++代码中嵌入式C语言代码。

5、从代码编译到可执行文件的流程?
回答:一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。

6、进程和线程的区别?
回答:进程是资源(CPU、内存等)分配的基本单位,线程是CPU调度和分配的基本单位(程序执行的最小单位)。同一时间,如果CPU是单核,只有一个进程在执行,所谓的并发执行,也是顺序执行,只不过由于切换速度太快,你以为这些进程在同步执行而已。多核CPU可以同一时间点有多个进程在执行。

7、手撕代码:写一个双向链表的插入。

8、问简历上面的项目。

9、IIC协议说一下(因为我简历里面写了IIC)

回答:I2C协议有两条信号线,SDA和SCL,分别是数据线和时钟线,同一总线可以挂载多个IIC设备,靠设备地址区分。

10、C++有了解吗,用它做过什么项目没有。

回答:我主要用C语言,C++用的比较少。

11、设备树有了解吗?
在此补充回答:Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a fucking pain in the ass”,ARM Linux社区对此作出了回应,引入设备树。
ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设resourcei2c_board_info、spi_board_info以及各种硬件的platform_data。为了改变这种局面,Linux社区的大牛们参考了PowerPC等体系架构中使用Flattened Device Tree(FDT),也采用了Device Tree结构,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,采用Device Tree后,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。

12、内存分为哪几个部分

回答:内存分为四区:堆区、栈区、全局区、代码区。

13、二分法查找的原理?

回答:类似于快速排序算法。二分法使用的前提是数组已经是有序序列,原理是折半查找,每次把表分成两半,因为已经排序的,所以只需要和中间数比较就能确定是在哪一半,然后不断分成两半,直到匹配,或者没有数字,表示查找失败。

14、二叉树了解过吗?前序,中序,后序遍历流程说一下。

回答:其实二叉树是很重要的数据结构,更深一点的知识点有平衡二叉树,红黑树,B树,B+树,B-树
等,可以自行了解。这里只问了前中后序遍历,2021秋招百度笔试也考了这道题。

15、内核裁剪说一下。
回答:个人理解,内核裁剪的原因主要是Linux内核本身很庞大,但客户有时候不需要这么多功能,想裁
剪,定制内核,定制功能。

简单的内核的配置有三种方式,在命令行输入:

1、make config 文本配置方式;
2、make menuconfig 菜单配置方式;
3、make xconfig 图形界面配置方式(需安装qt)。

补充个例子:假如客户需要在手机固件升级的时候,有个指示灯闪烁,该怎么办?这个时候你单纯写应用代码是没用的,因为手机固件升级的时候,系统都没有跑起来,这时候代码只能写在Linux内核的bootloader里,因为bootloader起来了。做嵌入式开发还是要熟悉Linux内核的,没学习的赶紧学习,用到是早晚的事。

16、memcpy(), strcpy(), strcmp(), strcat()有什么区别,如何避免内存越界?

回答:这几个函数,做嵌入式岗位必须要会,按照学校老师的话来讲:这道题是这次考试的必考题,15分就放在那里,爱背不背。这道题,浙江大华也考了,mtk也考了,做嵌入式对内存太敏感,必考。strcpy函数会导致内存溢出。strcpy拷贝函数不安全,他不做任何的检查措施,也不判断拷贝大小,不判断目的地址内存是否够用。

char \*strcpy(char \*strDest,const char \*strSrc)

strncpy拷贝函数,虽然计算了复制的大小,但是也不安全,没有检查目标的边界。

 strncpy(dest, src, sizeof(dest))

strncpy_s是安全的strcmp(str1,str2),是比较函数,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。(比较字符串)strncat()主要功能是在字符串的结尾追加n个字符。

char \* strncat(char \*dest, const char \*src, size\_t n);

strcat()函数主要用来将两个char类型连接。例如:

char d[20]="Golden";
char s[20]="View";
strcat(d,s);
//打印d
printf("%s",d);


输出 d 为 GoldenView (中间无空格)memcpy拷贝函数,它与strcpy的区别就是memcpy可以拷贝任意类型的数据,strcpy只能拷贝字符串类型。

memcpy 函数用于把资源内存(src所指向的内存区域)拷贝到目标内存(dest所指向的内存区域);
有一个size变量控制拷贝的字节数;
函数原型:

void \*memcpy(void \*dest, void \*src, unsigned int count)

17、栈和队列的区别?

回答:这两种数据结构都很重要,栈是先入后出,队列是先入先出。

18、memcpy函数以什么结尾?

回答:与strcpy相比,memcpy遇到’\0’不结束,而且一定会复制完n个字节,函数原型在上面。

19、你最有成就的项目或者经历是什么?

20、你有什么想问的吗?

5、浙江大华面试

岗位:嵌入式软件工程师。
浙江大华嵌入式软件笔试一共37道题,35道选择填空,2道编程,时间60分钟,C语言一半,C++一半。
一面是晚上九点半打电话过来,过程15分钟,可能他们还在加班。二面是现场面,过程20分钟。现场面
流程很快,二面完毕HR面,当天面试完毕。一周内发offer。
一面:

1、简单的自我介绍
回答:我主要介绍过去两年我做的项目和个人的知识框架

2、问了一下我主要用的编程语言,我说C

3、因为他们也做相机类产品,所以我把我实习的项目讲了一遍,包括标定sensor,标定shading、AWB这些相机相关知识。

4、如何防止编译器优化?

回答:volatile

那就顺便解释一下关键词static、const、extern的作用(经典)。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

29)]

[外链图片转存中…(img-IAvqeuut-1715715986530)]

[外链图片转存中…(img-kMd3FdaM-1715715986531)]

[外链图片转存中…(img-1x2R5cBc-1715715986531)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值