2021秋招-京东数科-面试总结
Published:

京东数科 面经
部门概况:大部门是做京东数科的商业变现的(类似于阿里妈妈),小部门是准备搭建京东数科的技术部的算法中台。主要业务分为两块一个是先上营销(京东商城的广告推荐,京东金融的理财产品推荐等),一块是线下的营销(比如线下商场的互动大屏,人流量统计、交互游戏、行人关注度等场景的算法搭建)。目前部门处于初步组建的阶段,正式员工 3 人,还有 3 人在入职途中。办公地点在亦庄。
一面 (2020 年 9 月 17 日)
- 自我介绍。
- 简单介绍了下实习工作和一篇论文。
算法题
给定一个包含 z 个不同字符的字典,每次可以有放回的随机抽一个字符,总共抽 m 次组成一个字符串。 这么操作两次得到两个长度为 m 的字符串 X 和 Y。 问判断 X 和 Y 是否相同所需要比较的 次数的期望是多少?
- 直观的解法是如果两个字符串相同的话一定要比较 m 次,则这个情况的比较期望E1=mzmE1=mzm
- 如果两个字符串不同的话,设第 k 个字符不同,则说明前 k-1 个字符相同,且当前这个不同这种时候的期望是 E2,k=k∗1zk−1∗(1−1z)E2,k=k∗1zk−1∗(1−1z)。
- 两个字符串不相同的总体期望 E2=∑mk=1E2,kE2=∑mk=1E2,k
- 整体期望为 E=E1+E2E=E1+E2
- 还有个比较直观的 dp 思路:
- 设 E(m)为长度为 m 的字符串的期望,则第一个一定要比较,第一个相同的情况下才需要比较后面的,所以状态转移方程是:E(m)=1+1zE(m−1)E(m)=1+1zE(m−1), 然后 E(1)=1E(1)=1。
二面
- 二面应该是交叉面,面试时间大概 35 分钟。
- 简单介绍了一下在腾讯实习的工作
- 算法题
'''
给定一个单链表,请实现随机返回其中一个结点的函数。 需要保证每个节点被选取的概率是相同的。
解法就是蓄水池抽样问题
'''
import random
m=1
def func(head):
p=head
cache=[]
cnt=1
while p is not None:
if len(cache)>=10:
tp=random.randint(0,cnt)
if tp<m:
i=random.randint(0,m-1)
cache[i]=p.val
else:
cache.append(p.val)
p=p.next
cnt+=1
idx=random.randint(0,len(cache)-1)
return cache[idx]
蓄水池抽样问题的详解:Link