|
这个问题被星球里的球友,以及讨论群中的小伙伴曾多次提及,我也多次表达过自己的观点。
这个问题的意思应该是:除了学习大数据技术的API、原理和用法,我还需要额外去学习Java的一些基础知识吗?
相信有很多准备入行的小伙伴都有这个疑问,根据我的经验,这个是一定要的,对于这个问题,我的看法一直都是:如果想在这条路上走得远、走得稳就一定要有扎实的Java语言基础。
当然,如果你只是学着玩,跑个demo感受一下大数据的编程魅力,那确实可以不用,但是你要知道,你会的这点东西,其他人也都会,如果你想凭这点技能找到一份大数据开发的工作,恐怕非常难。
至于具体原因,展开来说有以下几点:
1. 编码需要
你要学的大数据技术基本上都是JVM语言编写的,Java或者scala,那么从效率上来说,我们要构建一个成熟的大数据软件工程,其代码最好也是用其原生的语言来编写。
对于scala来说,因为其简洁高效的特性,从生产实践来看,我们用的最多的会用其来编写spark或者flink的框架部分代码,因为原生和足够的简洁,编程时相对Java,效率要更高一点,当然也就高那么一点而已。
而对于一个功能庞大而复杂的生产大数据工程来说,远远不止写spark或者flink主体代码那么简单。
一份数据,从数据源接入到大数据系统,再经过大数据系统的一系列计算和落地存储,这里面会兜兜转转经历一条完整的数据处理链路。
而这条链路是一个诸多技术组件相互配合、相互协作的系统工程,这里面就会牵扯到各个组件之间的通信问题、数据传递问题、而一旦涉及到数据传递、通信,就会用到各种连接池管理、工具类编写等,而这块用Java代码来实现,最为便捷。
比如最常见的MySQL连接池管理、Redis连接池管理等,而这其中的代码又会涉及到设计模式、锁管理、以及多线程等知识点,这块用Java来实现最为合适。
当然还有一些跟业务相关的数据处理模型,对于一些老牌Java程序员来说,当然更愿意用他们得心应手的语言来实现。
而想要把这些代码写得高效、漂亮、逻辑严谨,就必须要你具备扎实的Java基本功。
2. debug需要
以上这些还只是针对Java的写能力,当面临大数据技术问题时,对其诊断、排查的能力,同样也非常考验你的Java基本功。
比如最常见的OOM问题,如果你是一般水平的大数据开发,可能只会觉得内存不够,只知道想着如何通过加内存来试图解决。
如果你运气好,也许通过加内存确实可以解决问题,但是如果你运气差点,即便加了内存,过不了多久,程序还是OOM了,你还要继续加吗?
加到服务器内存不够为止吗?
如果遇到像这种比较棘手的线上问题时,就必须要祭出你的Java功底了,分析下有没有可能内存泄露之类的,要不要检查下你的代码逻辑有哪些不规范的地方,或者把JVM的运行时内存都给dump出来,检查下哪些对象一直在持续增加,却一直没有被GC回收掉。
而如果你的Java基础一贫如洗,你拿什么底气去解决这样的线上问题呢,靠猜能行吗?
而且这种复杂问题,当你的数据量大了之后,几乎一定会碰上。
3. 如何学
对于学习方法这个事情,千人千面,每个人根据不同的性格特点、基础差异都会不一样,找到适合自己的就是最好的学习方式。
但是一个好的,高效的学习方式,一定是那种能够提供及时正向反馈激励的学习模式。
很多小伙伴,可能意识到了学习语言的重要性,于是他们就会把Java语言相关的,比如Java SE/J2EE、Spring、Java Web等等这些原本属于Java后端开发的内容全部给安排起来。
但是太多了,而且你一时半会根本学不过来,很多人可能学着学着就直接半路放弃了,因为内容实在太多,而且后面还有那么多跟大数据相关的组件,以及他们的原理内容,光想着都能让你崩溃。
对于一个大数据开发来说,首先要掌握的Java知识点一定是:常见容器的用法和底层数据结构,其次就是JVM原理、锁原理、再就是GC原理、然后就是多线程原理。
这个是离大数据开发最近,最用得到的知识点,至于那些J2EE相关内容,一般来说,属于Java后端重点掌握的(一般公司会把大数据开发和后端开发职责分开),对于刚入门大数据的你来说,可以先放过。
学习技术想要高效,最好的办法是找到一个最小化学习模型,且在这个过程中不断得到正向反馈,也就是边学边有成就感产生。
所以我的建议是,一开始别去看那些生硬的八股文了,第一步把你的开发环境给支棱起来,然后直接在官网找到能运行的demo,照猫画虎给跑起来。
比如你要学spark,那就跟着官网要求,一步步建立开发环境,然后以最快速度把样例程序写出来,这个过程中如果遇到问题,你会驱动你去找原因,寻答案,这个过程学到的东西一定是最实用,记得最深的。
接着,demo跑起来没有问题了,下一步你就想着这个代码为什么它要这么写,它背后的原理是什么、涉及到了哪些知识点,如果我改一下,用其他方式实现,看行不行,跑下验证下。
程序跑起来,它的JVM内存模型是什么样的,占了多大的内存空间,每一部分大概占了多少,每一行代码在JVM中处于什么位置,生命周期是什么样的?
这些,在你代码跑起来的时候都可以去思考,边思考边验证,你会发现特别有意思,特别有成就感,不信,你试试看。
你看,如果你这样学,是不是比单纯的去背八股文效率要更高,更有意义些呢?
4.
以上,算是我这么长时间以来,总结出来的学习大数据时,如何巩固Java基础的一些亲身实践与总结,希望你有所启发。
PS:很多小伙伴想知道生产上大数据技术到底是如何应用的,那么这个周末晚八点,我们就来聊聊,大数据的理论学习跟生产实践的区别与联系。
欢迎预约我的直播,保证全程干货,让你满载而归。
<hr/>你可以添加我的私人微信,拉你入技术讨论群,跟一群热爱技术的小伙伴一起成长... |
|