招商银行信用卡中心春招秋招数据方向数据分析数据挖掘数据开发笔试题(持续更新)

1.Spark支持的分布式部署方式中哪个是错误的

  • Standlone
  • Spark on mesos
  • Spark on YARN
  • Spark on local

Spark有3种运行模式(分布式部署方式):独立集群运行模式、YARN运行模式、Mesos运行模式。=local错误

2.熵是为消除不确定性所需要获得的信息量,投掷均匀正六面体骰子的熵是(注:lg2=0.3010,lg3=0.4771)

  • 1比特
  • 2.6比特
  • 3.2比特
  • 3.8比特
    在这里插入图片描述

3.关于SecondaryNameNode哪项是正确的

  • 它是NameNode的热备
  • 它对内存没有要求
  • 它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间
  • SecondaryNameNode 应与 NameNode 部署到一个节点

secondarynamenode一般在另外一个节点上运行,需要与namenode一样多大小的内存,作用就是定期合并编辑日志与命名空间镜像,以防止编辑日志过大。
但是该辅助namenode总会滞后于namenode
A中的热备份专门指热备namenode

4.以下python语句(Python 2.7.13)的执行结果是:

import re
key = r"mat cat hat pat"
p1 = r"[^c|p]at"
pattern1 = re.compile(p1)
print pattern1.findall(key)
  • ['mat', 'hat']
  • [‘cat’, ‘pat’]
  • [‘mat’, ‘hat’, ‘pat’]
  • []

[]是基于字符的,
[abc]是匹配a, b, c中的 一个 字符,
[^abc]中的 ^ 是表否定, 表示匹配a, b, c之外的字符.
所以和上面相同的结果的另一个正则是 p1 = r"[^cp]at".

5.下面有关文件系统元数据的描述,说法错误的是

  • 元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息等等
  • 我们可以使用stat命令来查看文件更多的元数据信息
  • Unix/Linux系统允许多个文件名指向同一个inode号码
  • 文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B,这时文件A就称为文件B的"硬链接"

6.在深度学习中,涉及到大量矩阵相乘,现在需要计算三个稠密矩阵A,B,C的乘积ABC,假设三个矩阵的尺寸分别为mn,np,p*q,且m<n<p<q,以下计算顺序效率最高的是

  • (AB)C
  • A(BC)
  • (AC)B
  • 所有效率相同

7.T1中内容为

在这里插入图片描述

T2中内容为
在这里插入图片描述
查询语句:

select * from T1 left join T2 on T1.id=T2.id and T2.id<>2

请问输出结果是
在这里插入图片描述
在这里插入图片描述
== left join是外连接,主表的数据是一定会出现的,所以选D==

8.以下几种模型方法属于判别式模型(Discriminative Model)的有

1)混合高斯模型
2)条件随机场模型
3)区分度训练
4)隐马尔科夫模型

  • 2,3
  • 3,4
  • 1,4
  • 1,2

9.下面哪一个步骤是在MapReduce中没有的

  • partition
  • Sort
  • Combine
  • Copy
    mapreduce实际的处理过程可以理解为Input->Map->Sort->Combine->Partition->Reduce->Output。

10.select * from tablename where columnA=’a’ union select * from tablename where columnB=’b’ 与此查询语句等价的选项是

select * from tablename where columnA=‘a‘ and columnB=‘b‘
select * from tablename where columnA=‘a‘ or columnB=‘b‘
select * from tablename where columnA=‘a‘
select * from tablename where columnB=‘b‘

在这里插入图片描述
union 关键字的意思是并集去重

11.以下关于人工神经网络(ANN)的描述错误的有

  • 神经网络对训练数据中的噪声非常鲁棒
  • 可以处理冗余特征
  • 训练ANN是一个很耗时的过程
  • 至少含有一个隐藏层的多层神经网络

人工神经网络可以没有隐层,直接输入与输出

12.在hadoop2.6.0集群中的一台服务器上运行jps指令,不可能出现的进程是

  • NameNode
  • DataNode
  • ResourceManager
  • TaskTracker

TaskTracker是1的组件,2已经没有了

13.Yarn作为Hadoop2.0中的资源管理器对各类应用程序进行资源管理和调度。请列出Yarn中的关键组件并简述各关键组件内部的交互原理。

1、关键组件:
ResourceManager(RM)
NodeManager(NM)
ApplicationMaster(AM)
Container
2、交互原理:
(1)RM调度资源并在合适的NM节点上启动对应的AM。AM向RM注册,包含二者之间的握手信息、AM侦听端口,及后续进行AM管理和监控的URL。
(2)RM接收AM注册信息,并反馈响应给AM,包含集群资源信息。
(3)AM向RM发起资源分配请求,包含需要使用的Container个数,同时附带归属于本AM的Container信息。
(4)AM向RM获取资源分配进度信息,并保持与RM之间的心跳。
(5)RM根据资源调度策略,分配容器资源给AM。
(6)AM根据RM反馈信息,指示对应NM完成Container的拉起。一个NM上可以启动多个Container。
(7)在Container运行过程中,AM向NM获取Container的运行状态报告。
(8)NM将Container的运行状态信息反馈给AM。

14.题目描述 现有1TB文本文件words.txt,文件每行为若干个英文单词,单词间用空格分隔,文件中存在单词word1占据了总单词量的30%以上,其他单词出现频率较为平均。根据以上场景,请描述mapreduce如何统计每个单词出现的频次。

题中所述文本文件存在明显的数据倾斜问题,word1出现频次远大于其他单词,因此需要对word1在map阶段的输出key值进行构造,从而将word1均分给多个reduce计算。
注:如果只答出一般的wordcount步骤,没有考虑到数据倾斜问题,严格来说应不得分。
1.map阶段
map方法按行读取文件,每行文件按空格分隔为一个单词列表,依次读取每个单词.
若单词为word1,则map阶段的输出为<word1_randomInt(50),1>,即"word1_“加0-50 之间的随机整数。 其他单词直接输出<单词,1>。
注:只要答出map阶段对单词word1的输出key值进行构造,以达到将word1均分为多个不同的key输出的目的即可,具体方法可有所区别。
2.combine阶段
注:计算方法同reduce阶段,该步骤可省去,答出+1分。
3.reduce阶段
对同一key值得value进行累加,得出各个key值的出现次数。
4.计算最终结果。
依次逐行读取reduce阶段输出目录中的所有文件:
a.若key不是形同"word1_XX”,直接输出key和value,即得出对应单词的出现频次。
b.若key类似"word1_XX",对所有key的value值累加,即可得出word1的出现频次。

15.题目描述 又到一年毕业季,一大批刚刚步入职场的应届生申请办理我行信用卡,为了能最大程度的得到优质的信用卡客户,更精准地确定客户优劣和价值高低。考虑利用机器学习的思想在已有传统人工规则的基础上作辅助决策。针对这个场景,详细描述所需要的数据、数据的处理过程、选择的算法及原因、评价指标等过程。

更精准地确定客户优劣和价值高低。考虑利用机器学习的思想在已有传统人工规则的基础上作辅助决策。针对这个场景,详细描述所需要的数据、数据的处理过程、选择的算法及原因、评价指标等过程。
算法的选择:传统的规则识别+一些分类算法(LR/cart/rf/gbdt/xgboost/lightgbm/nn/svm等)
特征的选择:用户个人的基本属性信息(年龄、收入、职业、性别等),用户的信用特征信息(贷款信息、征信信息等)、用户的行为信息(金融类APP使用情况、已办理的其他信用卡使用情况、接收相关短信或者是电话拨打情况扥)
处理过程:文本型的数值的编码处理等,数值型的需要进行缺失值、同度量化等,绝对指标和相对指标的选择
指标:ROC曲线的auc值,ks值,F1值,准确率和召回率等

16. [编程题]信用卡推荐客户列表

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M

现在信用卡开展营销活动,持有我行信用卡客户推荐新户办卡,开卡成功后可获得积分奖励。规定每个客户最多可推荐两个新户且一个新户只能被推荐一次。但允许链接效应,即若客户A推荐了新户B,新户B推荐新户C,则客户C同时属于A和B的推荐列表。简单起见,只考虑以一个老客户A作起点推荐的情况。编程计算推荐新户数不小于n的客户列表。

输入描述:
输入的第一行为以空格分隔的两个正整数,第一个表示原始推荐列表的个数m,第二个表示n的取值。
其后m行每行均为一个以空格分隔的原始推荐列表,第一列为推荐人,后面两列为被推荐人,若该推荐人只推荐了一个新户,则第三列以*替代。推荐人和被推荐人均以大写字母表示,不同字母代表不同的人。

输出描述:
在同一行输出符合条件的客户列表,无顺序要求,客户间以空格分隔。若客户列表为空,则输出None。详见样例。

输入例子1:

5 2
A B C
C F *
B D E
D G *
E H I

输出例子1:

A B E
    /*
    一个dfs的问题,也就是说,分以下两步来解决:
    1.开始时没有问题吧,m个人,每个人可以推荐n个,先把这个关系给对应上了
    2.现在要进行dfs,从A开始,我们找当前节点与末尾形成的链子的长度,如果这个长度>+n的,即为符合条件的点
    3.注意题目中说到的,只考虑从A出发的情况,否则我们需要多一步,在m个人中进行遍历
*/
#include <iostream>
#include <vector>
using namespace std;
 
class Solution{
public:
    int CalTheLength(vector<vector<int>>& vec,int n,int node,vector<int>& res){
        int length=0;
        for(int i=0;i<vec[node].size();++i) //因为只需考虑从A进行出发
            length+=CalTheLength(vec,n,vec[node][i],res);
        if(length>=n)
            res.push_back(node);
        return length+1;
    }
};
int main(){
    int m,n;
    cin>>m>>n; //m个人,目标为n个客户
    vector<vector<int>> vec(26,vector<int>()); //初始的对应关系
    while(m--){
        char a,b,c;
        cin>>a>>b>>c;
        if(b!='*')
            vec[a-'A'].push_back(b-'A');
        if(c!='*')
            vec[a-'A'].push_back(c-'A');
    }
    vector<int> res;
    Solution sol;
    sol.CalTheLength(vec,n,0,res);
    if(!res.size())
        cout<<"None";
    else{
        for(auto it:res)
            cout<<char('A'+it)<<" ";
    }
    return 0;
}

17. [编程题]科室素拓活动

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 64M,其他语言128M

科室素拓进行游戏,游戏规则如下:随机抽取9个人作为游戏参与人员,分别编号1至9,每轮要求k(k<=9且k>=0)个人自由组合使编号之和为n。输出满足规则的所有可能的组合。要求组合内部编号升序输出,组合之间无顺序要求。

输入描述:
输入数据为以空格分隔的两个整数k和n

输出描述:
每行输出一个可能的编号组合,组合内部各个编号以空格分隔升序输出。若无满足规则的组合,则输出None

输入例子1:

3 15

输出例子1:

1 5 9
1 6 8
2 4 9
2 5 8
2 6 7
3 4 8
3 5 7
4 5 6
n,target = list(map(int,input().split()))
candidates = [1,2,3,4,5,6,7,8,9]
result = []
 
def dfs(remain,stack):
    if remain == 0 and len(stack)==n:
        result.append(stack)
        return
         
    for item in candidates:
        if item > remain:
            break
        if stack and item <= stack[-1]:
            continue
        else:
            dfs(remain-item,stack+[item])
             
dfs(target,[])
if result:
    for i in result:
        for j in i:
            print(j,end=' ')
        print('')
else:
    print('None')

递归算法

发布了786 篇原创文章 · 获赞 1121 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_35456045/article/details/104943503