记录嵌入式面试的流程

选择嵌入式行业,意味着初期进行很大的付出,希望找到一份满意的工作也是理所当然的,最近正好离开原公司,面试了几家企业,基本参加的都给了offer,这里总结下面试遇到的事情,也是一种积累。我也经历过刚踏入嵌入式行业啥都不会的时候,那时面试都是以基础C语言为主,再以简单的模块如AD的精度,串口, SPI接口的应用调试特性为主,我下面分享的则是结合上面的知识,告诉你们一般公司对5年左右工程师的需求,我以有代表性的面试流程总结来讲诉。

1. 基础C语言测试,常见的题目类似下面的:

  • 定义一年有多少秒
  • volatile,static用法
  • 翻转指针链表
  • 清除,置位,赋值数据位
  • 中断函数,浮点
  • 如何C代码实现判断大端,小端
  • 指针,数组,强制转换
  • 存储空间,堆,栈,全局变量区
  • ...
  • 函数的健壮性,代码改进

这些面试资料网上一大把,可能是公司流程问题,不过对于5年工程师面试,公司也不看重这些,基本上是个过场,对的多不加分,错的多是扣分项,当然如果是一线的嵌入式研发工程师,基本上1年以上经验这些都不该有大问题,可以某些笔误,但不应该有明显不了解,这部分只对于初/未入行业的开发人员还是有一定筛选意义的。

2. 与人事的面试

人事的面试在技术面试的前/后都有可能,这一步一般来说即重要,也不重要。重要的是在于这一步决定了你以后在公司的福利待遇,工作时长,餐补和交通补贴等,不重要是除非你有重大的错误,如欺瞒学历,态度不端正等,基本不会影响到面试录取的最终结果。这里面有个重要的技巧,那就是薪资范围一定要比你心理能接受的价位要高,如心理价位是1w,那至少要1w2-1w4,心理价位是1w5,那至少要1w8-2w;因为这并不得罪人,在工资上,负担对象是公司,而不是你对面的人事,这样给后期技术面成功后留下调整的空间,我至今还没遇到过要多少给多少的,后期都是通过沟通在预期薪资基础上少500-1500不等,千万不要因为太想去而降价,因为这会影响到未来几年的收入,还影响调薪的基数。另外对于加班和现在深恶痛绝的996,可能是因为行业原因,加班我是接受的,在项目紧张的时候别说996了,997我都干过,但我不接受的是强制996,就是我有工作未完成,加班我愿意来,但不能强制,周六必须上班这种。当然我也因此直接拒绝了一些公司,甚至我所在行业的靠前企业,当然这是我的想法。我这么说就是告诉你不要把自己放的太低,即使是面试者,和面试官也是平等的,提出自己的诉求没问题,当然我不会说坚持不加班的,这就是对自己和工作需求博弈的定位。

3. 与技术的面试

在我刚踏入嵌入式行业的时候,技术面试对我简直就是灾难,现在回想起来,其实对于面试官来说,这种面试也很窄,只能从较少的小项目中来问一些很基础的东西,如各个模块的调试经历,涉及到C知识,对硬件开发的了解(这一部分是初期很薄弱的),关键是稍微问深点也很难答上来,因为这些模块我们都是调用芯片厂商库开发的,也没用覆盖性的测试,很难说出有亮点的问题和解决问题的思路,但当工作几年出来后,再去面试是很有趣的事情,基本上都是和比你强,或者至少一个水平的人来互相探讨交流,是一个吸收碰撞,整理自己不足,开拓视野的过程,这里分享下我遇到的面试问题。

技术面试很多都是以介绍自己的工作项目开始,在我工作3年后面试基本上自我介绍就可以完全把控流程,这种对于做过项目的人来说其实真的很简单,甚至通过一个项目,就大致可以整体了解一个人的水平,以我刚入行做的交换机管理模块为例,我大致阐述了产品的架构,由STM32芯片+新塘单片机+FPGA构成,我负责STM32芯片完整软件开发,支持远程网络在线升级,主要包含FreeRTOS移植,LWIP移植,http/telnet/snmp服务器实现,以及与新塘通过RS485接口,使用自定义协议通讯,这些简单一列出来,很多问题立马就提出来了,下面并非标准答案,只是我根据实际开发产品,所阐述最后得到offer的答案,这个要谨记。

  1.项目中的任务是怎么分配的,任务间怎么通讯

  LWIP占用两个任务,底层任务和LWIP内部管理任务,底层任务由信号量堵塞,由ETH中断触发产生信号量,读取ETH接收的数据;LWIP内部管理任务使用队列管理内部的所有消息。RS485任务单独创建任务,与UART和DMA中断配合,产生信号量来读取共享数据区的接收数据,用于轮询下位单片机提供的FPGA参数。http和telenet也都是单独任务管理,使用邮箱与LWIP内部管理任务进行TCP数据的交互。另外还有空闲任务用于LED指示灯的闪烁和看门狗喂狗。

  说明:用来考察对项目的认知熟练程度,只有完整实现的才能理清楚内部整体架构信息。

  2.项目使用了自定义协议,是什么结构,可以用C写下如何实现吗

这个如果学习了解过Modbus协议,那么我们这个自定义协议其实差不多,结构为:起始位+地址位+指令+数据长度+数据+CRC校验,具体实现可参考《利用串口点亮/关闭LED灯》里面关于协议的实现,代码很简单。

  说明:即考察C知识(指针,数组), 也涉及到协议内容,关键是也不难,很考验基础

  3.项目使用RS485接口,是如何保证双机通讯的稳定性的

  为了实现稳定性,主要包含了硬件/软件的方法,软件上当数据发送失败或等待返回超时,进行异常计数,继续轮询,当超过一定次数后(我们定义的是三次,成功则清零),此时则通过硬件引脚强制复位下位机芯片,并将下位机状态置为异常态,清零计数,在重复轮询过程,如果继续失败,则将下位机状态置为出错,修改内部错误码,并反映到外部的指示灯上和管理界面上,通知产品通讯故障。

  说明:稳定性,即是技术问题,也是经验问题,这可以看出开发中的设计思路,没有遇到过是很难考虑到的

  4.你们对于FLASH的配置数据存储有效性是怎么保证的

  对于配置数据的存储有效性,也涉及到软件/硬件方法,硬件上我们使用备份页和备份标志区,将要写入区域的数据先写入备份区,同时置位备份标志位,然后在原地址执行解锁,擦除,写入流程,如果成功则擦除备份标志位,失败返回错误即可。软件上我们将写入FLASH的数据定义为结构体,并添加CRC校验位,读取后校验失败后则使用默认的配置数据。

  说明:同上

  5.你实现了在线升级功能,具体怎么实现的

  在线升级主要实现bootload以及实现网页在线下载,产品中将FLASH划分成bootload和Application,以及更新代码暂存区,通过网页将固件更新到暂存区,并修改标志位,产品重启后,bootload如果检测标志位和校验都通过,则将代码移动到Application区域,然后在跳转执行,否则直接跳转执行(我这里只是简单说下流程,实际会复杂些,详情可以看之前的文章)。

  说明:单纯的功能实现,也是需要实践才能讲清楚的,很考验功底

6.你们产品开发的流程是什么,你参与了什么

  产品开发流程包含:

  • 市场调研
  • 项目立项,确定开发方向和产品需求
  • 产品架构设计(芯片型号,外部模组和器件组合,参与主要配合选型和功能需求分析,初步文档完善,进行系统,协议实际的定义)
  • 硬件实现和开发板软件搭建(考虑开发难度,在开发板上实现基本框架搭建,可以将开发遇到问题反馈,配合进行硬件的设计完善)
  • 软件流程开发,在硬件初版完成后,将上述搭建实现代码移植到方案版上,并结合实现完成基本功能开发。
  • 产品优化和需求更新,在产品研发后期,主要结合开发遇到的软/硬件问题,配合硬件完善产品的功能
  • 产品测试,配合测试工程师的电压稳定性,高低温,老化,产品需求方面的测试,解决反馈的问题。
  • 开发文档,使用文档和后期维护文档完善

  说明:参与正规的流程开发是很大的加分项,即体现了专业性,也可以展现知识的全面性。

  7.对于互相配合的项目,你们怎么进行管理的,如果有多人配合项目,有部分维护底层驱动库,而你到现场进行支持,需要修改底层驱动库,你怎么处理

  我们使用SVN管理,个人对自己负责的库进行维护管理。遇到你说的情况,我们采用的方法是如果客户要求不着急,则现场人员将更新提交到库的维护人员,进行库的更新,然后在客户这边进行整体库的替换,如果要求时间比较紧张,则现场提供测试版本分支,不直接并入库中,解决后在提交给库的维护人员,进行版本更新,然后通知用户更新到正式版本。

  说明:分支管理和客户需求对于大型项目是最大的痛点,即是很难把控的问题,也是经常遇到的问题,我说明的只是我的解决办法,可能不是最优的办法。

  8.你掌握的这些接口,模块(SPI, I2C,USB等)在这份工作并没有任何涉及,你是怎么考虑的

  其实嵌入式内部也是分很多行业的,像我之前在的通讯,安全行业,基本上知识涉及偏差也很大,但这么多项目做下来,也经历了很多产品,可以明白这些接口,模块在实际的项目开发中是占比很小的一部分,实际工作集中在任务管理,协议处理,功能需求实现这部分,虽然这些模块在这份工作没有涉及,可调试这些模块,实现功能的过程中,积累的C语言知识,硬件驱动开发能力,软件设计思路是相通,这部分才是积累的知识。

  说明:这个问题其实很难回答,基本上是否定你明面上的技术栈,让你回答你还有什么对这份工作有利的部分,我的回答算中规中矩。

  还有些问题因为印象不深刻就不一一赘述了,上面的这些聊完,在穿插些结构图的绘画和讲解,基本上一个小时也过去了,面试是不是就不知不觉完成了,纵观流程就会发现,对于一个成熟的工程师,基础的研发能力,功能开发的思路,对产品的认知(稳定性和项目流程), 与他人的配合,还有对行业和自己的认知都是考察的内容,如果没有充分的经验,是很困难的,这里以此共勉,希望有帮助。

原文地址:https://www.cnblogs.com/zc110747/p/10739703.html

时间: 2024-10-11 13:01:24

记录嵌入式面试的流程的相关文章

干货|大厂程序员来讲一下互联网公司技术面试的流程以及注意事项

企业一般通过几轮技术面试来考察大家的各项能力,一般流程如下: 一面机试:一般会考选择题和编程题 二面基础算法面:就是基础的算法都是该专栏要讲的 三面综合技术面:会考察编程语言,计算机基础知识 ,以及了解项目经历等等 四面技术boss面:会问一些比较范范的内容,考察大家解决问题和快速学习的能力 最后hr面:主要了解面试者与企业文化相不相符,面试者的职业发展,offer的选择以及介绍一下企业提供的薪资待遇等等 并不是说一定是这五轮面试,不同的公司情况都不一样,甚至同一个公司不同事业群面试的流程都是不

嵌入式系统开发流程

嵌入式系统开发与通用系统的开发有很大的区别.嵌入式系统的开发主要分为系统总体开发.嵌入式硬件开发和嵌入式软件开发3大部分. 在总体开发中,由于嵌入式系统与硬件依赖非常紧密,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器的选型,以更好地满足产品的需求.另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择.往往通过硬件实现会增加产品的成本,但是大大提高产品的性能和可靠性. 再次,开发环境的选择对于嵌入式系统的开发也有很大的影响.开发环境包括嵌入式操作系统的选择以及开发工

【转】嵌入式产品开发流程

嵌入式产品,与普通电子产品一样,开发过程都需要遵循一些基本的流程,都是一个从需求分析到总体设计,详细设计到最后产品完成的过程.但是,与普通电子产品相比,嵌入式产品的开发流程又有其特殊之处.它包含嵌入式软件和嵌入式硬件两大部分,针对嵌入式硬件和软件的开发,在普通的电子产品开发过程中,是不需要涉及的.嵌入式产品的研发流程具体如下图: 下面,针对嵌入式产品的开发过程中的各个阶段,我们进行详细探讨. 阶段1:产品需求 在这一个阶段,我们需要弄清楚的是产品的需求从何而来,一个成功的产品,我们需要满足哪些需

嵌入式产品开发流程(转自网络)

嵌入式产品,与普通电子产品一样,开发过程都需要遵循一些基本的流程,都是一个从需求分析到总体设计,详细设计到最后产品完成的过程.但是,与普通电子产品相比,嵌入式产品的开发流程又有其特殊之处.它包含嵌入式软件和嵌入式硬件两大部分,针对嵌入式硬件和软件的开发,在普通的电子产品开发过程中,是不需要涉及的.嵌入式产品的研发流程具体如下图: 下面,针对嵌入式产品的开发过程中的各个阶段,我们进行详细探讨. 阶段1:产品需求 在这一个阶段,我们需要弄清楚的是产品的需求从何而来,一个成功的产品,我们需要满足哪些需

salt的api学习记录---minion的启动流程

最近在看minion的启动的源代码,一路曲折啊,经过一番努力,终于理解了流程.现在记录下,方便以后查阅. 总体来说流程如下: 1.解析命令行参数和minion配置文件,得到options和config字典 2.设置日志(salt.log.setup.setup_logfile_logger负责) 3.设置pidfile 4.根据master参数决定调用salt.minion.MultiMinion或者salt.minion.Minion初始化 5.调用tune_in方法 解析命令行参数和配置文件

第一章:面试的流程

1.应聘者在电话面试的时候尽可能用形象的语言把细节说清楚. 2.如果英语面试时没有听清或没听懂,要敢于说Pardon.大胆提问,直到搞清楚面试官的意图. 3.编程习惯: 思考清楚再动手(思路.算法时间.空间复杂度.特殊情况处理): 良好的代码命名和缩进对齐习惯: 能够单元测试(能做到测试在前.开发在后的程序员稀缺): 在桌面远程面试过程中,面试官最关心的是应聘者的编程习惯和调试能力. 4.现场面试: 规划好线路并估算出行时间: 准备好得体的衣服: 注意面试流程: 准备几个问题: 5.面试的三个环

java面试①整体流程

http://www.toutiao.com/i6463396763549041166/ 1.1 简单的自我介绍 我是xxx工作了xx年,在xx公司,做过xx项目, 1.2你简单介绍一下xxx项目 为了解决xxx问题,开发类一套xxx系统,该系统有哪些部分组成.简单介绍项目的整体结构,参与哪个模块的开发,就要求说一下这个模块的业务设计 1.3会问java的专业技能 1.4 你还有什么需要问我的吗? 公司要做的项目?项目会使用一些什么技术? 经历了多轮面试后,对于你的自我介绍和项目经验面试官就不关

DNS资源记录类型和请求流程

DNS分布均衡(Load balance)的实现 在上级数据库中写两条记录(同一个名字对应对个IP时),DNS会自动将请求基于轮循方式,分给每个DNS服务器 例如: 第一次将请求给第一个DNS,第二次将请求给第二个DNS,... 依次循环 注:客户端连接第一个主机连接不上时,将请求都给第二个主机,linux还可以给第三个DNS服务器 第一个找不到时,不会再让第二个DNS.第三个DNS去找(因为根域都找不到) DNS分布式特点 基于授权将功能分散出去,让多个主机分别处理 数据放在多个位置,导致数据

第一篇博客-记录测试面试高频题

http和https的区别 https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443. http的连接很简单,是无状态的.Https协议是由SSL+Http协议构建的可进行加密传输.身份认证的网络协议,比http协议安全.(无状态的意思是其数据