昨天给大家进行了一场直播,这场直播也是我一直想直播的(给大家一些全面的回答),为什么这么说呢?通过前几篇的文章,发现很多人都对这个比较有心里冲击性,比如说我之前在csdn上发布的文章,最近得到了很多朋友的反馈:
昨天直播主题主要为:
最后感谢大家的支持:
下面我就昨天的直播主题做了一些文字总结。
一、总结
1、有趣的话题:关于转岗位(但是自己该如何去学习新的岗位知识技能呢?),这个平时大家问的最多
关于这个问题,在之前的文章里面也有分享过,这里我只讲学习路线的一些东西,然后我会结合一下boss直聘上关于的嵌入式linux岗位招聘具体要求来看看。
关于linux应用所要学习的知识点
(1)、常用的api(read、write等,还有很多就我不一一举例了,你学的时候都会遇到)
(2)、linux中的多线程、多进程、网络编程,网络编程里面又会设计到一些协议:dns、http、tcp/udp,当然如果你能够实现一个协议栈,那就更上一层楼了;其中多线程和多进程在面试或者笔试的时候经常遇到,比如他们的通信方式有哪些等等,我推荐一本书籍给看----Linux环境编程:从应用到内核;这本书我有电子稿,可以找我领取;其中网络编程的书籍,大家平时有空可以多看看这些书籍:
a、TCP-IP详解几部书籍
b、Unix网络编程、UNIX环境高级编程
(3)、shell、makefile、cmake 、gdb,学习这些可以看一下推荐的书籍:
a、其中makefile我推荐可以学习陈浩前辈的—————跟我一起写makfile。
b、shell可以学习————Linux Shell脚本攻略
c、cmake、gdb可以去看官网文档(或者参考一些优秀的博客文章,其中在面试的时候,面试官也会问到,在大型工程项目中,你是定位bug的,这个问题你看到这里可以思考一下)
(4)、关于Ui方面;市场方向用的Ui在linux领域,qt和minigui公司开发用的多,不过qt你要有c++的基础,不然不好学。
大概上面的基础学会入门了就可以去找相关linux岗位了(当然是偏应用层的),如果你害怕没有工程项目,可以做一个网络编程的聊天室,下面我推荐一个开源的项目:
Linux小项目聊天室:https://github.com/fujie-xiyou/chat_room
关于linux驱动的这一块我不太熟悉(我就不介绍了!),下面我从boss直聘上找了几个嵌入式linux岗位技能要求:
(1)
(2)
(3)
(4)
最后大家可以多看一些招聘网站的需求。
2、关于搞软件的到底要不要学习硬件:
关于这个问题,说实在话,搁在以前我还没有出来上班,我也有这样的疑惑(也就是两个都学,但是自己不是该专业的,很多基础课程没有学习过,所以学习硬件要很大的精力!最为关键的一点你可能还不感兴趣,这着实让人头痛)。如果你想要成为那种全栈工程师,是可以去深入的,比如说,你自己可以设计2层到8层的板子,从元器件到原理图设计再到pcb layout设计,最后再到软件的开发调试(如果严格的话和条件允许的话,可以在不同的高温环境测试一下自己做的产品性能,一般在公司都会有这个步骤的,毕竟是产品,不仅要考虑到产品的稳定性,也考虑客户层面,毕竟客户是上帝!)
如果你对硬件设计不是很想走这条路的话,完全可以走嵌入式软件这条路;不过对硬件要求还是有的,但是不用你去那么深入,最为基本的,你到了一个公司,打开公司开发的产品原理图,你要看得懂基本的电路分析,其实一般不会很复杂的,这跟大家平时学习视频教程里面老师分析的原理图差不多,而你更多的精力是放在软件上面,比如说,你看到了原理图:主控IC如何去控制外设模块,用到了什么外设协议驱动外设(常见的IIC、SPI,DMA等等),这些对于不同的外设模块,都会有不同的协议标准(大部分差异不大),所以你去查看该模块的协议手册,看完之后,大概有一个了解和思路,就可以按照这个协议时序图进行写代码了,最后写完进行调试(当然这开发过程中没有那么顺,比尔硬件方面的问题都有,导致你的软件测试不过,或者你的软件写的有问题)。
做嵌入式软件工程师,一些基本的焊接功底还是要有的,虽然现在公司里面,一般有问题,直接去找硬件工程师,让他帮你解决(不过万一人家有事请假,你总不能因为自己对一些基本的硬件实践功底都没有的原因,而导致你这一天都没法工作了吧,是吧,所以咋们还是多少也要有点实践能力!)。我记得我在第一家公司的时候,虽然在学校里面经常焊接一些的简单的东西,但是当时在公司里焊接那种手机座子的时候,刚开适应了半个月左右,才真正掌握了,因为不同型号的手机座子管脚间距是不一样的,有些非常小,你一不小焊接的话,就导致短路了,到时候人家客户拿着你这个座子去测试,由于你没有焊接好,导致产品烧掉了,那就尴尬了!
所以总之一句话,专业的人做专业的事!
3、关于学习的问题:
这个问题我想做的是,想阶段的你学习是为了以后能够找到工作,给你自己至少有一个谋生的本领在手;所以经常读者加我微信的时候,问我一些java、c#、python要不要学习;我说你c和c++都没有学会,如果你自己确实想做嵌入式开发,这些就不要去学习了,先把自己真正以后用的到的东西花时间去学习;为什么嵌入式要学习的东西,导致你没有方向感?我想大家没有找到自己的定位,没有明确的路线,比如我当前阶段是该学习的,如果我这个东西已经学的不错,我应该可以往高的方向走(比如说,你学习完了c语言,也有了一定的编码能力,完全可以去学习c++,学习c++又不亏,说的广泛一点,日后你对行业有了一个深入了解或者找到了自己真正喜欢的方向,其实c++就业方向很广的,不局于限嵌入式,也可以互联网开发啊,比如linux后台开发、c++游戏服务器开发、音视频开发啊等等);最后一点,说到这个Python,这个确实这几年在嵌入式领域有被用到,比如你可以用它做上位机、或者一些al方向等等,不过很多linux岗位招聘要求,几乎会写明熟悉c/c++,不信大家可以自己去招聘网站上看看。
最后我想说的是,如果你对自己的定位不清楚,确实会觉的有很多东西要学,一会这里学习,一会哪里学习一下,最后要找工作了,才发现自己不知道到底哪个方向强一点(即使是老司机也会有这样的疑惑);所以学习这件事情上,要养成自己的学习方式(或者说找到自己适合的学习方式,然后按照计划行动起来就行),大部分嵌入式学习基本功学习路线(我单纯拿编程方面和一些确实要学习的东西来说,都是有助于你的内功):
1、c、c++
2、数据结构(算法也是可以学习的,不过是要建立有数据结构的基础上去学)
3、计算机组成原理
4、操作系统
5、网络编程
其他的话,比如你要学习linux或者单片机的话,就另外按照自己需求来学习!
另外,如果您是工作的老司机的话,我觉得空闲时间,也要不断的让自己保持学习,现在时代发展很快,如果你因为找到了不错的岗位,然后安逸了下来的话,我觉得等你年龄大了,就死的快,这样的案例数不胜数,比如说,35岁是程序员员的分水岭,因为这个时候,你比不了刚毕业的小伙子,精力旺盛,做事情也快,也能够抗的住加班;但是在35岁的话(甚至更大的年龄),你的身体机能各方面都下降了,精力方面自然比不上年轻的小伙了;这时候优势是你的经验吃香,但是有的时候随着新事物的发展,你的经验也会被冲垮(因为技术的更新迭代,你不学习的话,依然沉浸在老旧的技术,不淘汰,就见鬼了!),所以平时周末或者假期,除生活陪陪家人,我们还是要保持学习的,不只是技术方面,其他方面也是可以的啊,说不定其他方面能够成为的副业(有时候副业比如主业还挣的多)。总之我们要紧跟时代的潮流发展!
最后重要的事情说三遍:认清自己的定位!
3、简历中如何展现自己的亮点:
这里我就不介绍简历哪些注意啥的,我想表达的意思是,让你要养成写博客技术文章的习惯,然后把你的博主链接写到简历里面去,这是一个展现你学习态度以及学习能力的机会;可能很多人学历不好(包括我自己),去投简历,在那么多人竞争中,如果你的学历和能力又非常一般般,而且一般你的学习能力,面试官通过那么多简历,也不能发现你的学习能力咋样,因为大家简历上的写的东西都大同小异,除了项目那一块,技能都差不多;所以要能够让面试官从那么多人筛选,你必须要有亮点,那就是你的博客或者github。重要的事情再次说三遍:养成写博客的习惯!
二、最后:
我会发上面说到的一些电子资料,可以直接找我拿已经下载好的文档,就省的去百度网盘里面下载了,还有昨天的直播内容视频,我已经上传到了b站(txp玩Linux),如果有需要的朋友可以去看看,另外如果你要加技术交流群的话,可以加我的个人微信:tu18879499804
写在最后,估计这篇文章也是关于学习和面试经验分享的最后一篇文章了,以后有需要我再进行补充!从下一篇文章开始,回归到技术文章上来!希望写的这么多和直播内容对大家有帮助!(ps,昨天直播完,一直剪辑视频到凌晨2点,然后接着上午11点开始写这篇文字文章,接着还回答了一些问题,不行了,发完这篇文字我得睡觉去了,hh)