数据挖掘滴滴公司数据挖掘工程师笔试题
Posted Better Bench
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据挖掘滴滴公司数据挖掘工程师笔试题相关的知识,希望对你有一定的参考价值。
1 选择题
1、Lm19980107【单选】下面哪种算法会导致信息不可还原?C
A、RSA
B、DES
C、SHA1
D、LZ77
SHA1用于Hash,不可还原。
RSA、DES、LZ77都用于数据加密或压缩,均可还原。
2、下面函数的输出结果是(C)
void func()
int k = 1^(1 << 31 >> 31);
printf(“%d\\n”, k);
A、0
B、-1
C、-2
D、1
解析:右移运算左侧补符号位; 补码转源码:补码减1;除符号位全部取反
int
int
为有符号整数,以 32 位存储,因此1的二进制表示为:
00000000` `00000000` `00000000` `00000001
1<<31
将所有数整体向左移31位,溢出的数直接舍去,右侧补0。即:
10000000` `00000000` `00000000` `00000000
()>>31
将所有数整体向右移31位,左侧补符号位数字。即:
11111111` `11111111` `11111111` `11111111
1^()
异或运算,得
11111111` `11111111` `11111111` `11111110
此时符号位为1,代表次数为负数。因为计算机中加减运算使用的都是补码,所以不能直接将补码形式二进制数通过除二取余法转换为十进制数。要先将补码转换为原码,再通过除二取余法转换为十进制数。
负数补码转换为原码步骤:
-
补码-1,得反码:
11111111
11111111
11111111
11111101
-
反码除符号位其余位取反,得原码:
10000000
00000000
00000000
00000010
最后,将原码使用除二取余法转换为十进制数,为-2。
3、下面哪个SQL语句可以查询出“id存在于A表中,但不存在于B表”的数据? B
A、 select A.* from A join B on A.id=B.id where B.id is null;
B、 select A.* from A left outer join B on A.id=B.id where B.id is null;
C、 select A.* from A right outer join B on A.id=B.id where B.id is null;
D、 select A.* from A inner join B on A.id=B.id where B.id is null;
4、已知一棵二叉树,如果先序遍历的节点顺序是:ADCEFGHB,中序遍历是:CDFEGHAB,则后序遍历结果为()D
A、 CFHGEBDA
B、 CDFEGHBA
C、 FGHCDEBA
D、CFHGEDBA
5、在64位操作系统上,下面程序返回什么结果:D
int main()
int *k[10][30];
printf(""%d\\n"", sizeof(k));
return 0;
A、 4
B、 8
C、 1200
D、 2400
解析:int k,表示的是指针数组,一共有1030=300个元素。在64位系统下,每个指针的长度是8字节,因此总长度为2400字节
6、以下哪些方法不适合用来对特征分布进行分析?D
A、 PCA
B、IsoMap
C、 LLE
D、 KNN
解析:PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可以发现更便于人理解的特征,加快对样本有价值信息的处理速度,此外还可以应用于可视化(降到二维)和去噪。
Isomap(Isometric Feature Mapping)是流行学习的一种,用于非线性数据降维,是一种无监督算法。
LLE(Locally Linear Embedding)算法,即局部线性嵌入算法。 该算法是针对非线性信号特征矢量维数的优化方法,这种维数优化并不是仅仅在数量上简单的约简,而是在保持原始数据性质不变的情况下,将高维空间的信号映射到低维空间上,即特征值的二次提取 。
7、以下不属于优化求解方法的是?C
A、 L-BFGS
B、 SGD
C、 ReLu
D、模拟退火
解析:L-BFGS是解无约束非线性规划问题最常用的方法,具有收敛速度快、内存开销少等优点,在机器学习各类算法中常有它的身影。 简单的说,L-BFGS和梯度下降、SGD干的同样的事情,但大多数情况下收敛速度更快,这点在大规模计算中很重要。
8、ROC曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣。对于模型的 ROC 曲线,与哪一点越接近,表明该分类器的性能越好?B
左上,即TPR=0, FPR=1
左上,即FPR=0, TPR=1
右下,即TPR=0, FPR=1
右下,即FPR=0, TPR=1
9、在0到1之间随机选择3个小数,他们的和小于1的概率是?D
A、1/2
B、1/3
C、1/4
D、1/6
解析:设所取的三个数分别为 x、y、z ,
则 0<x<1,0<y<1,0<z<1 ,
满足上述条件的点 P(x,y,z)构成一个棱长为 1 的正方体,体积为 V=111=1 ,
满足 x+y+z=1 的点是分别过(1,0,0)、(0,1,0)、(0,0,1)的平面,
而满足 x+y+z<1 的点位于正方体内、平面的下方,体积为 V1=1/31/2111=1/6 ,
10、在以下不同的场景中,使用的分析方法不正确的,B
A、 根据司机最近一年的服务订单数据,用聚类算法判断出滴滴司机在不同产品线下所属的司机层级
B、 根据司机近期的订单数据,用聚类算法拟合出乘客未来可能的乘车花费价格公式
C、 用关联规则算法分析出乘坐快车的乘客,是否适合推荐乘坐专车
D、 根据乘客最近的乘车信息,用决策树算法识别出乘客可能是男还是女
解析:B选项,预测消费需要用回归模型来做。而不是聚类算法。
11、用 0,1,2,3,4,5组成没有重复数字的四位数,其中千位数字大于百位数字,且百位数字大于十位数字的四位数的个数是?B
A、 36
B、 60
C、 72
D、 300
解析:前面三位数选出顺序是固定的, 共有C(3,6),最后一位任意选 即C(3,6)*C(1,3)=60
12、有10层台阶,小明每次可以爬一台阶或者两台阶,请问,爬到10层台阶,小明一共有(A)种爬法?
A、 89
B、 90
C、 91
D、 92
解析:斐波拉契数列,dp[n] = dp[n - 1] + dp[n - 2]
dp[1] = 1, dp[2] = 2
dp[3] = dp[1] + dp[2] = 1 + 2 = 3
dp[4] = 3 + 2 = 5
dp[5] = 5 + 3 = 8
dp[6] = 8 + 5 = 13
dp[7] = 13 + 8 = 21
dp[8] = 21 + 13 = 34
dp[9] = 34 + 21 = 55
dp[10] = 55 + 34 = 89
13、两人约会,约好6点到7点之间在指定地点见面,两人都会在6点到7点之间随机选择一个时间点到达约定地点,如果到了之后等15分钟还没见到对方,就会立即走掉,那么哪个描述是对的?B
A、 这俩人能见到面的概率更大
B、 这俩人不能见到面的概率更大
C、能见面和不能见面出现概率相同
D、 无法计算出准确概率
解析:通过画图,可以 求解出相遇的概率为7/16
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OeVH7PcK-1659848927094)(/home/mgege007/Desktop/13.png)]
14、某海岛城市的主要产业为旅游业,之前已经运营了M个景点,现在扩大运营新增了N(>1)个景点,为了方便游客通行任意两个景点都开通了直通巴士(在两个景点间往返),此次新增景点共新开通了58趟直通巴士,请问这个海岛城市总共运营了多少个景点?D
A、 14
B、 15
C、 16
D、 17
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTnT2IKO-1659848927095)(/home/mgege007/Desktop/14.png)]
15、假如有1500盏灯,它们的开关按1-1500进行编号,一开始都是亮着的,我们按照如下步骤操作:C
- 切换编号为2的倍数的开关
- 切换编号为5的倍数的开关
- 切换编号为7的倍数的开关
最终还有多少盏灯亮着?
A、 236
B、 514
C、 750
D、 535
解析:
- 切换编号为2的倍数的开关
1500/2=750个灯是亮的,750个灯是灭的 - 切换编号为5的倍数的开关
在5的倍数中,并且是2的倍数的的灯又灭变成了亮,数量为1500/10=150个灯重新亮起来
在5的倍数中,不是2的倍数的的灯灭了,数量也为150个 - 切换编号为7的倍数的开关
是7倍数是5的倍数,不是2倍数的灯变亮了,数量为1500/35-1500/70=21
是7倍数是5的倍数是2的倍数的灯变灭了,数量为1500/70=21
所以亮的灯为750个
16、北之于东南,正如西南之于:D
A、 东
B、南
C、 西
D、 北
17、找规律填数:10, 17, 26, 37, ?C
46
52
50
56
解析:
17-10=7
26-17= 9
37-26 =11
50-37 = 13
18、有15瓶一样的可乐,其中有一瓶变质了, 喝了一口之后2小时会闹肚子。最少需要多少只小白鼠做实验,才能在2小时时间内找到有变质的一瓶?
A、 7
B、6
C、 5
D、 4
15瓶可以转换为24种组合,即用4只小白鼠的闹肚子状态表示
可乐序号 闹肚子状态 闹肚子小白鼠编号
1 0 0 0 1 1
2 0 0 1 0 2
3 0 0 1 1 1 2
4 0 1 0 0 3
5 0 1 0 1 1 3
6 0 1 1 0 2 3
7 0 1 1 1 1 2 3
8 1 0 0 0 4
9 1 0 0 1 1 4
10 1 0 1 0 2 4
11 1 0 1 1 1 2 4
12 1 1 0 0 3 4
13 1 1 0 1 1 3 4
14 1 1 1 0 2 3 4
15 1 1 1 1 1 2 3 4
即
给1号小白鼠喝1 3 5 7 9 11 13 15号可乐的混合
给2号小白鼠喝2 3 6 7 10 11 14 15号可乐的混合
给3号小白鼠喝4 5 6 7 12 13 14 15号可乐的混合
给4号小白鼠喝8 9 10 11 12 13 14 15号可乐的混合
如果1号小白鼠闹肚子 则只可能是1号可乐变质
如果1 2 3号小白鼠都闹肚子而4号没有 则只可能是7号可乐变质
以此类推
2^4=16>15,所以最少4只
19、在某一个国家,由于战争导致民不聊生,贫民纷纷逃难。在逃亡的路上,难民A由于食物全部吃完,濒临饿死,就在这时正好有两个好心难民B和C路过,他们决定帮助这位可怜人;当时B带有4个烧饼,C带有5个烧饼,最后他们三人分吃了所有食物。由于他们的救济,最后A获救了。一年后,A飞黄腾达了,为了感激当年的两位救助他的人,他一共拿出9个金元宝赏报答给B和C。对于9个金元宝的分配给B和C,你觉的合理的分配应该是:C
A、 B拿1个金元宝,C拿8个金元宝
B、 B拿2个金元宝,C拿7个金元宝
C、 B拿3个金元宝,C拿6个金元宝
D、 B拿4个金元宝,C拿5个金元宝
B拿出了4个饼,C拿出了5个饼,因为是他们三个人分吃的食物,也就是说一共是9个饼,三个人分,平均每个人就是3个,而A分到的3个饼是从B那里出了1个,C拿出了2个,凑到了3个饼,也就是说,B出了1/3,C出了2/3,所以就是B=1/39=3,C=2/39=6
20、0,5,27,119,495,2015,(A )
A、 8127
B、 100005
C、 10075
D、 11075
解析:
5=3²-2²
27=6²-3²
119=12²-5²
495=24²-9²
2015=48²-17²
所以8127=96²-33²
逻辑:3 6 12 24 48 96 后者是前者两倍
2 3 5 9 17 33 后者=前者*2-1
故答案选择A
2 编程题
1、我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:
1 是丑数。
n 不超过1690。
解析:三个位置分别尝试使用一次乘2机会,乘3机会,乘5机会,看看哪个最小,最小的那个就是下一个丑数。最后,那个得到下一个丑数的指针位置加一,因为它对应的那次乘法使用完了。
class Solution:
def nthUglyNumber(self, n: int) -> int:
dp = [0]*(n+1)
dp[1] = 1
p2= p3 = p5 = 1
for i in range(2,n+1):
num2,num3,num5 = dp[p2]*2,dp[p3]*3,dp[p5]*5
dp[i] = min(num2,num3,num5)
if dp[i] == num2:
p2 +=1
if dp[i] == num3:
p3 +=1
if dp[i] == num5:
p5 +=1
return dp[n]
2、给出n个数字 a_1,…,a_n,问最多右多少不重叠的非空区间,使得每个区间内数字的xor(异或和)都等于0
解析:
找出最大的k,使得存在k个区间(l(i),r(i)),满足
1<=l(i)<=r(i)<=n (1<=i<=k), r(i)<l(i+1) (1<=i<k),且
a[l(i)] xor a[l(i)+1] xor …. xor a[r(i)] ==0 (1<=i<=k)
例如:
当输入为[3, 0, 2, 2]时,答案为2,存在2个区间[0] 和 [2, 2]满足;
当输入为[2, 2, 0, 2, 2]时,答案为3,[2, 2],[0] 和[2, 2]满足。
a=[3,0,2,2]
num = set([0])
last = 0
ans = 0
for i in a:
last ^= i
if last in num:
print(last)
ans += 1
num = set([0]) #
last = 0
else:
num.add(last)
print(ans)
以上是关于数据挖掘滴滴公司数据挖掘工程师笔试题的主要内容,如果未能解决你的问题,请参考以下文章
数据挖掘2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
数据挖掘2022年2023届秋招宏瓴科技公司机器学习算法工程师 笔试题