秋招是每个在校学生都要经历的一个阶段。本篇文章记录了自己的秋招历程。秋招投递公司23家,简历被刷1家。笔试/测评挂掉3家。至今无消息的8家。获得Offer的公司有小米,兆易创新,全志科技,浙江大华,海格通信,京信通信,景嘉微电子,广州朗国电子,北京华大电子,中国长城科技集团。已签约浙江大华。最后收获了一个满意的Offer。前事不忘,后事之师。希望自己总结的这些内容能对后面准备秋招的同学有所帮助!
1. 自我介绍
本硕双非,本科电子信息工程,硕士电子与通信工程。导师申请的项目中有一部分需要用Stm32实现,所以自己在硕士期间接触Stm32比较多。当时也考虑到,如果只会Stm32,找工作可能会比较吃力。而自己对嵌入式底层的内容也比较感兴趣。所以,在研二的时候每天花一点时间来学习下驱动开发,以后找工作打算从事底层驱动开发相关的内容。
2. 秋招准备
2.1 Linux驱动
在2019年12月的时候,基本就把韦东山老师的第二期课程学习了一遍了,虽然在学习过程中有很多不明白的,但也坚持看了一遍。把有疑问的地方记录了下来,打算后面再慢慢的去深入研究。
韦东山老师讲的课程确实很好,但是对于基础不太好的可能会比较吃力,很容易劝退。当时思考了下,自己为什么听不懂呢,哪里有欠缺?我们对自己应该有一个清晰的认识,我从Stm32转驱动开发,优势就是我对于基本的硬件原理都比较熟悉,欠缺的是对于Arm架构的深入了解,操作系统和计算机组成原理的基本知识。所以,这个时候发现自己听不懂的情况下,有些问题搞不明白,先不要深究,后面可以慢慢补。
今年疫情在家,在3月份的时候,对照自己之前的学习笔记和遗留的疑问,把之前学过的内容又看了下,当看第二遍的时候,对于很多问题也可以想清楚了。
考虑到驱动这块没有做过具体的项目,我就对照着韦东山老师的移植Uboot的视频,自己移植了一遍。自己对于Uboot的启动流程也就很熟悉了。既然打算把这个写在简历上,就要把这个启动流程搞得特别明白,有些基本的源码也是要知道的(比如,如何初始化NAND FLASH,时钟如何配置的)。而且,写在简历上的面试官一定会问的。
2.2 Arm体系与架构
关于Arm的体系架构这部分是一定要看的。推荐一本书,杜春雷老师写的《ARM体系结构与编程》,这本书其实就是ARMV7开发手册的中文版,很多内容都是手册里面的。书的话不一定都要看,学习过程中,哪里不了解再去查书,效果可能会更好。
2.3 数据结构与算法分析
数据结构与算法的内容时秋招中的重中之重,笔试必考,面试必考。所以这部分要好好准备。
数据结构的话本科也没学过。4月份的时候开始在家,从基本的链表,二叉树,堆,队列,字符串,排序算法,查找算法等基础内容学起。当时参考的资料是在网上找的一本PDF。里面包含了基本数据结构的算法的实现。对着PDF资料边看边理解,自己动手去实现了一遍。刚开始学习数据结构的内容,一定要多画图,像链表的内容,不画图有时候可能不太好理解指针是如何指向的。总之要找到适合自己的学习方式。
图论的内容比较难,如果不打比赛,可以直接跳过(只针对嵌入式开发的同学)。还有字符串的KMP算法也比较难理解(其实刷题Leetcode题目之后就会发现,字符串匹配的题目解法很多,不一定要KMP)。也可以先不看。
关于我写的一些数据结构的内容,可以在数据结构与算法分析专栏中看到。大家可以参考下。
此外我还整理了下数据结构中比较重要的内容,在面试中一定要达到可以在白纸上写的水平。具体如下图所示。
在学习完基本的数据结构与算法的内容之后,接下来就是刷题了。我自己是在Leetcode上刷的题目。由于时间有限,我刷题一开始的策略是按照 题目类型 去刷题(参考了知乎各位大佬的刷题策略),主要内容集中在了链表,二叉树,字符串,数组这四个部分。把这部几个部分出现频率高的题目都总结了出来。各个部分频率总结链接。
【leetcode】高频题目整理_所有题目汇总篇
(https://blog.csdn.net/qq_16933601/article/details/108913658)
面试leetcode题型总结
(https://zhuanlan.zhihu.com/p/158977583?utm_source=qq&utm_medium=social&utm_oi=805166261268004864)
刷题过程中会遇到一些特定算法的题目,比如滑动窗口,双指针,动态规划等。遇到这种题目,能解决的先解决掉,不能解决的后面可以按照算法类型统一解决。
最后,在笔试的时候,很多公司的大题的笔试系统其实并不是像Leetcode一样只写个子函数就行了,而是和ACM竞赛的类型一样,需要自己处理输入输出。这部分一定要提前练习。如果不熟悉系统,笔试的时候虽然有思路,但是也写不出来。建议提前熟悉下输入输出。
OJ在线编程常见输入输出练习场
(https://ac.nowcoder.com/acm/contest/5650)
2.4 C语言
C语言这部分的话,可以上网搜索一些面试中经常问到的内容。这里也推荐一本书,何昊老师写的《程序员面试笔试宝典第三版》(不要找错了)。这本书是针对C/C 程序员的,主要介绍了面试过程中经常问到的问题,整体的内容偏向底层,问题解释的也比较清楚。但是有些地方有错误,看的时候要注意。可以加书后面的QQ群,向作者反馈错误。
C 语言,平常用得少,我这部分就没准备,给不了大家意见。在面试中好几次问到我C 的指针引用之类的基础知识,只能和面试官说C 内容用得少,不熟悉。不过,这并不会成为面试官最后是否要你的决定性因素(只针对嵌入式底层来说)。
2.5 操作系统&计组
这块是我的软肋,好多概念不太懂。不过在学习驱动的过程中,我把这些概念也都整理了一些。具体文章可以看下面的内容。
关于操作系统的一些知识,同样是整理了网上常见的一些面试题目。这份嵌入式软件开发知识点总结一共有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了,我们所做的可能只是个“玩具”而已。面试官主要考察的就是项目的真实性和我们的表达能力。
也可以参考下其他人整理的“如何在面试中介绍自己的项目经验”。
(https://blog.csdn.net/qq_16933601/article/details/110875518)
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.简历填写
投递简历时常常需要在各个网站填写自己的个人信息。建议使用如下工具,可以方便的在各个网站自动识别填充所需内容。当然,也有许多识别不了的。这种就没办法了。当然,如果大家有其他工具也可以推荐!
牛客简历助手
(https://www.nowcoder.com/quick-fill/show-edit#form)
5.最后要知道一些知识
链接如下Offer,三方,两方,毁约 这些你需要知道的事
(https://www.nowcoder.com/discuss/144015)
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.坚持每周的跑步,打球。
5.公众号打算主要分享C/C ,数据结构与算法,Linux驱动开发,计算机基础等内容。写公众号和写博客还不太一样。所以,接下来我会考虑下如何在自己能力范围内写一系列内容。大家有任何意见和建议均可以联系我。
6.期待入职大华,即将开启一段新的旅程,充满了未知和挑战,要继续加油鸭!
5. 总结
秋招结束了,今年感觉好难,好多公司缩招。在九月初有段时间,心情很低落,一直在怀疑自己。特别是投递简历后,漫长的等待。每天都会查看好几遍邮箱,生怕错过了重要的通知。心情不好的时候,我就会去操场边听音乐边跑步,特别喜欢大汗淋漓的感觉。跑完之后整个人的精神状态会好很多。调整好心态,继续看面经,刷题,总结基础知识!
综合考虑了下,最后选择了浙江大华,主要原因是给了一个让我无法拒绝的理由。自己也询问了在里面的师兄师姐,他们说还可以,加班的话没有网上说的那么可怕。自己提前做完的话,是可以走的。而且组内打个招呼,有急事也可以请假。加班一般到八点半,对于自己来说其实也可以接受。至于双休的话,是看部门,不忙的话双休都有,忙的话大小周休息等。个人还算比较满意。
6. 致谢
刚开始拿到Offer后不知道该如何抉择,父母那边倒是没有太大的问题,说哪里工作合适就去哪里。很感谢我的父母可以支持我。当时咨询了发哥,逸珺哥,平哥,朱老师,豆豆姐等,还有在投递简历前也请教了下肖遥哥。非常感谢这些前辈能给我建议!
2020年疫情在家期间,自己对于找一份什么样的工作并没有明确的规划。于是咨询了发哥关于校招,职业发展的问题。发哥大晚上的手打了1000多字回复我,特别强调要重视校招,多和面试官聊天,把握机会。在职业发展规划上,发哥向我介绍了底层驱动是做什么的,在不同的公司扮演什么角色,以及未来的晋升通道等。应聘的时候,要多些自信,努力把握好人生的选择点,在没有做选择前,不要把话说死,把方向定死。很多校招企业更看重的是可培养性,进入企业后都是按照一张白纸来培养的。
投简历前,咨询了下肖遥哥在校招中是选择岗位还是选择公司的问题。肖遥哥说,岗位重要,再好的公司如果做的不是你喜欢的擅长的,那么你可能在这家公司也不会长久,不管做那个方向,做那个行业,还是在一个方面要专注,坚持。
在选择Offer的时候也咨询了下逸珺哥,待遇差不多的情况下,考虑公司发展前景以及地域,但要优先考虑公司行业以及前景。也要考虑以后定居等问题,比如是否能落户,这个和以后孩子的教育也有些关系。但是要找到兴趣,待遇,地点等各方面都能满足的工作还是有点难度的。
小平哥说,要注意下你应聘的职位和你进去从事的工作内容是否是一样的。在公司如果从事的方向正好是公司的主要业务,你会学到更多的东西。考虑定居的问题,是干几年回老家,还是找个宜居的城市呢?一线城市的压力是会大一点,但是机会也会多一点。如果回老家或者周边,公司的规模和待遇等就会比一线城市差一点。
朱老师说,你担心的地域问题和年龄问题都不是事,完全可以干几年再跳走。而且,你要相信个人机缘就是最好的安排。这种问题没有标准答案,紫光存在不确定性,对于目前的来说,还是先落袋为安吧。杭州也是个不错的城市,工作机会也比较多,完全可以支持你未来三到五年的发展。芯片原厂也不一定是最好的,第一份工作只要在质量上没有问题,后面还是容易跳槽的。
豆豆姐,第一份工作,跟对人很重要。大公司有成熟的培养体系。刚开始工作,左右对比也很正常。工作本身,无论哪个岗位都能历练自己。不是赚到,就是学到,关乎己心。工作无非也是借境修心。自己私下仔细一想,不管是工作还是生活,确实是这么个道理,很赞!