选择填空60/编程40,基础题不难,编程题两道算法。
嵌入式软件岗。台企做射频芯片,wifi/蓝牙这种,台湾第一,给的不高但有加班费,且大陆接触不到核心技术。笔试C基础选择填空简答翻译/两道编程。编程题是分割字符串,双向链表查找非
0节点并打印,现在看很简单,C基础我刷的《王道程序员面试宝典》。
一面纯聊项目,并适当引申问一些基础知识,引申了:arm工作模式/静动态链接的区别,最后一个项目我做的机器学习,单纯为发论文那种,没说清楚,估计扣分了。又问非技术问题,和同学如何分工合作,与导师意见不一致怎么办,第一次被问,答的很一般,但也不是说的差。整体感觉聊的还行,可是挂了,群里好多人都是这样,可能是掐尖吧。
BSP/驱动岗。先问点iic,spi基础知识,速率,工作模式。然后手撕memcpy,哪搞过这种纯c编程,写的漏洞百出,我自己都看不下去……又问我信号量组织方式,就让你简述,语言没组织好,本身也不熟。果断挂了。BSP方向最喜欢问单片机知识。
c/c++芯片方向。问哪些课学的不好,急中生智答中特……问哪些学的好,答ARM体系结构。然后被逮住问:7种异常是什么(没答全),中断触发到返回的具体行为(CM3权威指南里有),中断嵌套如何实现(NVIC相关),中断机制的具体实现(还在答中断具体行为,他问的应该是两级向量表如何查找),中断部分结束。
问单片机与嵌入式系统的最大区别在哪里,答嵌入式系统可以跑多任务,然后逮住OS开始问。任务在内存中的组织方式(TCB-用户栈-用户代码),上下文切换时任务在内存中是如何变动,任务调度点,优先级反转如何解决,任务抢占如何发生,通信机制。
问Linux开发驱动的流程,懵逼。又问c知识指针与引用的区别。然后让我自己挑些会的说一说,答了点单指令多数据流,感觉不感兴趣,又说了流水线冲突与解决,反问cache-miss什么情况,分支预测什么原理(高级计算机结构课上内容)。看来芯片方向看重体系结构的知识,课上学的终于有用了。
做LED屏解决方案,感觉用的知识不深。笔试考了DMA与中断传输的比较,矩阵键盘检测,计算算法的复杂度,甚至还有稳压电路的知识,做的不好。
面试让画项目框图,画乱了。硬是把我自己独立完成全部软件硬件的四轴飞行器项目说的好像是个假的一样,我特么自己都服我自己。然后问C基础,我答的还行,但已经无法补救。这次面试之后我开始把所有项目叙述和重点问题全部写纸上,每天背一遍。
是的,你没有看错,我提前批5连挂,群里大佬都在讨论去联发科还是汇顶了,我一个菜鸡什么话都插不上,心情和自信都已跌入谷底,真的就已经卑微求offer了……
然后我就迎来了第一个正式批,清水河现场面。此时被鞭打多了也知道点引导话题了。专业面就问项目,问些概念和项目里的知识:什么叫软硬实时,m4内核双堆栈机制,顺便答了arm模式切换和上下文切换,bootloader,链接原理,说我是做了些东西的。一面当天正好成都暴雨,路上积水连车都不敢走,到现场裤子鞋湿透,面试之后正好雨停。回想着专业面被肯定,我有一种感觉,从今日开始我要拨云见日。
二面英文自我介绍,崩,然后问我有offer吗,投华为了吗,然后就反复问我:为啥没投华为,我还是不明白你为什么不投华为。问的我贼气,我不投怎么了。后来在职学姐告诉我,应该答不喜欢华为的文化,两家是竞争关系。
洽谈还是职业规划等老生常谈,他们南京的嵌入式主要是做设备驱动,机顶盒。没有自研芯片,也就是说没多少芯片的核心技术。我还是打算去芯片原厂的。谈薪资就看获奖经历什么的,本科的奖倒是不少,然并卵。说让我考虑,后来拒了。
虽然中兴拒了,但是在刚刚5连挂的时间节点上给了我宝贵的肯定,非常雪中送炭。
算法工程化岗。提前准备了一些ucos移植,arm指令集流水线和静态链接的知识,事实证明,准备的方向很对,他很感兴趣。
电话一面,问了ucos移植的细节,提到了一种并发的指令集(没用过),聊聊项目,又聊行业认知,最后问我的优势劣势分别是什么,答优势是对底层原理的理解和对编译器的了解,劣势是不懂Linux。他表示赞同,说我基础不错。信心终于提升一点。
电话二面。上来直接进入正题,自我介绍什么的都没搞,直接问:信号量实现的底层原理,可不可以用一个全局变量代替信号量的计数值,答不可以信号量是临界资源要进临界区,问怎么进临界区,答关中断保存cpsr,他比较满意。
然后问中断机制,大概有多少中断,可修改向量表吗(通常不可,有例外),又问m4内核的双堆栈机制。BL指令的跳转范围(32MB)。
最后问静态链接,深挖强弱符号的东西,最后说我对底层还是比较了解。
hr面就常规,觉得契合与否,1246大小周能不能接受。杭州,6险1金有食堂,后来知道我有其他offer要给我提薪,没让提拒了(因为后来拿到了更合适的)。
一面就问项目,反复问上系统的必要性,估计是个搞os的根本不懂四轴,以前栽过,这次答圆了,又主动答了中断机制,看他不是很感兴趣。最后问我懂不懂os的内存管理,答不懂,之后就是笔试编程为啥不做,答嵌入式对算法只是了解,项目里没用到。
二面感觉和一面没什么区别,还是自我介绍&&项目介绍,把四轴的控制流程说了一遍,他对四轴还是懂一点,但飞控算法没问,难道大疆不该很看重这一块吗,把所有项目大概都问了一遍,无异常。然后问,你的劣势在哪,答不会Linux,又问我图像处理的算法,靠本科上课学的还没忘干净的知识答一点,中位数滤波,边缘滤波,想深问,我说我只是了解。感觉他不很满意。
二面挂了,挂的很不甘心,我的cpu原理知识还没吐出来呢,静态链接也没问,arm这块就问了个中断机制。回来反思为什么引不出自己的优势,感觉自己所答还是很零散,中断就中断,os就os,指令集就指令集,串不起来。后来我找到一种组织的方式,能从中断入手把arm架构,上下文模切换,指令流水和程序优化串起来讲,形成一个模板,只要问到其中某一个知识我就能把全部一串说出来,他感兴趣自然再深问。涨了一波经验,挂的不亏。
上海系统软件工程师。大疆挂面总结来的那套“模板”第一次实战。
一面还是项目,挨个问简历里些写的。IIC与SPI的不同(片选方式,异步同步),IIC读写方向如何区分(地址位最后一位的高或低)看我答出了比较满意,说没几个答对的,驱动确实是我写过的。然后问9轴数据的意义,答了姿态解算中队数据的融合。然后就是双堆栈机制与模式切换,任务调度点与任务在内存中的组织方式(TCB-用户栈-用户代码),优先级反转与解决,死锁的原因,然后makefile语法一个。其他单片机小项目根本没问。看得出对我的回答很满意。然后手撕代码环节,特意找了个最简单的给我,牛客原题链表表示的两数相加,撕半小时,通过率0%……他说会综合考虑。
二面疯狂问CPU知识,“模板”用上了。先问m4 的双堆栈与上下文切换,17个寄存器的功能,LR的作用。顺势答为何中断返回要LR中的值减4,然后指令流水、CPU知识就跟着出来了。又问分支预测发生在指令处理的哪个阶段,cache的作用,回写与写透的区别,为什么设计三级缓存。
然后问信号量,进入临界区的操作,为什么关中断可以保护临界区,cpsr如何保存。
最后问静态链接,预处理是什么编译选项,-g是什么意思,如何使用ar生成库文件,这块不熟,会不会gdb(不会)。那就说说makefile一条指令的格式,.c生成.o什么选项,.o生成.elf什么选项,.o与.elf的区别联系,举个区别的例子。
然后开始讨论行业认知。为什么从事芯片行业,美国制裁华为你怎么看,制程对芯片的影响,为什么中国制造业跟不上。感觉他很感兴趣,当场表示通过。
hr面就个人介绍挖了一下个人学习方法,社团经历,期望薪资等等,我问寒武纪是否加班,是不是1246大小周,她很震惊,不知道1246为何物,并说寒武纪不加班,干完就能走。
寒武纪两位面试官的肯定给了我极大的自信,我也一度很想去,毕竟是国家队的AI四小龙之一,技术实力毋庸置疑,关于为什么没去,在芯原之行之后说。
南京嵌入式软件岗。做电源模拟IC国内第一,最近几年开始做物联网SoC,在南京计划1年左右上市,使用M0内核和开源协议栈,做解决方案,技术难度倒不特别深,现在射频SoC厂商如雨后春笋一般冒出来,物联网这块看来市场很大,但是我本人不喜欢做物联网。
我的流程非正常,笔试都没写电话聊完直接告诉我很合适很想让我去,态度那叫一个好,hr面也是态度很好,没有丝毫套路。最后问了我目前offer,我说大华的20k和寒武纪还没谈,她说会给我定一个有竞争力的薪资。
最后的薪资真的很有诚意,干的好1-2年给股票,另外还有很高的签字费,承诺绝对不加班,不得已加班给加班费,算下来一年能拿很多对于南京嵌入式来说,还有股票签字费不加班,我心动了。
最后夸一下这个厂,对待人才很有诚意,不像有的公司承诺给一个让你“无法拒绝”的薪资然后白菜的一批,而且真不怎么加班,喜欢物联网的同学可以考虑。
成都算法工程化岗。笔试题量超大,是一个半小时的量但是只给你一小时,各种智力题和基础知识,涵盖c、os、编译器和cpu知识,很多都是4选1答,只要你在一个方面有深入理解就行。我觉得很基础但是实在写不完。
专业面,npu的人面的也算是缘分。先说项目,直接画个框图给他,说的熟的不能再熟了。然后提问中断机制,这就进入了我的“模板”,然后重点问了流水线效率问题,为什么中断返回PC要减4,拿出试卷让我答没写完的题。然后让结合项目代码分析如何避免流水线冲突(调整指令执行顺序,分支预测,增加部件),还好我顶住了,他们也开始感兴趣了。
然后问静态链接,也是熟的不能再熟的东西。其中一个面试官问我是否想去做编译器,我说只做编译器一个点有点狭窄我还是想着眼于整个系统,后来知道他原来是编译器组的leader。
然后和技术主管聊,当时不知道是npu部门的leader(也是我现在的leader),聊些技术方向,未来期许,职业规划,聊了比较久,他说不错很优秀。
然后英语面,爆炸。问我团队工作中什么最重要,喜欢哪个城市为什么,说了啥不重要,重要看你会不会说英语,显然我不会,估计是C。
CEO面,我宣讲时提了一个比较有深度的问题,他记得我。问为什么芯原做芯片定制而不是直接生产出来再卖,答案是减少积压风险,答错。他宣讲时就说今天要问,还是答错了。
openday,搞了一整天,各条产品线负责人上来宣讲,好困,芯原自研IP核有核心技术,还是不错,npu是前沿技术,部门老大对我也比较看好,于是去了。就是薪资一般,一年涨薪至少10%看绩效,不加班法定节假日3倍工资,周末和晚上加班没有加班费(7点人都走光了)。
回来和我的老师讨论offer问题,芯片行业老师还是最看好华为,可以说是业界第一。中策就是寒武纪、芯原、龙芯中科这种有技术实力但是盈利情况并不很好的国家队公司,下策就是解决方案供提供商,他们的芯片技术自主权十分有限,拿大华来说,他们的图像IP核都是买的华为的,芯原的,寒武纪的,芯原的异构并行npu可以决定哪部分算法调度在哪个核上去跑,怎么从结构上优化网络,但是大华就只能根据我们的文档去应用,我们的嵌入式工程师还要去杭州总部指导他们的工程师,原厂工程师在下游方案提供商那里很吃香的。
在这些IP原厂中,我的老师觉得寒武纪定位不清晰,又做IP又产芯片又做云,现在还搞校企联合,有些浮躁,财报也是大起大落的,目前特别依赖输血。芯原就好一些,只对标企业用户,虽然也在亏损,但是定位清晰,有自己很多市场接受的产品,目前亏损主要是成本太大。但是在这个时间节点上国家肯定会拉高芯片行业,寒武纪还没倒呢芯原怕什么。决定之后寒武纪、大华、矽力杰就都拒了。
我所从事的是内核移植和算法工程化岗,只做设备和驱动前途有限,这方面最后细说。
欢迎学弟学妹来我司从事自主IP核的研发。我司妹子多而且质量高哦。
北京嵌入式软件岗。龙芯是国产CPU的巅峰,中科院计算所背景,技术是有但是盈利模式没做成熟。介绍项目,老生常谈,叙述中断机制,bootloader,模板开启引出流水线,他竟然没深问。问我会不会gdb,答不会。又问了一个机器学习项目,看我叙述清晰也没再问了(他不懂这块)。问我对工作什么期许,聊聊岗位,已有什么offer什么岗位。看他不怎么问我技术问题我有点急,我直接说我基础很好,所有简历里提到的您随便问,他笑,看你这么自信我就不问了,等二面吧。后来24号签了,也不准备继续了。
最后说一些我对嵌入式技术的见解:嵌入式系统本身就是微小的计算机系统,只要二进制计算机不过时,嵌入式技术就不会消失。
我的老师经常给我们强调“程序员的自我修养”和对底层原理的理解,现在技术更新换代非常快,新框架新风口,但是只要它跑在二进制计算机上,有些东西就是不会变的。所以理解计算机工作的本质,掌握“以不变应万变”的能力在嵌入式编程中尤为重要,“好的程序员对自己程序的每一个比特都了如指掌”。不仅是嵌入式方向,其他技术方向也是如此,着眼于系统才能立于金字塔顶部,在35岁之后避免职业瓶颈。
吹了一波嵌入式的重要,再谈一点我个人对嵌入式未来的理解。传统嵌入式MCU、os应用编程、驱动开发其实已经很成熟,比如linux驱动就已经有成熟的框架,完全不需要你懂源代码。
对于端级的ai,集成度基本已经到了尽头,目前最先进的制程是5nm,而在1nm的量级将会产生量子效应,也就是说,集成度的极限要到了。集成度上不去直接影响芯片的大小,端级ai不可能像服务器一样搞好大一个主板,目前基本是用异构多核的方式提升计算性能。
但是并行计算也有性能的瓶颈,算法中很多情况是下一步计算需要用到上一步的结果,有相关性的,没法并行。这个计算的瓶颈,牵扯到流水线阻塞,cache命中率,IO操作等等,一定是底层架构方面的问题,有我们嵌入式程序员广阔的发展空间。
第二个热点我觉得是5G相关,这块我不太了解,大致说说。首先是低功耗问题,商用对功耗非常敏感,这肯定和底层系统有关,要裁剪硬件软件。其次就是协议栈了,美国就怕这个才封了华为,由此可见重要程度。
成功为华为“续命:中国芯片之父张汝京
一个工程师的“噩梦”:刚分清CPU和GPU,却发现还有……
这位“华为天才少年”,竟然要我用“充电宝”打《只狼》