秋招是每个在校学生都要经历的一个阶段。本篇文章记录了自己的秋招历程。秋招投递公司23家,简历被刷1家。笔试/测评挂掉3家。至今无消息的8家。获得Offer的公司有小米,兆易创新,全志科技,浙江大华,海格通信,京信通信,景嘉微电子,广州朗国电子,北京华大电子,中国长城科技集团。已签约浙江大华。最后收获了一个满意的Offer。前事不忘,后事之师。希望自己总结的这些内容能对后面准备秋招的同学有所帮助!

1. 自我介绍

  本硕双非,本科电子信息工程,硕士电子与通信工程。导师申请的项目中有一部分需要用Stm32实现,所以自己在硕士期间接触Stm32比较多。当时也考虑到,如果只会Stm32,找工作可能会比较吃力。而自己对嵌入式底层的内容也比较感兴趣。所以,在研二的时候每天花一点时间来学习下驱动开发,以后找工作打算从事底层驱动开发相关的内容。

2. 秋招准备

2.1 Linux驱动

  在2019年12月的时候,基本就把韦东山老师的第二期课程学习了一遍了,虽然在学习过程中有很多不明白的,但也坚持看了一遍。把有疑问的地方记录了下来,打算后面再慢慢的去深入研究。

  韦东山老师讲的课程确实很好,但是对于基础不太好的可能会比较吃力,很容易劝退。当时思考了下,自己为什么听不懂呢,哪里有欠缺?我们对自己应该有一个清晰的认识,我从Stm32转驱动开发,优势就是我对于基本的硬件原理都比较熟悉,欠缺的是对于Arm架构的深入了解,操作系统和计算机组成原理的基本知识。所以,这个时候发现自己听不懂的情况下,有些问题搞不明白,先不要深究,后面可以慢慢补。

  今年疫情在家,在3月份的时候,对照自己之前的学习笔记和遗留的疑问,把之前学过的内容又看了下,当看第二遍的时候,对于很多问题也可以想清楚了。

  考虑到驱动这块没有做过具体的项目,我就对照着韦东山老师的移植Uboot的视频,自己移植了一遍。(S3C2440移植uboot之编译烧写uboot)自己对于Uboot的启动流程也就很熟悉了。超详细分析Bootloader(Uboot)到内核的启动流程(万字长文!)既然打算把这个写在简历上,就要把这个启动流程搞得特别明白,有些基本的源码也是要知道的(比如,如何初始化NAND FLASH,时钟如何配置的)。而且,写在简历上的面试官一定会问的。

2.2 Arm体系与架构

  关于Arm的体系架构这部分是一定要看的。推荐一本书,杜春雷老师写的《ARM体系结构与编程》,这本书其实就是ARMV7开发手册的中文版,很多内容都是手册里面的。书的话不一定都要看,学习过程中,哪里不了解再去查书,效果可能会更好。

2.3 数据结构与算法分析

  数据结构与算法的内容时秋招中的重中之重,笔试必考,面试必考。所以这部分要好好准备。

  数据结构的话本科也没学过。4月份的时候开始在家,从基本的链表,二叉树,堆,队列,字符串,排序算法,查找算法等基础内容学起。当时参考的资料是在网上找的一本PDF。里面包含了基本数据结构的算法的实现。对着PDF资料边看边理解,自己动手去实现了一遍。刚开始学习数据结构的内容,一定要多画图,像链表的内容,不画图有时候可能不太好理解指针是如何指向的。总之要找到适合自己的学习方式。

图论的内容比较难,如果不打比赛,可以直接跳过(只针对嵌入式开发的同学)。还有字符串的KMP算法也比较难理解(其实刷题Leetcode题目之后就会发现,字符串匹配的题目解法很多,不一定要KMP)。也可以先不看。

  关于我写的一些数据结构的内容,可以在数据结构与算法分析专栏中看到。大家可以参考下。

  此外我还整理了下数据结构中比较重要的内容,在面试中一定要达到可以在白纸上写的水平。具体如下图所示。

  在学习完基本的数据结构与算法的内容之后,接下来就是刷题了。我自己是在Leetcode上刷的题目。由于时间有限,我刷题一开始的策略是按照 题目类型 去刷题(参考了知乎各位大佬的刷题策略),主要内容集中在了链表,二叉树,字符串,数组这四个部分。把这部几个部分出现频率高的题目都总结了出来。各个部分频率总结链接:

  【leetcode】高频题目整理_所有题目汇总篇( High Frequency Problems, All Problems )

  面试leetcode题型总结

  刷题过程中会遇到一些特定算法的题目,比如滑动窗口,双指针,动态规划等。遇到这种题目,能解决的先解决掉,不能解决的后面可以按照算法类型统一解决。

  最后,在笔试的时候,很多公司的大题的笔试系统其实并不是像Leetcode一样只写个子函数就行了,而是和ACM竞赛的类型一样,需要自己处理输入输出。这部分一定要提前练习。如果不熟悉系统,笔试的时候虽然有思路,但是也写不出来。建议提前熟悉下输入输出。

  OJ在线编程常见输入输出练习场

2.4 C语言

  C语言这部分的话,可以上网搜索一些面试中经常问到的内容。这里也推荐一本书,何昊老师写的《程序员面试笔试宝典第三版》(不要找错了)。这本书是针对C/C++程序员的,主要介绍了面试过程中经常问到的问题,整体的内容偏向底层,问题解释的也比较清楚。但是有些地方有错误,看的时候要注意。可以加书后面的QQ群,向作者反馈错误。

  C++语言,平常用得少,我这部分就没准备,给不了大家意见。在面试中好几次问到我C++的指针引用之类的基础知识,只能和面试官说C++内容用得少,不熟悉。不过,这并不会成为面试官最后是否要你的决定性因素(只针对嵌入式底层来说)。

2.5 操作系统&计组

  这块是我的软肋,好多概念不太懂。不过在学习驱动的过程中,我把这些概念也都整理了一些。具体文章可以看下面的内容。

  你真的懂Linux内核中的阻塞和异步通知机制吗?(花了五天整理,墙裂推荐!)

  面试官让你讲讲Linux内核的竞争与并发,你该如何回答?

  S3C2410 MMU(存储器管理单元)详述

  Linux内核中断顶半部和底半部的理解

  谈谈进程上下文、中断上下文及原子上下文的一些概念

  关于操作系统的一些知识,同样是整理了网上常见的一些面试题目。这份嵌入式软件开发知识点总结一共有13W字,涵盖了Linux,C语言,Arm体系与架构,操作系统,计算机组成原理等方方面面的知识。我在秋招过程中问到的问题,在里面基本都可以找到。这份资料给了我很大帮助。资料放在了公众号【嵌入式与Linux那些事】中,大家可以关注后回复“秋招大礼包”免费自取。

2.6 项目经验

  如果自己做过一些项目的话,建议写两到三个自己做过的项目,主要从以下几个方面介绍:

  项目名称:基于XXX的XXX

  个人角色:项目负责人/模块负责人

  起止时间:2020.3~2020.6

  项目描述:主要介绍项目主要内容,4句话即可。

  编程语言和环境:gcc3.4.2,Ubuntu16.04,S3C2440开发板

  负责事宜:写自己做了哪些内容,第一,XXXX;第二,XXXX;第三,XXX;

  如果没有做过项目,可以去找一些开源的项目做一下(韦东山老师第三期的视频中有相关项目的介绍),比如移植Uboot,数码相框等(韦老师最新的IMX6ULL开发板已经有了更加高大上的项目,也可以写在简历中)。但是不要找那种烂大街的,比如XXX管理系统,五子棋,贪吃蛇。说实话,这些东西再怎么做,一听这个名字面试官就会没兴趣了。

  我们也可以适当“包装”自己的项目,我这个项目是导师申请的国家自然科学基金项目(或者XX省科技重大专项)的一部分,这个项目主要是完成XX技术的攻关。我这个项目是和XX部队(XX高校)合作的项目,我们负责XX部分。这么一写的话“档次”是不是就上去了呢?但是这里不是让大家在简历中去造假,在简历中造假是不能接受的,这是一个人基本的道德底线!

  自己写上去的项目一定要搞清楚,弄得明明白白。有好几次面试中,面试官让我讲你做的这个东西原理是什么。由于原理比较复杂,所以面试中,我都是边画图边讲,涉及到的公式还要进行推导,为什么这样做,都得给面试官讲清楚。如果他没有听懂,那就是我们没有讲清楚

  说了这么多,其实主要就是弄清楚这几个问题:为什么做这个项目?一共几个人做?你是什么角色?你做了哪些部分?你认为最难得地方是什么?如何解决的?最后收获是什么?

  事实上,我们所做的东西是什么,面试官并不太在意,毕竟公司做的东西比我们要复杂的多,对比公司的产品来说,我们的简直太low了,我们所做的可能只是个“玩具”而已。面试官主要考察的就是项目的真实性和我们的表达能力

  也可以参考下其他人整理的
  如何在面试中介绍自己的项目经验

2.7 其他

  至于其他内容,主要有以下几个方面吧。

1.不要放过任何一次和面试官聊天的机会(发哥和我说的,受益匪浅)。

今年疫情在家的时候,请教了发哥关于校招找一份什么样的工作,嵌入式软件工程师的职业规划等问题,非常感谢发哥在晚上十点多手打了1000多字解答我的疑惑。特别强调了,在校生要抓住校招的机会,提前准备,多和面试官聊聊天。和发哥聊完后自己对于整个行业有了更清楚的认识,谢谢发哥!

  多面试!多面试!多面试!重要的话说三遍!看到有合适的公司要尽早投递,不要到后面没有HC了。

  比如我投递华为是在9.10号。笔试在9.14。虽然笔试过了,测评也过了。但是这个时候其实有点晚了(也可能和投递的部门有关系)。部门的HR和我说,他们第一批的面试已经结束了,领导要求这段时间要形成闭环。第二批还会有一些HC,但是在10月之后了,而且名额也不会太多了。相反,投递其他部门的同学,在9.19-9.24这周都收到了面试通知。

  其刚开始前几次面试肯定会有些紧张,不知所措。但是当你面了三五场之后,你就会发现,面试官问的东西都是差不多的。我在9月中下旬,最多的一天面了4场。有句话说得好,吹牛X吹多了,后面也就很自然了

2.回答问题一定要有逻辑性!先抛出结论,再分要点回答。

  比如,面试官问你平常你是如何学习专业知识的?以什么样的方式?

  答:学习的形式主要分为两种一种是在学习的过程中解决疑问,以解决问题为导向。比如,在移植Uboot的过程中,我会想到为什么要关闭I-Cache,D-Cache等,关闭中断等(这里可以抛出这些问题,以防后面会问),遇到这些问题我就会记录下来,然后上网去查资料。在解决这些问题的过程中,可能会遇到其他的问题,继续查找相关资料,直到最后都搞清了。第二种就是系统的学习,如果有比较充足的时间,我会去拿着像Arm体系和架构,深入理解计算机系统这些书去一点一点的读。去理解这些内容。以上就是我日常的一个学习方式。

3.自我介绍。

  自我介绍是面试中必不可少的部分。面试官一般会利用自我介绍的时间来浏览下你的简历。建议准备一个一分钟的自我介绍和三分钟的自我介绍。我在面试小米的时候,面试官直接打断我,说自我介绍简单一点,要不后面没有时间写代码了。

  我的自我介绍主要是三部分,第一部分是开场白,名字,学校,专业,应聘岗位,应聘该岗位的原因。第二部分是项目经验的简单介绍,这里一定要简洁,主要说下自己做了那些东西。第三部分是学习能力的介绍,这部分是为了抛出自己写博客的情况,有技术博客并且博客的内容比较充实的话,在面试中确实是个加分项

4.简历填写

  投递简历时常常需要在各个网站填写自己的个人信息。建议使用如下工具,可以方便的在各个网站自动识别填充所需内容。当然,也有许多识别不了的。这种就没办法了。当然,如果大家有其他工具也可以推荐!

  牛客简历助手

5.最后要知道一些知识

  链接如下
  Offer,三方,两方,毁约 这些你需要知道的事

3. 书籍推荐

C语言

  C Primer Plus,C缺陷和陷阱,C和指针,C专家编程

数据结构

  大话数据结构,数据结构与算法描述-C语言描述。

硬件原理

  Arm体系结构与编程,Armv7/Armv9数据手册。

Linux驱动

  嵌入式Linux应用开发完全手册,Linux设备驱动开发详解,Linux设备驱动程序

Linux应用编程

  Unix环境高级编程,Unix环境网络编程

计算机基础

  深入理解计算机系统现代操作系统,计算机组成与设计:硬件软件接口,计算机体系结构:量化研究方法

Linux内核

  Linux内核完全注释(麻雀虽小五脏俱全),Linux内核设计与实现,Linux内核源代码情景分析

  以上书籍加粗的为重点推荐。如果时间不充裕,可以当作工具书来查询。当然,有时间还是建议认真读下。

需要电子书的可以在公众号【嵌入式与Linux那些事】回复“电子书”领取,或者点击右下角加QQ群,群里也有整理的相关资料。

4. 未来展望

  1.接下来的时间准备下大论文的内容,之前投的第二篇小论文有了审稿意见,只是没改而已,今年过年之前投出去吧。保证自己顺利毕业!

  2.补充下操作系统和计算机组成原理的知识。主要看下《深入理解计算机系统》 《现代操作系统》这两本书把,每周把看过的东西总结下,照常输出一篇博客。这部分是最主要的内容,把基础打扎实了。

  3.操作系统和计算机组成原理的知识形成博客专栏,坚持!

  4.坚持锻炼身体,每周视天气情况而定,跑步2~3次,周末打打球。

  5.期待入职大华,即将开启一段新的旅程,充满了未知和挑战,要继续加油鸭!

5. 总结

  秋招结束了,今年感觉好难,好多公司缩招。在九月初有段时间,心情很低落,一直在怀疑自己。特别是投递简历后,漫长的等待。每天都会查看好几遍邮箱,生怕错过了重要的通知。心情不好的时候,我就会去操场边听音乐边跑步,特别喜欢大汗淋漓的感觉。跑完之后整个人的精神状态会好很多。调整好心态,继续看面经,刷题,总结基础知识!

  综合考虑了下,最后选择了浙江大华,主要原因是给了一个让我无法拒绝的理由。自己也询问了在里面的师兄师姐,他们说还可以,加班的话没有网上说的那么可怕。自己提前做完的话,是可以走的。而且组内打个招呼,有急事也可以请假。加班一般到八点半,对于自己来说其实也可以接受(现在不加班的公司太少了)。至于双休的话,是看部门,不忙的话双休都有,忙的话大小周休息。个人还算比较满意。

文中提到的资料都已经整理为PDF文档,关注公众号【嵌入式与Linux那些事】后“秋招大礼包”免费领取。

6. 致谢

  刚开始拿到Offer后不知道该如何抉择,父母那边倒是没有太大的问题,说哪里工作合适就去哪里。很感谢我的父母可以支持我。当时咨询了发哥,逸珺哥,平哥,朱老师,豆豆姐等,还有在投递简历前也请教了下肖遥哥。非常感谢这些前辈能给我建议!

  2020年疫情在家期间,自己对于找一份什么样的工作并没有明确的规划。于是咨询了发哥关于校招,职业发展的问题。发哥大晚上的手打了1000多字回复我,特别强调要重视校招,多和面试官聊天,把握机会。在职业发展规划上,发哥向我介绍了底层驱动是做什么的,在不同的公司扮演什么角色,以及未来的晋升通道等。应聘的时候,要多些自信,努力把握好人生的选择点,在没有做选择前,不要把话说死,把方向定死。很多校招企业更看重的是可培养性,进入企业后都是按照一张白纸来培养的。

发哥:公众号【嵌入式与Linux】。嵌入式Linux公众号号主发哥,平时不仅分享技术文章,还会给嵌入式入门的同学们做职业分享和讨论,当然了,也有篮球和晒娃。发哥技术也比较猛,开始的STC89C51,AVR,STM32,到现在的ARM7,ARM9,ARM11,从裸奔到嵌入式Linux和安卓(Android)系统。之前在一家大厂工作,后面辞掉高薪,出来创业。除了技术比较牛之外,还喜欢打篮球,有机会我要去深圳找他单挑。

  投简历前,咨询了下肖遥哥在校招中是选择岗位还是选择公司的问题。肖遥哥说,岗位重要,再好的公司如果做的不是你喜欢的擅长的,那么你可能在这家公司也不会长久,不管做那个方向,做那个行业,还是在一个方面要专注,坚持

肖遥哥:公众号【技术让梦想更伟大】力争原创,内容涵盖嵌入式Linux、C/C++/Qt、算法、数据结构、职场感悟等方向。这里有学习路线、经验心得、面试宝典、源码解析、技术精选及经典资料等。号主李肖遥,一个认真做技术的职场老鸟,孵化编程,乐于分享。讲原理,抠细节,究根源。用心写好每一篇文章,专注每一个细节,期待与您一起成长。

  在选择Offer的时候也咨询了下逸珺哥,待遇差不多的情况下,考虑公司发展前景以及地域,但要优先考虑公司行业以及前景。也要考虑以后定居等问题,比如是否能落户,这个和以后孩子的教育也有些关系。但是要找到兴趣,待遇,地点等各方面都能满足的工作还是有点难度的。

逸珺哥:公众号【嵌入式客栈】,号主逸珺,高级嵌入式软件工程师,从事嵌入式软硬件开发多年,主要分享Linux系统构建、Linux驱动开发、实战信号处理算法(数字滤波器、谱分析等)、单片机技术、AIOT学习笔记等相关技术内容。

  小平哥说,要注意下你应聘的职位和你进去从事的工作内容是否是一样的。在公司如果从事的方向正好是公司的主要业务,你会学到更多的东西。考虑定居的问题,是干几年回老家,还是找个宜居的城市呢?一线城市的压力是会大一点,但是机会也会多一点。如果回老家或者周边,公司的规模和待遇等就会比一线城市差一点。

小平哥:公众号【txp玩Linux】。从事过linux应用和c++服务器开发;如果您不知如何准备面试、以及学习路线的迷茫等问题,都可以来找我,一一帮您解答,欢迎大家来“骚扰”我!

  朱老师说,你担心的地域问题和年龄问题都不是事,完全可以干几年再跳走。而且,你要相信个人机缘就是最好的安排。这种问题没有标准答案,紫光存在不确定性,对于目前的来说,还是先落袋为安吧。杭州也是个不错的城市,工作机会也比较多,完全可以支持你未来三到五年的发展。芯片原厂也不一定是最好的,第一份工作只要在质量上没有问题,后面还是容易跳槽的。

  豆豆姐,第一份工作,跟对人很重要。大公司有成熟的培养体系。刚开始工作,左右对比也很正常。工作本身,无论哪个岗位都能历练自己。不是赚到,就是学到,关乎己心工作无非也是借境修心。自己私下仔细一想,不管是工作还是生活,确实是这么个道理,很赞!

  下一篇文章将会分享小米,兆易创新等公司的面经总结,欢迎关注我的博客,第一时间获取更新。

  养成习惯,先赞后看!如果觉得写的不错,欢迎关注,点赞,在看,谢谢