|
1 | 1 |
|
2 | 2 | **1. 什么是数据仓库?** |
| 3 | + |
3 | 4 | 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,数据库主要用于**事务处理**,数据仓库主要用于**数据分析**; |
4 | 5 |
|
5 | 6 | 数据库的特点: |
|
11 | 12 | 2. 一般是只读优化 |
12 | 13 |
|
13 | 14 | **2. 什么是知识图谱,简单介绍一下苏格拉底?** |
| 15 | + |
14 | 16 | 知识图谱: |
15 | 17 | 1. 知识图谱是一种语义网络,是对语义知识的一种形式化描述,节点代表实体,边代表实体之间的关系; |
16 | 18 | 2. 知识图谱以一种可视化的方式展示「知识」; |
|
22 | 24 | 3. 苏格拉底后台使用 MongoDB 和 Mysql 数据库主要为了实现 **schema 的快速迭代**,**数据的快速迭代,配合算法做实体对齐**; |
23 | 25 |
|
24 | 26 | **3. 你是如何使用 Spark 管理日志的?** |
| 27 | + |
25 | 28 | 1. 每次对实例的更改,都会把变更记录到 mongo 数据库,形成一个变更记录的collection; |
26 | 29 | 2. 分析数据时,将 mongo 数据库中 collection 的数据使用 Spark 倒入到 Hive 表中,然后再进行分析 |
27 | 30 |
|
28 | 31 | **4. 你们公司的业务场景是什么?(针对公司的业务场景,调研市场上主流的图数据库)** |
| 32 | + |
29 | 33 | 1. 支持倒入 SPO 三元组的数据(包含 schema-free 和 schema-constrained 两类数据库) |
30 | 34 | 2. 对于 schema-free 的数据库,需要对数据库中的数据进行统计、分析、整理出可用的强 schema |
31 | 35 | 3. 图数据库需要支持实体 对齐/融合 |
|
63 | 67 | * 这里如果问到,着重讲解一个就可以了。 |
64 | 68 |
|
65 | 69 | **6. 深入调研 JanusGraph,ThinkerPop,都得到了哪些成果?(这里面试官可能问到哪些问题?)** |
| 70 | + |
66 | 71 | 1. Gremlin 语法文档总结; |
67 | 72 | 2. 不同数据库对 Gremlin 支持程度的测试; |
68 | 73 | 3. HugeGraph 不能动态支持修改 schema,有些直接报错,因此放弃了 Hu个Graph; |
69 | 74 |
|
70 | 75 | **7. 为什么要有 Spark,他相比 Hadoop 解决了什么问题?** |
| 76 | + |
71 | 77 | 1. Spark 替代的 Hadoop 生态中的 MapReduce; |
72 | 78 | 2. MapReduce 在计算时,每次 Reduce 之后都会写入磁盘文件。如果一个任务有多个 Map/Reduce 计算,就会多次读写磁盘文件,大大降低运算速度; |
73 | 79 | 3. Spark 基于内存,计算的中间结果都优先放在内存中(内存不够再考虑磁盘),因此速度比 MapReduce 快; |
|
76 | 82 | * Spark 擅长迭代式计算,交互式查询,流处理,批处理(这个 Hadoop 好像也有?); |
77 | 83 |
|
78 | 84 | **8. Spark 弹性体现在哪里?** |
| 85 | + |
79 | 86 | 1. 自动的进行内存和磁盘数据存储的切换; |
80 | 87 | 2. 基于 lineage 的高效容错(某处出错,不需要从头开始计算); |
81 | 88 | 3. Task 失败会自动进行特定次数的重试; |
82 | 89 |
|
83 | 90 | **9. Spark 什么时候进行缓存?** |
| 91 | + |
84 | 92 | 1. 特别耗时的计算之后; |
85 | 93 | 2. 计算链条已经很长,计算之后; |
86 | 94 | 3. shuffle 之后; |
87 | 95 | 4. checkpoint(checkpoint 就是把所有的数据放到磁盘中) 之前; |
88 | 96 |
|
89 | 97 | **10. 什么是 RDD,什么是 Partition?** |
| 98 | + |
90 | 99 | 1. 一个 RDD 是一个只读的,分布式的,被分区的数据集,由多个 partition 构成; |
91 | 100 | 2. RDD 不可变,可以自我恢复; |
92 | 101 | 3. 一个 partition 是一些数据的集合; |
93 | 102 |
|
94 | 103 | **12. 计算模型为什么使用 DAG ?** |
| 104 | + |
95 | 105 | 1. DAG 是有向无环图,RDD 和 关系构成 DAG,DAG 的顶点代表 RDD,边代表对 RDD 进行的操作; |
96 | 106 | 2. DAG记录 RDD 之间直接的依赖关系,当某个 RDD 出错时,可以通过依赖关系从父 RDD 恢复出错的 RDD,体现了 DAG 良好的容错性; |
97 | 107 | 3. DAG 主要解决了 MapReduce 的两个问题: |
98 | 108 | * 每个 MapReduce 操作都是相互独立的,HADOOP不知道接下来会有哪些 Map/Reduce; |
99 | 109 | * 每一步的输出结果,都会持久化到硬盘或者 HDFS 上; |
100 | 110 |
|
101 | 111 | **13. 什么是 shuffle,哪些情况会 shuffle ?** |
| 112 | + |
102 | 113 | 1. 把分布在不同节点的数据按照一定的规则汇集到一起的过程,即把数据在不同 partition 之间移动; |
103 | 114 | 2. shuffle 分为:shuffle write,shuffle read;只有产生宽依赖的时候才会 shuffle,shuffle 会写入本地磁盘文件; |
104 | 115 | 3. 下面的操作会产生 shuffle: |
|
113 | 124 |
|
114 | 125 |
|
115 | 126 | **14. Stage 的划分依据?** |
| 127 | + |
116 | 128 | 1. 根据 DAG 图,从后往前推,遇到宽依赖就断开,划分为一个stage;遇到窄依赖就将这个RDD加入该stage中; |
117 | 129 |
|
118 | 130 | **15. Spark 2.0 为什么有了 dataframe,解决了 RDD 的哪些不足?** |
| 131 | + |
119 | 132 | 1. DataFrame 有 schema,而 RDD 没有 schema; |
120 | 133 | 2. 有了 schema 之后,可以更方便,更高效的对数据进行管理,查询,分析; |
121 | 134 | 3. 有了 schema 之后才可以写 Sql 语句; |
|
134 | 147 | Spark ---> Map/Reduce |
135 | 148 |
|
136 | 149 | **17. Mongo 中的数据库级别?** |
| 150 | + |
137 | 151 | 1. 数据量在不到千万级(400/500 万量),支持直接查询;Mongo 本身提供的功能可以满足当前的需求,查询大多在毫秒级,最多不超过 2s; |
138 | 152 | 2. log 日志在不到亿级(1亿),分析数据使用的是 Spark,怎么读 Mongo 是我们组大神写的,没有深入研究; |
0 commit comments