双非菜鸡迟到的秋招战帖
前言
先做一个简单的自我介绍,某双非二本,大学期间一直在学校实验室,有过相关竞赛的国家级奖项,熟练使用STM32、C语言。项目完全是裸机开发,简单了解过FreeRTOS,在开始面试的时候才系统学了一点FreeRTOS的理论知识,当时也没去移植到项目中实践过。Linux这部分就知道几个指令,其他基本不会,而且还是在秋招开始后才去花几天学的一点点基础知识。
写这个面经的目的也很简单,就是回馈牛客网。在我秋招的这两个多月时间里,牛客网上面各位大佬的笔经面经给我提供了很大的帮助,所以写这个帖子来总结一下我自己的秋招经历,希望能帮助到更多人!同时也给大家鼓鼓劲,我这样的双非二本虽然没能像其他大佬那样拿到华为、大疆等顶级offer,但也能拿到几家还可以的大公司offer,那么你们努力也可以!
在这里简单提几句关于考研和直接就业的一点我自己的看法,拿我自己举例子,我大学期间在学校实验室待了比较久,也有相关竞赛的国家级奖项,项目经验相对丰富的情况下,如果我考研没有成功上岸,那么我只能参加春招,这样的话我大概率不能找到比现在直接秋招更好的公司,春招肯定是比秋招更难的了,因为机会会更少,而竞争也会更大。而我对自己考研上岸并没有很大的把握,加上我自己本身有一些技术经验的情况下,我综合分析了整体的风险之后最后选择了直接参加秋招,最后也拿到了比较满意的一个offer。大家可以用类似的思路去理性分析,自己是选择考研呢还是直接就业呢?
秋招准备
秋招不仅是对技术能力、综合能力的考量,还是对信息获取能力的考验,越早获得招聘信息,对自己越有利。所以要多关注各高校就业指导中心公众号、想加入的公司的招聘公众号、牛客网、加入一些招聘的交流群之类的。各高校就业指导中心公众号的话最好是关注你期望的工作城市的高校的就业指导中心,因为有些比方说西安的一些公司只会在西安高校的公众号有推送,在广东高校的公众号可能就没有了。公司自己的招聘公众号上的消息一般是第一手的,所以有想加入的公司的话也要提前关注好其招聘公众号。
为什么说及时获取到信息很重要呢?
- 早了解早投递。因为越早投递就越早进入笔试面试流程,这样是比较有优势的,因为越往后岗位的需求就越少,那么面试的要求就会相对高一点,通过率也会更低。
- 提前批。如果有提前批机会的话要把握好,提前批很重要,有些公司提前批直接不用笔试,而且有些公司提前批淘汰之后是不影响正式批的,相当于有两次机会。
技术准备
一提到嵌入式这个岗位,大家的第一反应一般是Linux,由此可见Linux的重要性。可如果你和我一样在大学期间只做过单片机的项目没有接触过Linux,如果时间还来得及的话,那我建议你花几个月的时间去做一个Linux的项目,这会对你的笔试面试很有帮助。而如果你看到这篇帖子的时候已经是7月份的话,那么我想你应该没有足够的时间去系统地学习Linux并完成一个项目了。我就是属于后者,当我意识到Linux对于找嵌入式岗位的重要性的时候,已经没办法及时补救了。但是大家也不要灰心,还是有不少招嵌入式单片机的岗位的,只是相对来说不会用Linux限制了找工作的选择。
C语言
无论是嵌入式单片机还是嵌入式Linux,C语言都是必考的内容,可以说C语言是嵌入式软件工程师吃饭的家伙,相信C语言的重要性不用多说。C语言这块的话,随着不断复习,自己的一个熟练程度也会越来越高,所以最重要的就是多看多练。对于嵌入式工程师来说C语言基本上是要完全掌握并且熟练使用的,下面就先列出在笔试面试中C语言需要掌握的/比较重要的知识点:
- 运算符优先级
- 输入输出操作
- 原码、反码、补码
- 预处理
- 关键字
- 堆栈
- 数组
- 指针
- 函数
- 字符串
- 结构体、联合体
- 内存分配
主要是这几个大的方向,输入输出是必须要熟练的,因为在笔试编程题里面是几乎必须要用到的,这个部分可以去刷算法题来熟悉一下。关键字所有的关键字都要了解,像是static、volatile、extern、sizeof都是比较常考的。堆栈和指针都是重中之重,一定要全面完整地学习。像是大题的话往往是考算法、数据结构以及对字符串的一系列操作。
C++如果有时间的话最好去学一下,就封装、继承、多态之类的,这部分我不是很了解,因为时间的原因我没有太多去学这部分的知识。而我经常在笔试题中遇到C++的题目,一般是代码选择题,这个时候完全看不懂靠蒙的话其实还是比较吃亏的,所以推荐把其他部分内容复习完以后还有多时间的话可以学一学C++方面的一些知识。
单片机
单片机这部分主要是针对你在项目中常用的芯片,一般来说大部分人是以STM32为主。我就针对STM32来说说有哪些重要的知识点:
- GPIO
- 中断
- 定时器
- 通信接口
在这些里面最常被问到的就是中断和通信接口。其中通信接口主要就是IIC、SPI、UART。
数据结构与算法
数据结构
对于嵌入式软件岗位来说,数据结构相对没有互联网行业的招聘那么重要,但还是属于必考的知识点。对于嵌入式岗位,数据结构可以选择性地学习,不用全部都学会,毕竟准备的时间是有限的,当然有充足的时间的话,当然建议都学会了,因为对于顶级大厂来说,数据结构是考核的相对重点。
数据结构对于大多数不冲顶级大厂的同学来说,主要学数组、链表、队列、堆栈就可以了,至于二叉树之类的,在我整个秋招的过程中,几乎没有被问到。可能像是华为这种公司会考到。
算法
算法这部分建议去leetcode或者牛客网刷一下题,起码刷个20道简单题,熟练一下做题的方法,输入输出这些,对字符串的操作这些,因为后面笔试基本上都会考两题大题,基本上刷个20题,稍微总结一下,然后加上平时的积累就问题不大了,如果想进华为这样的大厂,就要刷中等甚至困难的算法题了,这个看各位自己的取舍,也可以在牛客网上看看你想投的那家公司的笔试面试侧重点在哪里,比如说华为笔试就是考3道算法大题。
网络
网络这部分考得还是比较少的,有些公司会问,有些公司不问,如果是涂鸦智能这样做物联网的公司那肯定是会问的。这部分就需要知道一些基础,如果项目中有用到的话就需要将项目中用到的协议了解清楚,以及你在做这个项目的时候为什么要选择这个协议而不是另一个协议。我就在一个物联网项目中有使用到MQTT协议,那我就去单独学了这部分的知识,如果并没有项目涉及网络这一块的话就掌握一点基础知识就好了,即使不理解也死记硬背背下来,但是还是建议大家能在理解的基础上记忆,不然面试官稍微往深入问一点就答不出来了,最经典的两个问题:
- tcp和udp的区别
- 三次握手四次挥手
这部分内容比较少,就不单独展开来讲了,主要就是上面提到的两个问题,把那两个问题理解了去面试非网络领域的公司就没什么大问题了。
操作系统
操作系统这部分的基础知识是肯定要会的,尽管你可能像我这样在大学阶段只用过单片机,并且没在上面跑过uCOS或者FreeRTOS之类的实时操作系统的话强烈建议要去学一下这方面的知识,因为尽管是投的嵌入式单片机的岗位,往往也是要求会实时操作系统的。所以建议可以去学一下FreeRTOS或者RT-Thread之类的实时操作系统,有时间的话最好能够在自己的项目中实践一下,时间不够的情况下就把基础知识系统地先学一下。
其次就是Linux,尽管投的是嵌入式单片机岗位,但嵌入式在广泛的一个定义里,大家还是默认是以Linux为主,所以Linux的基础知识也要会,因为有些公司在笔试的时候就会涉及到,这方面的话主要是要理解一些理论知识,知道线程进程,知道一些基础的指令,最好可以在ubuntu上写一个代码出来gcc编译一下。会这些Linux相关内容基本上就可以让你在笔试阶段不那么吃亏,当然只会这些是不足以支撑你去找一个纯Linux岗位的工作的。
其他的知识点可以看我总结的嵌入式面经指南 很全很有用!!!
嵌入式软件工程师面试完全指南
面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,3300+订阅,非常适合在找工作面经薄弱的同学,销量即是口碑,提前订阅提前享受,持续更新中。
原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
