嵌入式面经_前端后台太卷? 20届师兄聊嵌入式/安卓_附干货
111道嵌入式面试题答案汇总专栏链接 --> 《嵌入式/C++面试题解析大全》
本人2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业嵌入式/安卓开发
经验,谈谈一些感想。2023都说前端后台卷死。如果你对从事硬件开发/单片机/嵌入式Linux应用开发/嵌入式Linux驱动开发/安卓系统/安卓应用
等岗位比较迷茫,不妨看看下文,这些岗位我都做过,希望对还暂时迷茫的同学能起到一些参考意义。
1、个人成长历程
我是如何确定自己的求职方向的?其实也是逐步确认的⬇️
1.1 单片机的那几年
本科专业是自动化
。因为从13年大一就开始接触嵌入式,搞了本科4年单片机,大二大三参加了两届全国大学生飞思卡尔智能汽车竞赛,负责代码和算法编写。大四还搞了半年的电路板,发表了3个电路板发明专利(电路板的专利感觉很容易发)。如果你在纠结做硬件开发还是单片机开发,我觉得如果你不喜欢写代码,那就果断选硬件开发。反过来,如果喜欢写软件,就选择单片机开发?NoNoNo,单片机软件开发不推荐。
1.2 嵌入式Linux的那几年
因为单片机开发的天花板比不过跑系统的,比如这几年比较流行的智能手表,一开始一些厂家还是使用单片机去做,把代码抠得非常完美,充分发挥了单片机的性能。然而其他厂家使用嵌入式Linux开发的智能手机基本都可以吊打单片机做的智能手表。虽然单片机需求这几年还是保持着较高的需求,但如果你是有时间准备校招的学生或者还在搞单片机的在职员工,我都建议你选择嵌入式Linux,无他,天花板更高。直接从Boss直聘上可以很明显的发现嵌入式Linux的工资和岗位需求明显高于单片机。
因此,研究生阶段,专业是控制科学与工程
,果断放掉单片机,开始学习嵌入式Linux,并在研三成功拿到CVTE嵌入式Linux开发的Offer。在CVTE上班的前一年,都是做嵌入式Linux应用开发,甚至还短暂接触了驱动开发,调过显示屏/触摸屏/旋钮。嵌入式Linux应用开发都是搞业务,如果你很喜欢当前的业务,那么可以继续做下去。但如果不喜欢当前业务,因为应用开发搞深了,就必须懂得每一行的行业知识。不像嵌入式Linux驱动,不论所在的部门业务是什么,你做的工作都是差不多的。
因此,如果能在喜欢的业务做嵌入式Linux开发,也挺好的。或者想着“越老越吃经验,年纪大了不会轻易被年轻人代替”就可以深入搞驱动。当然,如果想着“越老越吃经验”还可以搞搞嵌入式Linux系统开发,这个我就没接触过,但难度都高于单纯的应用开发或者驱动开发。
如果想面试嵌入式Linux,请参考《嵌入式/C++面试题解析大全》
因为当时所在的业务,个人觉得不合适。想着往天花板更高的Android系统发展。
1.3 Android开发的那几年
众所周知,Android系统底层是基于Linux内核,就想着转到Android系统开发的岗位上,在Boss直聘上看Android系统开发的工资,确实又高了一个level,甚至基于Android系统的音视频开发工资都非常高,当然这是后话,工资高,难度也更高。
从嵌入式 Linux 转 Android系统开发需要学习的东西非常多,经过较长的时间,才慢慢入门上手工作,如果你也有想法转到安卓,可以看看这个专栏:《Android面试题解析大全》
接触Android系统开发后,明显感到“天花板变高了”,因为需要学习的东西实在太多了,做嵌入式Linux应用开发,会点C/C++知识,懂得Linux系统简单操作就可以上手了,但Android系统开发就需要你提前掌握多个知识点,包括各种模块以及安卓源码的理解,才能更好的处理问题。当然,入门也是有顺序的,你可以从安卓应用APP先入门,把单个APP或者系统应用搞懂后,再慢慢系统级别的工作。因此,我所在部门的需要用到的APP开发基本都是我在负责。
做安卓系统的程序员一定会一点安卓应用的技术,反过来,做安卓应用开发的也需要懂一些系统知识。因此,总有人纠结要深入研究系统还是应用!如果你也在纠结,那也很正常,因为我也纠结过。做系统需要深入研究系统源码和系统框架,必须沉得下心去研究才可以。同时,做安卓系统的基本都是大公司,毕竟做系统的都是搞一个实体设备出来。因此,跳槽的公司选择上不会像安卓应用那么多。因个人也挺纠结这个选择,所以不好给建议。我个人是觉得做安卓APP更有趣点,后面又选择了APP开发。
2、岗位介绍
本小节分享在CVTE干嵌入式Linux和安卓系统开发的实际工作经历,让各位同学对企业中嵌入式Linux/安卓系统的工作有进一步了解(仅代表个人工作经历)。
2.1 在CVTE做的嵌入式Linux
20年入职后,在TV事业部负责TV系统的开发。众所周知,TV主要分为不能联网的,也就是小时候用的电视,以及现在很流行的智能电视。前者主要使用嵌入式Linux系统(也有使用单片机的,但已经淘汰了),后者使用安卓系统。期间,我还曾经去支援过洗衣机项目和显示屏项目。因为我是嵌入式Linux应用开发,在TV、洗衣机、显示屏项目中,主要都是负责绘制UI界面,如控制菜单,然后实现对应的功能。使用的UI绘制工具有的是原厂提供的,有的是前辈自研的,反倒是没有使用过QT开发界面。期间需要对相关的行业知识要有所了解,如做TV系统,就要对电视行业知识有所了解,做显示屏,也要对显示屏的行业规范有所了解。至于Linux驱动,接触的较少,我目前调过显示屏/触摸屏/旋钮。
2.2 在CVTE做的安卓系统
现在越来越多带屏幕的设备是用安卓系统来做,到了希沃,先后接触过网课学习机和随身听这两个产品的研发。为更好入门安卓,我先从APP研发入手,部门研发了一个用于硬件测试的APP,如触摸屏、WIFI等硬件都是需要经过压力测试后,才可以正式流入市场的,因此需要研发一款用于硬件测试的APP。大概做了三四个月,算是入门了安卓APP开发,接着负责系统级别的APP,如下拉菜单,系统弹窗,关机界面等都是系统级别APP来实现的,我曾重绘过下拉菜单,修改了系统的弹窗,安装进度的弹窗等,也将关键界面重绘了一遍。到最后,再慢慢接触安卓系统源码相关的需求。
3、你最关心的事情
无论你我,都很关心:
- 薪资发展:想工资高,往大厂,嵌入式Linux工资在所有研发岗位应该算中等,安卓系统开发则算高等。
- 加班情况:无论是前端后台,还是嵌入式/安卓,只要你去大厂,都会卷的,所以别担心会不会卷,只是看卷的程度是否可以接受。要想不卷,就去国企央企,工资低点,但国企央企现在也不好躺平了。
- 个人成长/晋升情况:作为程序员,前期晋升靠专业技术,后期就需要懂更多“软实力”,比如管理/沟通等。
- 跳槽/转行难度:嵌入式Linux需求量还是很大的,虽然这两年越来越多校招生转嵌入式,不过社招的岗位还挺多的(相对前端后台)。安卓系统岗位一般只有大厂还有招。
- 求职难度:嵌入式Linux校招生就可以有机会拿到offer,安卓系统一般校招生都不懂,都是应聘了嵌入式,后面分到安卓系统。
- 学历要求:不得不说,现在很多大厂都要本科以上。。
- 对于求职者的能力要求:基础要懂,并做过对应的项目,满足这两点,都有机会拿到offer,反之就很难拿到。
如果有其他疑问,评论区提问哈。
4、确定求职岗位后,应该如何准备
面试嵌入式Linux或者安卓,一般需要三大步骤:
-
算法:大厂一般都需要线上笔试和闲线下的现场手撕代码,因此对于算法题目,建议从《剑指offer》刷起,可以配合牛客网的剑指offer线上调试,接着再去力扣刷题,至于刷多少,能刷50-100道题个人觉得已经算可以了。
-
八股文:八股文是面试必考的,面试官除了看你简历,可以了解你对知识掌握程度的,就剩下八股文了,不过八股文是可以准备的:
想通关
嵌入式
面试,请看: 《111道嵌入式面试题目录及答案链接》想通关
安卓
面试,请看:《150道安卓高频面试题目录及答案链接》想通关
安卓系统
面试,请看:《140道安卓系统Framework面试题目录及答案链接》想进阶安卓开发,请看:《Android进阶知识体系解析_15大安卓进阶必备知识点》
想了解安卓APP完整开发流程,请看:《安卓APP完整开发流程》
想掌握安卓App性能优化,请看:《安卓性能优化讲解和实战专栏》
想掌握Gradle语法,制作Gradle插件,请看:《安卓Gradle语法解析和实践大全》
-
项目:简历上面建议要有2-4个相关项目,划重点,要有2-4个,不用太多也不能再少,而且项目必须是和投递岗位相关的,这个需要靠自己平时的积累,学习嵌入式Linux,某宝买个板子看教学视频就可以入门了。
想多掌握几个
嵌入式项目
,请看:《6个嵌入式项目交流分享(附源码)》