即时编译器、编译优化
虚拟机性能监控与故障处理工具
jps、jstack、jmap、jstat、jconsole、 jinfo、 jhat、javap、btrace、TProfiler、Arthas
类加载机制
classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)
NIO
- 用户空间以及内核空间
- 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 的原理编程模型
- 常用的 RPC 框架:Thrift、Dubbo、SpringCloud
- RPC 的应用场景和与消息队列的差别
- RPC 核心技术点:服务暴露、远程代理对象、通信、序列化
Linux 基础
- 了解 Linux 的常用命令
- 远程登录
- 上传下载
- 系统目录
- 文件和目录操作
- Linux 下的权限体系
- 压缩和打包
- 用户和组
- Shell 脚本的编写
- 管道操作
分布式理论篇
- 分布式中的一些基本概念:集群(Cluster)、负载均衡(Load Balancer)等
- 分布式系统理论基础:一致性、2PC 和 3PC
- 分布式系统理论基础:CAP
- 分布式系统理论基础:时间、时钟和事件顺序
- 分布式系统理论进阶:Paxos
- 分布式系统理论进阶:Raft、Zab
- 分布式系统理论进阶:选举、多数派和租约
- 分布式锁的解决方案
- 分布式事务的解决方案
- 分布式 ID 生成器解决方案
大数据框架网络通信基石——Netty
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 的工作原理
- 能用 MapReduce 手写代码实现简单的 WordCount 或者 TopN 算法
- 掌握 MapReduce Combiner 和 Partitioner的作用
- 熟悉 Hadoop 集群的搭建过程,并且能解决常见的错误
- 熟悉 Hadoop 集群的扩容过程和常见的坑
- 如何解决 MapReduce 的数据倾斜
- Shuffle 原理和减少 Shuffle 的方法
HDFS:
- 十分熟悉 HDFS 的架构图和读写流程
- 十分熟悉 HDFS 的配置
- 熟悉 DataNode 和 NameNode 的作用
- NameNode 的 HA 搭建和配置,Fsimage 和 EditJournal 的作用的场景
- HDFS 操作文件的常用命令
- HDFS 的安全模式
Yarn:
- Yarn 的产生背景和架构
- Yarn 中的角色划分和各自的作用
- Yarn 的配置和常用的资源调度策略
- Yarn 进行一次任务资源调度的过程
OLAP 引擎 Hive
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。
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
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
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 Streaming
Spark 从 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 做一些简单的算法应用。
Flink
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
- 堆
- 字典树
- 倒排索引
企业期望的你是什么样子?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
map
6. 堆
7. 字典树
8. 倒排索引
企业期望的你是什么样子?
[外链图片转存中…(img-gSnJxB5m-1714775975404)]
[外链图片转存中…(img-wvNIJVn7-1714775975405)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!