近期面试笔记
近期准备面试时关注的题目笔记.
Part1.面试题
1.主流关系型数据库有哪些?-done
Answer
1.Oracle
2.MS SQL Server
3.IBM Db2
4.MySQL(开源)
5.PostgreSQL(开源)
6.MariaDB(开源 是MySQL的一个分支)
7.SQLite(嵌入式数据库 轻量 无需服务器管理)
8.SAP HANA(SAP开发的内存数据库 支持实时数据处理分析场景)
1.2.主流非关系型数据库有哪些?-done
Answer
文档型数据库
1.MongoDB
- 文档型数据库,使用JSON格式存储数据,模式设计很灵活
2.CouchDB
- Apache弄的 用JSON进行数据存储 支持MapReduce查询和多版本并发控制
键值存储数据库
1.Redis
- 内存中的键值存储数据库,支持多种数据结构(如字符串、哈希、列表、集合等),非常适合需要快速读写操作的应用.
2.Riak
- 分布式键值存储数据库,提供高可用性和容错性,适用于大规模分布式系统.
列族存储数据库
1.Apache Cassandra
- 高可用性和可扩展性的列族存储数据库,最初由 Facebook 开发,现在由 Apache 软件基金会维护,广泛应用于需要高吞吐量的应用场景.
2.HBase
- Apache开发的,运行在Hadoop分布式文件系统HDFS上,适用于大规模数据存储和处理.
图数据库
1.Neo4j
- 领先的图数据库,支持 ACID 事务处理,适用于社交网络、推荐系统等涉及复杂关系的数据模型.
多模型数据库
1.Couchbase
- 结合了文档数据库和键值存储数据库的特性,支持实时操作和大规模分布式架构.
时间序列数据库
1.TimescaleDB
- 基于 PostgreSQL 构建的时间序列数据库,提供 SQL 接口和时间序列扩展.
2.SQL的性能怎么优化?
Answer
Answer
Answer
Answer
Answer
1.ODS层(Operation Data Store):操作数据层,初步清洗存储的暂存数据
2.DWD层(Data Warehouse Detail):数据明细层,对ODS层数据进行清洗和转化,存储得到粒度较细,结构化和规范化的业务明细数据
3.DWS层(Data Warehouse Summary):数据汇总层,对DWD层数据聚合和汇总,生成主题性的宽表<br>
- DIM(Dimension):维度层,存储维度数据(date,product_id,category,price)
- FACT:事实层,存储业务事件/交易的详细数据,包含大量度量数据以及与度量相关的外键(用于连接到维度表)
4.DWT层(Data Warehouse Transformation):数据转换层,通过ETL将不同源的数据半规范化,标准化处理,保留一些细节,也提供一定程度的聚合数据
5.ADS层(Application Data Store):数据应用层,提供给业务部门orBI工具进行数据分析和展示,高度聚合,面向业务,定制化聚合
Answer
1.Apache Airflow(Linux环境)
2.Apache OOzie(专为 Hadoop 集群设计的工作流调度系统,适合大数据处理任务)
3.Windows Task Scheduler(win系统自带任务计划程序)
4.shell设计和维护:
设计:
>1. 明确输入输出频率时间
>2.shell脚本主体及其可执行权限配置、log打印、错误捕获和错误处理(例如set & trap)
eg:
#!/bin/bash
set -e
trap 'echo "An error occurred. Exiting..."; exit 1;' ERR
>3.使用调度平台配置时间&频率
>4.维护:
1)定期检查执行情况&日志,根据实际需求,配合调度算法调整调度频率&脚本,提升性能&可靠性.
2) 使用监控工具(ADF平台自有Trigger Monitor组件/集成组件Zabbix监控/Grafana平台),设置警告机制(define contact/报警媒介).
3) 使用Git/SVN等版本控制系统,便于回滚和协作维护.
4) 文档管理,详细描述任务目的、执行频率、输入&输出、依赖关系.
8.Hive中的内部表和外部表,使用场景?-done
Answer
两种不同的表类型
1.内部表(Managed Table):走的普通建表流程,加载数据通过
LOAD DATA INPATH 'hdfs_path_to_data_file' INTO TABLE internal_table;
删除内部表时,hive会自动删除表的数据和元数据
2.外部表(External Table):走的特殊建表流程,
CREATE EXTERNAL TABLE external_table (
id INT,
name STRING,
age INT
)
LOCATION 'hdfs_path_to_data_directory';
删除外部表时,hive只删除表的元数据,而不会删除数据文件
| 特性 | 内部表(Managed Table) | 外部表(External Table) |
|---|---|---|
| 数据存储 | 存储在Hive仓库目录中 | 存储在指定的HDFS路径中 |
| 数据生命周期管理 | Hive负责管理,删除表时数据也会被删除 | 用户负责管理,删除表时数据不会被删除 |
| 数据加载 | 使用LOAD DATA命令 |
直接将数据放置在指定路径中 |
| 适用场景 | 开发和测试环境、临时数据存储 | 数据共享、已有数据、持久化数据、数据迁移 |
| 管理方式 | 完全由Hive管理 | 用户自定义管理 |
Answer
启动Spoon -> 添加Data Source(配置连接参数/查询语句/path)
-> 转换条件(选择所需字段、过滤条件、合并等操作) -> 添加Target Table作为数据目标
慢查询调试
- 添加断点:在包含 SQL 查询的步骤前添加断点,右键点击步骤,选择“调试”>“在此处设置断点”
- 运行转换,转换会在断点处暂停
- log中该步执行时间及详细信息,分析组件性能
Answer
1.提高传输速度:
1)使用高效压缩算法(Gzip,Bzip2,LZ4等);
2)使用多线程传输工具,配置多个数据节点,并行传输;
3)配置高效的传输协议(HTTP/2,HTTP/3,QUIC等);
4)增加带宽,升级硬件;
5)内容分发网络,减少物理距离.
2.常用文件压缩算法
- LZ4:适合实时应用。压缩和解压速度都很快,压缩率适中,适用于对速度要求较高的场景,如实时日志压缩和数据流压缩.
- Gzip:基于DEFLATE算法,压缩和解压速度快,压缩率较高.
- Bzip2: 基于Burrows-Wheeler变换和Run-Length Encoding,压缩和解压速度较慢,压缩率较高,用于需要更高压缩率但对速度要求不高的场景,如备份;
-
Answer
Answer
Answer
Answer
Answer
Answer
1.hive.groupby.skewindata
- 开启数据倾斜处理机制
- 默认值: false
- 对于可能出现数据倾斜的GROUP BY查询,建议将其设置为true。当数据倾斜检测到时,会自动将数据划分为两个阶段处理.
2.hive.skewjoin.key
- 设置一个阈值,当某个key出现的次数超过该值时,将启用skew join处理.
- 默认值: 100000
- 根据实际数据情况调整,如果某些key的出现频率明显高于其他key,可以适当降低该值.
3.hive.skewjoin.mapjoin.map.tasks
- 指定处理skew join的map任务数.
- 默认值: 10000
- 根据集群的资源情况进行调整,以充分利用计算资源.
4.hive.optimize.skewjoin.compiletime
- 在编译阶段优化skew join.
- 默认值: true
- 保持默认值,以便在编译阶段提前处理数据倾斜问题.
5.hive.map.aggr
- 在Map端进行部分聚合.
- 默认值: true
- 对于GROUP BY查询,建议设置为true,以减少数据传输量.
6.hive.groupby.mapaggr.checkinterval
- 在Map端进行部分聚合时检查内存的时间间隔.
- 默认值:100000.
- 根据集群的内存情况进行调整,以防止内存溢出.
7.hive.exec.reducers.bytes.per.reducer
- 每个Reducer处理的字节数
- 默认值:256MB
- 根据数据量和集群资源情况调整,以平衡Reducer的负载.
8.hive.exec.reducers.max
- Reducer的最大数量
- 默认值:1009
- 根据实际情况调整,以控制作业的并发度.
9.hive.auto.convert.join
- 自动将普通JOIN转换为MapJoin(适用于小表)
- 默认值: tue
- 保持默认值,尤其是当JOIN操作涉及的小表时,可以显著提高性能.
Answer
1.hive.merge.mapfiles
- 在MapReduce作业完成后,是否合并输出文件。这个参数控制Map任务的输出文件合并
- 默认值:false
- 将其设置为true来启用文件合并.
- SET hive.merge.mapfiles = true;
2.hive.merge.mapredfiles
- 在MapReduce作业完成后,是否合并Reduce任务的输出文件.
- 默认值:false
- 将其设置为true来启用文件合并.
- SET hive.merge.mapredfiles = true;
3.hive.merge.size.per.task
- 每个合并任务的目标文件大小(以字节为单位)
- 默认值:256MB
- 可以根据需要调整合并后的文件大小
- SET hive.merge.size.per.task = 268435456; -- 256MB
4.hive.merge.smallfiles.avgsize
- 控制是否对这些小文件进行合并,从而减少小文件的数量,提升系统性能.
- 默认值:16MB
- 可以根据需要调整目标平均大小
- SET hive.merge.smallfiles.avgsize = 33554432; -- 32MB
5.hive.input.format
- 设置输入文件格式,org.apache.hadoop.hive.ql.io.CombineHiveInputFormat有助于将小文件合并为较大的输入块.
- 默认值:org.apache.hadoop.hive.ql.io.HiveInputFormat
- 将其设置为org.apache.hadoop.hive.ql.io.CombineHiveInputFormat来启用合并.
- SET hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
Answer
Answer
Answer
Answer
Answer
Answer
Answer
Answer
Answer
1.
2.
Answer
Answer
Answer
Answer
Answer
Answer
Answer
点击查看代码
SELECT
receiver,
SUM(amount) AS total_received_amount
FROM (
SELECT
receiver,
amount
FROM transfers
-- 可以使用哈希函数或随机前缀来分散数据
-- WHERE HASH(receiver) % n = m -- n为分区数,m为具体分区
) t
GROUP BY receiver
ORDER BY total_received_amount DESC;
Answer
36.待补充
Part2.Expand Questions
1.配置多个计算节点的意义?-done
Answer
适用于分布式存储和内容分发网络场景
1.数据分片避免单一节点计算瓶颈,同时多节点并行计算,并行传输提升速度,提高系统整体数据吞吐量.
2.分担负载达到负载均衡,同时某节点不可用等故障状态时,其他节点可以继续计算,提高系统可靠性和稳定性.
3.CDN内容分发网络中。可以缓存至多个地理区域节点上。通过选择离客户端最近的节点传输。可减少延迟提升速度.
Answer
1.范式建模:一般是遵循第三范式或者更高范式,通过拆分表结构,避免数据重复存储,因为就一份数据所以可以确保数据一致性和完整性,也节省了存储空间,但因为需要大量表连接才能获取所需数据,因此查询复杂度较高,查询性能较低.适用于银行、ERP这种更新写入频繁的高并发OLTP(Online Transaction Processing)系统.
2.维度建模:由事实表和维度表组成的面向数仓和OLAP(Online Analytical Processing)在线分析处理系统的数据建模,查询性能好、快.
- 星型模型:维度表为扁平结构,通过与事实表外键相连构成星型结构.
- 雪花模型: 维度表有多级层次结构,例如某个时间维度被进一步分解为多个子维度表,形成层次结构
- 比较:星型查询性能好,但有冗余,雪花查询性能差一些,但节省空间;有时候可以两种模型结合构建混合模式.
3.需要复习shell常用调度文件指令,要实现某些实际功能
Answer

浙公网安备 33010602011771号