学习群里的一个在国企工作的大哥,33岁零基础在职学习大数据的知识,经过几个月的学习在北京拿了几个大家耳熟能详公司的大数据offer,薪资都在33-37W之间,比他现在薪资整整多了20个W.
一、 转行背景
1.温水煮青蛙的八年
男,1989年生,211理工科。家庭条件一般,从小没啥追求,人比较怂。2013年本科毕业留在上学的二线城市,到2021年,在一家国企里干了8年,分别干过培训,行政,后勤,从专员干到主管,工资从3K一点点升到9K,日子过得虽然省吃俭用,但是时间久了,周围的人都这样,我也就习惯了,正所谓温水煮青蛙。
2.转折点
转折点在结婚后,我傻眼了,发现钱根本不够用,房贷车贷,因为经济原因,不敢生孩子,家庭矛盾频发,公司亏损要降薪,月薪过万遥遥无期。中年危机像一头犀牛撞向我,33岁的我眼冒金星。而我感觉最要命的时候还没来,等有了孩子,等父母老了没法劳动了,那时候才是真正的危机。
3.从初选java到决定大数据
于是从2021年初,我开始自学java,想着转行IT能多挣点钱,哪怕多挣3k,那也比降薪强多了。2021年3月,逛知乎的时候看到了锋哥的一篇回复,里面说到了他当时在本科的时候,如何自学成功转行到大数据的,当晚加了锋哥微信。
当时的我自学java有两个月了,但是对大数据仍然一无所知。我又从网上,以及行业内同学那里了解了下大数据行业的薪资,确实比同年限的java开发要高不少。大概高出30%-50%。于是决定转行到大数据。
二、转行难不难
由于我转行的过程中还需要养家糊口,因此,我只能利用工作之余的时间进行。好在国企比较闲,朝九晚五加双休,因为疫情,还时不时50%在家办公。对于零基础来说,学习编程就像学骑自行车,开头的时候是没有方向感的,也是比较着急的。
但是锋哥比较有耐心,在他的指导下,我少走了不少弯路,等到入了这个行,回过头来才发现,大数据或者说编程,它难但又不太难。
难在于,它跟所有的有一定难度的事一样,入门需要个过程,这个过程,不管有多厉害的人指导你,这个心路历程是少不了的,聪明的人早开窍,一般的人晚开窍,但应该极少有人第一天就开窍。
不太难在于,大数据入门和大数据开发,它还没有到达一个吃天赋的地步。只要上过本科,甚至是专科,都可以学会,在目前这个市场上都可以找到相应的工作。这里我不是说没上过本科或者专科的人就笨,学不会,而是没上过本科专科的情况太复杂,这里没法去准确地断言。
本质上,大数据的各个组件也好,编程语言也好,甚至计算机本身也好,它们本身都是工具,作为普通的程序员,只需要学会这类工具基本的使用,就能进行开发,走上工作岗位。有了这样一个认识,我相信对于不少人客服畏难心理是有一定帮助的。
最终是用了6个月,在9月找到了工作,在国庆后跳槽了,跳槽拿到的offer公司都还不小。他们的app在手机上都是比较常见的,薪资都是在20多k。我因为是边上班边学,加上有一定年龄了,用了6个月。
如果是能全天候学习,缩短一半时间是毫无问题的。在这里非常感谢锋哥的指导和规划学习路线,自己摸索和有人指点,差别还是很大的。不说别的,时间成本耗不起。
三、学习的重点
写在罗列重点之前:
在真正转行到大数据之前,一直有一个误区,就是认为所有的重点都需要掌握,这是广度。但是事实上,走上工作岗位才更深刻体会到,深度比广度更重要。
很少有人掌握所有的重点,但是优秀、能够独当一面的大数据开发工程师,一定在某一方面比较熟练精通。锋哥的公众号里有许多转型成功的案例,随便找一篇,看看其中所列出的重点都可以。
我来说说我的学习路线,以及各个部分之间的关系:
1. java基础,重要程度⭐⭐⭐
这个是必须掌握,能够理解面向对象,看懂多线程代码,看懂jdbc。因为大数据的组件大都是java语言开发的,我们使用这些组件,虽然不一定需要我们自己造轮子,但是轮子是怎么造的,我们能看懂,还是很有好处和必要的。
零基础的同学建议花上3-4周好好学习,练习一下。即使后续做大数据的离线方向,不经常接触java了,但学会了忘掉了,比起没学会还是要强上不少的。之所以是三颗星,而不是四颗星,是因为大部分离线数仓的开发人员,后续接触java的频率还是很少的,尤其是数据分析的人员。实时开发和平台开发会经常用到,接触到。
2. shell,重要程度⭐⭐了解一下基本语法,和python了解其中一个就可以了。不要花太多时间在上面,用2-3天了解一下,动手敲敲就行了。要求后续能看懂,能在原有的基础上改。
3. linux,重要程度⭐⭐⭐,花上2~3天学习一下。
4. maven,重要程度⭐⭐,1天,重点了解理解一下依赖和项目管理。
5. hadoop+zookeeper,重要程度⭐⭐⭐⭐,这是大数据的基础,又分为HDFS、MapReduce、Yarn。建议时长1周。
6. MySQL+JDBC,重要程度⭐⭐⭐,5天
7. HIVE,重要程度⭐⭐⭐⭐⭐, 7天
MySQL和HIVE两者用法相近,但本质不是同一个东西,先花5天学完MySQL+jdbc(MySQL增删改查即可),然后再学hive(1周左右)。HIVE是大数据开发最常用的武器,不可以不会。
哪怕你其它的都不会,就会这一个,你也能找到工作。但是这个不会,就会别的,首先不太可能,其次,性价比太低。因为MySQL/HIVE,它的学习成本较低,相对简单易学,使用范围最广,几乎没有之一。 8. 到这,就可以接触离线数仓项目了,(基于Hive的离线数仓项目),重要程度⭐⭐⭐⭐⭐。如果你和我一样,不是应届生,那么这是你找工作最重要的砝码。大概需要2周。
9. 辅助组件:flume, azkaban(离线数仓项目会用),sqoop(离线数仓项目会用),这些一共需要大概5的时间学习下,重要程度⭐⭐ 到这,就可以找大数据离线这一块的工作了。当然你也可以选择再花7~8周时间继续往下学习大数据实时部分。 10. Kafka,如果你选择继续往下学,重要程度⭐⭐⭐⭐,否则⭐
11. Scala+Spark或者flink,选一样,或者全部。如果你选择继续往下学,重要程度⭐⭐⭐⭐,否则⭐
12. 基于spark的实时数仓项目,或者基于flink的实时数仓项目。如果你选择继续往下学,重要程度⭐⭐⭐⭐⭐,否则⭐。
13. 在12的过程中,需要学习和使用redis,hbase,clickhouse,等等一些组件,重要程度⭐⭐⭐。
我个人的情况是学到了13,但是工作中只用到了8这一步。市面上的工作机会,70~80%只需要用到8或者9这一步即可,也就是说,离线数仓的开发占了大部分。每个人可以根据自己的情况做决定。
14. 附加项,算法和数据结构。这个在应届生里面比较重要。但是如果你是社招,不太建议你在入门的时候去啃这一块。因为就算是大厂,大数据开发岗问这一块的也是少数。社招的话,还是项目经验更重要。这个可以在入门以后,作为进阶学习,以图后续更好发展。
15. 源码同上。
14、15附加项是需要时间积累的,也是能看出功底的。要想在开发行业扎根,稳定发展,这两样属于绝活。但是年龄大的话不建议在上车阶段就去搞,时间上性价比不高。
四、面试
1.面试问题
我面试过很多的公司,当面试面得多了之后,你会发现大家问的问题大同小异。面经网上有很多,常见问题,一定要熟练掌握,不常见问题,一般也不用去准备了。
对于常见面试问题,我总结了以下几个方面:
Hadoop的组成,shuffle的过程Hive的优化项目的整体流程,细节,以及优化经验如何保证数据的准确性数据倾斜的问题小文件的问题数仓分层拉链表数据更新方式(全量,增量,新增及变化)各种组件挂掉的处理方式Hbase的rowkey设计精准一次性(kafka和flink常见)Flink窗口,三种时间语义,CEP,watermark,exactlyonce,checkpoint。数据量集群规模各种SQL
由于spark我没有涉及,因此我总结的面试问题,不包括spark及spark项目。
2.面试心态
刚开始面试的时候,心态会比较紧张,这是正常的。当面试了5场以后,就好很多了。面试的时候不会的地方没有关系,保持谦虚有礼貌,非极端情况不和面试官硬刚,一般面试官不会刁难你,我经历过数十场面试,没有遇到过面试官刁难的情况。
3.面试方式
主要分为线上和线下。线上又分为电话和视频。这些都是常见的,正常的面试方式。
4.面试周期
个人认为面试周期在2周这样为妥,如果连续面试两周,超过15场面试,没有找到工作,那么应该进行总结、巩固,1~2周后再进行面试。
五、总结
以上情况,均是基于我33岁,211,男,北京市场的2021年下半年大数据学习和找工作情况。如果你22岁,如果你在上海或者深圳,或者是杭州和成都,情况是略微有差异的。
比如我,我的特点一就是年龄大,对时间比较敏感,同时因为出了学校比较久,学起东西来没有20岁出头那时候快了。因此,像14、15,算法和源码部分我是直接暂时放弃掉了,如果年轻,对时间没那么敏感,还是建议多少掌握一些的,毕竟都是能换来真金白银的东西,也对日后学习和工作大有裨益。
种一棵树最好的时间是十年前,其次是现在,诸君共勉。
--end--