近期准备面试时关注的题目笔记.
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
3.表JOIN时候,底层有哪几种连接类型?
Answer
4.项目中对Hadoop和Hive了解?对离线数仓和数据集成ETL的了解?
Answer
5.数据存储格式有哪些?
Answer
6.离线数仓分层怎么分的?- done
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工具进行数据分析和展示,高度聚合,面向业务,定制化聚合 |
7.用过哪些任务调度工具?shell调度脚本怎么设计怎么维护?-done
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管理 |
用户自定义管理 |
9.使用Kettle集成数据时候,流程是什么,详细描述每一步?-done
Answer
| 启动Spoon -> 添加Data Source(配置连接参数/查询语句/path) |
| -> 转换条件(选择所需字段、过滤条件、合并等操作) -> 添加Target Table作为数据目标 |
| |
| 慢查询调试 |
| - 添加断点:在包含 SQL 查询的步骤前添加断点,右键点击步骤,选择“调试”>“在此处设置断点” |
| - 运行转换,转换会在断点处暂停 |
| - log中该步执行时间及详细信息,分析组件性能 |
10.数据通过网络传输时,怎么尽量提高传输速度?常用的对文件的压缩算法有哪些?如何选择压缩算法(区别)?
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,压缩和解压速度较慢,压缩率较高,用于需要更高压缩率但对速度要求不高的场景,如备份; |
| - |
11.有三个很大的文件副本,分布在不同数据节点上,现在要做JOIN操作,在数据存储中可以采用哪种压缩算法合适?
Answer
12.介绍一下刚刚你回答的LZ4压缩算法的特点和使用?
Answer
13.离线数据包可以选用哪种压缩算法?为什么?
Answer
14.**两张大表JOIN时候,出现了数据倾斜,怎么解决?**
Answer
15.a表和b表,都很大,a表有id,value两个字段,b表id,value,a表id范围为1-5,其中id字段值为1的占了表99%,b表id值为1的占了80%,这样JOIN会出现数据倾斜,怎么处理?
Answer
16.用过哪些Hive数据倾斜调优参数?-done
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操作涉及的小表时,可以显著提高性能. |
17.HDFS文件太多了,占用了计算资源,影响服务器性能,在Hive中可以通过参数怎么处理?--done
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; |
18.Spark的使用和技术原理?介绍一下RDD有哪些?DAG调度原理?
Answer
19.Spark中的转化算子,举几个例子说
Answer
20.Spark的使用场景有哪些?
Answer
21.在ETL过程中,数据通过ADF增量导入到云端,数据通过主键更新,有哪些策略保证数据质量?
Answer
22.Hive中如何把一张用户表做成拉链表?具体实现的细节?
Answer
23.HiveSQL:一张有user_id,date两个列的表,求出连续登录7天的用户数?
Answer
24.Shell:要根据日期变量去定期扫描/log这个目录下的文件夹,看是否有app_log这个文件,每隔两小时去检查这个文件,如果生成的话就扫描第一行,并判断第一行是否包含ERROR,如果不包含就输出success,每隔2小时扫描一次,扫描不到就sleep 2小时
Answer
25.如果数据链路出现了异常,如何定位下游需要修改调整的表?
Answer
26.说说数仓分层设计的优点有哪些?
Answer
27.HiveSQL:一张包含了user_id和支付时间paytime的订单表,算出36小时时长内下单数 >= 2的user_id?
Answer
28.<偏向数据治理>某APP本月月活环比下降20%,请分析因素?
Answer
29.用过阿里云ODPS调度工具吗,说说使用上遇到过的困难以及怎么解决的?
Answer
30.Spark的SORT BY底层是怎么实现的?
Answer
31.Spark中的SORT BY为什么不会出现数据倾斜?
Answer
32.Hadoop任务从启动到结束的过程,详细描述一下?
Answer
33.HiveSQL: 一张包含了某个商品的价格price,日期daily的价格变动表,计算30天的价格滑动平均值?
Answer
34.HiveSQL<优化>:一张包含了转出人、收款人、转账金额的表,计算收款人的收款总金额并排序,这个表很大,怎么优化让计算速度更快?
点击查看代码
| SELECT |
| receiver, |
| SUM(amount) AS total_received_amount |
| FROM ( |
| SELECT |
| receiver, |
| amount |
| FROM transfers |
| |
| |
| ) t |
| GROUP BY receiver |
| ORDER BY total_received_amount DESC; |
| |
35.HiveSQL:一张以id为主键,包含num字段的表,找出所有至少连续出现3次的num数值?
Answer
36.待补充
Part2.Expand Questions
1.配置多个计算节点的意义?-done
Answer
| 适用于分布式存储和内容分发网络场景 |
| 1.数据分片避免单一节点计算瓶颈,同时多节点并行计算,并行传输提升速度,提高系统整体数据吞吐量. |
| 2.分担负载达到负载均衡,同时某节点不可用等故障状态时,其他节点可以继续计算,提高系统可靠性和稳定性. |
| 3.CDN内容分发网络中。可以缓存至多个地理区域节点上。通过选择离客户端最近的节点传输。可减少延迟提升速度. |
2.对范式建模和维度建模的了解?-done
Answer
| 1.范式建模:一般是遵循第三范式或者更高范式,通过拆分表结构,避免数据重复存储,因为就一份数据所以可以确保数据一致性和完整性,也节省了存储空间,但因为需要大量表连接才能获取所需数据,因此查询复杂度较高,查询性能较低.适用于银行、ERP这种更新写入频繁的高并发OLTP(Online Transaction Processing)系统. |
| |
| 2.维度建模:由事实表和维度表组成的面向数仓和OLAP(Online Analytical Processing)在线分析处理系统的数据建模,查询性能好、快. |
| - 星型模型:维度表为扁平结构,通过与事实表外键相连构成星型结构. |
| - 雪花模型: 维度表有多级层次结构,例如某个时间维度被进一步分解为多个子维度表,形成层次结构 |
| - 比较:星型查询性能好,但有冗余,雪花查询性能差一些,但节省空间;有时候可以两种模型结合构建混合模式. |
3.需要复习shell常用调度文件指令,要实现某些实际功能
Answer
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)