一、为什么要学习大数据?
在我第一份实习的时候,忘记在什么场景下我 leader 突然说了一句:「干 Java 不就是增删改查嘛」,而恰好那时候知乎都是「干了3年Java,还是只会增删改查,迷茫」等问题 ,我听完 leader 那句话就心里一颤。
因为这句话,我又一次的陷入迷茫,我不清楚自己是不是应该继续的 Java,所以那段时间我干过爬虫,也撸了一阵子的西瓜书和统计学什么的。在知乎上所有相关的问题和答案我都看了,也在知乎付费咨询了很多前辈。最后觉得爬虫工作不好找,机器学习门槛太高,然后折中学了大数据。
上面只是我的初步动机,但后面一年多的接触,让我有了更多的理由对大数据不抛弃不放弃。
1.门槛。它比 Java 高一点,因为除了对数据库的操作之外,要学习大数据生态的东西,需要会分布式、数仓、中间件等知识。它比机器学习低一些,不需要你会很多的机器学习算法和数学知识,而像机器学习算法和数学知识是需要长时间的磨练和沉淀,所以做这块的研究生和博士居多。
因为它的学习门槛比 Java 高,所以市场上缺失这方面的培训机构,因为投入和回报不成正比,而现有的培训机构大部分都是糊弄的,让你学学 Python 爬爬数据然后自称大数据培训。
再就是高校专业的设立。无论是哪个学校的计算机专业,Java、数据、C、C++什么的都会接触到,但是大数据呢?第一批大数据专业的学生现在大二,所以现有的大数据岗位的人都是自学的,谈不上对口不对口,对口更多的指计算机基础。但是再过两年就不一定了,所以「早,就是优势」。
2.薪资高。这个估计才是吸引大部分人学习的原因。同一家公司同一级别,普通开发岗和大数据开发薪资还是会差一个档次的,具体多少视公司而定。
3.积累性和挑战性。在我学习群里面,不乏一些在传统企业或者国企的资深开发者,但是他们对自己的职业也迷茫和担忧,在群里经常讨论一些分布式,Redis、Zookeeper等知识的时候,他们显的格格不入。因为他们长期在企业里 CRUD(增删改查),与现在互联网技术发展产生隔阂了,既憧憬又畏惧。
为什么说大数据开发是积累性又有挑战性的呢?
了解过大数据的应该知道大数据的「4V理论」,随着时间的发展,企业产生的数据量肯定越来越大。在以前,我们对数据是不重视的,但是随着机器学习的发展,数据是越来越重要的。了解机器学习应该都知道,训练模型之前都会有一个特征工程的步骤,特征工程就是来处理数据的,然后喂给模型。又好又多质量又高的数据会让这个模型更聪明和健壮,相当于燃料,模型才能更好地自我训练,然后才有现在的「推荐喜欢」和「全民抖音」。
如果你只是进行一些数据库的增删该查或者一些页面展示什么的,这些套路都是可复用的,讲究能用就行。但是大数据不一样,无论你是做平台的建设,数仓,计算等,一些场景一些机制都是需要你去思考的。
我面试的时候被面试官问到一个问题:「你为什么不做 Java,要去做大数据?」
我回答的是:「如果这个 Java 岗位能涉及到中间件的开发,而不只是做 CRM,ERP 等数据的 CRUD,那我是可以接受的。而大数据的话无论你是哪个方向,都会面临着一些挑战性,工作也更有难度一些。」
4.推动你现有岗位的发展。学习群里很多人问过,我从事前端的学大数据有什么用?我从事运维,学大数据能帮我什么?等等。
大数据+现有岗位是一个趋势。大数据来临的时候,你前端不用做一些静态化,或者一些缓存机制吗?会一些 Hive、Hadoop,做可视化或和后端对接的时候是不是更有优势呢?后端学一些大数据的觉得是必要的,例如Kafka、Zookeeper等分布式、缓存相关的数据存储和传输是进阶 Java 必会的,让你在现有企业需要转型的时候可以直接就上。而运维呢?分布式集群运维,各个大数据平台上的节点运维,这不是一个趋势吗?
什么都不学,认为现在的公司用不到,等公司要用到的时候,你会,可能就是一个负责人或者给你升职加薪巴结你试试,因为这样成本小,知根知底。不会呢,就直接招会的人过来了,而你就危险了。
5.过渡到机器学习人工智能的捷径。随着科技的进步,包括硬件和软件,机器学习的使用门槛会越来越低,为什么这里强调使用。因为研究部门在每一家公司都是极少数的,更多的是在调库,调参。而随着硬件的进步,很多算法都是封装好的,可以进行傻瓜化操作,我们只需要给他喂数据。
二、学习大数据门槛
上面提到了门槛,处于普通开发和机器学习之间。经常有人问我做大数据说需不需要很好的英语,很扎实的数学功底。
无论什么岗位,英语好和数据学能摸到的天花板更高。但是大数据开发不像机器学习,日常阅读国外 paper 和对模型算法进行调优,不要求你去读西瓜书和统计学去弄懂线性回归等数学知识。
有些人可能说我智商不行,别人记住一个知识点要10分钟,我要一个小时。有些人会反驳「你的努力还谈不上比智商」。这边说一下我对「智商」的看法:智商其中是一个很广的东西,有些人学习上比你好,但生活上不一定比你聪明。我们不可否认初高中的时候,有些学霸没怎么读书就可以考的很好,有些人很努力但也没那么好。无法否认,这就是天赋。有些人天生逻辑思维好,对数学或者知识的抽象能力很厉害,能摸到的天花板更高。我们定位好自己就是了,智商高而且在顶层的总是那么几个人,而更多的是在中间那一层,而那一层拼的不仅仅智商,智商高的也不一定写代码写的比你好,所以百分之 98 的人的智商拿来开发够用了。
所以大数据开发是一个既有门槛但又不是门槛特别高的方向,正常人只要找到适合自己的路线和找对学习方法都可以的。
三、学习路线
我是大二自学的 Java,然后在实习结束后四个月的学习转到了大数据,然后现在也接触大数据一年多了。我这个学习路线是根据我自己学习的,我面试反馈的,还有我那帮学习群的兄弟反复锤炼出来的,应该是很有借鉴意义啊。毕竟一个群几百个人,什么情况的都有,成功了总结经验,失败了找原因然后调整一下不怂再干。希望这个学习路线能帮你少走点弯路,这些资源也能帮到你。
首先学大数据分为两种,学生和在职,请对号入座。
学生:
1.首先要知道一点,只要你是在校生,无论你是不是科班,差别都不会很大。科班的意义是基础扎实,但是你看现在计算机专业的,哪几个扎实了。反而是非科班的,会意识到这一点,然后去补缺补漏。
2.如果你还是大一大二的话,可以扎实地补补基础。如果静不下心学基础的话,可以做做项目,然后赶紧去找实习。而且我也建议以找实习为目的进行学习,不然很容易迷茫和漫无目的地学习,最终学了什么自己都不知道,以目的为导向进行学习很重要。
3.如果你是大三大四,该准备春秋招了,大三的春季实习招聘要好好把握,这时如果找到一份大厂实习,那秋招就没什么压力。大四的春招也很重要,因为这是最后一次学生身份参加招聘,门槛还是低一下。
4.在校生的面试,无论大厂还是小厂都有一套方法论。首先要书写一份好的简历,防止卡在简历这关。简历的话我一直都有在帮我群里那帮兄弟参考,效果都很明显,因为这块不算今天的内容里面,有需要帮忙看的朋友可以加文章末的好友细聊。
5.小公司注重项目,基础要求相对不高;大公司除了要求项目,还需要你基础够好。
6.在校生要学大数据的话,建议先找份Java的实习,然后再跳到大数据岗位,因为大数据也是需要Java知识,这样一个过渡比较好。
学习路线:
1.Javase和项目我是建议同步进行,因为你想要完全学好一门语言再去接触项目,看似可行,实则不太好。反而是两者相辅相成,利于及时调整。
2.当能把项目写在简历上的时候就去投,去面试,面试可以收获非常多东西。因为这时候JVM和多线程还不会,所以只能去投一些小公司。当后面把JVM和多线程补起来的时候可以进军大公司。
3.数据结构和算法需要贯穿整个个学习周期。提高算法前期以刷剑指offer这本书为主,刷到能手写代码。建议先在大三找份Java实习,然后找到实习之后接着学大数据知识,这样既完成了阶段性目的,也为了下一阶段做准备。
在职:
在职的分为开发的在职以及要转行的在职。
1.首先,不建议裸辞,除非你经济上无任何负担以及做好了各种准备。要转行的建议业余先抽时间出来了解了解,看自己是否真的想从事这个行业。
2.如果你之前已经是Java开发,那很好,要过渡到大数据先看看上面的8天Hadoop入门,或者直接看Hadoop 权威指南都可以。然后结合我的面经学学一些理论知识,还有一些实战面试题,再做个项目就可以马上去面试了。学的差不多就可以投了,一定不要拖太久,越拖会越没信心。
3.如果你之前是 PHP 开发,或者DBA 什么的,建议重新回顾下Java。因为大数据目前还是以Java为主要开发语言,回顾完Java基础之后,可以直接看8天Hadoop入门,然后做项目,除了大数据项目之外,建议补一到两个技术栈比较好的项目,不然简历面不好过。
4.如果你是零基础想转行的话,建议先找份Java开发,零基础一下子跨越到大数据有点大。建议先踏入编程这个行业,然后再去转大数据,过程会比较有反馈。零基础的话不建议一上来就算法什么计算机基础,先直接学Java,可以看看Java的基础视频,然后自己鼓捣几个项目,去找个小公司。这样周期会比较快,然后在这家公司快速学习,可以补补基础,或者学习学习大数据。
学习路线:
1.Javase视频我是用慕课网的三个视频入门的,我不太建议一次性看完黑马等那些培训视频,看完花都谢了,而且周期这么长,容易看了后面忘了前面,时不时的还怀疑自己。我是建议看完这三个视频入门一下,后面根据项目需要缺啥补啥。
https://www.imooc.com/learn/85?(初级,时常5小时)
https://www.imooc.com/learn/124?(中级,时常4小时)
https://www.imooc.com/learn/110??(进阶,时常5小时)
2.项目的话分两种情况,一种是平时练手的,一种是针对面试的。练手的话,无论大小,无论类型都可以。针对面试还是得选一些有特点,面试的是扯的开的。至于项目的获取渠道有慕课网以及培训视频,或者都没你中意的,你可以加我微信我针对性推给你。
至于项目的面试,推荐「石杉的架构笔记」这个公众号,里面有很多关于项目的场景回答和分布式知识。我会经常将这个公众号的文章推到我的学习群进行解答一些群友的问题。
3.JVM & 多线程。自己做项目的话很难实质性地接触到这两块,更多的是应对面试。如果你直接啃这两块的话很晦涩,但是你经过项目训练之后再去做这两块就会有很多代入场景。
4.大数据组件学习。无论你想做大数据的哪个方向,Hadoop 都是必学的,学完这个之后后面可以根据你想做的方向进行针对性学习。
Hadoop 学习推荐一个视频:8天Hadoop,用来对 Hadoop 有一个通识理解还是可以的。
Hadoop 学习完之后就要分方向了:数仓离线计算、实时计算、流式计算等等。离线重点掌握 Hive、MapReduce,实时重点掌握 Spark、Flink。然后像 Zookeeper、Kafka、HDFS、Yarn 无论哪个方向都得学的。
四、推荐书单
其实我不太建议新手一上来就啃书的,我都是建议我群里的群友根据我整理的一份面经来复习的,面经上虽然有题目和答案,但我都是建议看着问题,通过搜索引擎去整理出自己的答案。把每个模块看完了再系统性去看书,比较不会晦涩,也能抓的住重点。
Hadoop权威指南
Hadoop技术内幕:深入解析Hadoop Common和HDFS
Spark技术内幕
Hadoop技术内幕:Yarn
Spark大数据处理技术
Hive编程指南
Hbase企业级实战
Storm分布式实时计算模式
从paxos到zookeeper分布式一致性协议
Kafka源码剖析
数据仓库
Java编程思想(部分章节)
Java并发编程实战
深入理解java虚拟机
Java消息服务
Linux高性能服务器编程
Linux内核设计与实现
统计学习方法
机器学习实战
大话设计模式
大型网站技术架构
memcache全面剖析
快学Scala
剑指offer
五、Q & A
1.学到什么程度可以找工作?
找的到工作和胜任工作是两码事,能找的到工作不一定能胜任工作,能胜任工作的不一定找的到工作,但你连工作都找不到,那就谈不上胜任。
而且没有一份工作是你能百分百胜任的,当你学的能写出一个像样的简历,就可以去投投试试水,不用怕自己能力不够什么的,你多面试总不亏的,而且也有反馈。
2.如何针对简历准备面试?
互联网科技发展蓬勃兴起,人工智能时代来临,抓住下一个风口。为帮助那些往想互联网方向转行想学习,却因为时间不够,资源不足而放弃的人。我自己整理的一份最新的大数据进阶资料和高级开发教程,大数据学习群: 740041381就可以找到组织学习 欢迎进阶中和进想深入大数据的小伙伴加入
3.针对日新月异的技术,如何跟进脚步学习?
4.如何进行知识点整理?
我在我的博客里平时会总结一些零碎知识点,每隔一段时间会去整体梳理一遍。因为我博客的定义是给自己看的,所以都是自己能理解的大白话,很多我自己手画的图然后上传上去。
6.如何进行源码解读?