原本这篇文章我打算写这段时间学习总结好的mysql和数据结构之树的技术总结文章:
但是就在刚才给一位网友发qt源码包时,突然又聊到了这个嵌入式学习路线的问题,所以这篇文章我会分享一些免费的资源学习以及学习路线:
ps网友一:
ps网友二:
ps网友三:
其实在很早之前,准确的说应该是今年的五月份左右,当时我也分享过我自己的学习经历(ps:当时可能讲的不太详细:简单的总结和分享);其实结合之前很多网友问我offer方向选择以及我自己毕业一年来,大大小小的求职过程和观察的经历来看:
(1)如果在学校或者说你已经出来上班不久,就能够非常明确自己要走哪个方向那肯定是很好,你只要努力朝自己定的目标慢慢靠近进行(当然这其中会遇到许多挫折和挑战也是在所难免的,不可能一帆风顺!)
(2)当然也有那种经历过弯路之后的,才明确要走哪个方向的(我觉得大部分人可能都是这样过来的,包括我自己也是这样过来的)
(3)当然有些人也有听从前辈的建议走哪个方向的,这都没错,毕竟是前人的经验,至少说可以让少采坑。
不过我这里我认为对方向的选择,应该建立在对行业的了解基础上(比如待遇问题,这个肯定是我们最为关注的话题,以及今后是否有发展性!),再去做一个合理的选择(结合自身情况,考虑到时间成本,试错成本,自己是否能够承受住这种错误等等),不过往往大部分人在还没出来上班之前,对行业的认识可能比较浅,一般可能是出来上班之后,才会对行业有一个更深的认识!其实总的来说,方向的选择,会受到很多因素影响;就拿刚才来说,上班上了一两年左右的时间,差不多对行业摸得非常清楚,这个时候可能你对职业方向规范会比较清楚;前期刚出来对于方向的选择还真不好说。下面是嵌入式的路线(应该大部分人是这样走的,这里不包含硬件来说):
(a)51单片机+stm32+rtos+linux(分应用和驱动)
(b)直接到linux(先做linux应用,后期再做linux驱动,或者两者都结合做)
还有一个非常有意思的话题,很多技术群里面会聊到互联网和嵌入式工资的对比,然后一大波对嵌入式的吐槽就开始了;其实说老实话,作为打工人,这两个行业薪资对比上后期确实有差距,但是我想说的是嵌入式待遇也不差,为什么我会这样说(这里看到文章的大佬不要喷我,我只是站在我的经历来看待这个问题!):
我读大专的时候,学的专业是汽车电子技术,就拿我这个学历来说,出来去4s店做技术人员, 你知道实习和转正多少钱吗?在我大专还没有毕业的时候,我和实验室的小伙伴已经体验过一次创业的历程,这期间我也会去市场了解情况,比如去连锁店里面洗洗车(精洗的那种)以及做保养:
ps:这是当我在连锁店里面一天洗了大概90辆汽车(有大部分是suv,洗suv最累了)
然后空闲的时候,我就向这些学长问一下待遇咋样;我清楚的记得当时一个学长和我实习期一个月1000块(当时我是在赣州那边,因为我大专是在赣州读的),而且还不吃住的那种哦,转正也才1500;你看到这里,你会脱口而出:卧槽!才这么点钱,这怎么活啊,但是事实就是这样,赣州消费水平也不低,平时吃个饭也怎么要十来块;还有后来我在学校准备专升本(hh,说到这个我自己也不咋后悔没有考上,有得就失,鱼和熊掌不可兼得!),听我的同学以及同学院的朋友出去去其他城市分享的待遇情况,比我刚才好不了多少,工资大概也就三千最多,如果是做汽车销售,按提成来拿的话,工资可能就会更高一点。你说这么点工资在现在这个社会怎么活,更别说有存钱的说法了,连养活自己都很难。所以在我毕业一年了,我平时也会和一些以前同学和朋友聊到他们现在在干啥:
还有我的大部分同学,有些去做销售买保险的和卖房的都有,也去自己开店做老板的也有;总之据我的了解做汽车的大部分都转行业了,汽车行业太难熬了(这里不是在吐槽这个行业,实际待遇情况就是这样);和我待在实验室的兄弟们,估计就剩下两个左右还在做汽车行业,其他都早转了!大部分像我这种学历(这里包括本科的要养活自己也很难),如果最终要在汽车行业里面待下去的话,想要赚钱的话,只有自己出来单干,开连锁店;不然靠工资的话,生活可能确实很难!
回忆到这里,再拿嵌入式行业来对比的话(对我自己来对比),我说嵌入式真香(看到这句话也不要喷我,我是站在我的角度来看问题),你可能一开始就是搞软件或者电子的专业的,自然会想到互联网对比;互联网我没有经历过,但是就目前来说,很多从机械转到嵌入式行业来看的话,待遇提高了不少,至少生活了不那么累,收入还比较可观(尤其是对我这种学历不好的人来说!)。这里你又想说,干嘛不直接转到互联网去呢(报个培训班去,上车快),话确实如此,但是我想说的是,有多少人在他第一次拿的一个开发板,成功实现了自己的第一个程序功能,那是多么的开心,一种发至内心高兴,然后从此之后就迷上了这个行业。嗯,多的话,就不再多说了,上面的分析,可能是站在我的角度来思考和分享,如果你真正喜欢或者有能力去做一个方向的话,就大胆去做,不用去纠结于别人的观点,别人的观点和思想始终是别人的,你只是听听,觉的是这样,我们只能去参考和学习,但是我们自己要真正发自内心去思考是否适合自己,做最真实的自己,不要活在虚假和遐想的虚拟世界里面!
一、路线资源分享:
说了这么多,下面我分享一些学习路线资源,不过仅供参考哈:
ps:这里我分享的资源都是免费可以找到的,属于白嫖的那种!
1、c语言:
在学习c语言的过程中,除了一些基本的语法知识点外,在我们嵌入式实际开发当中,有些知识点会经常被用到(以及面试的时候,面试官非常喜欢问这些方向):
a、指针(函数指针,指针函数,数组指针,指针数组,结构体数组指针,结构体指针数组,结构体函数指针,结构体指针函数),这里举的一些概念,最好自己去搞清楚本质,然后实践一下
b、字符串处理函数,应该说这个在面试里面,最喜欢考如何实现这些字符串处理函数:
strcpy(p, p1) 复制字符串
strncpy(p, p1, n) 复制指定长度字符串
strcat(p, p1) 附加字符串
strncat(p, p1, n) 附加指定长度字符串
strlen(p) 取字符串长度
strcmp(p, p1) 比较字符串
strcasecmp忽略大小写比较字符串
strncmp(p, p1, n) 比较指定长度字符串
strchr(p, c) 在字符串中查找指定字符
strrchr(p, c) 在字符串中反向查找
strstr(p, p1) 查找字符串
strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素
strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移
strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移
c、结构体 、 联合体
ps:以上只是简单的列举了一些知识点,后期的面试题目,我会以视频的方式分享给大家,这样可能会比较直观一点。
d、学习资源推荐,如果你是自学的话,而且免费的话,可以到b站找这个郝斌老师的c语言视频学习,这个视频讲解的还是非常通俗易懂的:
如果你学完了基础,也可以看看c语言三剑客,提高自己:
2、c++:
c++的知识点比较多而且非常细,这里我就列举了,我直接推荐学习视频:
因为在嵌入式行业里面,用到c++扩展库的话,会比较少,不过你可以学习一下STL标准库,boost库可以有时间去学习一下(一般这种做c++服务器或者后台比较用的比较多一点),书籍推荐:
当然现在市场上,对于ui在linux方面qt用的比较多,你也可以去b站上找教程:
当然平时可以去官网或者博客上找一些大神的文章来学习参考,会少走很多弯路。
3、数据结构和算法:
比较推荐这个老师讲解的数据结构,算法的话,我推荐一个大佬的课程(不过是收费的,看个人意愿了):
ps网站:https://www.acwing.com/activity/
不过我建议在学习的过程当中,可以去leetcode官网去按照专题刷数据结构和算法,这样一边学一边用,可能效果比较好一点;如果你一点数据结构和算法的基础理论都没有的话,直接去刷的话,效果不怎么好,而且刷题也要多总结和归纳,不要死磕,适当看一下题解(先思考一下自己是否有思路解,如果没有的话,再去看):
这里说一点,做嵌入式,也非常有必要去学习数据结构和算法的,不管是为了面试还是今后的程序生涯,都会有很大的帮助,所以非常值得去学习,不要去纠结要不要去学习:
4、操作系统:
说到操作系统理论,在面试的时候,面试官问的深的话,会你为啥这样,这样是怎样实现和处理的,所以操作系统课程非常有必要学习学习:
书籍推荐:
如果对risc-v架构感兴趣的可以去官网下载文档学习:
书籍推荐:
5、linux学习:
这个可能是我们的重头戏;其实做linux应用的话,我个人看到过和了解的情况,大概可能分三个方向(可能不全,不包含linux后台和音视频编解码那种偏互联网):
a、linux应用做ui方向:qt、minigui
b、做ipc通信的
c、做网络编程的(一般侧重点在网络产品上面,或者说自己能不能实现一个协议栈)
ps注:其他方向可以到boss直聘或者其他招聘网站详细了解一下
在b站上有很多免费的linux应用学习视频
linux驱动的话,我个人不是很了解(我了解一点点:uboot一种,linux内核移植以及内核剪切优化,linux驱动外设开发);详细也可以去招聘网站上了解。
这里我提一个建议,如果你有想要了解的岗位,可以第一时间去招聘网站上了解一下,可以多看几个公司的岗位招聘要求,大致我想你也对这方面的岗位方向就比较清楚了!
其实关于学习linux这块的话,我的建议还是系统的去学习不管是linux应用还是驱动,这样学起来有章节,不至于感觉太乱,市场上韦老师、朱老师的linux课程都是非常不错的选择!
书籍推荐(有网络编程书籍和驱动都有的,具体我不推荐哪本,网络的这些最好都看一下):
对了,在linux里面makefile(可以看陈浩老师的:跟我一起写makefile)和cmake以及shell脚本,在做应用方面和驱动都用的比较多,平时也要掌握
6、代码管理工具其他资源汇总:
(1)、一般在嵌入式里面,svn和git都会用到,这里可以参考菜鸟教程的教程走一篇就可以:
git教程的话,可以看廖雪峰老师的教程:
当然也可以在模拟环境下练习命令:
ps网站:https://oschina.gitee.io/learn-git-branching/
(2)、在线笔记记录我喜欢用石墨文档或者语雀:
(3)如果对音视频编解码感兴趣的话,可以学习一个前辈的文章:
文章链接:https://blog.csdn.net/leixiaohua1020
(4)自己编写的文档直接转换成pdf文档,我习惯使用Typora
二、写在最后:
文章中有些观点仅供参考(学完了基本理论知识,多实践,不要一直停留在你一直都在学的转态)!这里还分享一个面试亮点,平时养成写博客或者把自己写的项目放到github上,当你去面试的时候,可以把这些写到你的简历上去,这个是非常受面试官喜爱的,也许你技术不咋样,但是人家就是看重你爱学习的习惯和能力!
我最后想说的是,在我们这个年纪,不要太安逸,多投资自己的大脑学习;有目标就会有动力,话说2020年就还剩下一个月,回想一下2019年定的目标,是否有去努力实现!在年轻的时候,莫要给自己留遗憾,我们唯一能够改变的是自己,那就是靠自己去努力奋斗,实现自己的目标!
最后,文章中的资料可以在后台加我微信领取,有什么问题也可以私聊我,我会认真的和你交心!