本次 Chat 是一次关于 BAT 级别的公司在招聘大数据开发的过程中,希望面试者具有哪些能力?掌握哪些框架?掌握到什么深度?
目的是为一些正在从事大数据开发或者希望进入 BAT 的大数据开发人员明确一个学习路线,少走弯路。
本次 Chat 包含以下内容:
本场 Chat 还会涉及到面试流程问题,揭秘为什么大部分同学输在了投简历这一关。
本次 GitChat 的主题是大数据开发面试指南,旨在为大家提供一个大数据学习的基本路线,完善数据开发的技术栈,以及面试 BAT 级别的公司过程中,我们面试一个大数据开发的时候,哪些东西是重点考察的,这些公司更希望面试者具备哪些技能。
文中不会对某一个知识点进行详细的展开,本次 Chat 希望读者能当成一个学习或者复习的大纲,用以查漏补缺。
本次 Chat 也算是个人一个阶段性的学习总结,关注本次 Chat 的同学如果你们是做过 Java 后端开发,运维开发或者 DBA 的同学,有一定的开发底子,那么恭喜你们,大数据开发对你们来说大门其实已经敞开了,一定的开发底子能够保证你的想法落地,这也是后期成长为大数据架构师必须要具备的技能。
如果是毕业不久(1 年左右)或者还在学校的同学们,那么也要恭喜你们,因为这篇 Chat 能让大家有一个基本的认知和学习路线,少走弯路。一个人的精力始终是有限的,避开了坑就等于提高了效率。
整个大数据开发技术栈我们从实时性的角度来看,主要包含了离线计算和实时计算两大部分,而整个大数据生态中的框架绝大部分都是用 Java 开发或者兼容了 Java 的 API 调用,那么作为基于 JVM 的第一语言 Java 就是我们绕不过去的坎,Java 语言的基础也是我们阅读源码和进行代码调优的基础。
Java 基础主要包含以下部分:
内置数据类型(byte、short、int、float、double、boolean、char) 引用数据类型:在 Java 中,引用类型的变量非常类似于 C/C++ 的指针,引用类型指向一个对象,指向对象的变量是引用变量,比如对象、数组
进阶篇部分是对 Java 基础篇的补充,这部分内容是我们熟读大数据框架的源码必备的技能,也是我们在面试高级职位的时候的面试重灾区。
JVM 内存结构
class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池
堆和栈区别
Java 中的对象一定在堆上分配吗?
Java 内存模型
计算机内存模型、缓存一致性、MESI 协议、可见性、原子性、顺序性、happens-before、内存屏障、synchronized、volatile、final、锁
垃圾回收
GC 算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收、GC 参数、对象存活的判定、垃圾收集器(CMS、G1、ZGC、Epsilon)
JVM 参数及调优
-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold
Java 对象模型
oop-klass、对象头
HotSpot
即时编译器、编译优化
虚拟机性能监控与故障处理工具
jps、jstack、jmap、jstat、jconsole、 jinfo、 jhat、javap、btrace、TProfiler、Arthas
类加载机制
classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)
Netty 是当前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,业界著名的开源组件只要涉及到网络通信,Netty 是最佳的选择。
关于 Netty 我们要掌握:
Hadoop 体系是我们学习大数据框架的基石,尤其是 MapReduce、HDFS、Yarn 三驾马车基本垫定了整个数据方向的发展道路。也是后面我们学习其他框架的基础,关于 Hadoop 本身我们应该掌握哪些呢?
MapReduce:
HDFS:
Yarn:
Hive 是一个数据仓库基础工具,在 Hadoop 中用来处理结构化数据。它架构在 Hadoop 之上,总归为大数据,并使得查询和分析方便。Hive 是应用最广泛的 OLAP 框架。Hive SQL 也是我们进行 SQL 开发用的最多的框架。
关于 Hive 你必须掌握的知识点如下:
我们在提到列式数据库这个概念的时候,第一反应就是 Hbase。
HBase 本质上是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了 Hadoop 的文件系统(HDFS)提供的容错能力。
它是 Hadoop 的生态系统,提供对数据的随机实时读/写访问,是 Hadoop 文件系统的一部分。
我们可以直接或通过 HBase 的存储 HDFS 数据。使用 HBase 在 HDFS 读取消费/随机访问数据。 HBase 在 Hadoop 的文件系统之上,并提供了读写访问。
HBase 是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个 HBase:表是行的集合、行是列族的集合、列族是列的集合、列是键值对的集合。
关于 Hbase 你需要掌握:
Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica)的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 Hadoop 的批处理系统、低延迟的实时系统、Spark 流式处理引擎,Nginx 日志、访问日志,消息服务等等,用 Scala 语言编写,Linkedin 于 2010 年贡献给了 Apache 基金会并成为顶级开源项目。
Kafka 或者类似 Kafka 各个公司自己造的消息'轮子'已经是大数据领域消息中间件的事实标准。目前 Kafka 已经更新到了 2.x 版本,支持了类似 KafkaSQL 等功能,Kafka 不满足单纯的消息中间件,也正朝着平台化的方向演进。
关于 Kafka 我们需要掌握:
Spark 是专门为大数据处理设计的通用计算引擎,是一个实现快速通用的集群计算平台。它是由加州大学伯克利分校 AMP 实验室开发的通用内存并行计算框架,用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的 MapReduce 计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。Spark 的一个主要特点是能够在内存中进行计算,即使依赖磁盘进行复杂的运算,Spark 依然比 MapReduce 更加高效。
Spark 生态包含了:Spark Core、Spark Streaming、Spark SQL、Structured Streming 和机器学习相关的库等。
学习 Spark 我们应该掌握:
(1)Spark Core:
(2)Spark Streaming:
(3)Spark SQL:
Spark SQL 的优化策略:内存列式存储和内存缓存表、列存储压缩、逻辑查询优化、Join 的优化
(4)Structured Streaming
Spark 从 2.3.0 版本开始支持 Structured Streaming,它是一个建立在 Spark SQL 引擎之上可扩展且容错的流处理引擎,统一了批处理和流处理。正是 Structured Streaming 的加入使得 Spark 在统一流、批处理方面能和 Flink 分庭抗礼。
我们需要掌握:
Spark Mlib:
本部分是 Spark 对机器学习支持的部分,我们学有余力的同学可以了解一下 Spark 对常用的分类、回归、聚类、协同过滤、降维以及底层的优化原语等算法和工具。可以尝试自己使用 Spark Mlib 做一些简单的算法应用。
Apache Flink(以下简称 Flink)项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其他大数据项目的诸多特性吸引了越来越多人的关注。尤其是 2019 年初 Blink 开源将 Flink 的关注度提升到了前所未有的程度。
那么关于 Flink 这个框架我们应该掌握哪些核心知识点?
另外这里重点讲一下,阿里巴巴 Blink 对 SQL 的支持,在阿里云官网上可以看到,Blink 部分最引以为傲的就是对 SQL 的支持,那么 SQL 中最常见的两个问题:1.双流 JOIN 问题,2.State 失效问题也是我们关注的重点。
本部分的算法包含两个部分。第一部分是:面试中针对大数据处理的常用算法题;第二部分是:常用的机器学习和数据挖掘算法。
我们重点讲第一部分,第二部分我们学有余力的同学可以去接触一些,在面试的过程中也可以算是一个亮点。
常见的大数据算法问题:
我们先来看几个典型的 BAT 招聘大数据开发工程师的要求:
以上三则招聘分别来自百度阿里和腾讯,那么我们把他们的要求分类归纳:
如果你是 Apache 顶级项目的 Committer 那么恭喜你,你将会是各大公司竞相挖角对象。
我们在写简历时应该注意什么?
我曾经作为面试官面试过很多人,我认为一个比较优秀的简历应该包含:
技术深度和广度?
在技术方向,大家更喜欢一专多能,深度广度兼具的同学,当然这个要求已经很高了。但是最起码应该做到的是,你用到的技术不仅要熟悉如何使用,也应该要知晓原理。
如果你曾经作为组内的核心开发或者技术 leader 那么要突出自己的技术优势和前瞻性,不仅要熟悉使用现在已经有的轮子
的优劣,也要对未来的技术发展有一定的前瞻性和预见性。
如何投递简历?
最建议的方式是直接找到招聘组的负责人或者让同学或者同事内推。
我会在后面陆续推出针对某个知识点的专题,欢迎大家和我继续交流。
本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。
阅读全文: http://gitbook.cn/gitchat/activity/5ca0b3d0bb4a5c622c2d84f5
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。