Java工程师转大数据难度高吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java工程师转大数据难度高吗?相关的知识,希望对你有一定的参考价值。

Java程序员转大数据工程师有很好的基础条件
对于Java程序员,大数据的主流平台hadoop是基于Java开发的,所以Java程序员往大数据开发方向转行从语言环境上更为顺畅,另外很多基于大数据的应用框架也是Java的,所以在很多大数据项目里Java语言的确是可以派上用场的。所以,Java程序员转大数据工程师是具备很好的基础条件的。 当然,hadoop核心价值在于提供了分布式文件系统和分布式计算引擎,对于大部分公司而言,并不需要对这个引擎进行修改。这时候除了熟悉编程,你通常还需要学习数据处理和数据挖掘的一些知识。尤其是往数据挖掘工程师方向发展,则你需要掌握更多的工具和知识。
Java程序员转大数据职位的学习路线图:
第一步:分布式计算框架
掌握hadoop和spark分布式计算框架,了解文件系统、消息队列和Nosql数据库,学习相关组件如hadoop、MR、spark、hive、hbase、redies、kafka等;
第二步:算法和工具
学习了解各种数据挖掘算法,如分类、聚类、关联规则、回归、决策树、神经网络等,熟练掌握一门数据挖掘编程工具:Python或者Scala。目前主流平台和框架已经提供了算法库,如hadoop上的Mahout和spark上的Mllib,你也可以从学习这些接口和脚本语言开始学习这些算法。
第三步:数学
补充数学知识:高数、概率论和线代
第四步:项目实践
1)开源项目:tensorflow:Google的开源库,已经有40000多个star,非常惊人,支持移动设备;
2)参加数据竞赛:Kaggle和国内天池数据竞赛
3)通过企业实习获取项目经验
如果你仅仅是做大数据开发和运维,则可以跳过第二步和第三步,如果你是侧重于应用已有算法进行数据挖掘,那么第三步也可以先跳过。
总结:
Java工程师可以更容易理解hadoop的框架和生态,很多大数据saas级产品也是Java开发的,因此Java基础是转行大数据的一个很好的起点。但大数据是一个更为宽广的领域,具有跨界知识和能力的人才会更受企业青睐。随着人工智能时代的到来,大数据将迎来黄金发展的10年,如果你已经做好准备,那么就立即开始行动吧!
参考技术A 如果要学习大数据,不管你是零基础,还是有一定的基础,都是要懂至少一种计算机编程语言,因为大数据的开发离不开编程语言,不仅要懂,还要精通!但这门编程语言不一定是java。
比如说,如果你主攻Hadoop开发方向,是一定要学习java的,因为Hadoop是由java来开发的。
如果你想要主攻spark方向,是要学习Scala语言的,每个方向要求的编程语言是不同的。
如果你是想要走数据分析方向,那你就要从python编程语言下手,这个也是看自己未来的需求的。
大数据是需要一定的编程基础的,但具体学习哪一门编程,自己可以选择的。其实只要学会了一门编程语言,其他编程语言也是不在话下的。
参考技术B 如果说刚开始工作没多长时间的话,不建议转,工作了好几年,倒是可以转一下 参考技术C 难度不高,因为大数据很多时候都是用的java实现 参考技术D Java程序员转大数据工程师有很好的基础条件
对于Java程序员,大数据的主流平台hadoop是基于Java开发的,所以Java程序员往大数据开发方向转行从语言环境上更为顺畅,另外很多基于大数据的应用框架也是Java的,所以在很多大数据项目里Java语言的确是可以派上用场的。所以,Java程序员转大数据工程师是具备很好的基础条件的。 当然,hadoop核心价值在于提供了分布式文件系统和分布式计算引擎,对于大部分公司而言,并不需要对这个引擎进行修改。这时候除了熟悉编程,你通常还需要学习数据处理和数据挖掘的一些知识。尤其是往数据挖掘工程师方向发展,则你需要掌握更多的工具和知识。
Java程序员转大数据职位的学习路线图:
第一步:分布式计算框架
掌握hadoop和spark分布式计算框架,了解文件系统、消息队列和Nosql数据库,学习相关组件如hadoop、MR、spark、hive、hbase、redies、kafka等;
第二步:算法和工具
学习了解各种数据挖掘算法,如分类、聚类、关联规则、回归、决策树、神经网络等,熟练掌握一门数据挖掘编程工具:Python或者Scala。目前主流平台和框架已经提供了算法库,如hadoop上的Mahout和spark上的Mllib,你也可以从学习这些接口和脚本语言开始学习这些算法。
第三步:数学
补充数学知识:高数、概率论和线代
第四步:项目实践
1)开源项目:tensorflow:Google的开源库,已经有40000多个star,非常惊人,支持移动设备;

Java开发社招面试总结!java开发工程师转大数据

前言

大数据、算法项目在任何大厂无论是面试还是工作运用都是非常广泛的,我们精选了50个百度、腾讯、阿里等大厂的大数据、算法落地经验甩给大家,千万不要做收藏党哦,空闲时间记得随时看看!

如果你没有大厂项目经验,对大厂算法、大数据的项目运用不了解强烈建议你看看!

Java BIO 问题分析

  1. 每个请求都需要创建独立的线程,与对应的客户端进行数据 Read,业务处理,数据 Write 。
  2. 当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大。
  3. 连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在 Read 操作上,造成线程资源浪费

nio介绍

  1. Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的
  2. NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。【基本案例】
  3. NIO 有三大核心部分:Channel(通道),**Buffer(缓冲区), Selector(**选择器)

Selector 、 Channel 和 Buffer 的关系图:

  1. 每个channel都会对应一个Buffer
  2. Selector 对应一个线程, 一个线程对应多个 channel(连接)
  3. 该图反应了有三个channel注册到该selector//程序
  4. 程序切换到哪个channel是有事件决定的,Event就是一个重要的概念
  5. Selector 会根据不同的事件,在各个通道上切换
  6. Buffer 就是一个内存块 , 底层是有一个数组
  7. 数据的读取写入是通过Buffer,这个和BIO,BIO中要么是输入流,或者是输出流, 不能双向,但是 NIO 的 Buffer 是可以读也可以写, 需要 flip 方法切换 channel 是双向的, 可以返回底层操作系统的情况, 比如 Linux , 底层的操作系统通道就是双向的。

缓冲区(Buffer)

缓冲区(Buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象**(含数组)**,该对象提供了一组方法,可以更轻松地使用内存块,,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel 提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由 Buffer。

channel

NIO 的通道类似于流,但有些区别如下:

  • 通道可以同时进行读写,而流只能读或者只能写
  • 通道可以实现异步读写数据
  • 通道可以从缓冲读数据,也可以写数据到缓冲:
  1. BIO 中的 stream 是单向的,例如 FileInputStream 对象只能进行读取数据的操作,而 NIO 中的通道(Channel) 是双向的,可以读操作,也可以写操作。
  2. Channel 在 NIO 中是一个接口 public interface Channel extends Closeable{}
  3. 常 用 的 Channel 类 有 : FileChannel 、 DatagramChannel 、 ServerSocketChannelSocketChannel 。 【ServerSocketChanne 类似 ServerSocket , SocketChannel 类似 Socket】

Selector 示意图和特点说明

  1. Java 的 NIO,用非阻塞的 IO 方式。可以用一个线程,处理多个的客户端连接,就会使用到 Selector(选择器)
  2. Selector 能够检测多个注册的通道上是否有事件发生(注意:多个 Channel 以事件的方式可以注册到同一个 Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管 理多个通道,也就是管理多个连接和请求。
  3. 只有在连接/通道真正有读写事件发生时,才会进行读写,就大大地减少了系统开销,并且不必为每个连接都 创建一个线程,不用去维护多个线程
  4. 避免了多线程之间的上下文切换导致的开销

  1. Netty 的 IO 线程 NioEventLoop 聚合了 Selector(选择器,也叫多路复用器),可以同时并发处理成百上千个客

    户端连接。

  2. 当线程从某客户端 Socket 通道进行读写数据时,若没有数据可用时,该线程可以进行其他任务。

  3. 线程通常将非阻塞 IO 的空闲时间用于在其他通道上执行 IO 操作,所以单独的线程可以管理多个输入和输出

    通道。

  4. 由于读写操作都是非阻塞的,这就可以充分提升 IO 线程的运行效率,避免由于频繁 I/O 阻塞导致的线程挂

    起。

  5. 一个 I/O 线程可以并发处理 N 个客户端连接和读写操作,这从根本上解决了传统同步阻塞 I/O 一连接一线程模型,架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。

最后

以上分享的全部分布式技术专题+面试解析+相关的手写和学习的笔记pdf,高清完整版戳这里免费领取

还有更多Java笔记分享如下:

f,高清完整版戳这里免费领取

还有更多Java笔记分享如下:

image

以上是关于Java工程师转大数据难度高吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java开发社招面试总结!java开发工程师转大数据

LZ从Java Web转大数据,并且成功拿到上市公司Offer,工资直接涨了9K+

大数据开发工程师是做什么的?岗位要求高吗?

程序猿工资真有那么高吗?学Java开发如何短期内迅速提升到40K?带你直击面试官的痛点~

java工程师可以从事哪些工作

Python工程师薪资待遇如何?高吗?