2023嵌入式--行业分析与面试实践
欢迎和楼主一起聊一聊:扣扣群:741541091。群里有楼主送上的秋招助力,多家公司的简历内推投递渠道以及学习资源,定时定期答疑解惑,更新秋招日历。
个人基本情况
LZ是从南理工机械转机电的测控技术与仪器,然后读研的时候转浙大的微电子学,18年开始做ARM Linux系统开发,主要是裁剪系统和提高实时性可靠性。在校经历方面,项目经历比较久,虽然没实习但也算得到面试官认可,比赛论文相对并不出色。去年毕业后去了ARM从事嵌入式安全系统开发。
行业分析
往年卷互联网卷算法,近年卷IC。嵌入式在我看来是一个不温不火的行业,它是芯片行业重要的一环,是产品落地不可或缺的一部分,但是往往薪资竞争能力不足。有些人觉得嵌入式是越老越吃香,也许过去硬件设计是吃经验的,但是嵌入式应用软件开发的门槛很低,在国产化的一些A核M核RISV核CPU的文档都中文化的情况下,高中生都可以学习相关的编程,LZ大学掌握的技能完全不够市面上公司的应聘要求。不是每个应届生都能在找工作的时候已经经历丰富的项目经验,而应用软件开发也是一些普通软件开发者花点时间就能转型的。所以想在嵌入式行业拿到高薪,有几个方向考虑:
- 大厂的自动驾驶或AI+IOT,这个是个很卷的赛道,应届985硕50以上
个人感觉 AI的会IOT技术 竞争力 > IOT懂AI理论,从公司的角度,前者我觉得是核心 - 操作系统,这个国内的公司有限,应届985硕45以上
- 芯片公司,芯片公司上市的很多,吃不上最好的也能喝点剩下的,应届985硕40以上
- 普通嵌入式软件开发,应届985硕30以上
lz所说的这几个是目前能拿到高薪(结合我那年和去年的估计)的嵌入式岗位,这些岗位都对学校专业技能要求很高。比赛论文,读研的项目都很看重,实习的经历都很重要。
简历
我相信一个优秀的求职者简历是不断迭代,为不同的公司量身定制,结合岗位需求强调不同方向的能力,譬如岗位要求操作系统,那项目就得重点体现你有没有开发过操作系统。嵌入式开发有点像一个产品的迭代过程,所以在写项目的时候需要闭环,即需求设计开发验证完整的过程,即便没参与某些环节我也建议你了解一下补上。提一句当时我帮同学改过简历后都顺利拿到offer了 :)
对简历有什么想法可以进群交流。
面试准备
算法题如今也卷的不行,虽然lz入职后很少用到,实在忘了Google找个算法模板套就好了,所谓面试造火箭工作拧螺丝,嵌入式开发中链表栈树掌握好开发能解决大部分问题了,但没办法想要脱颖而出,常规的动归、bfs、dfs、排序还是机考必备,这个没什么好说的。
面经方面,linux、计算机系统、操作系统(调度、文件系统、内存等)、计算机网络、数电、ARM CPU架构和指令集、C/C++、汇编、存储器、串口接口等。
附上曾经指导师弟入门ARM Linux的思维导图,师弟已经拿了平头哥的ssp了。
我推荐Linux学习这块买一个正点原子的开发板,如果不想花钱,白嫖他们的公开资源也行:正点原子
在我秋招时,以下是我当时掌握的相关能力,供大家参考。
- 只会C++做简单题和一些中等题,会用容器,不懂类封装继承等,面试问到就说不会
- 会写C,了解一点汇编和架构的知识
- 知道Linux驱动,设备树怎么改,手册怎么看,驱动怎么编,Linux是怎么上电的,驱动开发这一块还算熟练毕竟读研开发了接近两年,会写Linux多进程多线程软件,系统调用内存方面都涉及
- 大学的时候学过一点单片机,如51,msp430,stm32。但是后面就不学了
- 会用电子实验的设备,会基础实验操作,看得懂电路图和PCB ,会焊接0402以上的电路
- 了解传感器工作原理,尤其是陀螺和加表,对于各种通信接口也算了解个大概,知道一些物联网协议像MQTT
面试经历
LZ无实习经历,在2020年秋招的时候有大把的时间投简历面公司,那时候嵌入式在我看来一点也不卷,工作很好找的,刷了很多offer但最后有印象的就地平线、ARM、OPPO、华为鸿蒙等。当下比较火的像思特微、壁仞在那时候还是潜力股,LZ是一个不愿意冒风险的人,也不是多厉害的人,学历能力都有所欠缺,也没有实习经历,比赛论文,属于佛的那种,业内T1的公司很难进,但求职还是很稳健的。在我看来,确定好自己的需求很重要,不然最后很难挑。挑完还很容易后悔。
以下是我基于我的面试经历对行业公司的整理和排序,仅一家之言。
T1
大疆、视源、乐鑫、十四所
LZ心目中不错的公司,相对竞争比较激烈,也有双985像十四所就比较难进
华为2012鸿蒙
那年offer发的晚(典),HC少到发指,15优先给科班,下一届我师弟师妹就很好拿offer了。
技术试面: 手撕代码:大数相乘 进程和线程的区别 static/fork等 技术二面: --表现一般,非常慌 1.项目最难的地方 2.文件系统的制作过程 3.内核裁剪的过程及提升 4.手撕代码,dfs,LC79,边界处理有瑕疵 5.Python掌握的怎么样 主管面 对待压力最大的事 是否接受外派出国 怎么看待华为的 发的论文学术研究主要是哪些方面 为什么转到了微电子 商业卫星和军工的区别
没参与的
因为当时太佛错过,工作后多方了解觉得不错的:Intel Nvidia 平头哥 壁仞,以及自驾的公司参考2023年秋招,想加入自动驾驶行业的你需要关注这些公司
T2
ARM
嵌入式不能没有ARM,就像西方不能失去耶路撒冷。来ARM,学架构,ARM(安谋科技)秋招8.15正式开始。有需要内推的可以找我!
一面主要问问项目,指令集差异,操作系统阻塞与轮循,arm的认知,虚拟化的了解,IP开发经验等等 二面:openday线下,聊项目为主
OPPO-C/C++
提前批,共三轮,很水的面试,oppo给zju开的属实不低,通信业务部门感觉是纯软,工资高的,base出了问题我不想去深圳。
一面问项目和会的技能,以及C与C++区别等内容,会不会python等,嘴瓢说到了vivo不知道影响大不大 二面:主要聊一聊职业规划和技术走向,对其他领域的理解,对项目的熟悉和团队经历,团队的磨合性问题及技术问题。 三面:offer情况,面对压力、团队磨合、印象深刻的项目、期待工作地点等内容
汇顶
两小时三轮面试,有手撕代码,也不难,非常顺利拿到的第一个offer,画的饼也不错,可惜sp发早了,后面argue也没涨太多。
一面技术面:strlen,sizeof以及char*,考察函数传参,考察自己写memcpy 二面HR面:团队协作的项目,女朋友,薪水,过往面试经历 三面主管面:个人性格,i2c,spi驱动,base城市,对岗位的期待,个人职业规划,如何看待压力
瑞芯微
面经忘了,当时base在福州,没考虑,面试体验印象中还不错。
紫光
小华为,不知道现在卷不卷了,听说有点动荡。
一面聊聊项目,啥能力都没问 二面,聊聊技术和软开的内容
思科
数据交换中心,四人面了两个多小时,有英语面,总的来说看重学历和综合素质,手撕的代码不难,后来offer顺位第二,没想到那个部门只招一人,另一个物联网部门捞我,开的也是均价,很想要我但是不argue遂拒。
一面:四人 项目内容,关于Uboot功能,多进程架构等 Python的list、元组和字典等区别 项目代码怎么编译,编译器是啥,IDE是啥,怎么进行调试的 编译器编译代码的四个阶段 动态库和静态库的区别及优缺点 C++的STL了解得怎么样 C语言怎么定义一个输出年份天数的宏定义 代码编译出现undefined symbol怎么办 平时怎么查看代码的,git用过哪些命令 代码量怎么样,总计代码量 说说中断的理解 说说对于IPC进程间通信的理解 arm启动的第一条命令和地址是什么 手撕代码,32位数的bit反转,考察位操作,写的有瑕疵 英文对话:你在项目中工作,你如何进行邮件联系工作人员,你们项目的分工 了解DMA吗 了解哪些总线协议 块设备和字符设备的区别
长江存储
业内很厉害的一家公司,面试也很底层
项目面试,主要问三取二的nand,对eMMC的理解,对坏块管理位置,对程序代码段数据段的理解,对他们做的eMMC是否感兴趣等。 1.int的长度由什么决定 2.cache是什么,有什么作用 3.寄存器修饰的关键字的理解 4.arm处理器的模式 5.中断处理流程,中断的现场保护保护什么 6.kmalloc和vmalloc的区别,内核怎么分配128M连续内存 7.TLB是什么 8.原子操作的底层是怎么实现的
之江实验室
有点像研究所,听实验室同学说,可以选择躺也可以选择卷,工作体验和在学校很相似。
NXP-苏州
二面说漏嘴已经和ARM签两方,面试官摆的比较快。同学base在苏州,工作很舒服。不想去一线可以重点考虑一下。
地平线bsp
提前批,四轮面试,三面给一道大编程题开发一个驱动,还挺难的,offer argue后很高。但是19年裁员很厉害,所以我没敢去。现在情况应该好多了。
一面技术/主管面:ARM启动流程,内存配置偏移地址方式,设备树的优势及起源等 二面技术面:讨论系统驱动开发,信号原理、互斥资源的解决方法,进程间通信,三取二相关,大量数据传递给应用层问题(map) 三面主管面: 用过哪些嵌入式控制芯片 内核了解吗? 有了解过64位arm吗 物理内存的管理方式 段页是x86的,arm怎么实现的 kmalloc最大能分配多少 slab是什么 内核的L1 L2 L3缓冲 TLB是干嘛的,什么功能 进程调度算法 fifo和一个什么的对比 C++的虚函数是干嘛的,多态和覆盖的区别,虚函数的底层怎么实现的 内核同步的机制 自旋锁和互斥量mutex的区别 自旋锁底层怎么实现的 C语言的数据段里面包含哪些部分 全局变量和局部变量存储在内存的哪个区域 malloc最小分配的大小,malloc(1)分配多大 malloc分配多大的内存的时候会需要向内核申请 malloc和free的使用你觉得有哪些注意的 你学的微电子学了解FPGA吗 写过哪些驱动?
寒武纪
1.虚拟地址与物理地址 2.内核如何分配内存给进程 3.进程的资源分为哪些?漏了代码段 4.多进程如何共享硬件中断 5.进程和线程的区别 6.内核态中断和线程同步的方式,不能用信号量 7.uboot的作用 8.arm启动进入操作系统的步骤 9.const变量在程序的哪个段 10.驱动中断的响应包括哪些内容 11.双核的ARM在uboot里面用了吗
T3
中兴
可以试试蓝剑
一面:TCP/IP协议,ARM及其他芯片的上电过程 二面:HR聊聊家庭情况个人性格,薪资,兴趣爱好,过往面试的企业 部门匹配面: 1.项目中职责 2.中断的传递过程,信号量监听的函数 3.驱动的开发过程 4.网卡收集数据传递给上层应用的过程,网卡型号及接口 5.网络服务器的高速并发处理,降低传输时延 6.内存管理的方式,什么是内存管理,其作用是什么 7.内核如何管理内存的页 8.TCP/IP协议是否了解,Linux怎么做网络路由 9.个人的优势 10.文件系统的制作和优化方式,不同文件系统格式内核是如何管理的 11.操作系统的任务调度方式,你的进程是怎么提高实时性或者优先级的 12.nice的默认优先级大小,取值范围 13.内核的裁剪和配置方式 14.数据库是否支持并发,数据库ID是否可以任意数据类型,数据库一定要ID吗 15.如何管理数据库的脏数据,掉电未写完的数据 16.视频的编解码方式 17.进程和线程的区别 蓝剑1面 1.你的文件系统轻量化及接口怎么取舍的,文件路径怎么搜索的 2.Nor和Nand的区别,什么使用选用Nor什么时候选用Nand 3.sqlite表的编排方式 4.对ipc的理解,socket并发通信理解 5.对进程上下文的理解(答错了,说成中断上下文了) 6.三取二的过程以及做了什么 7.对swap的理解和认识 蓝剑2面-部门匹配面 1.你印象最深的及最难的项目是什么,其中的收获 2.你怎么做星上操作系统的可靠性和稳定性评估的 3.你觉得嵌入式行业的最大挑战和瓶颈是什么,以及以后的发展趋势? 4.你的三取二做的是什么 5.你开发这些串口驱动,其中主要参与了哪些工作,编写驱动要注意哪些内容 6.你的文件系统如何做到轻量化的,UBI和EXT4区别在哪为什么EXT4不适合NAND Flash(这个没回答的上来) 7.对进程间通信的理解,socket或者ipc如何提高实时性; 8.你的操作系统怎么做到实时性的?(基于抢占) 9.你的软件运行在用户态,怎么架构的? 10.NAND的数据怎么确认是读取问题和硬件问题。 11.对操作系统的理解,以及最深入的内容? 12.内核态与用户态之间的交互方式?(不太好回答)
滴滴
1.CAN和UART区别,CAN是帧结构吗 2.CAN芯片怎么写的,数据怎么与内核交互的,属于网络设备还是字符设备 3.你觉得最体现你项目能力的是哪个部分,你在其中参与的核心解决的难题是啥,你给我说说三取二的原理,以及你遇到什么困难。 4.描述你的项目我来复述并评估拟堆项目的理解,项目背景和项目分工以及你的主要工作和难点 5.动态库和静态库的区别,后缀格式,以及函数的相对地址区别 6.堆和栈的区别,函数栈、线程栈的区别 7.你在微电子学与固体电子学专业里面,你觉得自己能力算中上还是最好的那一批? 8.最开始的:自我介绍,说你最大的和别人不同的 9.有名管道的父节点和子节点 10.共享内存的使用注意事项:回答锁和不能随意释放
海康、大华
杭州体面厂
VIVO
提前批很早,后面没有参与正式批
TP
要双985
#秋招##校招##嵌入式工程师##软件研发工程师##内推#