【牛客】2018京东秋招数据分析工程师笔试解析
* 根据牛客网下方讨论整理(https://www.nowcoder.com/test/10630596/summary)
一、选择
1、有一个文件user.txt,每行一条user记录,共若干行,下面哪个命令可以实现“统计出现次数最多的前3个user及其次数”?
答:sort user.txt | uniq -c | sort -rn | head -n 3
解析(牛客):
首先sort进行排序,将重复的行都排在了一起,然后使用uniq -c将重复的行的次数放在了行首,在用sort -rn进行反向和纯文本排序,这样就按照重复次数从高到低进行了排列,最后利用head -n 3 输出行首的三行。
2、MySQL中t表存在如下数据
+---+---+
| a | b |
+---+---+
| 1 | 2 |
+---+---+
执行如下更新SQL:update t set b = 5 and a= 2 where a = 1之后,a和b值为:
答:a =1 , b = 0
解析(牛客):
update t set b = 5, a= 2 where a = 1
题目中用了 and 连接两个更新赋值
相当于对b赋了个bool值, 即
update t set b = (5 and a= 2) where a = 1
而a=1 故以上真值为0, 所以出现了 a=1, b=0的结果
3、某网游全天平均在线人数为6000人,玩家每次登录后平均在线时长为2小时。请你估计一下,平均下来每分钟约有多少个玩家登录?
答:50
解析(牛客):
2个小时120分钟,6000/120=50
4、有关linux线程的描述,正确的是( )
答:
线程自己拥有很少的资源,但它可以使用所属进程的资源
由于同一进程中的多个线程具有相同的地址空间,所以它们间的同步和通信也易于实现
进程创建与线程创建的时空开销不相同
5、进程会在各个状态之间切换,下面哪些是不可能的
答:等待→运行
6、某二叉树有2000个结点,则该二叉树的最小高度为()
答:11
解析:2**11 = 2048
7、若一序列进栈顺序为a1,a2,a3,a4,问存在多少种可能的出栈序列( )
答:14种
解析(牛客):
(1)每次留一个数,有4种可能
(2)每次留两个数,有6种可能
(3)每次留三个数,有3种可能
(4)每次留四个数,有1种可能
公式:
f(1) = 1 //即 1
f(2) = 2 //即 12、21
f(3) = 5 //即 123、132、213、321、231
f(4) = f(3) + f(2) * f(1) + f(1) * f(2) + f(3);
8、有2个关系模式:
订单表:R(订单号,日期,客户名称,收货人)
订单明细表:S(订单号,商品编码,单价,数量)
若要检索2017/1/1到2017/12/31期间,订购商品的总金额超过20000元的客户名称和总金额,则SQL查询语句是
答:SELECT 客户名称, SUM (单价*数量) AS 总金额 FROM R,S WHERE R.订单号= S.订单号 AND 日期 BETWEEN "2017-1-1" AND "2017-12-31" GROUP BY 客户名称 HAVING SUM(单价*数量)>20000
解析:因为求总金额,而客户可能会出现重复订单
9、下列属于有监督学习算法的是:()
答:线性判别分析LDA
解析:已知类别,并通过建立判别函数进行判别
10、统计网站的注册用户年龄,已知均值是25岁,标准差为2,则用户年龄在21-29岁的概率至少是多少?
答:75%(选项中最大的)
解析:两倍标准差95.44%
11、假设A国人的平均身高为170cm,标准差为10cm,平均体重为65KG,标准差为5kg,身高与体重均符合正态分布,它们之间的线性相关系数为0.5,那么身高为186cm的A国人平均体重为:
答:69kg
解析:186-170 = 16 = 1.6*σ,1.6*σ * 0.5 = 0.8 * σ1 = 0.8*5 = 4, 63 + 4 = 69
12、一个序列为(13,18,24,35,47,50,63,83,90,115,124),如果利用二分法查找关键字为90的,则需要几次比较 ?
答:2
解析(牛客):
第一次取第(0+10)/2=5个数,值为50,因为90>50,查找{63,83,90,115,124},去中间的数90,刚好找到
13、已知一个二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为?
答:DGEBHFCA
14、一个医院的病人,40%来自甲地,60%来自乙地,甲地病人为A病的概率为1%,乙地病人为A病的概率为2%,现在这个医院一个得A病的人,来自甲地的概率为?
答:0.25
解析:0.4 * 0.01 / (0.4 * 0.01 + 0.6 * 0.02)
15、在贝叶斯线性回归中, 假定似然概率和先验概率都为高斯分布, 假设先验概率的高斯准确率参数为a, 似然概率的高斯准确率参数为b, 则后验概率相当于平方误差+L2正则,则其正则化参数为
答:a + b
解析:waiting...
16、以下关于准确率,召回, f1-score说法错误的是:
答:f1-score为 准确率*召回率/(准确率+召回率)
解析:2 * 准确率*召回率/(准确率+召回率)
17、在MySQL中,与语句SELECT * FROM user WHERE age NOT BETWEEN 30 AND 70;等价的是()
答:SELECT * FROM user WHERE age<30 OR age>70;
18、把14,27,71,50,93,39按顺序插入一棵树,插入的过程不断调整使树为平衡排序二叉树,最终形成平衡排序二叉树高度为?
答:3
解析:先写成排序二叉树(左子树小于结点,右子树大于结点),再转化为平衡二叉树(可有多种转化方式)
19、现有testfile文件内容如下所示
12
12
213
5434
3123
123
34
对所有数字求和,以下做法正确的是:
答:
awk 'BEGIN{sum =0}{sum+=$1}END{print sum}' testfile
awk '{sum+=$1}END{print sum}' testfile
20、以下关于HTTP说法正确是的:
答:HTTP POST方式比GET更安全;HTTP POST请求提交参数没有长度限制
错误答案:HTTP GET请求提交参数没有长度限制;HTTP GET和POST请求提交参数都没有长度限制
21、python代码如下:
1 2 3 |
|
答:foo 值为[1,2,3];foo1 值为[1,2,3]
解析(牛客):
foo1 = foo,这样两者指的是同一个数据对象,即同一个内存地址,所以一动都动。
22、协同过滤经常被用于推荐系统, 包含基于内存的协同过滤, 基于模型的协同过滤以及混合模型, 以下说法正确的是
答:
基于模型的协同过滤能比较好的处理数据稀疏的问题
基于内存的协同过滤实现比较简单, 新数据可以较方便的加入
错误答案:基于模型的协同过滤不需要item的内容信息;基于内存的协同过滤可以较好解决冷启动问题
23、以下有关SQL性能优化正确的是:
答:
sql需要避免在索引字段上使用函数
避免在WHERE子句中使用in,not in , 可以使用exist和not exist代替
将对于同一个表格的多个字段的操作写到同一个sql中, 而不是分开成两个sql语句实现
避免建立索引的列中使用空值
24、如下哪些sql语句能查询出每门课都都大于80分的学生姓名,部分数据如下表(student_score)所示,
stu_no |
stu_name |
sub_no |
sub_name |
score |
1 |
张三 |
001 |
语文 |
90 |
1 |
张三 |
002 |
数学 |
60 |
2 |
李四 |
001 |
语文 |
89 |
2 |
李四 |
002 |
数学 |
86 |
答:
select distinct stu_name from student_score where stu_name not in (select distinct stu_name from student_score where score <= 80)
select stu_name from student_score group by stu_name having min(score) > 80
28、以下属于凸函数的是
答:e的x次方;f(x, y) = x的平方/y
解析:当f 和g都是凸函数时,f跟g乘积也是凸函数
29、以下关于二项分布说法正确的是
答:二项分布是一种离散概率分布,表示在n次伯努利试验中,有k次成功的概率
当n很大时候,二项分布可以用泊松分布和高斯分布逼近
31、用浏览器访问www.jd.com时,可能使用到的协议有?
答:MAC;HTTP;ARP
32、有A,B 两个国家,人口比例为4:6,A国的犯罪率为0.1%,B国的为0.2%。现在有一个新的犯罪事件,发生在A国的概率是?
答:0.25
解析:同14
ps:25/30由于看不到图片内容,所以没有作答。
二、编程题
26、东东从京京那里了解到有一个无限长的数字序列: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, ...(数字k在该序列中正好出现k次)。东东想知道这个数字序列的第n项是多少,你能帮帮他么
import math
x = input()
if x > 0:
print(int((1 + math.sqrt(8*x - 7)) / 2))
else:
print(1)
27、东东对幂运算很感兴趣,在学习的过程中东东发现了一些有趣的性质: 9^3 = 27^2, 2^10 = 32^2
东东对这个性质充满了好奇,东东现在给出一个整数n,希望你能帮助他求出满足 a^b = c^d(1 ≤ a,b,c,d ≤ n)的式子有多少个。
例如当n = 2: 1^1=1^1
1^1=1^2
1^2=1^1
1^2=1^2
2^1=2^1
2^2=2^2
一共有6个满足要求的式子
n = input()
i = 0
for a in range(1, n+1):
for b in range(1, n+1):
for c in range(1, n+1):
for d in range(1, n+1):
if a ** b == c ** d:
i += 1
print(i)
case=20%,时间超过限制,因为循环过多,时间复杂度过大,目前为止没有找到解决方案。