秋招情况
去年的情况不用多说,大家也都清楚,只能说寒冬已至,相比于前年,各公司的hc是骤降,而且去年也是扩招的第一年,毕业人数也大大增加了。
我的简历情况大概就是:本硕211+国奖+实习经历+论文专利+相关的三段项目经历,在去年4月份开始准备找实习(有点晚了,三月份就可以开始了),当时就投了霍尼韦尔、联发科和华子,华子简历挂,联发科一面挂,霍尼韦尔给了机会(但是不想去)。
我意识到大事不妙,斟酌一下放弃了实习,直接准备秋招。
对了这里可以提一下,获取校招信息可以有这些途径,比如哪些公司开始提前批了,哪些公司开始正式批了,我可以投哪些公司的在哪些城市的哪些岗位等。其中有:牛客网(校招历程,牛客上也会有hxd专门整理更新校招的资讯,搜索一下就好了)、各种微信群、QQ群、学校官网(会有公司进校招聘等等)、企业官网、各种微信公众号。建议能用内推码就用内推码,在牛客网有很多内推码分享,各大公司都有。
我自己整理的25届秋招可投递公司文档,在线文档,大家直接点开就能看,会持续更新的,我大概每周五会更新一下:
秋招我从六月份提前批开始投,到九月末正式批总的算下来有差不多40家公司(我也是懒狗,而且小公司都不碰就冲中大厂),提前批冲了十几个厂,一大半都简历直接挂,去年hc比较少,大多招人提前批都招满了,之后正式批我就没碰特别大的厂了,本硕211没有竞争力。
我去年offer大概的投递情况,按时间先后:中电10所、TP-LINK、博通集成、集创北方、禾赛科技、中科芯58所、联发科、芯动、大华linux c、安路科技、睿创微纳、蔚来嵌软、乐鑫科技、联影微电子。正式批投递了:联芸、磐启、大疆嵌入式、复旦微电子、思威特、海康威视、灵动微电子、寒武纪、联想、矽力杰、RIGOL、苏州国芯、聚辰、合芯、NXP、海光、TP-LINK、思科、联合汽车、芯动、华为、新华三、兆易创新、freetech杭州、旺宏微电子、三维通信、星猿哲科技、集度、达发科技、豪威科技、oppo、Alibaba、商汤科技、小米
这些公司情况大多是:
- 了无音讯:中电10所、TP-LINK、集创北方、大华linux c、安路科技、磐启、灵动微电子、寒武纪、联想、RIGOL、聚辰、思科、芯动、华为、三维通信、豪威科技、oppo、Alibaba、商汤科技
- 有笔试无面试:芯动、大华linux c、蔚来嵌软、思威特、思科、新华三、兆易创新、freetech杭州、小米、海光
- 意向书及薪资:
- 乐鑫上海site:sp,38W+ 饭补每天50,12%公积金,必加班
- 联影微电子上海:32W+,大大大大大白菜
- 博通集成上海:排序不等了
- 睿创微纳:26W左右,福利工资一般,还加班
- 矽力杰:32w,还有10W签字费,统一价,据说不加班,965
- 联合汽车:26W左右(加上苏州补贴3W,什么饭补高温补贴等等),很休闲但是工资低
- 苏州国芯:总包35W左右,据说是薛定谔的加班
- 旺宏微电子:总包34W左右,加班,小而精的公司
- 旗芯微:总包36W左右,公司成立没多久,不过有自己的产品,会加班
值得一提的是,去年许多人岗位都是冲提前批得到的(我得到的意向书一半是提前批),除非是没有提前批的中大厂,去年少量hc中的大头还是提前批。
学习路线
本科阶段
本科是一所211院校,专业是电子信息。本科的时候主要是基础的学习。最开始先学习c语言,然后接触了51单片机,之后再学习了STM32。那个时候STM32也没有现在很火的cubemx啥的,底层什么的都是自己照着例程配,虽然学习的很艰难,但是真的会学到很多东西(所以说建议大家还是多看看底层代码,不要太过依赖这种一键配置的SDK,很多时候面试官都会考验基本功)。
在学校中先后参加了蓝桥杯大赛(省二,没有认真准备,不过蓝桥杯没有国奖都不好意思写简历上)、电子设计大赛(省二,当时做的是一个无线充电小车,没有什么编程难度,主要就是硬件电路的设计,无线充电模块也是买的,这么紧张的时间内做好这样的一个设计还是挺肝的,当时对自己也有很大的提升)、互联网+大赛(用的学校的科研项目,主要就是利用红外测距,返回距离,然后各种应用。这方面技术应用太多了,创新也不够,市场需求就别说了,互联网+本质上还是商业化多一点的,所以直接校二)。

不得不说参加各种比赛是对自己相关知识的锤炼,在项目中你可以很简单的发现自己的各种不足,并且由于是固定的ddl,也会push你抓紧一切时间提升,虽然过程比较艰辛,但是可以非常好的锻炼自己的相关技能。企业当然也希望有这种参赛经历的学生,不仅仅是技术上的,也会是团队合作、项目统筹等方面的经验优势。
研究生阶段
研究生是保研的本校,研究的方向为嵌入式软开。读研期间,我负责多个老师的横向项目,接触了FPGA、ZYNQ等平台,进行了更加深入的底层驱动开发,同时也涉及Linux操作系统以及应用层开发,总体来说项目都有涉及。
项目包括一个基于ZYNQ的视频检测系统,视频的采集是通过5640摄像头的mipi接口,涉及到摄像头的iic初始化、摄像头数据的传输方式、摄像头数据流的格式和转换、数据的存储等待;将数据存储到板卡上后由操作系统端进行读取,这又涉及到PL和PS的交互、操作系统的配置、设备树配置和内核的剪裁、操作系统的启动流程等等;最后在软件方面还有图像的增强、相关物体的检测以及一些算法的优化。
在项目的过程中,我会将项目的各个功能进行模块分类,一个个完成,因为导师也有开组会的习惯,所以我基本每周将工作进度,遇到的问题以及下周要做的事都写成word,这样也是有好处的,有的时候做着做着之前的点就忘了怎么解决了,可以回顾一下看看以前的想法,说不定就做出突破了。
在这个过程中,也碰到许多因为代码移植、板卡配置等等遇到的问题,一般都是看看例程代码,网上寻求相似问题解答等等,在一步步尝试中加深这个模块的理解,并且解决问题。在一个个发现问题-解决问题的流程中逐步掌握知识点。
这个项目不管是应用层还是底层都有所涉及,并且由于是自己所负责的项目,相关的细节也了熟于心,基本面试情况下大多数面试官都是针对这个项目进行提问,所以在一次次提问中还可以对项目进行优化和查漏补缺。
在简历中我也加了一段对stm32的底层相关的项目,控制电机驱动芯片使得小车进行运动,涉及到时钟、中断、看门狗、spi、uart、编码器闭环控制等等,也算一个完整的项目并且也有系统的板卡测试过程,也是自己主要负责并且走完流程的项目。
主要上一个项目偏应用层,再加一个项目偏底层一点,到时候都能说。
对于这个项目,面试官可能更加注重底层逻辑的开发,比如时钟的配置、相关总线、spi、uart初始化、中断配置及实现等等,这些在做的过程中遇到的都是需要掌握的,简历上的项目要么你不写,要写一定要100%掌握。
在研一末也进入一家小公司进行三个月的实习(糊涂啊实习千万要去大公司),之后幡然悔悟研二末想找实习却忙的要死且形式突变。
在我看来一份实习经历还是很重要的,要冲提前批和大厂那就肯定要一份优秀的实习经历(就去年来说),而且实习能够学到很多在学校中学不到的东西,也能更好的从产品端看项目,同样水准下面试官也肯定更加倾向于有实习经历的面试者。
在读研期间也获得了一个A类赛事国奖、两篇发明专利(但是两个专利都是前年年末投出去的,挂出来没多久,还在审核中,虽然问题不大但是拿不到结果,就比较难受,只能说说)以及一篇中文核心,也算是收获比较多的。
我也看过很多我身边同学的相关简历,在项目上的不足主要就是:
1、没能突出自己所做的重要工作,没能突出自己工作的技术栈。这样的讲述通常都会让面试官觉得你的项目平平无奇,并且面试官也无从下口;
2、通常对项目追求量而不追求质;项目的质和量一般不能两全,有的人写了很多的项目,并且拿简单项目凑数,且都用一样的篇幅描述,面试官一方面会质疑你的专业水平,另一方面也会对简历的排版有所诟病。
在我看来,简历最好详略得当,一般2-3个项目就好了。有实习经历就两个项目,没有实习经历就三个项目,并且详略得当(你要考虑,因为面试官可能没有时间全部问完你的所有项目,所以经常的问题就是:这几个项目中你最熟悉哪一个,详细介绍一下项目分工、项目介绍、项目开发思路(原理论证、方案对比、项目架构)、创新点难点、具体实现等。所以你要选择一个项目多写一点并且多准备一点,其他可以省略一点)。
对我来说就是写两个项目,ZYNQ做的比较多的工作就写上面,然后用较多的篇幅描述这个项目;之后小车的项目就排在后面,稍微简略一点描述一下。
对于项目的内容,突出你项目所需要解决的问题,你项目中用到的哪些技术栈以及技术难点,你项目的相关创新点等等,并且保证写上去的东西你都会,并且都能够清晰的被面试官捕捉到,这样其实下意识的面试官会询问你你在简历上写着的技术栈,有所准备的话就可以完美应对了。
同时面试嘛,也是循序渐进不断补充自己的时候,在这个过程中不断的面试、发现问题、解决问题、更新简历以及自己的库,才能够越来越游刃有余。
学习路线
这里讲的主要是嵌入式软件开发
对于嵌入式软开具体可以分为三类,分别是嵌入式应用工程师、嵌入式系统工程师和嵌入式驱动工程师。
嵌入式应用工程师,主要负责编写业务逻辑,调用驱动接口控制设备,在软件开发过程中涉及的内容范围非常广,主要用C语言开发,但也会涉及C++、计算机网络、操作系统、多线程、数据库、和通信协议等知识。
同时嵌入式应用工程师也是各大公司里需求量最大,门槛较低的一个职位。
而嵌入式系统工程师主要职责是编写固件,根据不同平台移植操作系统、优化系统,需要熟悉操作系统的组成与调度,门槛也高,很吃经验;
最后是嵌入式驱动工程师,需负责编写和移植各种厂家的芯片驱动,因此对硬件的接口协议和操作系统的知识要求很高,门槛相当高;
从就业的角度出发,对于有一定计算机基础的同学们来说,如果你想入行嵌入式,嵌入式应用软件开发可能是你比较好的选择,没有第二个选项了。
具体一些的学习路线:
1、C语言
需要掌握基本数据类型、运算符和表达式、数组、指针、函数、结构体、联合体、枚举、位运算等知识。其中重点掌握数组、指针、结构体、联合体和位运算,它们在面试中的考察频率很高。可以先在网上看C语言的常见面试题,再结合去查缺补漏。
2、数据结构和算法基础
重点掌握数组、链表、队列、栈和二叉树等数据结构即可。
对于经典的算法,一定要有自己的理解并且学会手撕,需要重点掌握的有冒泡排序、选择排序、插入排序、归并排序、快速排序、二分查找算法,面试很有可能让你手撕代码或者问你某个算法的时间复杂度。
对自己要求不高的同学可以只做一些很经典的简单题,加深自己对数据结构用法的理解。
3、硬件相关知识
可以看懂原理图、芯片手册,了解STM32外设(GPIO, 时钟, USART, DMA, SPI,I2C 等
等)以及标准库函数和HAL库开发等
4、操作系统基础
计算机操作系统相关知识,包括操作系统的特性、中断处理、进程管理、进程线程同步、进程调度、死锁、存储内存管理、文件管理、设备管理、异步任务线程池相关内容等
5、Linux系统编程
需要掌握Linux开发环境的搭建、基本的Linux命令、文件IO和标准IO操作、进程控制、进程间通信、多线程编程、网络编程。
6、C++
7、QT开发
如果你有一定的C++基础,建议学下Qt这个框架。因为这个框架并不难,有C++基础的话上手很快,可以增加你的就业面,因为很多嵌入式项目和军工、医疗设备项目都有提到Qt框架。
此外,不少研究生的研究方向与图像处理、点云处理相关,会接触到OpenCV、PCL这些库的使用,我们其实可以和Qt结合起来做一个相对完整的软件项目。
有条件的话,可以录制一下项目的工作视频和实验图片,在线上面试的时候,以PPT形式来介绍自己的科研经历。
项目学习
16个STM32项目,包括FreeRTOS、LORA通信等相关内容
20+嵌入式Linux应用、Linux驱动、AI、自动驾驶、汽车电子、音视频开发等多个方向的项目等你来学
+微星了解详情~
秋招准备
因为导师比较放的松,我也就早早的摸鱼开始准备了。每个人对这个学习的方法是不一样的,我就喜欢看教学视频。
我从前年9月开始,先看某站的C语言基础及C语言深究,之后再看数据结构与算法(这个我也顺带看大话数据结构这本书,还是很不错的),接着过一遍C++基础(毕竟自己用C比较多,但是C++还是要掌握的,笔试面试都会遇到题目),然后就是计算机组成结构、计算机网络和操作系统等的学习。这些都学完差不多是去年的4、5月份了。
刷题的话其实前年9月份只要有空我就会做leetcode的每日一题,然后在系统性学完专业基础知识之后,5-6月份大部分的时间就都花在网上刷题了。我就在Leetcode上疯狂刷题了(剑指offer+力扣hot100必刷),字符串、数组、指针、函数、算法、二叉树、链表、堆栈等等都刷过,而且不会的收藏一下,有空再看一遍。
笔试面试题目
一些秋招用得上的笔试面试资料,需要直接+威:linglv03
算法能力的提升是一个长期积累的过程!做题厉害的并不是聪明,而是踏踏实实的努力。去年我也发现很多中大厂都喜欢现场笔试并且手撕代码,而许多大厂,比如字节、阿里等甚至四轮技术面四次手撕代码,这个还是很看重基础的,所以大家还是要多练多刷题。
重复,死磕,到会为止。用很多的时间做这件事不亏的,这些都是基础,重中之重。对于嵌入式来说其实对手撕算法并没有太大的要求,但是现在行业内卷太严重了,大家都在刷,你不刷就直接被淘汰了。
对于专业知识,一方面我主要还是针对项目进行学习,要知道每次面试100%会深挖你的项目,很多的八股其实都是顺着你的项目带出来的,就是考察这个项目是不是你做的,你在当中负责的部分是否完全熟悉。
首先就是对于项目的方方面面,细节都摸得很清楚,能够做到问什么都能够回答出来。同时对于项目延申出的一些知识点也需要掌握清除,防止面试官问到(在面试的过程中肯定也会遇到没准备到的,还是要好好总结,查漏补缺)。
对于自己的项目,如果是stm32底层开发就看底层代码,如何配置时钟的,如何配置外设,spi、uart、iic等,如何配置中断,进入中断的。
如果是linux应用相关的,就是看驱动配置、设备树配置、内核和文件系统,看看操作系统,多线程等等,最后还要归纳一下项目的困难点,对于这些困难你怎么思考的,你从项目中学到了什么,如果是自己从头做到尾的还是很好概括的。
另一方面就是各类面经以及大佬们整理好的资料啦,就照着过,然后该背就背。对于遇到的不清楚的,比如设备驱动、底层开发等等问题,就在网上找视频或者教学资料,比如韦东山老师的课程、野火的linux课程,有什么不会的直接看章节过一遍学一学。
其实基本到面试阶段就学的差不多了,对于我来说,我是喜欢在看面经、资料以及面试过程中,遇到不清楚的不会的,就记录一下。我专门新建一个word,分类操作系统、计算机网络、C语言、嵌入式底层、应用及Linux、算法等,然后在里面添加模糊的不会的知识点,有时间就过一下,至少你要做到,前一次面试官问到的不会的知识点,下一个面试官问到你会作答,一个人在一个坑掉两次那就很不应该了。
当然在我看来,最重要的是自己要多学多思考,在里面加入自己的正确的理解,面试官当然希望听到正确的答案,但是对于有着自己个性化解释的正确答案更加能够吸引面试官。
对了对于面试官来说关于项目会问:
- 让你描述工作经验和项目,看看你说的是否和简历上一致;
- 看你简历上项目里用到的技术,比如SPI,验证你是否做过项目,同时看你是否了解,然后针对这些技术深入挖掘;
- 针对某个项目,不断深入地问一些技术上的,深入核实你的项目细节问题,或者从不同侧面问一些技术实现,主要看你前后回答里面是否有矛盾;
- 针对某技术,问些项目里一定会遇到的问题,通过这类问题,核实你们是否真的做过这个项目。
在一些比较开放性的问题中,也可以在自己经历的基础上进行稍微的美化,能够体现自己动手能力很强、肯干活、会的东西比较多、团队合作精神比较好、责任心强、抗压强、有主见等等。
秋招面经
霍尼韦尔实习 ( 一面主管面)
- 自我介绍
- 深挖项目,介绍框架,思路,具体实现,你做了什么工作
- 如何配置ov5640,你是在Linux下配置的,怎么操作的?
iic配置,因为5640使用的SCCB协议,和iic差不多,所以就是通过5640的写地址0x78直接进行sccb寄存器参数的配置。因为是在linux下进行配置,所以需要对设备5640在设备树下对设备号进行初始化,并连接相关的驱动文件,之后在操作系统开机初始化之后就可以对相应内核进行配置,当我们的可执行文件访问5640时,就可以对他进行直接的初始化并调用它)
- 什么是DMA,DMA传输的格式?(直接存储访问,格式没答出来)
- 你是怎么进行操作系统(OS)剪裁的?步骤?(设备树配置,编译源码)
- 如果采集图像输入输出速率不匹配怎么办?出现帧撕裂等问题怎么办?
因为在视频传输中很容易出现读写不匹配带来帧撕裂的问题,其实就是在传输的过程中,还没被从端读取输出的数据又被主端重新写入新的数据了。所以我是使用的双帧缓存,开辟两个空间并且读写端互斥访问两个空间,做到一个空间同一时刻只能被读或者被写,这样可以保证帧撕裂不再发生;对于速率不匹配,一个就是减少图像的大小,减少帧率来减小数据量,另外一个就是一般主端或者从端总有一个传输速度是固定的,所以传输的最大速度也是固定的,对另一端进行代码上的优化以寻求速度的匹配
- 什么是volatile变量,有什么用?
一个定义为volatile的变量是说这变量可能会被意想不到地改变,加了这个关键字,编译器就不会对他优化。精确地说就是,编译器在用到这个变量时必须每次都小心地重新读取这个变量在内存中的值,而不是使用保存在寄存器里的备份
- 了解我们公司么?
(不了解,主管介绍)
- 你准备实习多长时间?
三个月,主管直接发笑,时间太短了
- 反问
一面主管面,二面hr面(hr面过了很久了已经忘了)总体来说还是很舒适的,霍尼韦尔也是个很好的平台,外企工作强度也不高。
睿创苏州提前批
- 自我介绍
- 项目相关:介绍项目背景、开发思路、框架、具体实现;
- 你觉得你项目过程中让你觉得困难的地方是什么?怎么解决的?
这个问题主要看公司以及你的岗位,如果你是招聘的应用层开发,那就聊一下驱动配置,设备树配置以及文件系统相关的困难点,怎么解决的;如果你是应聘的底层开发,那主要聊一下底层逻辑,中断相关怎么实现的,相关的通信的底层实现。主要还是体现出你对项目问题的思考,你的解决方法的切入点还有你对项目的掌握能力。
- 介绍一下static
静态局部变量,在函数中定义,若不初始化则为0,只占用一个空间,只能在函数中被修改、静态全局变量只能在该文件中使用及修改,其他同上、静态函数只能在该文件中被使用,其他文件不能调用该函数
- 进程一般有哪几个区?
静态区、代码区、堆、栈
- 静态变量存储在哪个区?
静态区
为什么静态变量和一般变量在一个区,作用却不同(编译器对static怎么做)?
静态变量就初始化一次,只占用一个内存空间,编译器在读到static之后就会对他赋予不同的作用域,使得它只能在作用域内有效,如果作用域之外的文件调用它,就会报错显示没有初始化该函数/变量
- 讲一下多线程间的通讯手段
管道、信号、全局变量
- 死锁是什么?怎么发生的?如何解决?
多个进程在运行过程中因争夺资源而造成的一种僵局
- 学校的成绩?
前10%
- 你了解我们公司么?为什么选择我们公司?
- 偏向于底层驱动还是应用层?
- 反问
HR面
- 自我介绍
- 在学校的成绩排名?获得过什么奖项?
- 你觉得别人对你的最多的评价是什么?说三个词?
- 你觉得你有哪些优点?
- 你在公司实习过,有什么收获?
- 上学期间有什么让你特别印象深刻的事么?
- 之后会留在苏州进行工作么?
- 你愿意提前实习么?
- 有没有面过其他公司?有特别想去的公司么?
- 你的未来规划(职场、生活等等)
- 有没有女朋友(怎么每个hr都喜欢问这个)
- 你选择公司的比较看重的点是什么?
- 你的期望薪资是多少?
- 反问:培训、住房、薪资
上市公司,最主要的亮点就是有双休,平常不加班,所以工资给的不是很高,适合养老。面试友好,面试官亲切。
联发科嵌入式软开提前批
一面(50分钟)
面试官非常和蔼,先自我介绍,之后前期话题主要围绕着项目提出各种发散性问题,包括项目分工、项目介绍、项目开发思路(原理论证、方案对比、项目架构)、创新点难点、具体实现等。项目是自己做的回答起来就不成问题。面试后期基本上是夹杂着少量技术问题的聊天,笔试题没做对的面试前要搞懂(可能会问,但是我没有被问)。
- 项目中的难点在哪里,你在项目过程中遇到了哪些困难,怎么克服的?
- 有没有参加什么比赛?
老师推荐,在第一时间作为队长报名比赛,使用的是自己正在进行项目的半成品。在一个月的准备时间中,大部分时间用来优化算法及硬件设备,其余时间整理文档及演讲素材,最后几轮比赛后也很荣幸获得国家二等奖的奖项。我比较享受比赛紧迫的氛围,在这种情况下可以让自己进行项目的突破,这种成就感是不可替代的。在这个过程中我也学到了许多,获得的奖项也是对我努力的认可。
- 在学校的成绩怎么样?
前10%
- 你为什么选择这家公司进行实习(有实习经历的话)?
老师横向项目,要求去公司实习完成项目
- 为什么选这个site?
- 你还投了/面了哪些公司
- 对联发科的了解
- 反问
二面(30分钟)
- 自我介绍
- 狂问项目
和之前差不多,基本根据我的简历一条一条问
- 为什么static可以让其他文件访问不了静态函数
静态变量就初始化一次,只占用一个内存空间,编译器在读到static之后就会对他赋予不同的作用域,使得它只能在作用域内有效,如果作用域之外的文件调用它,就会报错显示没有初始化该函数/变量
- 形参存储在哪个区?
栈
- 为什么选择联发科
- 怎么平衡生活和工作
- 接受加班么
- 反问
发哥不多说了,面试官很亲切,二面后挂
中科芯58所提前批
一面
- 自我介绍
- 你在做这个项目时遇到的最困难的事是什么,怎么克服的?
- 你在项目中负责什么工作?你做了什么,取得了什么成果?
负责项目的全部流程开发,主要是项目原理证明、软件实现、算法优化、硬件实现以及相关测试工作,最后所设计的产品达到了预期的性能,产出一篇中文核心,两篇发明专利
- 你项目中用到了FPGA,你了解么,会写verilog么?
因为项目中FPGA用的不是很多,都是照着例程修改的,所以可能不是很熟练。会写会读verilog
- 你项目用的板子的ARM核是什么核,介绍一下?
A53
- 看你还剪裁系统了,操作步骤是什么?
设备树配置、源码编译
- 用过几年的stm32?
两年
- STM32上你比较熟悉哪几个模块?
IO模块、SPI模块、UART模块、中断、时钟配置、看门狗等等
- IO口的开漏输出和推挽输出有什么区别?
两者对于低电平的输出相同,对于高电平的输出不同。推挽输出:可以输出高,低电平,直接连接数字器件; 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行
- 介绍一下SPI传输,有几个口?
四个,SCK时钟线,CS片选信号线以实现单主机控制多从机的操作,MISO主机接受从机发送,MOSI主机发送从机接收
- 知道SPI的DMA么?
不是很了解,没有碰到过
- 你项目中使用SPI做什么操作?怎么用SPI控制多个从机?
使用片选信号进行选择,多个从机连接相同的SCK、MISO、MOSI、CS,CS默认全拉高,当想要某个从机工作时,拉低该从机的CS脚,就可以选中从机进行spi传输
- 你了解ARM底层和内核么?
了解一些,在本科阶段有相关的课程
- 大端格式和小端格式的区别;
小端:低字节存在内存的低位,高字节存在内存的高位。大端和小端相反
- 你了解我们公司么?
不了解,主管介绍
- 你是哪里人,为什么选择来我们这工作?
面试之后就拒了,白嫖加班,加班狠给钱少,要求多,这就是研究所。面完一面赶紧拒了,具体可以移步知乎,全是黑料。
乐鑫提前批
一面
- 自我介绍
- 在这简历的四个项目中你最熟悉哪一个?整体介绍一下,画框图。
- 在这个项目中你主要负责哪个部分?
- 详细讲一下接收到图像数据之后你的算法工作。
5640采集到的图像会存储在PS端的DDR中,程序会读取DDR中的图像数据,对一帧图像进行相关的增强等的算法操作,之后提取相应灰度均值,之后释放这帧图像的存储空间,接下来进行下一帧图像的相关信息的提取,直到提取512帧的数据,即512大小的一维数组,再对数组进行后续的算法开发得到结果
- 为什么帧数选取是512帧?为什么选用两种方法进行估计?
为了迎合傅里叶变换,最简单的FFT实现基于一个折半的递归。如此,我们当然需要点的个数为2的次幂。但是FFT其实对点数并没有强制限定。即使点数不是2的幂,也可以增加一些0点凑出一个2的幂,然后进行运算,如此不影响算法的执行,但是会影响算法计算的速度以及效率
- 系统的精确度?你觉得在什么样的情况下输出的准确度会降低?
因为我们所设计的系统是和图像处理以及图像像素强度有关,所以在图像采集过程中外部光照的经常变化,或者是被测者的突然移动都会影响检测精度,但是我们也考虑到了这一点,通过优化算法,我们所设计的系统可以在正常情况下的误差可以达到2以下,在外部干扰情况下误差达到5以下
- 在操作系统上你做了什么工作?懂内核和文件系统么?
搭建SDK环境、搭建交叉编译环境、在环境下进行C的编写以及交叉编译、配置设备树及文件系统、操作系统的移植;内核和文件系统在项目的开发中都有所涉及
- 公司的实习主要做什么?简单介绍一下。
主要是负责一个MCU项目的开发,需要完成项目的原理分析、需求分析、器件采购清单、产品初步实现、产品测试、最终实现,最后输出相关报告;过程中也需要和部门其他同时进行交流合作,共同完成项目的开发
- 你觉得公司实习和学校中科研有什么差别?
主要就是自由度和科研角度吧,在学校学习的时间可以自己分配,很自由也没人监管,在公司的话有固定的工作时间;在学校科研主要是对项目的开发,更加偏向理论开发,其实不用担心成本或者相关技术或者什么的,老师都会把关,在公司中产品的开发需要涉及方方面面,要多和同事上级沟通,更加偏向产品化
- 知道stm32的上电顺序么?
不怎么了解
- 知道操作系统的上电顺序么?
FSBL内部RAM--SSBL内部ROM--(外部ROM)内核--根文件系统--用户程序
- 讲述项目职责
- 反问
二面技术面
- 自我介绍
- 在这简历的四个项目中你最熟悉哪一个?介绍一下
- 项目涉及到哪些技术栈?你是负责哪些方面的?
- 摄像头视频数据是如何传输的?格式是什么?
摄像头是MIPI接口,配置后输出RAW格式图像,在FPGA端将数据转换为32位数据流,之后转为RGB888格式,然后通过VDMA存储到DDR中
- 你是如何平衡传输中输入输出速率不匹配的问题?
上面有
- 在存储过程中用到了多帧转换,简单介绍一下。
就是开辟两个存储空间,一个读一个写,两个空间互斥访问
- PS端和PL端是如何互联的?
在ZYNQ板卡上有多个高速的HP口用于连接PS端和PL端
- 主要是用什么语言?(c语言),在代码中用到多线程了么
用到了,双线程,一个现场进行图像的读取以及存储,另一个线程对存储的图像进行图像分析以及数据提取,两个线程有先后关系,所以设置了同步锁。
- 简单介绍一下多线程和多进程的关系。
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。或者说进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程则是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
- 聊家常
哪里人,为什么选择公司,了解产品么
- 反问
技术、职责、工作时间等等
二面
对项目以及自己的个人情况进行了解
三面HR面
- 自我介绍
- 之前的技术面试怎么样,感觉和岗位适配度高么?
- 为什么选择上海这个site?
- 你在上海有家人么?
- 你是本硕都是一个学校的,是保研的么?
- 那你为什么保研本校呢,考虑到了什么?
- 你大学研究生生活以来觉得最有成就感的事是什么?
- 用三个词语形容一下你自己
- 在现实中喜欢交际么?朋友对你的评价大多是怎样。
- 你单身么?
- 平常看什么书籍么?课外书还是技术相关的书?
- 对一种新接触到的技术,你一般是如何开始学习的?
- 对未来的职业有所规划么?
- 期望薪资是多少?
- 你投递了多少家公司?有几个offer?投递的上海的公司有几家?
- 有什么特别倾向的公司么?影响你选择公司的因素有哪些?
- 反问。
拿到提前批意向书,总体感觉还不错。
博通集成
技术面+笔试
手搓代码:链表中删除一个元素(leetcode原题)
- 个人自我介绍
- 这几个项目你哪个项目做的最久最大?简单介绍一下;
- 在这个项目中你是那部分花的时间最多?
在开发流程中大概是算法优化占用的时间比较多,当然这也包括优化--测试--优化的过程,因为我们的产品其实对外部光照以及测试者移动都很敏感,稍微的变化就会产生一定的干扰,所以为了减小这些干扰带来的相关变化,我们查阅很多资料,并在此基础上提出了自己的优化算法,然后设计详尽的测试流程对算法进行测试,在测试中优化,最终得到现在所呈现的产品结果
- 你实现项目的流程是怎样的,直接硬件实现么?
项目具体流程大概是需求分析、原理分析、算法推导、模拟仿真、板卡选型、软件实现、硬件实现、测试优化,在前期工作做好之后,我们一开始是依靠PC机进行相应的算法实现及优化的,因为从运行效率、相关复杂度来说,PC端的测试要简洁很多。当PC端测试的差不多,算法优化完成时,再进行硬件的移植
- 你算法中的xxx是怎么实现的,xxx为什么这么做;
- 你是怎么想到要这样优化算法的?
看了很多论文,复现了很多论文中提到的方法,进行相应的优劣对比,考虑问题所在,在一次次实验和测试中对方法进行优化,使得算法在不同情景下具有普遍性
- QT是怎样实现的,有哪些组件?
Qt 中的每个控件都由特定的类表示,每个控件类都包含一些常用的属性和方法,所有的控件类都直接或者间接继承自 QWidget 类。实际开发中,我们使用 Qt 提供的这些控件,通过交互的方式实现控件下编写的相关代码。label、按钮等等
- QT中信号和槽的关系;
一对一、一对多、多对一
- 操作系统的移植主要做了哪些操作;
首先根据PL端的内核配置创建源代码工程,生成初始设备树,之后对设备树进行个性化的配置,增加设备,之后对相应的库文件以及驱动文件进行配置,设置为SD卡启动,最后进行源码编译,然后移植到SD卡中即可
- 设备树上怎么配置来让系统连接设备的;
添加设备号,编写驱动程序,将设备挂载到板卡上
- 文件系统的作用?为什么添加文件系统;
文件系统实现对磁盘空间的统一管理,一方面文件系统对磁盘空间进行统一规划,另外一方面文件系统提供给普通用户人性化的接口。
- 对C还是C++了解的多一点?
- 解释一下volatile,什么时候会用到它?
防止编译器优化,并行设备的通用寄存器,多个线程访问的非自动变量
- 实参会保存在哪个区里面;
静态区
- 简述static在c语言中的应用;
对于函数中的静态变量:初始化一次,只能在函数中改变及使用;静态全局变量及函数:只能在该文件中使用
- 结构体和结构体指针的区别,用什么好;
内存占用的区别,结构体需要占用内部所有元素大小的字节,指针只需要占用指针大小的字节;我选择指针,空间占用小,在知道指针大小的情况下一般不会发生调用问题
- 为什么会想来上海工作
- 期望薪资;
- 反问
二面HR面
- 自我介绍
- 之前的面试怎么样?对公司有什么期待?
- 因为公司在多个城市都有分部,你会倾向于某个城市么?
- 你了解我们公司的产品么?希望未来是往底层还是应用层发展?
- 最近投了几家公司了?有几个offer?
- 现阶段有没有很想去的公司?
- 一般选择公司会考虑什么因素?
- 在学校的成绩如何?
- 是否单身?
- 有没有租房经验?
- 对薪资有什么期望?
- 反问(住房、工作时间、调薪方式等等)
博通集成加班好像也很严重,但是给的薪资还是不错的,一面直接三个面试官,一个项目,一个问基础,一个看你手搓代码,轮番轰炸。已经有意向书。
禾赛科技
- 技术面+笔试
- 手搓代码:atoi函数实现。
- 自我介绍;
- 哪个项目你做的最久最熟悉?简单介绍一下。
- Zynq技术手册看了多少?了解到了什么部分的技术知识?
看得不多,主要是一些我项目用到的,比如说DDR存储器、PS-PL高速连接、VDMA、相关IP核的了解等等
- 项目主要负责哪些方面?
整个流程
- PS和PL端如何互通?
之前介绍过
- 设备树和内核如何配置?如何工作?
之前介绍过
- 操作系统启动流程?
之前介绍过
- Bootloader有几个部分?
FSBL和SSBL,first stage 和 second stage
- 介绍一下stm32的项目?
- STM32用了多长时间,熟悉什么?
之前介绍过
- 什么是中断?
中断是CPU对系统发生的某个事件作出的一种反应。)中断现场保护那些东西?(保护现场主要是把一些重要的寄存器如PSW、工作寄存器和SFR等的内容压入堆栈。
- PIC和PIE了解么?
这个真不了解
- SPI总线介绍,有几种工作模式?
有四种工作模式,在数据采集时,主要看时钟线实在上升沿还是下降沿,还有相位区别0或者90
- 进程和线程相关;
(1)一个进程死了不影响其他进程,一个线程崩溃很可能影响到它本身所处的整个进程。2) 创建多进程的系统花销大于创建多线程。3)多进程通讯因为需要跨越进程边界,不适合大量数据的传送,适合小数据或者密集数据的传送。多线程无需跨越进程边界,适合各线程间大量数据的传送。并且多线程可以共享同一进程里的共享内存和变量。)
- 介绍一下编译的几个步骤?如何理解交叉编译?
预处理、编译、汇编、链接;对于不同平台,在其他平台使用这个程序就需要交叉编译,选择其他平台的源码进行编译链接,一般针对PC-ARM,因为arm并没有那么多的资源承载编译汇编所需要的相关库
- 介绍一下虚拟内存、物理内存(内存的基本单位是什么)
虚拟内存是对物理内存的一种抽象,它介于应用程序与物理内存之间。应用程序是面向虚拟内存编写的,而不再是面向物理内存编写的。应用程序在运行时只能使用虚拟地址CPU负责将虚拟地址翻译成物理地址,操作系统负责设置虚拟地址到物理地址的映射。
- 为什么用虚拟内存?虚拟内存如何映射到物理内存?
整个系统就运行统刚启动的时候还是运行在物理内存上的,内核也被全部加载到了物理内存。内核会记录进程的虚拟内存分配情况,但是并不会马上分配物理内存建立页表映射,而是让进程先运行着。
进程运行的时候,CPU都是通过MMU访问虚拟内存地址的,MMU会用页表去解析虚拟内存,如果找到了其对应的物理地址就直接访问,如果页表项是空的,就会触发缺页异常,在缺页异常中会去分配物理内存并建立页表映射。
然后再重新执行刚才的那条指令,然后CPU还是通过MMU访问内存,由于页表建立好了,这下就可以访问到物理内存了。
当物理内存不足的时候,内核还会把一部分物理内存解除映射,把其内容存放到外存中,等其再次需要的时候再加载回来。
这样,一个进程运行的时候并不需要立马加载其全部内容到物理内存,进程只需要少量的物理内存就能顺利地运行,于是系统运行进程的吞吐量就大大提高了。
- 在公司实习有什么感受?主要负责什么?
主要负责项目的开发,产品的制作和测试;感受就是在公司中制作的产品会更加考虑到产品的成本、相关技术的横纵向比较以及如何突出自身产品的优点,毕竟面向商业化,和平常学校做项目不一样。在公司自己只要负责研发这一块,其他的期间采购、测试环境搭建等等会有其他人负责,每个人负责范围划分清除,各司其职。同时在公司也会有明确的计划和ddl,也会要求总结,效率会更高,也方便和其他部门沟通。
- 你比较倾向于负责哪一块的内容?
- 反问
一面面了好久好久,问了好多好多,面试官很稳柔,我回答不出来他还说没关系没关系,感觉自己可能几个问题没回答出来,挂了。
苏州国芯(线下面试笔试)
笔试1小时
c基础、嵌入式基础、操作系统、四道编程题
技术面试(三位面试官)
- 自我介绍
- 你这些项目中哪个项目做的最久最熟悉?
- 简单介绍一下项目(原理、框架、硬件软件、实现结果)
- 简述一下zynq板卡的构成;
PL+PS,PL为可编程逻辑端,PS为操作系统端,ARM内核,两者通过高速线相连,外设会分别连接在PL和PS端
- 板卡上你主要负责哪些技术栈;底层还是应用层偏多?
STM32的底层,ZYNQ的底层和应用层,这些在简历上都有所体现;底层偏多
- 软件是你自己实现的么?简述流程;
是的
- 数据的采集和传输是如何实现的?
ZYNQ的PL端连接MIPI接口的5640,当5640被iic初始化之后,进行数据的采集,数据采集格式为RAW格式,在PL端进行数据流转换,转为32bit数据流,再变为24bit数据流即RGB888格式,之后通过高速的HP口 存储到PS端的DDR中。
- 系统如何应对输入输出不匹配的问题?
- 你系统使用双帧缓存,流程如何,怎么实现互斥访问的?
- PS端和PL端依靠什么进行通信?如何实现的?
- 怎么使用PS端读取ddr中的内容
因为DDR的物理地址是知道的,大概就是0x10000000开头,然后顺序存储数据,在linux下需要用mmap()函数将寄存器物理地址映射为用户空间的虚拟地址,即将寄存器的那段内存映射到用户空间,将文件描述符 fd (即ddr内存挂载的设备,进行open)指定文件的物理内存区至调用进程的用户空间虚拟内存区,之后函数返回最后文件映射到用户空间的地址,在程序中就可以直接操作该地址,对地址指针进行读操作即可。
- PS端使用的什么芯片?你在上面运行LINUX系统了么?
ARM-A53,运行了xilinx公司开发的petalinux系统,自己编译的
- Linux内核你是用的现成的还是自己依靠源码编译的?具体流程如何?
源码编译的,网上下载源码→搭建交叉编译环境→加载PL端相关ip核的工程文件→配置内核和相关的文件库、驱动,在SD卡启动→配置设备树→对工程进行make编译→将相关文件移动到SD卡中→办卡启动即可
- Linux下你是怎么驱动摄像头的?对设备驱动了解多少?
linux下对摄像头的启动只需要完成iic的配置,之后摄像头传输数据会经过PL端数据转换后存储到ddr中;5640摄像头需要作为设备挂载到板卡上,就需要在设备树中对该设备进行设备号、设备地址的配置,并且要连接上相应的驱动,这样才可以在程序中对摄像头进行初始化及调用。
- 设备树是如何配置的?有什么用?
设备树是节点和属性的简单树结构。属性是键值对,节点可以包含属性和子节点树的节点,描述了linux内核或其他软件系统(如u-boot)用于初始化硬件的参数。
一些优点包括:无需重新编译任何源代码即可轻松更改系统配置、可以轻松添加对新硬件的支持、可以使用include语句重用现有的.dts文件,并可以覆盖以前定义的功能。)
- 你熟悉QT么?
具体用到了什么功能?
- 什么是交叉编译?
- 操作系统启动流程;
- cache是如何实现的;
- stm32用多少的时钟,spi用多少的时钟;
64M和2M
- 项目的spi是怎么实现的,有什么功能,如何对多从机进行控制;
uart通信是怎么实现的,报文格式是什么?
uart是一种通用的异步收发器,是一种串行通信方式,数据在传输过程中逐一传输。对于串口通信最重要的就是五个量,起始位、数据位,停止位,校验位以及波特率,设置时需要对他们进行初始化。使能相应的串口时钟和GPIO时钟-》初始化串口的TXD和RXD所在的GPIO-》初始化串口-》使能串口。通信采用modubus协议,包括1字节地址、1字节功能码、1字节寄存器、4字节数据、2字节校验
- 介绍一下中断,你项目中用到了什么中断?中断依据是什么?
定时器中断,定时进入程序,检测编码器数值是否有误,有误就进入中断服务子程序,进行相应的补偿,最后回到主程序
- 如果项目跑飞了怎么办
在程序中加看门狗
看门狗的实现;
STM32内置看门狗,可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。使用自由运行的递减计数器,时钟由独立的RC振荡器提供(可在停止和待机模式下工作),看门狗被激活后,则在计数器计数至0x000时产生复位,所以在程序中使得该计数器计数到0之前进行看门狗复位,程序就可以正常运行;如果程序跑飞了,看门狗计数到0,自动复位程序,程序就可以继续执行了。
- 反问:
技术栈、适合什么岗位
HR面
- 哪里人?以后想在那里进行工作,为什么?
- 是否单身?
- 期望薪资是多少,有什么判断依据;
- 研究生期间有什么最有成就感的事情?简述一下;
- 你有西安的实习经历,为什么会去西安?
- 在实习中学到了什么?负责什么?
- 在刚刚的技术面中觉得自己和岗位适配度高么?
- 比较想从事底层还是应用层的开发?
- 有考虑其他公司么?现在有几个offer?
- 除了嵌入式,你还有考虑到其他的岗位么?
- 影响你选择公司的主要因素有哪些?
- hr简述公司情况、调薪方式、公积金、住房补贴等等
- 反问。
没啥好说的,三个技术面试官,面完ok。给的很多,有双休,刚刚上市还算ok。听别人说是薛定谔的加班,仅供参考。
集度(百度下自动驾驶企业)
- 自我介绍
- 介绍自己的项目(最熟悉的)
- 你在当中做了什么东西?有哪些成果?
- camera和dp驱动是自己做的吗?
- 移植过程中出现了哪些什么问题?
- 讲述一下上电之后linux启动的流程;
- 小车驱动项目主要完成了什么?
控制电机驱动芯片使得小车进行运动,涉及到时钟、中断、看门狗、spi、uart、编码器闭环控制等等
- spi有几条线?怎么控制多从机的?两个参数有什么用?
- SPI速度是多少;
2M
- 怎么配置uart的?
上面介绍过
- 在实习中负责什么工作?
上面介绍过
- 怎么定义常量的?
define或者const。
1、define是预编译指令,const是普通变量的定义,define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。
2、const定义的是变量,而define定义的是常量。define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。所以编程时在使用const和define都可以的情况下尽量使用常变量来取代宏。
3、const定义的是变量,而宏定义的是常量,所以const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题)
- volatile怎么使用的?为什么要用?
- 为什么编译器可以跳过优化?
读内存而不是缓存
- 了解岗位职责么?
- 反问
一面感觉还挺好的,面试官还说我基础好,项目也很好,over。
二面主管面
之前都有介绍过,都是差不多的问题
- 自我介绍
- 你最熟悉的做的时间最长的项目是哪个?
- 在这个项目的过程中你觉得自己学到了什么东西,在什么方向上有所提升?
- 项目中你觉得最困难的点在哪里,如何进行解决的?
- 简单介绍一下你的实习经历,从中学到了什么;
- 你觉得在学校和在公司最大的区别在哪里,你会怎么应对?
- 项目用c语言还是c++比较多?
- 反问
二面时常很短,就20分钟左右,可能是kpi面吧
海康威视
一面(30min)
- 自我介绍
- 选择一个你最熟悉的项目进行介绍;
- 你的项目主要解决了什么问题,如何解决的,你在其中做了什么;
- 你的视频信息是如何传输的,视频质量有什么要求?
视频质量:720P,30fps
- 如何进行iic的配置?Iic开始信号是?
SCL高电平,SDA高变低
- 项目用c还是c++比较多?
- 看一串代码找错,主要是字符串的初始化最后一位为\0,以及strcpy复制会带来什么问题;
- 手搓结构体,具体就是给了老师、学生、姓名、性别、学号等等熟悉,就公共熟悉用一个结构体定义,私有属性继承公共熟悉的结构体就行;
- 对网络有了解么?项目中有什么应用?
- 了解海康的工作强度么,是否有考虑好?(发抖)
- 反问
二面hr面(25min)
- 自我介绍
- 简单介绍一下你最熟悉的项目的开发流程;
- 项目过程中遇到什么困难,如何解决的?
你在校园生活中遇到的最大的挫折是什么?
- 平常学习过程中是如何学习的,有什么方法?简单介绍一下?
- 如果在工作时遇到了困难,你会怎么办?
- 评价一下你自己,说一下自己的优缺点;
- 为什么选择海康威视?有什么了解?评价一下。
- 相比于其他人,你觉得你有什么突出的点
- 期望薪资是多少?
- 对于公司的选择主要看重哪些方面,为什么?
- 对于加班怎么看,可以接受么?
海康体面厂,可能今年人真的很多,笔试、一面、二面中间隔了好久,面试官也很拽,哎难搞。(不怎么推荐讲道理,具体移步知乎)
达发科技
一面
- 自我介绍
- 介绍一下你最熟悉的那个项目
- 项目中你主要负责哪些部分,做了什么?
- 视频采集的流程是怎样的?
- 操作系统启动流程
bootloader->内核->根文件系统->用户程序
- 平常用c比较多还是c++比较多
- 手搓代码:计算n!的后几位有几个0;
直接百度看
- linux用过是吧,查找文件字符转用
grep
- 查看多少个进程用
top或ps
- 在linux上用过多线程么?进程间通信是通过?
管道,消息队列、信箱等
- 对网络熟悉么?Tcp/ip和udp区别是什么?
TCP面向连接,而UDP是无连接的,即发送数据之前不需要建立连接;TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信
- tcp和udp头部分别有多少字节
20字节和8字节
- 什么是dns服务?介绍一下。
DNS 是计算机域名系统的缩写,它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息。
接下来就是闲聊,比如你比较倾向于在哪里工作,老家哪里的,对达发有什么印象,为什么选择在这里工作等等,然后就是反问。
二面主管面
- 自我介绍一下
- 你觉得这个项目最难的点是什么,你怎么解决的?
- 你觉得在这个项目中你学到了什么?有什么经验是可以带进下一个项目的?
- 如果让你回到刚接手项目的时候,你会怎么进行项目的研发,为什么?
就是当初研发经验少,走弯路,怎么改进巴拉巴拉
我为什么问刚刚那个问题
要总结,要反省balabala
- 然后就是介绍达发的培训理念,什么什么的
联发科子公司,面试官很友好,自我感觉良好,等结果中,推荐推荐。
大疆嵌入式
- 自我介绍
- 哪个项目做的最熟悉,其中有什么难点;
- 你项目中使用了摄像头,你是怎么进行数据的采集的?
- 图像的格式是什么?怎么进行格式转换的?
RAW--RGBA--RGB888,之前介绍过
- 怎么解决视频输入和处理速度不匹配的问题?
- 对于存储的数据,你是怎么访问的
读写互斥访问,加锁实现
- 你的系统是实时采集的,你是如何实现的?
多线程,主要是平衡读取时处理所花费时间太长,所以单独开辟线程进行图像处理,另外主线程进行数据处理
- 你项目中用了多线程与多进程,谈谈你的理解?
前面说过
- 线程,进程间通信方式?
管道、FIFO、消息队列、信号量
- 平常调试嵌入式板卡用什么方式?
GDB调试
- 介绍一下你的调试方法
gdbserver是一个运行于目标板上,可监控被调试程序的运行,可通过网络与上位机的 gdb 通信,通过上位机的 gdb 输入命令,控制目标板上程序的运行,查看内存和寄存器的内容。
1、将我们的开发板,装好有linux系统的sd卡并上电,ipconfig查看ip地址(开发板插上网线,保证开发板和主机在同一ip下);
2、在QT的工具设置中添加device(使用IP添加);在build/run的kits中添加该device。
3、之后编译并运行即可。可以设置断点、使用printf输出数据来查看问题。)
- 什么是交叉编译;
交叉编译是在一个平台上生成另一个平台上的可执行代码。
- 怎么确保你的交叉编译没有错误呢?
我在进行交叉编译之前会在PC机上进行x86的编译,并且查看相关的error和warning,还会在PC上运行程序进行测试,都通过之后才会进行交叉编译,在板子上进行测试
- 对操作系统了解多少,启动流程是怎样的?
之前讲过
- 对大疆有什么了解?平常玩无人机、摄像头什么的么?
哎平常不搞这个,就很亏吧,感觉面试官还是希望你有这方面经验的
- 反问
可能是kpi面吧,我看其他人问了很多基础的,面了好久,我就面了半个多小时,哎学历硬伤,今年太惨啦。
矽力杰
矽力杰就是线下面试了,说是线下面试会优先录取。技术面大概就是30分钟多一点,可能会是你之后的直系主管,大概就是自我介绍然后根据你的项目问一些细节,然后拓展问一点八股,毕竟是做数字,车载MCU的,还是会问这种嵌入式开发底层相关的东西,难度也不是很高,之后就大概向你介绍现在做的东西是什么,岗位职责什么的。
然后就是hr面,都是线下一天面完,主要也就是了解你的意向、对公司的期望、自身相关的问题,hr也很好说话很温柔,整体来说感觉还是很好的。
面试结束后一周得到电话意向书。
联影微电子
一面电话技术面
没有提前通知,突然就是电话面试,面试官主要考察你的项目相关,首先就是自我介绍,要求重点介绍一下相关项目以及相关经历,之后就是对相关项目的延申问问题,总体来说没有太难的,都是项目相关。一个星期内电话通知二面。
二面视频技术面
二面与一面相隔两周,首先是发给你一份试卷,十道题,有C基础、IIC、SPI等等总线传输线相关、手撕代码、操作系统等等,在半小时之内完成,之后给其中一个面试官现场批卷;此时另一个面试官要求自我介绍,然后问项目相关,主要考察你在项目过程中是如何思考的,怎么解决各种问题的,你的学习及测试方法等等,之后面试官会和你反馈试卷情况。总体一小时左右,面试官很随和,试卷题目也算是比较基础。面试完一周内hr电话面试,八月末发的意向书。
个人总结
从6月份开始提前批以及秋招,现在九月末也差不多接近尾声了。当初本科的时候计算机还是爆火,我的专业电子信息都不被看好,回家都被亲戚说你学这个干啥,没想到读研期间风向稍微转变了。
就去年来说软件硬件缺口都很大,互联网比嵌入式工资高,需求也高,但是就去年形式来说,互联网真的是寒冬了,不过嵌入式还是和往年感觉差不多(大厂除外),相比于我的几个纯软件开发的舍友,我还是拿到的offer比较多的。所以选择嵌入式的xd们也很幸运,至少饿不死啦。
就工资水平来说,嵌入式可能甚至比那些测开、软开等的还要高,并且嵌入式也算是吃经验的,也不必担心青春不在工作也没了。
嵌入式这块找工作真的是幸运的,毕竟互联网HC少,人多,内卷上天, 笔试超级难,还要手撕算法巴拉巴拉,但是嵌入式的面试手撕算法真的很少(今年比去年的多了一点,可能企业都发现笔试还是水的),可以说算法ok是你的加分项。
然后再说一下企业选择,xdm双非进大厂真的少之又少,特别是今年,你说人家大厂收到一堆985本硕、985硕的简历,简历初筛不筛你筛谁。
大厂的话学历+大厂实习(oh感觉这个真的很重要)+国奖+顶刊+发明专利+相关项目,你最好要占到其中三个再去冲,不然很容易过不了初筛。
所以也可以把目光瞄向一些中厂,过的舒服一点也不错不是么。对于面试的准备,就是之前我提到的深挖项目细节+各种基础+刷题,项目很重要!!!要知道很多公司问的都是项目相关以及延申的问题,好好准备不熟悉的项目就别放上去了,问到不会的话很尴尬的。
当然面试心态很重要,要相信你自己准备的很好,你就是最棒的!没必要为大厂去不了感到难过,努力做好自己能做到的事情,其他的就看天意啦。特别是!别和其他人比!做人不要太攀比,要比就和自己比,适合自己的才是最好的!
我的一些经验经供参考,大家每个人都有自己的学习方法,希望能对各位有所帮助。
在我看来,秋招 = 实力 + 面试技巧 + 运气 + 心态,每一个环节都充满了不确定性,随时都有可能因为各种原因挂掉。作为求职者的我们也无法预知某个公司某个岗位的难度,所以也不建议在一棵树上吊死。最后祝大家都能拿到自己心仪的offer,加油加油!