大数据某公司面试题-附答案
程序员文章站
2023-11-28 08:26:28
最近在观察一些大数据方面的职位。特贡献一套面试题,希望对找工作的博友们一点帮助! 1.简述Linux以及Linux命令 cd命令 ls命令 mkdir和rmdir命令 cp命令 mv命令 rm命令 cat命令 tac命令 more命令 head命令 tail命令 touch命令 chown命令 fi ......
最近在观察一些大数据方面的职位。特贡献一套面试题,希望对找工作的博友们一点帮助!
1.简述linux以及linux命令
cd命令
ls命令
mkdir和rmdir命令
cp命令
mv命令
rm命令
cat命令
tac命令
more命令
head命令
tail命令
touch命令
chown命令
find命令
tar命令
grep命令
source命令
2.java支持的数据类型有哪些,什么是自动拆装箱
1)8种基本数据类型:
byte 8位 取值范围 -2^7 ~ 2^7 -1
short 16位 取值范围 -2^15 ~ 2^15 - 1
char 16位 取值范围 0 ~ 2 ^16 - 1
boolean 位数不明确 取值 true false
int 32位 取值范围 -2^31 ~ 2^31 - 1
long 64位 取值范围 -2^63 ~ 2^ 63 - 1
float 32位 取值范围 1.4e-45 ~ 3.40e38
double 64位 取值范围 4.9e-324 ~ 1.79e308
2)引用类型,包括类、接口、数组
需要注意的是,string不是基本数据类型,而是引用类型
引用类型声明的变量,是指该变量在内存中实际上存储的是个引用地址,创建的对象实际是在堆中
自动拆装箱,是指基本数据类型和引用数据类型之间的自动转换
如integer 和 int 可以自动转换; float和float可以自动转换
3.遍历一个list有哪几种不同的方式
list<string> list =new arraylist<string>();
list.add("图书");
list.add("水彩笔");
//number1
for (int i=0;i<list.size();i++){
// list.get(i);
}
//number2
iterator<string> iterator =list.iterator();
while(iterator.hasnext())
{
// iterator.next();
}
//number3
for(string item : list){
//system.out.print(item);
}
4.随机产生20个不能重复的字符并排序
set noreapeat =new treeset();
random rdm = new random();
while (noreapeat.size()<20){
int bb =math.abs(rdm.nextint())%26+97;
char cc =(char)bb;
noreapeat.add(cc);
}
system.out.print(noreapeat);
5.给定一个字符串(包括字母、数字等),找出这个字符串中首先出现三次的那个英文字符
string str ="dsds221sdsddsds";
int narr[] = new int[256]; //桶排序
for(int i=0;i<str.length();i++) {
if(++narr[str.charat(i)] == 3)
{
char c =str.charat(i);
if(c>='a'&& c<='z' || c>='a'&&c<='z')
{
system.out.println(c); break;
}
}
}
6.什么是协同过滤、map reduce 、余弦距离
协同过滤 : 借鉴和你相关人群的观点来进行推荐
map reduce :mapreduce是一种分布式计算模型,map(映射)"和"reduce(归约).map的作用是过滤一些原始数据,reduce则是处理这些数据,得到我们想要的结果.
map函数:接受一个键值对(key-value pair),产生一组中间键值对。mapreduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。
reduce函数:接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。
在统计词频的例子里,map函数接受的键是文件名,值是文件的内容,map逐个遍历单词,每遇到一个单词w,就产生一个中间键值对<w, "1">,这表示单词w咱又找到了一个;mapreduce将键相同(都是单词w)的键值对传给reduce函数,这样reduce函数接受的键就是单词w,值是一串"1"(最基本的实现是这样,但可以优化),个数等于键为w的键值对的个数,然后将这些“1”累加就得到单词w的出现次数。最后这些单词的出现次数会被写到用户定义的位置,存储在底层的分布式存储系统(gfs或hdfs)。
1.mapreduce库先把user program的输入文件划分为m份(m为用户定义),每一份通常有16mb到64mb,如图左方所示分成了split0~4;然后使用fork将用户进程拷贝到集群内其它机器上。
2.user program的副本中有一个称为master,其余称为worker,master是负责调度的,为空闲worker分配作业(map作业或者reduce作业),worker的数量也是可以由用户指定的。
3.被分配了map作业的worker,开始读取对应分片的输入数据,map作业数量是由m决定的,和split一一对应;map作业从输入数据中抽取出键值对,每一个键值对都作为参数传递给map函数,map函数产生的中间键值对被缓存在内存中。
4.缓存的中间键值对会被定期写入本地磁盘,而且被分为r个区,r的大小是由用户定义的,将来每个区会对应一个reduce作业;这些中间键值对的位置会被通报给master,master负责将信息转发给reduce worker。
5.master通知分配了reduce作业的worker它负责的分区在什么位置(肯定不止一个地方,每个map作业产生的中间键值对都可能映射到所有r个不同分区),当reduce worker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个reduce作业(谁让分区少呢),所以排序是必须的。
6.reduce worker遍历排序后的中间键值对,对于每个唯一的键,都将键与关联的值传递给reduce函数,reduce函数产生的输出会添加到这个分区的输出文件中。
6.当所有的map和reduce作业都完成了,master唤醒正版的user program,mapreduce函数调用返回user program的代码。
所有执行完毕后,mapreduce输出放在了r个分区的输出文件中(分别对应一个reduce作业)。用户通常并不需要合并这r个文件,而是将其作为输入交给另一个mapreduce程序处理。整个过程中,输入数据是来自底层分布式文件系统(gfs)的,中间数据是放在本地文件系统的,最终输出数据是写入底层分布式文件系统(gfs)的。而且我们要注意map/reduce作业和map/reduce函数的区别:map作业处理一个输入数据的分片,可能需要调用多次map函数来处理每个输入键值对;reduce作业处理一个分区的中间键值对,期间要对每个不同的键调用一次reduce函数,reduce作业最终也对应一个输出文件。
余弦距离: 两向量之间的夹角, 余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。
7.简述图数据库