第一阶段:Java部分Java基础、JVM、并发、数据库、缓存、设计模式、计算机网络、操作系统、Linux第二阶段:大数据框架MapReduce、YARN、HDFS、HBase、Hive、zookeeper、Spark、Storm、Flink、Kafka第三阶段:面试就业封装项目、面经、简历、面试流程、软素质、实习、offer选择
第一阶段:Java部分
因为我是非科班,没有任何Java基础,所以是从Java语法学起。
1、Java基础 看视频 看书是比较好的入门方式。视频可以帮助理解、看书可以系统掌握知识点。现在网上视频有很多,我当初看的是毕向东Java入门视频,可能比较老,但是还是比较经典,他不仅讲了语法,有些点还会继续深入到Java编程思想这本书的深度。学习Java视频时一定要边看边敲边运行,根据视频讲的重点再对应看书,书有两本,一本基础《Java核心技术卷I》、一本提高《Java编程思想》。建议先根据视频学习《Java核心技术卷I》,学习结束后,再系统学习《Java编程思想》,因为编程思想这本书有点难度。(推荐编程工具使用IDEA,不需要学习命令行运行Java) 这一部分学习,可以做到掌握语法、关键字、多态、内部类、集合等特性。但是,其中集合部分是非常重点,建议深入源码学习,特别是hashmap、concurrenthashmap等。
2、Java虚拟机 看《深入理解java虚拟机》这本就够了,但是可能在刚学完Java基础后有点看不懂,我建议是可以先看一遍这本书,后面学习一段时候后,比如做完一个项目后,再去深入理解这本书,这样就能将这本书做到理解记忆。对于虚拟机的调优,可以去看视频或者博客讲解,掌握常用的虚拟机指令和调优手段即可。如果项目中能够用到虚拟机调优,将是非常亮点。
3、Java并发 并发入门难度在于它有很多的抽象名词,所以第一步先学习并发的一些概念和重点知识,推荐学习《Java高并发程序设计》,这本对于没有并发基础的同学可以很好的理解,虽然配图比较粗糙,但是不影响学习。有时间可以敲一下“多生产者多消费者”的多线程的例子,深入理解下多线程。光学这本书针对面试是不够的,需要继续学习并发包中重点源码,这一点可以放在准备面试阶段学习,可以结合源码和博客对照学习,主要掌握AQS、锁底层。、锁优化、线程池等重点部分。
4、数据库 学习路线是先会写SQL然后深入数据库原理,最后学习优化。《MySQL必知必会》看完之后,去牛客上刷下SQL题目,大多数题目都会写了,核心还是聚集函数、判断、连接、嵌套查询等;另外,可以找个视频学习下安装数据库,在自己安装的数据库上学习建表、插入数据等操作(之前在学习Java视频可能也会学到);然后,开始学习原理知识,一方面学习基础ACID、隔离等知识,另一方面学习索引结构,推荐看《MySQL技术内幕:InnoDB存储引擎》帮助明白索引原理,面试一般问索引数据结构B 树、索引优化等;最后学习性能优化,推荐《高性能MySQL》,核心是数据库优化,从应用层、数据结构层、索引层、硬件网络层等方面学习优化。
5、Redis缓存 建议直接把《Redis设计与实现》这本书吃透就可以了,作者是Redis源码界大佬,虽然是C语言写的,但是我们主要学习其中的数据结构、算法优化、性能优化的思想,面试如果能说到对Redis源码的理解,那是最好的。
6、设计模式 推荐《大话设计模式》,然后结合一些代码案例去理解,比如单例(要求手写)、模板、适配器、装饰、代理等设计模式,能说出原理和使用场景,如果能在自己项目中使用过或者看过的源码中学习过设计模式,这样更能体现出你对设计模式的理解。
7、计算机网络 这一部分书籍也很多,入门可以看《图解HTTP》、《图解TCP/IP》,提高的话就看《计算机网络:自顶向下》,重点把HTTP、TCP、UDP、IP这几个部分搞明白,重中之重是TCP。
8、操作系统 对于学习Java的同学,这个可以不用深入,学c 的同学建议深入。这一点我只看了《现代操作系统》中内存、IO、进程这几部分,如果想要详细学,可以在B站上搜清华大学向勇的视频,然后再系统看书。
9、Linux 在电脑上安装了虚拟机,然后安装一个Linux系统(centos或者ubuntu),然后根据《鸟哥linux私房菜》的学习视频或者直接看那本书进行学习并敲一遍指令,主要是熟悉linux系统和常见指令。如果科班的同学想要深入学习的话,推荐看《Linux内核设计与实现》,在源码层面去学习Linux进程、IO、内存等知识点。
10、数据结构与算法 这一部分应该是贯穿整个学习过程,在每个阶段都要一直进行的。先学习数据结构,推荐《大话数据结构》入门,掌握基本结构后,开始刷《剑指offer》,推荐去牛客平台刷(注意:千万不要等全部数据结构学完再刷,知道数组、链表、字符串、二叉树等基本结构后就可以刷题了);然后,开始刷leetcode,基本是掌握Top100左右,时间充足建议刷到200道 。刚开始不要根据Tag刷,会形成思维定式,后面刷过多数题目后,可以针对Tag进行详细击破。(每个人刷题的习惯不一样,只要有思路会做题就好)
以上学完,基本熟悉了Java基础部分,下面开始学习框架:Java后端同学开始学习SSM、spring boot、spring cloud;对于大数据开发的同学,开始学习Hadoop全家桶、spark、storm、flink等流计算。
第二阶段:大数据框架部分
大数据开发的同学,可以先不用深入掌握SSM,但最好根据视频学习下如何使用这些框架,因为到具体工作中可能会用到。
1、大数据入门 个人建议视频入门最快,我看了一个关于大数据各类组件的介绍、安装和使用的视频课程,了解了大数据中各个组件的作用,这样,在后面学习组件原理的使用,可以理解记忆。
2、Hadoop权威指南 这本书单独作为一个标题,因为这本书比较全面地讲解了Hadoop全家桶,我们主要学习MapReduce、HDFS、YARN、HBase、Hive等,通过这本书,可以学到这些组件的基本原理,但是需要其他书籍补充学习,继续深入各个组件。
3、MapReduce 虽然现在很少用着MR来处理,但是其思想是非常经典的。主要学习其处理流程思想以及与spark的比较,然后自己写一下用MR来实现TopK、全排序的例子。
4、YARN 这一点推荐直接看董西成老师的博客(直接搜即可),总结的很好,主要学习资源调度过程、调度器原理等。
5、HDFS 这一部分,我是深入源码学习的。如果想要深入源码的同学,建议看《Hadoop 2.X HDFS源码剖析》这本书并结合源码学习,核心是从源码角度去回答读写文件过程。
6、HBase HBase创建表、插入、删除等操作要掌握,然后深入原理,可以看《HBase企业应用开发实战》或者2019年新出的《HBase原理与实践》,重点掌握建表、读写流程、HBase调优等。
7、Hive 这一点,我没有过多深入,只是写了一些HSQL,学到这里,可以顺便学习下数仓的知识,因为有时候面试会问一些,但是了解即可,不必过于深入。
8、Spark 先学习下scala语言,看视频或者看《快学scala》都可以,会使用即可,主要是为了学习Spark打基础,然后推荐看《Spark大数据处理技术》,虽然版本有点老,但是核心思想是没有变的
9、流计算 Spark streaming、Storm、Flink比较三者的特点,Storm渐渐用的少了,可以简单了解,目前看,Flink会用的越来越多,建议可以重点深入Flink,我之前只重点学了Spark streaming,有其他同学学了Flink,反馈说面试官对Flink还是比较感兴趣的,推荐一本讲原理的新书《Flink原理、实战与性能优化》,我看了目录还是非常不错的,重点清晰,后续我也会继续学习。
10、zookeeper 一本《从paxos到zookeeper分布式一致性协议》即可,另外要结合HDFS、HBase等组件的高可用设计原理,掌握zookeeper常见应用场景、分布式协议、选举原理等。
11、消息队列 消息队列有很多种,RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,可以只学习其中一种即可,根据你项目中用到的哪种进行选择,当时我项目中用到了Kafka,所以主要深入学习了Kafka的一些机制,Kafka书籍大都来自于官网,建议看官网掌握架构和原理,看博客掌握常见面试题。
第三阶段:面试就业
1、封装项目无论何种项目,突出能力为主,尽可能表现你的知识深度,适当突出广度。项目一般分为四类:(1)看网上视频做的伪实战项目:比如秒杀系统、订单系统、大数据分析项目等等,说白了,只是在功能上进行复现,距离真正的企业实战还有一定差距。但是,可以体现自己的学习内容,对于框架或组件的深入理解,比如你用到了dubbo,那么你知道了dubbo底层原理或源码,也是非常突出的,项目就得到了升华,建议是少谈业务,多聊底层技术,这样显示你的深度。(2)实习项目:有些同学在实习期间做的项目,这是真正的实战项目,但是人在少数能够有这个经历。如果你有的话,建议朝实战方面封装,比如JVM调优、GC调优、并发量或者实际遇到的并发问题,并发锁的使用等等。(3)比赛项目:做了一些天池中间件比赛,也是非常好的。突出比赛难度和你自己的贡献,用比赛数据说话、描述清楚比赛流程,如何攻克其中的难点,提高了成绩等等。(4)实验室弱相关的项目:实验室做的项目可能和你的职位不太相关,但是也可以体现能力,比如:我之前实验室用linux做了一个项目,但是和大数据关系不是那么大,但是能够突出linux一些技能和计算机消息队列等方面,我就封装了下,面试下来发现效果还不错,因为这个项目是真实运行的项目,讲述时比较有自信。
2、准备简历简历中的重点是技能描述、项目经历,有实习经历的话,也是一个重点。(1)技能描述:多写熟悉技能,尽量具体、具有针对性,比如:熟悉Java虚拟机可以写成熟悉JVM内存管理和垃圾回收;熟悉计算机网络写成熟悉HTTP、TCP等,注意:不太懂的技能不要写,写了就是给自己挖坑。(2)项目经历:一般分为项目描述、项目职责。项目描述是对整个项目流程的描述,使用了什么技能完成了什么功能,可以按照数据输入到数据输出到数据展示的过程。项目职责是本项目中你完成的亮点和优化,比如解决了HBase写热点问题、实现HBase高可用等(3)实习经历:有的话可以重点写。实习参与的项目,主要突出你在其中完成了工作(这里有个小Bug,也许你实际没完成,但是你熟悉整个开发过程以及原理,那么也可以详细写),原则就是你懂的点就可以展开写。另外,突出这个项目的实战性,解决了哪些开发过程中的实际问题,突出自己的能力。
3、多刷面经 面经就是考试题,所以就像考试之前刷题一样去刷面经贴。通过刷完许多面经后,基本就可以总结出大多数的面试点,也知道这些面试点是出自于书籍中的哪部分,然后对应总结下。另外,如果之前看书的时候就已经做好相关总结,那么只需要刷一些面经贴作为补充,然后将自己的总结多多复习几遍即可。
4、面试流程(1)招聘信息一般公布于各大官网、牛客网和其他招聘网站等,招聘分为公司统招和部门直招,二者最大的区别是部门直招一般是该部门比较缺人、面试流程会快,你对这个部门也会有更多的了解,另外,最好走内推,防止简历石沉大海,牛客上有大量内推贴基本满足我们的求职要求,投简历时可以和内推人交流。(2)面试一般2面以上,第一面一般是简历面,根据你的简历从头至尾提问;后面几面也会提到简历,但是更多会是项目和项目中技术的扩展,另外现在越来越多的公司要求手撕代码,所以代码能力是必须的。(3)面试通过后一般是HR先给口头offer,最终还是要以邮件为准。
5、软素质 一般指在面试过程中的语言表达和临时应变能力。语言表达不宜过快、但是一定要条理清晰,自己说的清晰,面试官才听的舒服;临时应变能力,这个只有在平时面试中不断积累总结,面试结束后要自我复盘,对回答不好的部分重新思考,是否可以转变问题,引导面试官向自己擅长的领域提问。
6、实习经历 如果有时间,建议还是要参与实习。一般暑期实习可以直接转正,相当于可以提前锁定offer,然后再参加秋招,心情会更加放松。如果无法实习,那就利用别人实习的时间,好好深入基础、算法和项目,等待秋招(有些公司也有秋招提前批)。
7、offer选择 决定因素一般是薪资、技术成长和地点,所以,根据这三个因素对不同offer进行打分,自然可以得到比较满意的结果。(说起来容易,选起来还是比较纠结的,不过多数人都会面向薪资编程吧)
8、正式就业 这是在获得offer后的最后一步,首先是签三方协议,一般分为纸质签或着网签,根据学校签约指导就好,其中最重要的是确定好公司后再寄三方,以免带来不必要的麻烦;然后是户口问题,是否在就业地方落户,落户的话,要关注当地一些政策,有些地方会有较大的人才引进福利,记得提前准备材料。
祝愿大家收获理想的offer!
码字不易,如果您觉得文章写得不错:
请您 1.关注作者~ 您的关注是我写作的最大动力
2.私信我“大数据”
我将与您分享一套最新的大数据学习教程和全套开发工具
,