logo资料库

招商银行信用卡中心2019秋招IT笔试大数据方向(二).docx

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
inner join left outer join right outer join full outer join cat a.txt grep str grep str a.txt cat a.txt | find str a = 2fun(a)print a a =[2]def fun(a): a.append(1)fun(a)print a 删除被从表引用的主表记录时,需修改从表的外键约束的“删除规则”为(bc) a. 不执行任何操作 b. 设置 Null c. 级联 d. 设置默认值 以下两段 python 代码输出分别为(a) a = 1def fun(a): a. 第一段:1 第二段: [2,1] b. 第一段:2 第二段: [2,1] c. 第一段:1 第二段: [1] d. 第一段:2 第二段: [2] spark 支持的 join 类型有(abcd) a. b. c. d. 以下哪个选项可以实现在文件 a.txt 中查找某字符串'str'(b) a. b. c. d. 以上都不是 OLAP 技术的核心是(d) a. 在线性 b. 对用户的快速响应 c. 互操作性 d. 多维分析 下列对数据库事务的描述错误的是(c) a. 一致性 b. 持久性 c. 独立性 d. 原子性 以下哪种说法正确(c) a. b. c. d. 对于 spark 参数 spark.ui.port,以下哪一个环境中的参数在运行时生效(c) a. b. c. d. 下列关于大数据生态体系描述错误的是(c) a. Hadoop MapReduce 只适用于批量处理数据 b. MapReduce/Spark/Flink/Storm 均支持使用 YARN 调度资源 spark-defaults.conf 配置文件中指定 spark-submit --conf spark.ui.port 提交任务时指定 sparkcontext 中采用 conf.set("spark.ui.port",''14040'')指定 spark-site.xml 中指定 vertica 底层存储基于 HDFS vertica 不同节点之间共享存储 vertica 基于列式存储 vertica 中的表可以没有 projection
5 8 10 12 Partition Job Stage TaskScheduler Flink 和 Spark 既支持批量计算,也支持流式计算,两者流式计算的本质都是微批处理 Spark Streaming 支持秒级延迟,其吞吐量优于 Storm c. d. 若 i 为整形,下述 while 循环的执行次数为:(c) i = 700while i > 1: print(i) i = i/2 a. b. c. d. Spark 中各 Stage 的 Task 数量由什么决定(a) a. b. c. d. 简述 Spark 任务提交到 yarn-cluster 上的任务运行过程。 参考答案 Spark on Yarn-Cluster 模式 1)Yarn-Cluster 第一步: Client 向 Yarn 中提交应用程序,包括 ApplicationMaster 程序、启 动 ApplicationMaster 的命令、需要在 Executor 中运行的程序等; 2)Yarn-Cluster 第二步:ResourceManager 收到请求后,在集群中选择一个 NodeManager, 为 该 应 用 程 序 分 配 第 一 个 Container , 要 求 它 在 这 个 Container 中 启 动 应 用 程 序 的 ApplicationMaster,其中 ApplicationMaster 进行 SparkContext 等的初始化; 3)Yarn-Cluster 第三步:ApplicationMaster 向 ResourceManager 注册,这样用户可以直接通 过 ResourceManage 查看应用程序的运行状态,然后它将采用轮询的方式通过 RPC 协议为 各个任务申请资源,并监控它们的运行状态直到运行结束; 4)Yarn-Cluster 第四步:一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它在获得的 Container 中启动启动 Executor,启动后会向 ApplicationMaster 中的 SparkContext 注册并申请 Task; 5)Yarn-Cluster 第五步:ApplicationMaster 中的 SparkContext 分配 Task 给 Executor 执行, Executor 运行 Task 并向 ApplicationMaster 汇报运行的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务; 6)Yarn-Cluster 第六步:应用程序运行完成后,ApplicationMaster 向 ResourceManager 申请 注销并关闭自己。 谈谈数据库优化方面的经验看法 参考答案 1) 查看 sql 语句的执行计划,内存消耗是否是否正常 2) 优化查询语句,减少 update 等低效率操作,减少多表一次性关联,减少嵌套语句等 3) 减少应用和数据库的交互次数、同一个 sql 语句的执行次数 4) 优化数据表结构,分析业务逻辑,对常用逻辑可提前计算好,减少重复查询 5) 对数据量大的表,可拆分做切片处理 在 SQL Server 中,要防止大于 100 的数被保存到 int 类型的列,可以使用(d) a. 主键约束 b. 限制约束
c. 外键约束 d. 检查约束 事实表和维度表的概念以及怎么设计? 参考答案 事实表: 每个数据仓库都包含一个或者多个事实数据表。事实数据表可能包含业务销售数据,如现金 登记事务所产生的数据,事实数据表通常包含大量的行 一般事实表中只存放数字或者一些 Flag 用来统计(Count),如收益、数量、支出等 维度表(Dimension Table): 维度表可以看作是用户来分析数据的窗口,维度表中包含事实数据表中事实记录的特性,有 些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的 信息,维度表包含帮助汇总数据的特性的层次结构。 事实表的设计是以能够正确记录历史信息为准则,维度表的设计是以能够以合适的角度来聚 合主题内容为准则。 (注释:一个人只能在 1 个小组,一个人可参与多个项目) 1)统计各员工的绩效信息:员工编号 XM1 成绩 XM1 小组排名 XM2 成绩 XM2 小组排 名 2)统计各组完成时间在 2018 年第二季度各项目平均成绩达标(>80 分)人数:组号 XM1 达标 人数 XM2 达标人数 参考答案 1)方法一: SELECT 员 工 编 号 , MAX( CASE WHEN 项 目 = 'XM1' THEN 成 绩 END )AS XM1 成 绩, MAX( CASE WHEN 项目 = 'XM1' THEN seq END) AS XM1 小组排名, MAX(CASE WHEN 项目 = 'XM2' THEN 成绩 END) AS XM2 成绩, MAX(CASE WHEN 项目 = 'XM2' THEN seq END) AS XM2 小组排名 FROM ( SELECT * ,ROW_NUMBER() OVER(PARTITION BY 项目,组别 ORDER BY 成绩 DESC) AS SEQ FROM A ) B GROUP BY 员工编号; 方法二:使用 pivot 函数
2) SELECT 组别, CASE WHEN 项目 = 'XM1' THEN 人数 END AS XM1 达标人数, CASE WHEN 项目 = 'XM2' THEN 人数 END AS XM2 达标人数 FROM ( SELECT 组别,COUNT(1) AS 人数, 项目 FROM A WHERE DATE(完成时间) BETWEEN '2018-04-01' AND '2018-06-30' AND 成绩 > 80 GROUP BY 组别,项目 )B; ----w--w- -w--w---- r-xr-x--- rw-r--r- l1[0] = 4 l1[2:-2] l1*2 set(l1) float(‘inf’) – 1 > 0 float(‘inf’) < float(‘inf’) + 1 sum(range(1, 10, 2)) == 30 sum(range(5)) == 15 下列表达式正确的是(a) a. b. c. d. 如果你的 umask 设置为 022,缺省的你创建的文件的权限为(d) a. b. c. d. 对于元组 l1 = (1, 2, 3, 4, 5, 6, 7, 8, 9),下列哪些操作是正确的? (bcd) a. b. c. d. ETL 过程包含哪些(abd) a. 抽取 b. 装载 c. 整理 d. 转换 下列哪些不是 HADOOP 项目的组件(d) a. HDFS b. YARN c. MapReduce d. Hive hive 表关联查询,什么情况下会发生数据倾斜,应该如何解决? 参考答案 倾斜原因: map 输出数据按 key Hash 的分配到 reduce 中,由于 key 分布不均匀、业务数 据本身的特性、建表时考虑不周等原因造成的 reduce 上的数据量差异过大。 解决方案: (1)参数调节:
hive.groupby.skewindata=true 有数据倾斜的时候进行负载均 hive.map.aggr = true 衡,当选项设定位 true,生成的查询计划会有两个 MR Job。 第一个 MR Job 中,Map 的 输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样 处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的 目的; 第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中 (这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚 合操作。 (2)SQL 语句调节: 1)选用 join key 分布最均匀的表作为驱动表。做好列裁剪和 filter 操作,以达到两表做 join 的 时候,数据量相对变小的效果。 2)大小表 Join: map 端完成 reduce. 3)大表 Join 大表: 把空值的 key 变成一个字符串加上随机数,把倾斜的数据分到不同的 reduce 上,由于 null 值关联不上,处理后并不影响最终结果。 4)count distinct 大量相同特殊值: count distinct 时,将值为空的情况单独处理,如果是计 算 count distinct,可以不用处理,直接过滤,在最后结果中加 1。如果还有其他计算,需要 进行 group by,可以先将值为空的记录单独处理,再和其他计算结果进行 union。 使用 map join 让小的维度表(1000 条以下的记录条数)先进内存。在 Impala 查询速度快,但不适合进行大规模数据的查询 Impala 的 SQl 语法与 Hive 一致 Impala 与 Hive 使用相同的 ODBC 驱动和 JDBC 驱动 下列哪句话的描述正确(c) 1. 2. 在多用户同时进行查询的情况下,Impala 的查询性能急剧恶化 3. 4. Apache Impala 具有以下哪些特性(acd) 1. 类 SQL 查询 2. ACID 3. 可扩展性 4. 支持 UDF 函数 简述 python 是如何进行内存管理的。 参考答案 从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 ①对象的引用计数机制 Python 内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。 多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器 会在程序的不同部分共享内存,以便节约内存。 ②垃圾回收 当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。 当两个对象 a 和 b 相互引用时,del 语句可以减少 a 和 b 的引用计数,并销毁用于引用底层 对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对 象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器, 搜索不可访问对象的循环并删除它们。 ③内存池机制 Python 提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作 系统。
Pymalloc 机制。为了加速 Python 的执行效率,Python 引入了一个内存池机制,用于管理对 小块内存的申请和释放。 Python 中所有小于 256 个字节的对象都使用 pymalloc 实现的分配器,而大的对象则使用系 统的 malloc。 对于 Python 对象,如整数,浮点数和 List,都有其独立的私有内存池,对象间不共享他们 的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分 配给浮点数。 Kettle Sqoop tableau 下列哪个不属于 ETL 工具(d) a. Datastage b. c. d. 下面哪个项目是 Hadoop 的接口定义语言(c) a. Oozie b. Mahout c. d. Thrift Impala
分享到:
收藏