Java后端&大数据 从0到1学习路线分析与规划


在将要找工作之际,笔者根据大厂的招聘信息和在牛客网上的校招求职经验课程,在Java后端方向和大数据方向总结出如下内容,希望能对读者有所帮助。


目录

  • 1.学习目标
    • 1.1 后端开发方向
    • 1.2 大数据开发方向
  • 2.学习内容
    • 2.1 后端开发方向
    • 2.2 大数据开发方向
    • 2.3 整合分析
  • 3.学习途径
    • 3.1 后端开发方向
    • 3.2 大数据开发方向

1. 学习目标

以一二线大厂为求职目标,对后端开发和大数据方向的学习目标进行确定。

1.1 后端开发方向

以下为阿里2019年后端开发的校园招聘。

研发工程师JAVA Software Engineer, Java
岗位描述Job Description

如果你想了解JAVA开发在阿里巴巴互联网生态系统中无与伦比的应用广度与深度;
如果你对基础技术感兴趣,你可以参与基础软件的设计、开发和维护,如分布式文件系统、缓存系统、Key/Value存储系统、数据库、Linux操作系统和Java优化等;
如果你热衷于高性能分布式技术,你可以参与高性能分布式服务端程序的系统设计,为阿里巴巴的产品提供强有力的后台支持,在海量的网络访问和数据处理中,设计并设施最强大的解决方案;
如果你喜欢研究搜索技术,你可以参与搜索引擎各个功能模块的设计和实现,构建高可靠性、高可用性、高可扩展性的体系结构,满足日趋复杂的业务需求;
如果你对电子商务产品技术感兴趣,你可以参与产品的开发和维护,完成从需求到设计、开发和上线等整个项目周期内的工作;
如果你对数据敏感,你可以参与海量数据处理和开发,通过sql、pl/sql、java进行etl程序开发,满足商业上对数据的开发需求;
如果你热衷于客户端开发,你可以参与为用户提供丰富而有价值的桌面或无线软件产品。

岗位要求Qualifications

或许,你来自计算机专业,机械专业,甚至可能是学生物的;
但是,你酷爱着计算机以及互联网技术,热衷于解决挑战性的问题,追求极致的用户体验;
或许,你痴迷于数据结构和算法,热衷于ACM,常常为看到“accept”而兴奋的手足舞蹈;
或许,你熟悉Unix/Linux/Win32环境下编程,并有相关开发经验,熟练使用调试工具,并熟悉Perl,Python,shell等脚本语言;
或许,你熟悉网络编程和多线程编程,对TCP/IP,HTTP等网络协议有很深的理解,并了解XML和HTML语言;
或许,你热衷于数据库技术,能够熟练编写SQL脚本,有MySql或Oracle应用开发经验;
或许,你并不熟悉Java编程语言,更精通C,C++,PHP,.NET等编程语言中的一种或几种,但你有良好和快速的学习能力;
有可能,你参加过大学生数学建模竞赛,“挑战杯”,机器人足球比赛等;
也有可能,你在学校的时候作为骨干参与学生网站的建设和开发;
这些,都是我们想要的。来吧,加入我们!


根据前期探索,大厂的后端需要准备基础知识,因为这些公司更看重你的发展潜力,他们有能力和条件培养你。基础知识就包括:数据结构,算法,计算机网络,操作系统等。。。

和Java相关的岗位主要有C++、大数据、测试开发。接下来我大概介绍一下这几个岗位:
1, Java:主要从事一些业务开发,更多的是实现网站的业务逻辑,工作中主要使用Spring生态的框架和工具。
2, C++:主要从事一些基础平台的开发,非常注重提高性能,需要具备网络编程和系统编程的知识。
3,大数据:主要从事一些底层的二次开发,或者开发一些简单的大数据应用。除了需要Java知识外,也需要分布式基本原理以及大数据基本组件原理相关的知识。
4·测试开发:需要参与测试相关的工作,还需要参与自动化测试工具的研发。所以投递测试开发岗位需要测试相关的知识,也需要一定的工具开发知识,最好会使用Python或者Java等语言。

1.2 大数据开发方向

以下为阿里2019年大数据开发相关的校园招聘。

阿里对于数据方向的分类。基础平台研发工程师、数据研发工程师较为符合我的发展目标,对技术的要求较高。这里的数据分析师较为偏业务,之对Excel、SQL,和简单的python有要求,技术性不强。其他的数据中心技术工程和数据安全工程师都偏设施维护,和保障工作,技术要求不高。

基础平台研发工程师 Software Engineer,Systems and Infrastructure
岗位描述Job Description

负责云计算和大数据基础技术研发,包括不限于以下方向:
1、云基础设施技术,包括研发面向百万级服务器的网络(如RDMA、可编程芯片)、服务器(如异构计算)、数据中心,以及构建超大规模的基础设施智能化运维体系(如AIOps);
2、虚拟化技术,包括XEN、KVM等开源技术的改进,以及也包括我们自研的SDN、VPC等网络虚拟化、存储虚拟化技术,还包括Docker等轻量级的容器方案;
3、MySQL、PostgrelSQL、MongoDB、Redis、HBase等开源数据库内核的改进(阿里巴巴是WebScaleSQL组织的一员,并拥有多个开源项目的committer);
4、(分布式平台)包含单集群上万个节点,多地多集群的超大规模分布式存储系统(文件系统,KVstore,BigTable等等)、分布式计算系(MapReduce,DAG,类Hive/spark的计算系统包括离线,分布式开发语言,分布式开发IDE,查询优化,流式实时计算,图计算,MPP等等)、弹性分布式资源管理和调度(海量多维度的多目标的调度系统,多个资源维度资源隔离技术等等)、机器学习平台(包括Paratemter Server,深度学习,逻辑回归等等)、异构等新型硬件上计算(包括CPU,GPU,FPGA,RDMA等等);
5、(大数据分布式平台)大数据在线引擎体系的目标是是集广告、搜索、推荐的投放三位于一体,在近百毫秒周期内,从服务端跨越至移动端上智能,支撑总体近TB级的模型,完成知识推理向量匹配等各种召回,以及其它深度学习的排序和预测算法,参与计算的数十亿商品保持实时更新,支持数百位算法工程师面向众多场景展开测试,在算子流图化的抽象之下,引擎内的模型和数据可随时调整布局满足迭代所需。

岗位要求Qualifications

1、快速学习,不断突破技术瓶颈,乐于探索未知领域,随时准备好去面对新挑战;
2、具备优秀程序员的基本素养,对代码有洁癖,遇到问题可以一查到底,善用工具,对工程效率有自己的见解;
3、全栈式人才,在计算机系统结构、操作系统内核、网络、分布式系统、算法等领域有所专长相互融合;
4、至少需要在一门编程语言上达到精通的水平,对编程语言不封闭,有学习新语言的兴趣。

工作地点Location

无锡市(Wuxi),上海市(Shanghai),深圳市(Shenzhen),北京市(Beijing),广州市(Guangzhou),杭州市(Hangzhou)
参加面试的城市或地区Interview City or Region
远程(Remote Interviews)

数据研发工程师 Software Engineer, Data Technology
岗位描述Job Description

如果你想参与阿里大数据的采集、存储、处理,通过分布式大数据平台加工数据,支持业务管理决策,
如果你想参与阿里大数据体系的设计、开发、维护,通过数据仓库、元数据、质量体系有效的管理和组织几百P的数据,
如果你想参与阿里大数据产品的研发,通过对数据的理解,发挥你的商业sense,发掘数据价值,探索大数据商业化,
如果你想接触世界领先的大数据处理与应用的技术和平台,获得大数据浪潮之巅的各类大牛的指导,
那就加入我们吧!

岗位要求Qualifications

如果你所学专业是计算机、数学、统计、数据科学与大数据技术等相关专业;
如果你有强的动手能力和学习能力,熟悉一门数据处理语言,如SQL、JAVA、Python、Perl等,熟悉unix或者linux操作;
如果你具备扎实的专业基础,良好的沟通能力和团队合作,主动积极,乐于面对挑战;
如果你有参与过数据处理、分析、挖掘等相关项目更好;
如果你对Hadoop、Hive、Hbase等分布式平台有一定的理解更好;
那么成为数据工程师吧,这里就是你的舞台。

工作地点Location

上海市(Shanghai),成都市(Chengdu),深圳市(Shenzhen),北京市(Beijing),广州市(Guangzhou),杭州市(Hangzhou),南京市(Nanjing)
参加面试的城市或地区Interview City or Region
远程(Remote Interviews)

对比基础平台研发工程师和数据研发工程师在这里浅显的认为基础平台研发工程师更多偏向于底层大数据平台的搭建和二次个性化开发,更多的是面向于对大数据各个组件的组合升级开发,涉及到的业务问题较少。而数据研发工程师则是更偏向于将大数据的开发操作应用于实际的业务场景中,是在大数据基础平台的基础上对大数据进行开发使用。
综合以上两个岗位,其工作内容不一样,但需要的基础知识大致相同,且数据研发工程师写的较为详细,故以数据研发工程师的岗位要求为最终的学习目标。

2. 学习内容

根据目标岗位和对目标岗位的研究,制定相应的学习内容。

2.1 后端开发方向

Java后端岗位主要考察以下几个理论知识:

  • 语言基础
  • 设计模式
  • 框架和中间件
  • 数据库
  • 数据结构与算法
  • 计算机网络
  • 计算机操作系统
  • 系统设计

2.2 大数据开发方向

大数据对技术栈的要求比较高,
身为大数据开发工程师,对数据从采集、接入、流处理、批处理到数据存储、数据分析和数据可视化等一整套流程都要了解,包括的组件非常多。
做数据流处理需要掌握spark.flink, storm, kafka stream等,
做批处理需要掌握hadoop, hive等,
数据存储需要掌握 hdfs, hbase, redis, tsdb,es等,
各个公司会基于这些组件针对部门特有的业务进行二次开发

大数据开发岗位主要考察以下几个理论知识:

  • 熟悉Java语言特性,熟练掌握Java的使用(Java语言基础)
    Java语言涉及到的面试知识可以分为Java关键字、Java集合、多线程、设计模式、类的设计几部分
  • 熟悉JVM(Java语言基础)
  • 熟悉常用算法和数据结构
  • 熟悉计算机网络知识和操作系统
  • 熟练掌握Mysql操作(数据库)
  • 熟练使用git
  • 熟练掌握linux基本操作
  • 熟悉大数据,hadoop, spark, kafka, hive, elasticsearch等框架

大数据涉及的组件多,但是上手不难,这些组件大家最好掌握基本的操作和原理,如果读过一种或者几种组件的源码会非常加分,代表你对大数据技术的研究和应用比较深入推荐子雨大数据教程:http://dblab.xmu.edu.cn/blog/924

2.3 整合分析

总上分析,对于后端开发方向和大数据开发方向均有重叠的学习内容。
Java语言基础、算法和数据结构、计算机网络、操作系统和数据库这5项作为共有的基础必学部分。
对于后端开发方向,在必学基础之上还需了解设计模式、Java的主流框架和中间件还有系统设计。
对于大数据开发而言,在必学的基础上还需要学习Linux操作系统和大数据模块,其中大数据模块才是大数据开发的重点,在其中需要学习主流的大数据开发框架,对于这部分从数据处理方面入手,专注于学习当下最流行并且公司应用最广的一种组件例如spark.flink或者kafka等。
最后Git作为辅助工具会用最好。

3. 学习途径

3.1 后端开发方向

(一)语言基础

如果刚开始接触Java,建议先阅读《JAVA核心技术》的前几章语法内容,安装Java环境并使用1DEA开发工具熟悉一下语法知识。不推荐阅读这本书后面几章内容,很多是在简单地堆API,讲解地并不好。
学习完简单语法之后其实就可以开始学习设计模式相关的知识,因为Java源码涉及到大量的设计模式,如果没有相关知识很难理清Java众多类之间的关系。学习完设计模式之后就可以开始学习Java的一些高级特性,推荐阅读《Java编程思想》以及《Effective Java》 。虚拟机和并发编程也是Java面试经常考察的内容,但是建议在学习了计算机操作系统的知识之后再学习这些内容。
虚拟机推荐《深入理解Java虚拟机》这本书,重点学习一下内存、垃圾回收、类加载机制这几部分内容。而并发编程推荐《Java并发编程实战》 ,学习得越深入越好.
Java面试也会涉及到一些源码分析问题,阅读源码除了需要有一定的编程经验,也要有一定的数据结构与算法知识,数据结构与算法知识会在后面讲解。对源码的考察主要是一些集合框架,例如Hashtable,HashMap ConcurrentHashMap等等,你可以在牛客网或者Github上找一些源码分析的文章学习,比自己阅读源码更加高效。

(二)设计模式

面试中设计模式也经常被考察,比较常被问到的设计模式包括单例模式、几个工厂模式、代理模式。在回答的时候最好结合Java类库中的实现,或者Spring等框架中的实现。
学习设计模式推荐《Head First设计模式》这本书,包含大量的原理图,生动形象,非常适合入门。

(三)框架与中间件

在做个人项目时不可避免要学习这些内容,框架主要是Spr ing框架,中间件重点是缓存和消息队列。
Spring框架的入门推荐《精通Spring 4.x》 ,虽然看看《Spring揭秘》中对于AOP和10C的讲解很有帮助,但是最好动手实践一下,可以找两个项目课程来学习。牛客网上的有相关的项目课程https://www.nowcoder.com/courses
缓存中间件主要是Redis,推荐《Redis实战》和《Redis设计与实现》这两本书,消息队列可以看看 RabbitMa实战指南》

(四)数据库

学习数据库最开始要先学习SQL语法,推荐《MySQL必知必会》 ,学完之后建议到Leetcode上刷一些题目,因为面试的时候有可能会考察手写sQL语句。
学完SQL语法之后可以再学习一些数据库管理系统相关的知识,推荐《数据库系统概念》 ,至少理解关系型数据库管理系统、事务、范式等内容理解清除
互联网公司主要用MySQL数据库,所以接下来重点准备MySQL相关的知识,推荐《MySQL技术内幕》以及《高性能MySaL》 ,重点学习InnoDB存储引擎,索引、锁、事务、性能优化等内容。

(五)数据结构与算法

数据结构与算法在国内互联网公司面试中至关重要,特别是一二线大厂。零基础学习数据结构与算法推荐《算法第四版》
在学完一定的数据结构与算法知识之后,就可以开始刷Leetcode了, Leetcode包含了大量的面试算法题。刚开始刷的时候可以先刷Top100的题目,按照通过率来排序,先从通过率最高的开始刷。在碰到不会的题目,可以看看讨论区的答案,找一些高票的答案来学习。或者在Github上找一些Leetcode题解来学习。

(六)计算机网络

对计算机网络的考察主要在于TCP/IP, HTTP, Socket编程,这些内容对于大厂面试非常重要,所以准备越充分越好。但是对于其它公司,其实找一些高频面试题看看就足够了。
计算机网络入门书籍推荐《计算机网络自顶向下方法》 ,随后再学习《TCP/IP详解》以及《图解HTTP》 .Java后端开发对于Socket编程没有特别高的要求,但是至少要了解10多路复用知识,可以看看《Unix网络编程》

(七)计算机操作系统

对计算机操作系统的考察主要在进程线程、死锁以及内存管理。前面提到要学习Java虚拟机和Java并发编程最好先学习计算机操作系统知识,可想而知这部分内容有多重要。入门书籍推荐《现代操作系统》 ,随后学习下《深入理解操作系统》的部分内容。Linux系统编程也是计算机操作系统中很重要的内容,但是Java后端岗位只需要了解一下Linux基本原理即可, Linux的学习推荐《鸟哥的Linux私房菜》 .

(八)系统设计

系统设计主要设计网站架构相关的内容,推荐先学习《大型网站架构》这本书来入门。之后再学习一些分布式知,到《Zookeeper》和《大规模分布式存储系统》 。最后再看看微服务。

3.2 大数据开发方向

1、熟悉Java语言特性,熟练掌握Java的使用

Java语言涉及到的面试知识可以分为Java关键字、Java集合、多线程、设计模式、类的设计几部分
Java关键字
常考static关键字;String. StringBuffer, StringBuilder的区别;final, finally, finalize的区别;==和equals的区别;
Java集合
常考HashTable和HashMap的区别(尤其阿里必考) ;HashMap和ConcurrentHashMap的区别;HashMap怎么解决hash冲突;HashMap的大小为什么是2的幂次;HashMap的扩容;jdk 1.8对HashMap的改进;HashMap的key适合选用什么数据类型;ArrayList和LinkedList的区别;HashSet的底层实现
Java多线程:
进程和线程的区别;Java实现多线程的方式;线程安全的定义;线程安全产生的原因和解决方案;volatile关键字;volatile和synchronized的区别;synchronized和lock的区别;synchronized的底层实现;sleep和wait的区别;Java锁;线程池有哪几种;线程池的组成部分;线程的生命周期;线程池参数
设计模式:
Java有哪些设计模式;单例模式饿汉式和懒汉式(一定要手写)
类的设计:
什么是面向对象;面向对象的三大特征;多态的概念;多态存在的必要条件;重载和重写

2、熟悉JVM

学习JVM必看《深入理解Java虚拟机》这本书,其中JVM常考知识点可以分为内存管理机制、GC与垃圾收集器、虚拟机性能监控与故障处理工具、类加载机制几个部分
内存管理机制:
JVM内存的划分;堆和栈;创建Java对象的过程;内存泄漏和内存溢出;Java堆溢出问题的处理
GC与垃圾收集器
怎么判断对象是否已死;常用的垃圾收集算法;新生代和老年代;什么情况对象会进入老年代;GC分为哪几种
虚拟机性能监控与故障处理工具:
常考JDK的命令行工具;查看进程状况或者配置信息的命令
类加载机制:
类加载的过程;类初始化步骤和初始化时机;JVM有哪几种类加载器;双亲委派模型;对象的创建过程;HelloWorld的执行过程

3、熟悉常用算法和数据结构

面试常常需要手撕算法题或者口述算法题的解题思路,常考题目包括:
三大排序:
快排、堆排序、归并排序
树的问题
树的递归和非递归遍历、求二叉树的深度、二叉树中两节点的最低公共祖先、二叉树的广度优先遍历
链表的问题:
两锥表的第一个公共节点、链表中环的入口、反转链表、链表中倒数第k个节点
数组的问题:
二维数组的查找、数组中出现次数超过一半的数字、两数之和(给一个整数数组和一个目标值,找出数组中和为目标数的两个数,返回下标)
路径问题
最小路径(每个网格包含一个非负整数,找出一条路径,使路径上的数字和最小)、不同路径(mn的网格,机器人从左上角往右下角移动)
二分查找法、斐波那契数列、青蛙跳台阶问题和青蛙变态跳台阶问题、不包含重复字符的最长子串的长度

4、熟悉计算机网络知识和操作系统

计算机网络:
常考TCP和UDP、三次握手和四次挥手、为什么TCP连接需要三次握手而不是两次、用户输入域名到浏览器显示页面的过程、http和https的区别、Cookie和Session的区别、分层体系结构包括哪几层
操作系统:
进程和线程、多进程和多线程、死锁产生的必要条件、死锁的处理方法、进程通信和线程通信

5、熟练掌握Mysql操作

包括创建、更新、删除数据库和表;插入、更新、删除数据;检索数据;过滤数据;聚集函数的使用;数据分组;子查询;表连接等部分

6、熟练使用git

因为各个公司基本都是用git进行协同开发,因此git的基本操作一定要熟练Git包括工作区、暂存区、本地仓库、远程仓库四级体系,推荐《Pro Git中文版》学习git的使用,链接: https:/lgitee.com/progit/index.html

7、熟练掌握linux基本操作

大数据集群都是搭建在linux系统上,因此使用linux是做大数据开发的基础,推荐《linux命令行中文版》学习 linux和shell的使用,链接:http://billie6.gihu.io/LCLbook

8、熟悉hadoop, spark, kafka, hive, elasticsearch等框架

大数据涉及的组件多,但是上手不难,这些组件大家最好掌握基本的操作和原理,如果读过一种或者几种组件的源码会非常加分,代表你对大数据技术的研究和应用比较深入推荐子雨大数据教程: htt:/dblab.xmu.edu.cn/blog/924

大数据可以归纳为4个V:
海量的数据规模(volume) 、快速的数据流转和动态的数据体系(velocity) 、多样的数据类型(variety)和巨大的数据价值(value) ,简称“多快好省”
我对大家的建议是从数据处理方面入手,专注于学习当下最流行并且公司应用最广的一种组件,例如spark.flink或者kafka等,手动去搭建要学习组件的环境,搭建的过程也是一种熟悉的过程,对于流处理程序而言,从最基本的word count功能入手,编写相应实现代码, spark, kafka、flink的代码示例都可以参照官网文档,这是最便捷和权威的学习途径。数据处理完后需要对接存储层进行数据存储,并且可以延伸到对于存储的数据进行分析、将存储的数据可视化展示出来,所以我们不单单掌握了一种组件的使用,更是利用多种组件搭建了一套简化版的数据平台。

这里推荐几个实用的大数据博客:
(1)董的博客: http://dongxicheng. org/
2)美团技术博客: https://tech. me i tuan. com
3)腾讯大数据: https://bigdata. qq. com/blog
4) http://spark. apache. org/docs/latest/streami ng-programming-gu i de. html
5)小萝莉: https://www. cnblogs. com/smartlol i/
6)https://www. cnb logs. com/cxzdy/category/752765. html
7) Spark: https://github. com/xubo245/SparkLearni ng

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值