关注个人公众号,后台回复【JAVAPDF】获取200页面试题!5万人关注的大数据成神之路,不来了解一下吗?5万人关注的大数据成神之路,真的不来了解一下吗?5万人关注的大数据成神之路,肯定真的不来了解一下吗?java
愿读到这篇文章的技术人早日明白而且脱离技术自己,早登彼岸。一切技术最终只是雕虫小技。面试
本系列主题是大数据开发面试指南,旨在为你们提供一个大数据学习的基本路线,完善数据开发的技术栈,以及咱们面试一个大数据开发岗位的时候,哪些东西是重点考察的,这些公司更但愿面试者具有哪些技能。本文不会对某一个知识点进行详细的展开,后续会陆续出专题文章,但愿读者能当成一个学习或者复习的大纲,用以查漏补缺。算法
Java基础篇整个大数据开发技术栈咱们从实时性的角度来看,主要包含了离线计算和实时计算两大部分,而整个大数据生态中的框架绝大部分都是用 Java 开发或者兼容了 Java 的 API 调用,那么做为基于 JVM 的第一语言 Java 就是咱们绕不过去的坎,Java 语言的基础也是咱们阅读源码和进行代码调优的基础。Java 基础主要包含如下部分:数据库
Java 的面向对象Java 语言的三大特征:封装、继承和多态Java 语言数据类型Java 的自动类型转换,强制类型转换String 的不可变性,虚拟机的常量池,String.intern() 的底层原理Java 语言中的关键字:final、static、transient、instanceof、volatile、synchronized的底层原理Java 中经常使用的集合类的实现原理:ArrayList/LinkedList/Vector、SynchronizedList/Vector、HashMap/HashTable/ConcurrentHashMap 互相的区别以及底层实现原理动态代理的实现方式编程
CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁死锁的缘由死锁的解决办法CountDownLatch、CyclicBarrier 和 Semaphore 三个类的使用和原理缓存
并发和并行的区别线程与进程的区别线程的实现、线程的状态、优先级、线程调度、建立线程的多种方式、守护线程本身设计线程池、submit() 和 execute()、线程池原理为何不容许使用 Executors 建立线程池死锁、死锁如何排查、线程安全和内存模型的关系ThreadLocal 变量Executor 建立线程池的几种方式:newFixedThreadPool(int nThreads)newCachedThreadPool()newSingleThreadExecutor()newScheduledThreadPool(int corePoolSize)newSingleThreadExecutor()ThreadPoolExecutor 建立线程池、拒绝策略线程池关闭的方式安全
JUC 包中 List 接口的实现类:CopyOnWriteArrayListJUC 包中 Set 接口的实现类:CopyOnWriteArraySet、ConcurrentSkipListSetJUC 包中 Map 接口的实现类:ConcurrentHashMap、ConcurrentSkipListMapJUC包中Queue接口的实现类:ConcurrentLinkedQueue、ConcurrentLinkedDeque、ArrayBlockingQueue、LinkedBlockingQueue、LinkedBlockingDeque网络
进阶篇部分是对 Java 基础篇的补充,这部份内容是咱们熟读大数据框架的源码必备的技能,也是咱们在面试高级职位的时候的面试重灾区。多线程
JVM 内存结构class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池堆和栈区别Java 中的对象必定在堆上分配吗?Java 内存模型计算机内存模型、缓存一致性、MESI 协议、可见性、原子性、顺序性、happens-before、内存屏障、synchronized、volatile、final、锁垃圾回收GC 算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收、GC 参数、对象存活的断定、垃圾收集器(CMS、G一、ZGC、Epsilon)JVM 参数及调优-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThresholdJava 对象模型oop-klass、对象头HotSpot即时编译器、编译优化虚拟机性能监控与故障处理工具jps、jstack、jmap、jstat、jconsole、 jinfo、 jhat、javap、btrace、TProfiler、Arthas类加载机制classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)架构
用户空间以及内核空间Linux 网络 I/O 模型:阻塞 I/O (Blocking I/O)、非阻塞 I/O (Non-Blocking I/O)、I/O 复用(I/O Multiplexing)、信号驱动的 I/O (Signal Driven I/O)、异步 I/O灵拷贝(ZeroCopy)BIO 与 NIO 对比缓冲区 Buffer通道 Channel反应堆选择器AIO
RPC 的原理编程模型经常使用的 RPC 框架:Thrift、Dubbo、SpringCloudRPC 的应用场景和与消息队列的差异RPC 核心技术点:服务暴露、远程代理对象、通讯、序列化
了解 Linux 的经常使用命令远程登陆上传下载系统目录文件和目录操做Linux 下的权限体系压缩和打包用户和组Shell 脚本的编写管道操做
分布式中的一些基本概念:集群(Cluster)、负载均衡(Load Balancer)等分布式系统理论基础:一致性、2PC 和 3PC分布式系统理论基础:CAP分布式系统理论基础:时间、时钟和事件顺序分布式系统理论进阶:Paxos分布式系统理论进阶:Raft、Zab分布式系统理论进阶:选举、多数派和租约分布式锁的解决方案分布式事务的解决方案分布式 ID 生成器解决方案
Netty 是当前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、通讯行业等得到了普遍的应用,业界著名的开源组件只要涉及到网络通讯,Netty 是最佳的选择。关于 Netty 咱们要掌握:Netty 三层网络架构:Reactor 通讯调度层、职责链 PipeLine、业务逻辑处理层
Netty 的线程调度模型
序列化方式
链路有效性检测
流量整形
优雅停机策略
Netty 对 SSL/TLS 的支持
Netty 的源码质量极高,推荐对部分的核心代码进行阅读:
Netty 的 Buffer
Netty 的 Reactor
Netty 的 Pipeline
Netty 的 Handler 综述
Netty 的 ChannelHandler
Netty 的 LoggingHandler
Netty 的 TimeoutHandler
Netty 的 CodecHandler
Netty 的 MessageToByteEncoder
Hadoop 体系是咱们学习大数据框架的基石,尤为是 MapReduce、HDFS、Yarn 三驾马车基本垫定了整个数据方向的发展道路。也是后面咱们学习其余框架的基础,关于 Hadoop 自己咱们应该掌握哪些呢?
掌握 MapReduce 的工做原理
能用 MapReduce 手写代码实现简单的 WordCount 或者 TopN 算法
掌握 MapReduce Combiner 和 Partitioner的做用
熟悉 Hadoop 集群的搭建过程,而且能解决常见的错误
熟悉 Hadoop 集群的扩容过程和常见的坑
如何解决 MapReduce 的数据倾斜
Shuffle 原理和减小 Shuffle 的方法
十分熟悉 HDFS 的架构图和读写流程
十分熟悉 HDFS 的配置
熟悉 DataNode 和 NameNode 的做用
NameNode 的 HA 搭建和配置,Fsimage 和 EditJournal 的做用的场景
HDFS 操做文件的经常使用命令
HDFS 的安全模式
Yarn 的产生背景和架构
Yarn 中的角色划分和各自的做用
Yarn 的配置和经常使用的资源调度策略
Yarn 进行一次任务资源调度的过程
Hive 是一个数据仓库基础工具,在 Hadoop 中用来处理结构化数据。它架构在 Hadoop 之上,总归为大数据,并使得查询和分析方便。Hive 是应用最普遍的 OLAP 框架。Hive SQL 也是咱们进行 SQL 开发用的最多的框架。关于 Hive 你必须掌握的知识点以下:HiveSQL 的原理:咱们都知道 HiveSQL 会被翻译成 MapReduce 任务执行,那么一条 SQL 是如何翻译成 MapReduce 的?
Hive 和普通关系型数据库有什么区别?
Hive 支持哪些数据格式
Hive 在底层是如何存储 NULL 的
HiveSQL 支持的几种排序各表明什么意思(Sort By/Order By/Cluster By/Distrbute By)
Hive 的动态分区
HQL 和 SQL 有哪些常见的区别
Hive 中的内部表和外部表的区别
Hive 表进行关联查询如何解决长尾和数据倾斜问题
HiveSQL 的优化(系统参数调整、SQL 语句优化)
咱们在提到列式数据库这个概念的时候,第一反应就是 Hbase。HBase 本质上是一个数据模型,相似于谷歌的大表设计,能够提供快速随机访问海量结构化数据。它利用了 Hadoop 的文件系统(HDFS)提供的容错能力。它是 Hadoop 的生态系统,提供对数据的随机实时读/写访问,是 Hadoop 文件系统的一部分。咱们能够直接或经过 HBase 的存储 HDFS 数据。使用 HBase 在 HDFS 读取消费/随机访问数据。 HBase 在 Hadoop 的文件系统之上,并提供了读写访问。HBase 是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每个列族能够有任意数量的列。后续列的值连续地存储在磁盘上。表中的每一个单元格值都具备时间戳。总之,在一个 HBase:表是行的集合、行是列族的集合、列族是列的集合、列是键值对的集合。关于 Hbase 你须要掌握:Hbase 的架构和原理
Hbase 的读写流程
Hbase 有没有并发问题?Hbase 如何实现本身的 MVVC 的?
Hbase 中几个重要的概念:HMaster、RegionServer、WAL 机制、MemStore
Hbase 在进行表设计过程当中如何进行列族和 RowKey 的设计
Hbase 的数据热点问题发现和解决办法
提升 Hbase 的读写性能的通用作法
HBase 中 RowFilter 和 BloomFilter 的原理
Hbase API 中常见的比较器
Hbase 的预分区
Hbase 的 Compaction
Hbase 集群中 HRegionServer 宕机如何解决
Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica)的分布式消息系统,它的最大的特性就是能够实时的处理大量数据以知足各类需求场景:好比基于 Hadoop 的批处理系统、低延迟的实时系统、Spark 流式处理引擎,Nginx 日志、访问日志,消息服务等等,用 Scala 语言编写,Linkedin 于 2010 年贡献给了 Apache 基金会并成为顶级开源项目。Kafka 或者相似 Kafka 各个公司本身造的消息'轮子'已是大数据领域消息中间件的事实标准。目前 Kafka 已经更新到了 2.x 版本,支持了相似 KafkaSQL 等功能,Kafka 不知足单纯的消息中间件,也正朝着平台化的方向演进。关于 Kafka 咱们须要掌握:Kafka 的特性和使用场景
Kafka 中的一些概念:Leader、Broker、Producer、Consumer、Topic、Group、Offset、Partition、ISR
Kafka 的总体架构
Kafka 选举策略
Kafka 读取和写入消息过程当中都发生了什么
Kakfa 如何进行数据同步(ISR)
Kafka 实现分区消息顺序性的原理
消费者和消费组的关系
消费 Kafka 消息的 Best Practice(最佳实践)是怎样的
Kafka 如何保证消息投递的可靠性和幂等性
Kafka 消息的事务性是如何实现的
如何管理 Kafka 消息的 Offset
Kafka 的文件存储机制
Kafka 是如何支持 Exactly-once 语义的
一般 Kafka 还会要求和 RocketMQ 等消息中间件进行比较
Spark 是专门为大数据处理设计的通用计算引擎,是一个实现快速通用的集群计算平台。它是由加州大学伯克利分校 AMP 实验室开发的通用内存并行计算框架,用来构建大型的、低延迟的数据分析应用程序。它扩展了普遍使用的 MapReduce 计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。Spark 的一个主要特色是可以在内存中进行计算,即便依赖磁盘进行复杂的运算,Spark 依然比 MapReduce 更加高效。Spark 生态包含了:Spark Core、Spark Streaming、Spark SQL、Structured Streming 和机器学习相关的库等。学习 Spark 咱们应该掌握:(1)Spark Core:Spark的集群搭建和集群架构(Spark 集群中的角色)
Spark Cluster 和 Client 模式的区别
Spark 的弹性分布式数据集 RDD
Spark DAG(有向无环图)
掌握 Spark RDD 编程的算子 API(Transformation 和 Action 算子)
RDD 的依赖关系,什么是宽依赖和窄依赖
RDD 的血缘机制
Spark 核心的运算机制
Spark 的任务调度和资源调度
Spark 的 CheckPoint 和容错
Spark 的通讯机制
Spark Shuffle 原理和过程
(2)Spark Streaming:原理剖析(源码级别)和运行机制
Spark Dstream 及其 API 操做
Spark Streaming 消费 Kafka 的两种方式
Spark 消费 Kafka 消息的 Offset 处理
数据倾斜的处理方案
Spark Streaming 的算子调优
并行度和广播变量
Shuffle 调优
(3)Spark SQL:Spark SQL 的原理和运行机制
Catalyst 的总体架构
Spark SQL 的 DataFrame
Spark SQL 的优化策略:内存列式存储和内存缓存表、列存储压缩、逻辑查询优化、Join 的优化(4)Structured StreamingSpark 从 2.3.0 版本开始支持 Structured Streaming,它是一个创建在 Spark SQL 引擎之上可扩展且容错的流处理引擎,统一了批处理和流处理。正是 Structured Streaming 的加入使得 Spark 在统一流、批处理方面能和 Flink 平起平坐。咱们须要掌握:Structured Streaming 的模型
Structured Streaming 的结果输出模式
事件时间(Event-time)和延迟数据(Late Data)
窗口操做
水印
容错和数据恢复
Spark Mlib:本部分是 Spark 对机器学习支持的部分,咱们学有余力的同窗能够了解一下 Spark 对经常使用的分类、回归、聚类、协同过滤、降维以及底层的优化原语等算法和工具。能够尝试本身使用 Spark Mlib 作一些简单的算法应用。
Apache Flink(如下简称 Flink)项目是大数据处理领域最近冉冉升起的一颗新星,其不一样于其余大数据项目的诸多特性吸引了愈来愈多人的关注。尤为是 2019 年初 Blink 开源将 Flink 的关注度提高到了史无前例的程度。那么关于 Flink 这个框架咱们应该掌握哪些核心知识点?Flink 集群的搭建
Flink 的架构原理
Flink 的编程模型
Flink 集群的 HA 配置
Flink DataSet 和 DataSteam API
序列化
Flink 累加器
状态 State 的管理和恢复
窗口和时间
并行度
Flink 和消息中间件 Kafka 的结合
Flink Table 和 SQL 的原理和用法
另外这里重点讲一下,阿里巴巴 Blink 对 SQL 的支持,在阿里云官网上能够看到,Blink 部分最引觉得傲的就是对 SQL 的支持,那么 SQL 中最多见的两个问题:1.双流 JOIN 问题,2.State 失效问题也是咱们关注的重点。
本部分的算法包含两个部分。第一部分是:面试中针对大数据处理的经常使用算法题;第二部分是:经常使用的机器学习和数据挖掘算法。咱们重点讲第一部分,第二部分咱们学有余力的同窗能够去接触一些,在面试的过程当中也能够算是一个亮点。常见的大数据算法问题:两个超大文件找共同出现的单词
海量数据求 TopN
海量数据找出不重复的数据
布隆过滤器
bit-map
堆
字典树
倒排索引
咱们先来看几个典型的 BAT 招聘大数据开发工程师的要求:
以上三则招聘分别来自百度阿里和腾讯,那么咱们把他们的要求分类概括:1~2 门语言基础
扎实的后台开发基础
离线计算方向(Hadoop/Hbase/Hive 等)
实时计算方向(Spark/Flink/Kafka 等)
知识面更宽优先(对口经验 + 其余)
若是你是 Apache 顶级项目的 Committer 那么恭喜你,你将会是各大公司竞相挖角对象。咱们在写简历时应该注意什么?我曾经做为面试官面试过不少人,我认为一个比较优秀的简历应该包含:漂亮的排版,杜绝使用 word,格式化的模板,推荐使用 MarkDown 生成 PDF
不要堆砌技术名词,不会的不了解的不要写,不然你会被虐的体无完肤
1~2 个突出的项目经历,不要让你的简历看起来像Demo同样浅显
写在简历上的项目我建议你要熟悉每个细节,即便不是你开发的也要知道是如何实现的
若是有一段知名企业的实习或者工做经历那么是很大的加分
技术深度和广度?在技术方向,你们更喜欢一专多能,深度广度兼具的同窗,固然这个要求已经很高了。可是最起码应该作到的是,你用到的技术不只要熟悉如何使用,也应该要知晓原理。若是你曾经做为组内的核心开发或者技术 leader 那么要突出本身的技术优点和前瞻性,不只要熟悉使用如今已经有的轮子的优劣,也要对将来的技术发展有必定的前瞻性和预见性。如何投递简历?最建议的方式是直接找到招聘组的负责人或者让同窗或者同事内推。
欢迎扫码关注个人公众号,回复【JAVAPDF】能够得到一份200页秋招面试题!