第1章项目涉及技术
1.1 Linux&Shell
1.1.1 Linux常用高级命令
1.1.2 Shell常用工具及写过的脚本
1.1.3 Shell中提交了一个脚本,进程号已经不知道了,但是需要kill掉这个进程,怎么操作?
1.1.4 Shell中单引号和双引号区别
1.2 Hadoop
1.2.1 Hadoop常用端口号
1.2.2 Hadoop配置文件以及简单的Hadoop集群搭建
1.2.3 HDFS读流程和写流程
1.2.4 HDFS小文件处理
1.2.5 Shuffle及优化
1.2.6 Yarn工作机制
1.2.7 Yarn调度器
1.2.8 项目经验之基准测试
1.2.9 Hadoop宕机
1.2.10 Hadoop解决数据倾斜方法
1.3 Zookeeper
1.3.1 选举机制
1.3.2 常用命令
1.3.3 Paxos算法(扩展)
1.3.4 讲一讲什么是CAP法则?Zookeeper符合了这个法则的哪两个?(扩展)
1.4 Flume
1.4.1 Flume组成,Put事务,Take事务
1.4.2 Flume拦截器
1.4.3 Flume Channel选择器
1.4.4 Flume监控器
1.4.5 Flume采集数据会丢失吗?(防止数据丢失的机制)
1.5 Kafka
1.5.1 Kafka架构
1.5.2 Kafka的机器数量
1.5.3 副本数设定
1.5.4 Kafka压测
1.5.5 Kafka日志保存时间
1.5.6 Kafka中数据量计算
1.5.7 Kafka的硬盘大小
1.5.8 Kafka监控
1.5.9 Kakfa分区数
1.5.10 多少个Topic
1.5.11 Kafka的ISR副本同步队列
1.5.12 Kafka分区分配策略
1.5.13 Kafka挂掉
1.5.14 Kafka丢不丢数据
1.5.15 Kafka数据重复
1.5.16 Kafka消息数据积压,Kafka消费能力不足怎么处理?
1.5.17 Kafka参数优化
1.5.18 Kafka高效读写数据
1.5.19 Kafka单条日志传输大小
1.5.20 Kafka过期数据清理
1.5.21 Kafka可以按照时间消费数据
1.5.22 Kafka消费者角度考虑是拉取数据还是推送数据
1.5.23 Kafka中的数据是有序的吗
1.6 Hive
1.6.1 Hive的架构
1.6.2 Hive和数据库比较
1.6.3 内部表和外部表
1.6.4 4个By区别
1.6.5 系统函数
1.6.6 自定义UDF、UDTF函数
1.6.7 窗口函数
1.6.8 Hive优化
1.6.9 Hive解决数据倾斜方法
1.6.10 Hive里边字段的分隔符用的什么?为什么用\t?有遇到过字段里边有\t的情况吗,怎么处
1.6.11 Tez引擎优点?
1.6.12 MySQL元数据备份
1.6.13 Union与Union all区别
1.7 Sqoop
1.7.1 Sqoop参数
1.7.2 Sqoop导入导出Null存储一致性问题
1.7.3 Sqoop数据导出一致性问题
1.7.4 Sqoop底层运行的任务是什么
1.7.5 Sqoop一天导入多少数据
1.7.6 Sqoop数据导出的时候一次执行多长时间
1.7.7 Sqoop在导入数据的时候数据倾斜
1.7.8 Sqoop数据导出Parquet(项目中遇到的问题)
1.8 Azkaban
1.8.1 每天集群运行多少指标?
1.8.2 任务挂了怎么办?
1.9 HBase
1.9.1 HBase存储结构
1.9.2 RowKey设计原则
1.9.3 RowKey如何设计
1.9.4 Phoenix二级索引(讲原理)
1.10 Scala
1.10.1 开发环境
1.10.2 变量和数据类型
1.10.3 流程控制
1.10.4 函数式编程
1.10.5 面向对象
1.10.6 集合
1.10.7 模式匹配
1.10.8 异常
1.10.9 隐式转换
1.10.10 泛型
1.11 Spark Core & SQL
1.11.1 Spark解决什么问题
1.11.2 Spark为什么会有自己的资源调度器
1.11.3 Spark运行模式
1.11.4 Spark常用端口号
1.11.5 简述Spark的架构与作业提交流程(画图讲解,注明各个部分的作用)(重点)
1.11.6 Spark任务使用什么进行提交,JavaEE界面还是脚本
1.11.7 Spark提交作业参数(重点)
1.11.8 RDD五大属性
1.11.9 Spark的transformation算子(不少于8个)(重点)
1.11.10 Spark的action算子(不少于6个)(重点)
1.11.11 map和mapPartitions区别
1.11.12 Repartition和Coalesce区别
1.11.13 reduceByKey与groupByKey的区别
1.11.14 reduceByKey、foldByKey、aggregateByKey、combi
1.11.15 Kryo序列化
1.11.16 Spark中的血缘(笔试重点)
1.11.17 Spark任务的划分
1.11.18 cache缓存级别
1.11.19 释放缓存和缓存
1.11.20 缓存和检查点区别
1.11.21 Spark分区
1.11.22 Spark累加器
1.11.23 Spark广播变量
1.11.24 SparkSQL中RDD、DataFrame、DataSet三者的转换 (笔试重点)
1.11.9 请列举会引起Shuffle过程的Spark算子,并简述功能。
1.11.15 当Spark涉及到数据库的操作时,如何减少Spark运行中的数据库连接数?
1.11.16 如何使用Spark实现TopN的获取(描述思路或使用伪代码)(重点)
1.11.17 京东:调优之前与调优之后性能的详细对比(例如调整map个数,map个数之前多少、之后
1.11.23 Spark Shuffle默认并行度
1.11.27 控制Spark reduce缓存 调优shuffle
1.11.10 Spark内核源码(重点)
1.12 Spark Streaming
1.12.1 Spark Streaming第一次运行不丢失数据
1.12.2 Spark Streaming精准一次消费
1.12.3 Spark Streaming控制每秒消费数据的速度
1.12.4 Spark Streaming背压机制
1.12.5 Spark Streaming 一个stage耗时
1.12.6 Spark Streaming 优雅关闭
1.12.7 Spark Streaming 默认分区个数
1.12.8 SparkStreaming有哪几种方式消费Kafka中的数据,它们之间的区别是什么?
1.12.9 简述SparkStreaming窗口函数的原理(重点)
1.13 数据倾斜
1.13.1 数据倾斜表现
1.13.2 数据倾斜产生原因
1.13.3 解决数据倾斜思路
1.13.4 定位导致数据倾斜代码
1.13.4.1 某个task执行特别慢的情况
1.13.4.2 某个task莫名其妙内存溢出的情况
1.13.5 查看导致数据倾斜的key分布情况
1.13.6 Spark 数据倾斜的解决方案
1.13.6.1 使用Hive ETL预处理数据
1.13.6.1.1 适用场景
1.13.6.1.2 实现思路
1.13.6.1.3 方案实现原理
1.13.6.1.4 方案优缺点
1.13.6.1.5 方案实践经验
1.13.6.1.6 项目实践经验
1.13.6.2 过滤少数导致倾斜的key
1.13.6.2.1 方案适用场景
1.13.6.2.2 方案实现思路
1.13.6.2.3 方案实现原理
1.13.6.2.4 方案优缺点
1.13.6.2.5 方案实践经验
1.13.6.3 提高shuffle操作的并行度
1.13.6.3.1 方案适用场景
1.13.6.3.2 方案实现思路
1.13.6.3.3 方案实现原理
1.13.6.3.4 方案优缺点
1.13.6.3.5 方案实践经验
1.13.6.4 两阶段聚合(局部聚合+全局聚合)
1.13.6.4.1 方案适用场景
1.13.6.4.2 方案实现思路
1.13.6.4.3 方案实现原理
1.13.6.4.4 方案优缺点
1.13.6.5 将reduce join转为map join
1.13.6.5.1 方案适用场景
1.13.6.5.2 方案实现思路
1.13.6.5.3 方案实现原理
1.13.6.5.4 方案优缺点
1.13.6.6 采样倾斜key并分拆join操作
1.13.6.6.1 方案适用场景
1.13.6.6.2 方案实现思路
1.13.6.6.3 方案实现原理
1.13.6.6.4 方案优缺点
1.13.6.7 使用随机前缀和扩容RDD进行join
1.13.6.7.1 方案适用场景
1.13.6.7.2 方案实现思路
1.13.6.7.3 方案实现原理
1.13.6.7.4 方案优缺点
1.13.6.7.5 方案实践经验
1.13.6.8 多种方案组合使用
1.13.7 Spark数据倾斜处理小结
1.14 Flink
1.14.1 简单介绍一下 Flink
1.14.2Flink跟Spark Streaming的区别
1.14.3 Flink集群有哪些角色?各自有什么作用?
1.14.4 公司怎么提交的实时任务,有多少Job Manager?
1.14.5 Flink的并行度了解吗?Flink的并行度设置是怎样的?
1.14.6 Flink的Checkpoint 存在哪里
1.14.7 Flink的三种时间语义
1.14.8 说说Flink中的窗口
1.14.9 Exactly-Once的保证
1.14.10 说一下Flink状态机制
1.14.11 Flink 中的Watermark机制
1.14.12 Flink分布式快照的原理是什么
1.14.13 介绍一下Flink的CEP机制
1.14.14 Flink CEP 编程中当状态没有到达的时候会将数据保存在哪里?
第2章 项目架构
2.1 提高自信
2.2 数仓概念
2.3 系统数据流程设计
2.4 框架版本选型
2.5 服务器选型
2.6 集群规模
2.7 人员配置参考
2.7.1 整体架构
2.7.2 你们部门的职级等级,晋升规则
2.7.3 人员配置参考
第3章 数仓分层
3.1 数据仓库建模(绝对重点)
3.1.1 建模工具是什么?
3.1.2 ODS层
3.1.3 DWD层
3.1.4 DWS层
3.1.5 DWT层
3.1.6 ADS层
3.2 ODS层做了哪些事?
3.3 DWD层做了哪些事?
3.3.1 数据清洗
3.3.2 清洗的手段
3.3.3 清洗掉多少数据算合理
3.3.4 脱敏
3.3.5 维度退化
3.3.6 压缩LZO
3.3.7 列式存储parquet
3.4 DWS层做了哪些事?
3.4.1 DWS层有3-5张宽表(处理100-200个指标 70%以上的需求)
3.4.2 哪个宽表最宽?大概有多少个字段?
3.4.3 具体用户行为宽表字段名称
3.5 ADS层分析过哪些指标
3.5.1 分析过的指标(一分钟至少说出30个指标)
3.5.2 留转G复活指标
3.5.3 哪个商品卖的好?
3.6 ADS层手写指标
3.6.1 如何分析用户活跃?
3.6.2 如何分析用户新增?vivo
3.6.3 如何分析用户1天留存?
3.6.4 如何分析沉默用户?
3.6.5 如何分析本周回流用户?
3.6.6 如何分析流失用户?
3.6.7 如何分析最近连续3周活跃用户数?
3.6.8 如何分析最近七天内连续三天活跃用户数?
3.7 分析过最难的指标
3.7.1 最近连续3周活跃用户
3.7.2 最近7天连续3天活跃用户数
3.7.3 运费分摊
3.7.4 城市备注
第4章 生产经验—业务
4.1 电商常识
4.1.1 SKU和SPU
4.1.2 订单表跟订单详情表区别?
4.2 埋点行为数据基本格式(基本字段)
4.2.1 页面
4.2.2 事件
4.2.3 曝光
4.2.4 启动
4.2.5 错误
4.2.6 埋点数据日志格式
4.3 电商业务流程
4.4 维度表和事实表(重点)
4.4.1 维度表
4.4.2 事实表
4.5 同步策略(重点)
4.6 关系型数据库范式理论
4.7 数据模型
4.8 拉链表(重点)
4.9 即席查询数据仓库
4.10 数据仓库每天跑多少张表,大概什么时候运行,运行多久?
4.11 活动的话,数据量会增加多少?怎么解决?
4.12 并发峰值多少?大概哪个时间点?
4.13 数仓中使用的哪种文件存储格式
4.14 哪张表最费时间,有没有优化
4.14 哪张表数据量最大,是多少
4.15 用什么工具做权限管理
4.16 数仓当中数据多久删除一次
第5章 生产经验--测试上线相关
5.1 测试相关
5.1.1 公司有多少台测试服务器?
5.1.2 测试环境什么样?
5.1.3 测试数据哪来的?
5.1.4 如何保证写的sql正确性
5.1.5 测试之后如何上线?
5.2 项目实际工作流程
5.3 项目中实现一个需求大概多长时间
5.4 项目在3年内迭代次数,每一个项目具体是如何迭代的。公司版本迭代多久一次,迭代到哪个版本
5.5 项目开发中每天做什么事
5.6 实时项目数据计算
5.6.1 跑实时任务,怎么分配内存和CPU资源
5.6.2 跑实时任务,每天数据量多少?
第6章 生产经验—技术
6.1 可视化报表工具
6.2 集群监控工具
6.3 项目中遇到的问题怎么解决的(重点*****)
6.4 Linux+Shell+Hadoop+ZK+Flume+kafka+Hive+Sqoop+A
第7章 生产经验—热点问题
7.1 元数据管理(Atlas血缘系统)
7.2 数据质量监控(Griffin)
7.2.1 监控原则
7.2.2 数据质量实现
7.3 权限管理(Ranger)
7.4 数据治理
7.5 数据中台
7.5.1 什么是中台?
7.5.2 传统项目痛点
7.5.3 各家中台
7.5.4 中台具体划分
7.5.5 中台使用场景
7.6 数据湖
7.7 埋点
7.8 电商运营经验
7.8.1 电商8类基本指标
7.8.2 直播指标
第8章 手写代码
8.1 基本算法
8.1.1 冒泡排序
8.1.2 二分查找
8.1.3 快排
8.1.4 归并
8.1.5 二叉树之Scala实现
8.2 开发代码
8.2.1 手写Spark-WordCount
8.3 手写HQL
8.3.1 手写HQL 第1题
8.3.2 手写HQL 第2题
8.3.3 手写HQL 第3题
8.3.4 手写HQL 第4题
8.3.5 手写HQL 第5题
8.3.6 手写HQL 第6题
8.3.7 手写HQL 第7题
8.3.8 手写SQL 第8题
8.3.9 手写HQL 第9题
8.3.10 手写HQL 第10题
8.3.11 手写HQL 第11题
第9章 JavaSE
9.1 HashMap底层源码,数据结构
9.2 Java自带哪几种线程池?
9.3 HashMap和HashTable区别
9.4 TreeSet和HashSet区别
9.5 String buffer和String build区别
9.6 Final、Finally、Finalize
9.7 ==和Equals区别
第10章 Redis
10.1 缓存穿透、缓存雪崩、缓存击穿
10.2 哨兵模式
10.3 数据类型
10.4 持久化
11.5 悲观锁
11.6 乐观锁
第11章 MySql
11.1 MyISAM与InnoDB的区别
11.2 索引优化
11.3 b-tree和b+tree的区别
11.4 redis是单线程的,为什么那么快
11.5 MySQL的事务
第12章 JVM
12.1 JVM内存分哪几个区,每个区的作用是什么?
12.2 Java类加载过程?
12.3 java中垃圾收集的方法有哪些?
12.4 如何判断一个对象是否存活?(或者GC对象的判定方法)
12.5 什么是类加载器,类加载器有哪些?
12.6 简述Java内存分配与回收策略以及Minor GC和Major GC(full GC)
第13章 JUC
13.1 Synchronized与Lock的区别
13.2 Runnable和Callable的区别
13.3 什么是分布式锁
13.4 什么是分布式事务
第14章 面试说明
14.1 面试过程最关键的是什么?
14.2 面试时该怎么说?
14.3 面试技巧
14.3.1 六个常见问题
14.3.2 两个注意事项
14.3.3 自我介绍(控制在4分半以内,不超过5分钟)
第15章 LeetCode题目精选
15.1 两数之和
15.1.1 问题描述
15.1.2 参考答案
15.2 爬楼梯
15.2.1 问题描述
15.2.2 参考答案
15.3 翻转二叉树
15.3.1 问题描述
15.3.2 参考答案
15.4 反转链表
15.4.1 问题描述
15.4.2 参考答案
15.5 LRU缓存机制
15.5.1 问题描述
15.5.2 参考答案
15.6 最长回文子串
15.6.1 问题描述
15.6.2 参考答案
15.7 有效的括号
15.7.1 问题描述
15.7.2 参考答案
15.8 数组中的第K个最大元素
15.8.1 问题描述
15.8.2 参考答案
15.9 实现 Trie (前缀树)
15.9.1 问题描述
15.9.2 参考答案
15.10 编辑距离
15.10.1 问题描述
15.10.2 参考答案