算法工程师:双非渣硕是如何获得百度、京东双SP

时间:2023-12-26 23:38:19

本人本科硕士皆双非,和牛客大佬们没得比,目前拿到的还可以的offer就是百度SP和京东SP,都是做的推荐算法,其他的不说了。

先说一下个人经历吧,学校比较水,实验室没有项目,实习经历:腾讯实习+滴滴实习   比赛经历:几个数据挖掘竞赛Top5的名次。

个人感觉,算法岗确实看学校,但如果简历还可以的话,还是有面试机会的,内推投的简历,80%都给了面试机会吧。

百度提前批(feed部):

3轮电话面,远程桌面coding。

百度的面试风格其实是比较好把控的,基本就是项目问答、coding、机器学习算法、CS基础,偶尔会有些概率题智力题。

算法题:

1. 两个有序数组求中位数(leetcode)

2. 判断平衡二叉树(剑指offer)

3. 最长上升子序列(lintcode)

4. 二叉树转双向链表(剑指offer)

5. LRU cache实现(leetcode)

6. House Robber(leetcode)

机器学习问题:无非就是树模型(gbdt、xgboost、rf、lightgbm)原理,LR、FM原理,w2v原理,深度学习在推荐系统上应用(和面试官讨论了google的两篇paper,其中wide&deep network讲的时间比较长),神经网络embedding层和w2v中的embedding的实现区别,其他的记不清了。

CS基础:进程线程区别,多线程实现方式,线程冲突是什么、怎么解决,TCP三次握手细节,海量数据排序(分治),其他的不记得。

京东提前批(广告部):

2轮电话面,远程写code。

京东的面试个人觉得不是太难,广告部今年招人比较多,面试内容的话也是围绕项目+机器学习算法来问的,本人有京东算法赛Top20,可能也是个加分项吧。

算法题:链表翻转、判断平衡二叉树、最长公共子序列、海量数据topk问题、蓄水池抽样算法

机器学习问题:也是简历上写的算法来问的,以及问了一些DL的基础,不难。

蘑菇街:

2轮电话面+1轮CTO面。

蘑菇街的面试只是围绕项目进行的,2轮各30分钟左右,都是在问项目,以及项目中用到的技术、算法,不难。

腾讯:

对实习所在部门的工作不感兴趣,于是提前离职参加了提前批。面了AI平台部,感觉是经历过最难的面试,面试官的问题一个接着一个,有点咄咄逼人,无奈水平不够,跪了,校招时候,做了笔试没被通知面试。

1. 项目介绍

2. 你这个项目中间哪些地方提升,中间过程分别提升了多少CTR?

3. 你项目用的分布式LR的是用什么优化方法,参数怎么调的,mini-batch的batch是多少? parameter-server原理,如何解决数据一致性?

4. 会分布式么,hadoop,spark会么,说说hadoop的灾难处理机制

5. hadoop一个节点数据量太大拖垮reduce,怎么办,Hadoop本身的处理机制是怎么样的,手工的话可以怎么调

6. hadoop数据倾斜问题如何解决

7. L1、L2的区别,L1为什么可以保证稀疏?

8. 各种最优化方法比较 拟牛顿法和牛顿法区别,哪个收敛快?为什么?

9. 深度学习的优化方法有哪些? sgd、adam、adgrad区别? adagrad详细说一下?为什么adagrad适合处理稀疏梯度?

10. DL常用的激活函数有哪些?

11. relu和sigmoid有什么区别,优点有哪些?

12. 什么是梯度消失,标准的定义是什么?

13. DNN的初始化方法有哪些? 为什么要做初始化? kaiming初始化方法的过程是怎样的?

14. xgboost里面的lambdarank的损失函数是什么?

15. xgboost在什么地方做的剪枝,怎么做的?

16. xgboost如何分布式?特征分布式和数据分布式? 各有什么存在的问题?

17. lightgbm和xgboost有什么区别?他们的loss一样么? 算法层面有什么区别?

18.lightgbm有哪些实现,各有什么区别?

阿里的话二面跪了,内推的阿里妈妈,难度比较高,跪了也是意料之中。

还有一些公司的面试没有参加,滴滴(面试时间和腾讯笔试冲突了,放弃),网易(2次笔试都过了,不过拿到百度后就没有去面了),搜狗(电话面了1面后,让去现场面二面,放弃),拼多多(二面被面试官放鸽子)。

其他的offer就是一些小公司了,蘑菇街、YY、Bigo这些,主要还是问项目,参考意义不大。

PS:Bigo的推荐算法团队非常厉害,都是百度高T出来的,而且今年待遇非常给力。

下面说一下个人的学习经历吧。

虽然是CS专业,但实验室做的方向和ML半毛钱关系没有,且实验室也只有我一个人在搞ML,所以也算是野路子出身了。

理论基础:CS229视频、西瓜书、统计学习方法、数据挖掘导论、推荐系统实践、深度学习

实践基础:机器学习实战(研一时候照着书上代码打了一遍)、利用Python进行数据分析(照着书敲过一遍)

完成了这些基本功之后就是参加一些比赛了,刚开始入门的时候搞天池和Datacastle比赛,成绩都很水,并且是孤军作战,个中心酸只有亲身经历才能体会,后来研二后开始和一些外校的大神组队,拿了几个还可以的名次,也在大神身上学到了不少东西,所以个人感觉做比赛最好还是要组队,思维更加开阔,一个人闷头做很容易放弃。研二上学期末开始去实习,实习做的也是搜索引擎、NLP、推荐算法相关。

再说一下面试需要准备哪些吧。

算法工程师的面试其实就是围绕几项来展开的。

1. 机器学习算法理论:LR、SVM、树模型、FM/FFM、EM、LDA、word2vec、推荐算法等等,都会被问到,需要懂得算法的推导、适用场景、使用的Trick、分布式实现。

2. 深度学习相关:CNN、RNN、LSTM的基本原理,不同激活函数的差异等等,如果是面的传统机器学习岗的话,DL问的不深,但一定会问。

3. 数据结构与算法:leetcode高频题、lintcode高频题、剑指offer,大概这三样准备好就够了,校招前保证100多道题的积累量,面试时候写code应该就手到擒来了。

4. CS基础:计算机网络、操作系统,推荐书籍:王道程序员面试宝典,这本书对于突击面试很有帮助。

5. 分布式:Hadoop/Spark这些,属于加分项,会问点基本原理,还是需要看一下。

6. 编程语言:虽然做比赛都是用的Python,但C++或者Java必须掌握其中一个,面试也会问一些语言相关的

7. 海量数据处理:经常问的就是海量数据排序

Anyway,个人的秋招结束了(其实结束很久了),虽然有些遗憾,但拿的offer和薪资也都挺满意了,知足,开始弄毕业论文了,希望能顺利毕业吧,就写到着吧,语序有点混乱,凑合着看吧。

PS:最近私信我的朋友太多,这里再补充点吧。

对于学校不那么好的、又立志找算法工作的同学,这里给点建议:

一、尽快去实习!如果是3年学硕的话,研二上学期中下(11月-次年2月) 就可以去进厂里实习了,这样做的好处是可以避开春招实习生的招聘高峰,比较容易进大厂,据我所知,像百度、滴滴、头条这些公司都有常年在招实习生的,当然了,大部分是在北京。那么怎么找这种实习呢,推荐几种投简历的渠道:1. 实习僧 2. nlp job 3. 北邮人论坛的实习板块。对于学校不那么好的同学,如果简历上有一二线公司的实习经历,那么内推简历通过筛选的可能性就大的多了。

二、 关于数据挖掘比赛,很多同学问我如何入门这块,我的建议是分步进行,1. 先熟悉python的基本语法、numpy、pandas、sklearn、gensim、keras这几个比赛中常用的库的使用;2. 精读优秀比赛选手的代码,学习比赛的套路;3. 做完以上两步,就可以开始参与比赛了,天池、CCF、DataCaslte、Kaggle等平台的比赛都可以,不要贪多,同一个时间段最多参加2个比赛就可以,然后每天坚持优化结果,虽然过程可能会有点枯燥,但是最终会有收获的,经过观察与亲身实践,这类比赛比较吃经验(套路),要想取得比较好的名次,通常需要参加几次比赛积累失败的经验才行,过程少则半年,多则一年。

三、算法题一定要刷! 如果时间紧,就刷上面说的三件套(leetcode高频题、lintcode高频题、剑指offer),当然,要多刷几遍,做到看到题目立刻想到思路并写出bug free的代码。如果时间比较充裕,可以刷刷leetcode中medium和hard的题目,锻炼思维与编码熟练度,总之,刷题是一个持之以恒的过程,切忌三天打鱼两天晒网!

四、专注于一个方向! 发现有些同学(包括我年轻时候),总喜欢这搞点那搞点,今天学一下机器学习,明天学一下Java后台,后台再学一下前端。这种方法对于大部分人来说是错误的(大牛忽略)!你要搞机器学习就专心搞,三条线并行搞:1. python -> 刷比赛  2. java -> hadoop/mapreduce/spark 3. python -> 深度学习,工作没你想象中那么难找。

作者:智障哦

本文来源于牛客网

——————————

牛客网(www.nowcoder.com)

- 互联网名企笔试真题

- 校招求职笔经&面经

- 程序员求职实习信息

- 程序员学习交流社区