招商银行信用卡中心2019秋招IT笔试(大数据方向第一批)

1.关于数据完整性的说法正确的是

实体完整性要求每个实体都必须有一个主键或其他的唯一标识列

2.Python如何定义一个函数

def<name>(arg1,arg2,...argN)

3.有关数据仓库的开发特点,不正确的描述是

数据仓库开发要从数据出发

(数据仓库使用的需求在开发出去就要明确、数据仓库的开发是一个不断循环的过程,是启发式的开发、在数据仓库环境中,并不存在操作型环境中所固定的和较确切的处理流,数据仓库中数据分析和处理更灵活,且没有固定的模式)

4.桶排序和快速排序在最好的情况下的时间复杂度分别为

O(n),O(nlgn)

5.数据库系统中采用封锁技术的目的是为了保证

数据的一致性

6.python代码如下:

a = [i for i in range(0,10) if i%2 == 0] 

b = (i for i in range(0,10) if i%2 == 0)

则以下说法正确的是

b值为[0, 2, 4, 6, 8]

7.以下关于ETL的说法错误的是

ETL过程中的主要环节是数据抽取、数据转换和加工、数据流转

(增量数据抽取过程中,提取增量数据的方法有通过时间戳、建立触发器、全表比对、日志比对等。常用ETL工具包括datastage,微软DTS,Informatica等。数据清洗需要对维表中的重复数据进行处理)

8.关于Hive 中的压缩格式 RCFile、TextFile、SequenceFile说法错误的是

相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较小,且具有较好的压缩比和查询响应

(TextFile是Hive默认格式,不作压缩,磁盘及网络开销较大。可以结合Gzip, Bzip2使用,但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作、SequenceFile 是Hadoop API提供支持的一种二进制文件,具有使用方便,可分割,可压缩的特点,支持三种压缩选择:NONE, RECORD, BLOCK。RECORD压缩率低,一般建议使用BLOCK压缩、RCFILE是一种行列存储相结合的的存储方式。首先,将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩。)

9.关于python中的复数,下列说法错误的是?

实部和虚部都是浮点数

10.下面有关HIVE描述错误的是

parquet是行式存储,orc是列式存储

(Hive的集合数据类型有map,struct,array这三种、hive.mapred.mode=strict表示所有查询语句都必须指定分区、hive.auto.convert.join为mapjoin开关)

11.spark不支持 c++

12.下列哪个组件不能使用Hadoop YARN进行资源管理  Tez

13.启用Hadoop2版本的Namenode高可用之后,哪些组件不再使用  DataNoe

14.以下关于Flume,说法错误的是

Channel中filechannel可将数据持久化到本地磁盘,但配置较为麻烦,需要配置数据目录和checkpoint目录,不同的file channel可以配置同一个checkpoint目录

15.在bash中,export命令的作用是

为其它应用程序设置环境变量

16.Python中定义函数时的参数为  形参

17.下列哪些函数是开窗函数 

row_number()、rank()、over()

18.给你两张表,表A和表B,其中表A有3行数据,表B有5行数据,表A left join 表B后,以下说法正确的是

大于3,小于5,大于5

19.关于子查询以下哪两种说法是正确的?

先执行子查询,再执行外层查询
外层查询返回的每行结果都与内层查询结果进行比较

20.关于python变量,下列说法正确的是

变量无须指定类型、可以使用del关键字释放变量

21.以下Python数据类型中,不可以通过索引访问的是

集合、字典

22.谈谈数据集市、数据仓库的区别和联系

1) 数据仓库是企业级的,能为整个企业各个部门的运行提供决策支持手段;

数据集市则是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据,因此是部门级的,一般只能为某个局部范围内的管理人员服务,因此也称之为部门级数据仓库。

(2) 数据仓库向各个数据集市提供数据

(3) 几个部门的数据集市组成一个数据仓库

(4) 通常仓库中数据粒度比集市的粒度要细

作为一个包含多个业务部门,且有大量应用系统的企业,应该如何去设计搭建数据集市。

开放性题目,可以按照部门划分集市,也可以按照应用系统划分集市等等

23.

现有学生分数统计表pub_f_class_score如下:

std_nm(学生姓名)    class(班级)         score(分数)        insert_dt(更新时间)

nm1                          cls1                    98                      2018-08-22

nm2                          cls2                    97                      2018-08-22

nm3                          cls1                    97                      2018-08-22

nm4                          cls1                    95                      2018-08-22

nm5                          cls2                    92                      2018-08-22

nm6                          cls2                    84                      2018-08-22

nm7                          cls1                    91                      2018-08-22

nm8                          cls2                    89                      2018-08-22

nm9                          cls2                    91                      2018-08-22

现在需要统计出每个班级中排名前三的学生姓名以及其分数,请写出SQL实现

select t.std_nm, t.class, t.score, t.od from

(select std_nm, class, score, row_number() over (partition by class order by score desc) as od from pub_f_class_score)t where od<=3;

24.谈谈你对ETL过程中数据清洗的认识

数据清洗包括以下内容:

数据补缺:对空数据、缺失数据进行数据补缺操作,无法处理的做标记。

数据替换:对无效数据进行数据的替换。

格式规范化:将源数据抽取的数据格式转换成为便于进入仓库处理的目标数据格式。

主外键约束:通过建立主外键约束,对非法数据进行数据替换或导出到错误文件重新处理。

25.设计一套报表系统的权限体系,具体场景为A开发某些报表,供本部门或其他部门的人员访问,所有人员的组织结构按照部门区分,每个部门的报表有很多,每个报表供访问的对象也不相同,有一些人会访问固定的一类报表,如何设置报表权限体系能满足需求场景并且设计相对简单,维护成本低?可以阐述在你设计的权限体系下如报表或人员发生变更的时候是否只涉及简单的权限变更。

1) 每个报表的权限要有明确的归属

2) 可以考虑将固定的报表或固定的人形成统一的权限集合,但两者最好不要同时存在

3) 当报表或者人员发生变更时,涉及的权限变更越简单越好

26.

小赵在测试spark的时候,写了如下的代码

do

lines = sc.textFile("data.txt")

pairs = lines.map(lambda s: (s, 1))

counts = pairs.groupByKey(lambda a, b: a + b)

结果运行时等待了一段时间直接报错,data.txt文件较大,小赵对其进行抽样后结果如下:

data

apple

apple

apple

new

name

apple

apple

work

as

请分析报错的原因以及解决方案

报错是由于数据倾斜导致的

数据倾斜的原因,由于key本身分布不均衡(重要),或者shuffle时的并发度不够,过多的数据在同一个task中运行,把executor撑爆。

解决方案(前三点任一)

1)隔离执行,将异常的key过滤出来单独处理,最后与正常数据的处理结果进行union操作。

2)对key先添加随机值,进行操作后,去掉随机值,再进行一次操作:

           将原始的 key 转化为 key + 随机值(例如Random.nextInt)

           对数据进行 reduceByKey(func)

           将 key + 随机值 转成 key

           再对数据进行 reduceByKey(func)

3)使用reduceByKey 代替 groupByKey,reduceByKey已经做过一次merge,节约了内存

4)调高shuffle的并行度

27.以WordCount为例,分别画出使用mapredeuce执行的详细过程和以spark执行的详细过程。

猜你喜欢

转载自blog.csdn.net/weixin_42307828/article/details/84323441