京东寻猎提前批算法岗面经

应小伙伴的需求分享一下京东提前批算法岗的面经,目前已offer~

我当时提前批投的是数分,面试官觉得我更加适合算法,询问了我的意见后把title改成了算法。非常幸运能遇到我的两位技术面面试官和hr小姐姐,面试官人都非常nice,碰到回答不上来的问题会耐心引导,还让我不要紧张哈哈哈。

楼主自身的base是机器学习、自然语言处理和优化,所以面试时这方面涉及的多一些。

当时二面完记录了一下所以比较全,一面和hr面没有及时记录已经找不到通话记录了,可以做一点点参考。

京东一面 30min (问项目)

【面试的通话记录遗失了,做一下简单的回顾】
自我介绍,对实习的两个项目及细节进行了细致的询问。
最后问了一个概率题:如果我们部门有16个人抢一个大红包,用一枚均匀的六面骰子,如何保证每个人的获奖的概率是一样的?
简单回答了一下,将16个人编号并分成4组,投到1则第1组通过第一轮,投到2则第2组通过第一轮,投到3则第3组通过第一轮,投到4则第4组通过第一轮,投到5或6则重新投。接着,对过了第一轮的4名同事重新编号并再投掷一次骰子,投到1则同事1获得大奖,投到2则同事2获得大奖,投到3则同事3获得大奖,投到4则同事4获得大奖,投到5或者6则重投。

京东二面 30min (问机器学习基础知识)

先做一下自我介绍。
1 机器学习
1.1 岭回归和Lasso
1.1.1 岭回归和Lasso的区别?
Lasso是加 L1 penalty,也就是绝对值;岭回归是加 L2 penalty,也就是二范数。从贝叶斯角度看,L1 正则项等价于参数 w 的先验概率分布满足拉普拉斯分布,而 L2 正则项等价于参数 w 的先验概率分布满足高斯分布。从优化求解来看,岭回归可以使用梯度为零求出闭式解,而 Lasso 由于存在绝对值,在 0 处不可导,只能使用 Proximal Mapping 迭代求最优解。从结果上看,L1 正则项会使得权重比较稀疏,即存在许多 0 值;L2 正则项会使权重比较小,即存在很多接近 0 的值。

1.1.2 什么时候用哪个更好?
L1 正则项可以用来做特征选择,如果只是防止过拟合的话两者都可以。

1.1.3 从几何上来看有什么区别?
岭回归在坐标轴上是个圆,Lasso 是个菱形。

1.1.4 penalty在不同形状下为什么会产生这个效果呢?(稀疏/权重小)
不知道。

2 运筹优化
2.1 简单讲一下分支定界
没接触过,简单讲了一下我们学的优化内容,一阶算法、二阶算法、KKT、对偶、鞅。面试官说我们学的可能偏最优化,不是运筹。

3 自然语言处理
3.1 简单介绍一下自然语言处理方面最主流的算法
自然语言处理的话 Seq2Seq 系列的模型会使用的比较多一些,最开始提出了序列模型 RNN,后来人们发现比较慢,效果不太好,并且存在梯度消失的问题,使用 LSTM、GRU 之类的模型一定程度上改善了这一问题,但还是没有根本解决。之后又有人提出了 Attention,借鉴 Information Query 领域的知识提出了一套新的模型,根治了梯度消失的问题,也就是Transformer。最近比较火的 BERT 是借鉴 Transformer 和 ELMo 提出来的,在此基础上又有人做了优化,提出了ALBERT。还有一个比较火的模型是 XLNet,结合了 ELMo 和 BERT 的优点,将 Auto-Regressive 模型改成了双向结构。

3.2 解释一下梯度消失的原因
RNN 其实还是基于反向传播的模型,这种模型本质上是一层一层的 f(wx+b) 套起来,根据链式法则反向传播求梯度的时候会存在累乘之前层的权重的现象。当层数越多,也即 RNN 的链越长,如果 w 的值比较小,乘很多次就接近 0 了,也就是梯度消失;如果 w 的值比较大,也即大于 1,乘很多次就接近正无穷了,也就是梯度爆炸。

3.3 如果把激活函数全都换成线性函数,会出现什么问题
如果把激活函数全都换成线性函数会失去非线性性,退化为一个线性回归。如果是分类问题最后有一个 sigmoid 层,则退化为逻辑回归。深度学习能起作用的本质原因就是使用了非线性的激活函数,从而通过很多神经元可以拟合任意一个函数。

3.4 如何评估一个模型的好坏?
有一些指标能够帮助我们评估模型的好坏,例如对于分类问题可以使用 Accuracy、Precision、Recall、F1、Confusion Matrix、AUC 等;对于回归问题可以使用 RMSE、R2 等;对于文本聚类问题可以使用 Perplexity 等。对于文本生成模型,也可以采用人工评价的方式,例如对于机器翻译,可以将两个模型的翻译结果随机指派给一些志愿者,让他们评价哪个模型翻译得更好,得出一个统计的结论。

3.5 简单介绍一下ROC和AUC
我们得到混淆矩阵后,可以计算出 TPR 和 FPR ,然后用 FPR 做横轴,TPR 做纵轴,画出一条 FPR-TPR 曲线,就是 ROC 曲线,ROC 曲线下方的面积就是 AUC。我们计算 AUC 的时候可以根据定义取多个 threshold,用矩形的面积来拟合曲线下面积。但是在实际使用中,这种算法效率很低,因为对于每一个 threshold 都需要计算 TP、TN、FP、FN,实际过程中人们是使用 rank 来做,我稍微看过一下源码,但是没有深入研究这一部分。

3.6 AUC 的含义是什么
这个问题没有回答上来……答案应该是:假设从所有正样本中随机选取一个样本,把该样本预测为正样本的概率为 p1,从所有负样本中随机选取一个样本,把该样本预测为正样本的概率为p0,p1 > p0 的概率就是 AUC。

4 供应链管理
4.1 说明一下 EOQ 模型的假设,计算过程和结果
EOQ 模型假设每个时间的需求为常数,也即需求随时间是线性累加的。假设存在两种类型的成本,一个是订货成本,也即定一次货需要的成本,比如不管定多少货,都需要一次卡车运输的人力和交通成本;一个是持货成本,比如保存库存的过程中需要支付的租金等。我们的目标是最小化这两部分成本之和,也就是 (k+cQ)*d/Q+1/2hQ,关于Q是一条双曲线,根据梯度为零可以求出最优解是 \sqrt(2kd/hc)。
=====更新=====
EOQ模型的假设
1. 只考虑一个商品 
    > 多产品联合补货
2. 及时补货
    > leadtime
3. 常数需求速率
    > 随机需求,增加安全库存
4. 一个订单一次运送
5. 供应商只提供单一平稳价格
    > 折扣(全量/边际)
6. 不能缺货
    > 增加变量x:backorder比率
=============

4.2 对库存管理的概念
我对库存管理可能没有一个比较 high level 的概念,我们工程实现主要做的是决策每天要定什么货,每个sku定多少,定完之后应该放在哪个货架上,出库的时候从哪个货架出库。

5 数据库 & SQL & hive
5.1 使用 groupby 的时候最容易出问题的点?
没出过问题……面试官说我sql使用的比较少

6  python
6.1 python 常用的 string format 形式
print(str(a))
print("%d" % a)
print("{}".format(a))
面试官说还有一种,没接触过……
==== 更新 ====
百度到的string format形式
a. %号
    print("%d" % a)
b. str.format # python2.6+
    print("{}".format(a))
c. f-string  # python3.6+
    print(f"{a}")
d. 标准库模板 # python2.4+
    from string import Template
    name='EGON'
    t = Template('Hello $name!')
    res=t.substitute(name=name)
    print(res) # Hello EGON!

注:总结四种方式的应用场景
a. 如果格式化的字符串是由用户输入的,那么基于安全性考虑,推荐使用Template
b. 如果使用的python3.6+版本的解释器,推荐使用f-Stings
c. 如果要兼容python2.x版本的python解释器,推荐使用str.format
d. 如果不是测试的代码,不推荐使用%
=============

6.2 pandas 如果要做比较复杂的列操作时,怎么操作?
我平时使用 apply 函数,如果操作比较简单,直接使用 lambda 函数,如果比较复杂,就在外面写一个函数 fuc,然后在 apply 里面调用那个函数,例如 df.apply(fuc)。

最后反问了一下问题,然后面试官问了一下base是不是期望在北京。

京东hr面 30min (传统行为面,问了一点项目)

【忘记录音了,做一下简单的回顾】
首先介绍一下自己。

简单讲一下自己印象最深刻的实习。

介绍一下自己做过的最有挑战的事情。

实习的项目和美团、饿了么配送任务中间的差别,有没有看过他们的解决方案。

你对我们部门有什么了解?

hr介绍了一下部门的数据分析师和算法工程师的定义,问我更倾向于哪个方面。我说更倾向算法方向,她说那之后发offer把title改成算法工程师。

问了一下现在有在实习吗?我说马上要开学了,如果需要实习的话到时候和导师商量一下,她让我联系Joy老师就可以。

反问了一下流程,说大概8月初会出结果,正式offer发放要等一下集团的流程。#京东##算法工程师##校招##面经#
全部评论
楼主好厉害,感觉回答很标准啊。
1 回复 分享
发布于 2020-08-19 18:58
多谢楼主
1 回复 分享
发布于 2020-08-20 12:40
这么详细的解答,有心了
点赞 回复 分享
发布于 2020-08-19 18:59
字符还有一种应该是print(f.'{a}')
点赞 回复 分享
发布于 2020-08-25 09:00
怎么感觉没有coding
点赞 回复 分享
发布于 2021-07-20 13:54
沾沾喜气,许愿HR面
点赞 回复 分享
发布于 2021-08-03 16:33
再来沾沾喜气,许愿京东供应链算法提前批Offer
点赞 回复 分享
发布于 2021-08-05 16:07

相关推荐

16 115 评论
分享
牛客网
牛客企业服务