作者 | 石晓文
来源 | 小小挖掘机(ID:wAIsjwj)

01

2017.08.14,结束了两周的等待,如愿以偿开始了自己的美团实习生活,本来抱着三五个月走人,争取下一份实习的心态,没想到一直到转为暑期实习生、到通过留用面试、再到年后继续实习,直到今天,我已经在美团度过了615个日夜。这里的人,这里的事,一切都十分美好。

写本文的目的,是想通过自身的实习经历,来总结下一名算法工程师所需要具备的基本的能力,当然,这仅仅是从我本人经历出发,如果你已经对这个岗位有了深刻的认识,那么你可以点击退出;如果你仍然处于迷茫阶段,那么我希望本文能够对你起到一定的帮助。

从我在美团这两年的实习中的所做所见,作为一名应届算法工程师,我认为应该具备下面的几种能力,当然,这种能力针对那些偏业务的算法工程师,而非纯研究型的。

1、算法的基本认识

一名算法工程师,最基本的算法能力还是必须具备的。不过,随着深度学习的发展,传统的方法如SVM等算法在实际应用中已经很少使用,至少这两年间我是没有用过的,模型一般使用的是Xgboost和LightGBM作为Base,随后使用深度学习方法或者强化学习方法进行提升。当然,推荐领域的LR和FM等方法仍然有所使用。所以,树模型是一定要牢固掌握的,然后针对你不同的求职方向,学习一些相关的深度学习模型,以及深度学习模型中一些小trick,如dropout、正则、Batch-Norm等。关于数学,个人感觉深度学习的发展已经开始弱化对于数学的要求,不过基本的梯度下降、反向传播、树模型的推导、LR的推导、FM的推导等,还是必须要掌握的。

2、过硬的代码能力

一名算法工程师,Python无疑是最适合我们的语言,但是是不是只有Python就足够了呢?当然不是,算法工程师,包含算法和工程两个方面。Python可以帮我们实现算法,还需要学习一门语言帮助我们的算法能够应用到线上。在美团,我们使用的是Java语言,作为一名实习生,我还没有机会接触到能够上线的代码,不过在未来,一定是需要负责线上代码的,所以java语言也是需要熟练掌握的。

需要提醒大家的是,尽管你可能觉得一些数据结构的知识,对于一名算法工程师来说仅仅是用来应付面试,在实际工作中并不重要,这么想,其实是大错特错了。我们很可能在不经意间,就会需要用到数据结构的知识,比如这两年我用到最多的就是Trie树。掌握好数据结构,无论是对面试还是将来的工作,都是十分重要的。

3、数据处理和分析能力

一名偏业务的算法工程师,数据处理和分析的能力是必备的。首先,一般我们都会为自己设定一个业务目标,比如整体的转化率,那么我们通常会将此分为各个阶段,并观察每个阶段的情况。比如分析外卖的整体转化率,可以划分为曝光、用户进入商家页、用户进入提交订单页,到最后完成支付等几个阶段分别观察效果,一旦哪个环节出现问题,我们可以快速定位解决。其次,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。在使用机器学习或者深度学习模型时,我们必须从大数据中提取我们的训练数据,计算相应的特征,并分析特征与我们的目标之间可能存在的关系。

在刚去美团的两个月,基本没有接触到模型相关的东西,主要负责的是建立一整套产品的数据指标框架,比如漏斗模型、留存率等等。尽管在当时觉得很枯燥,但是现在想想对自己的提升还是十分重要的。

说了这么多,数据敏感度是可以通过与数据打交道不断培养的,但是基本的工具我们可以提前掌握。在美团,我使用最多的是spark sql和hive,这大概会占据我70%的时间。关于hive,掌握一些常用的函数的使用方法,如concat_ws,row_number,case..when,if,get_json_object等等,对于spark sql,掌握其运行的基本原理,以及一些常见问题的处理方法。首先,学会如何处理数据倾斜,有时候因为一个数据倾斜问题,一整天都浪费在调试一个spark代码中了,其次,学习如何尽量减少spark任务的空间占用,同时加速spark任务运行速度,spark作业在线上调用时,会占用公共资源,你的任务占用的资源越多,别人占用的资源就越少,同时,如果你的任务运行的快,也可以给别人的任务更多的空间。spark可以通过很多语言来实现,不过我建议还是学习一下scala吧,毕竟可以和java无缝衔接。除了spark和hive,掌握一定的excel知识也是必要的。

4、模型的积累和迁移能力

在工作中,模型的积累同样是必要的,现在模型五花八门,如Transformer、Bert、DIEN等都是这几年才提出的新模型,对这些模型,我们需要不断跟进积累。同时,光了解这些模型怎么做的还不行,关键是了解这些模型为什么要这么做。但是,光积累这些模型是不够的,还需要与自己的业务相结合,针对一个业务问题,如果你能快速想到一个可行的解决方案,那么说明你的积累还算凑合,如果你无法想到一个合适的模型,那说明你还差得很远。同时,对于你新学习的模型,学会反思能不能将其部分的思想应用于你的业务问题,并对现有的模型进行改进。

好了,说了这么多,我们怎么能从繁忙的工作生活中,了解到最新的论文信息呢?对于我个人来说,主要有以下几个渠道吧:PaperWeekly公众号、原创号主(从个人看来,许多热门公众号的内容大同小异、送书、送资料、互推这种活动,使得公众号商业化了,这些公众号尽管关注人多,但我并不认为它能带来更多的价值。仅个人观点,也许是我看的少,嘻嘻)、学习交流群名词积累(在我自己的学习交流群,大家在交流的时候会说出一些自己不懂得模型,比如前几天的深度树匹配模型,如果你不懂,把它记下来,回头再详细理解)、分享交流会(在美团,一些交流会是十分有价值的,比如张俊林老师的推荐系统分享、王仲远师兄的知识图谱分享等。如果你没有机会参与这些公司内部的交流活动,那么如DataFun社区提供的免费讲座,可以多报名参加)。

5、产品能力

好吧,人人都是产品经理,我们RD有时候也是可以翻身做主人的,不一定在任何情况下都听产品经理的需求,我们需要对这些产品需求有自身的一个认识。不得不说,我在这方面还是有所欠缺的。并不是每个人都具备天生的产品思维,但只要你多看,多想,多问,相信你的产品能力一定可以有所提升,重在积累。

6、软实力

软实力包括思维能力、沟通能力、表达能力、文化修养、学习能力、团队协作能力等等,上面这些是在工作中大家需要注重培养的。

02

好了,以上是我在美团实习近两年来对于算法工程师这一职位的一点基本的认识。接下来,如果你已经取得了比较好的offer,那么到此你可以退出了,但是如果你还在准备今年或者明年的校招面试,我希望你可以继续看下去,我会和你分享一下去年校招过程中自己的一些经验:

1、笔试

提前批的公司有的是免笔试,而有的是免简历筛选,笔试题型主要有几种:
1、选择题:选择题涵盖的内容还是很多的,基础编程知识如C++和Java、概率论、机器学习基础、深度学习基础、数据结构等等
2、编程题:一般是leetcode中等难度
3、简答题:简答题主要是手推公式和业务理解。

2、面试

我在去年校招参加了十几家公司的面试,收获了10个左右的offer,总体感觉是:公司对于算法工程师的要求越来越高。面试主要考察的点有以下几个方面:
1、实习、论文、比赛:面试官一般会让你先进行自我介绍,然后会根据你简历上写的实习经历、论文、比赛经历进行展开。所以简历上的东西一定要是你亲身经历过的,可以按照STAR法则进行讲解。在这过程中,面试官会从算法理解、业务理解等多个方面考察你。
2、深度学习/机器学习基础:在聊完简历项目之后,往往会考察一些算法的基础。常考的是过拟合的解决、正则项、boosting模型等等,这一块需要你对深度学习/机器学习基础有所了解,同时对常见的模型有深入的认识和理解。对于简单的公式也需要理解和掌握推导(LR、普通神经网络反向传播、RNN和LSTM的前向传播、SVM、XGBoost等等)。
3、手撕代码:手撕代码题各公司的难度不一样,不过一般leetcode的中等难度的题就可以。小编建议,大家一定要把数组、链表、二叉树和动态规划的题目掌握好。
4、智力题:常考的就是概率计算问题。
5、业务理解:这一块小编觉得是非常难的,一般会给你一个场景,让你设计一套算法流程,或者问你对于当前你的项目,后续的工作方向等等。
6、其他:其他的面试官可能会考察一些工程上的问题如多进程、多线程等、spark/hive等等。

3、面经分享

1、阿里(四面未通过):https://www.jianshu.com/p/304e1023c4cb
2、百度核心搜索部(三面未通过):https://www.jianshu.com/p/02d931d5c1c8
3、知乎(三面未通过):https://www.jianshu.com/p/40259bb05357
4、ThoughtWorks(初试+sp加试 通过):https://www.jianshu.com/p/0b5514908683
5、美团留用面试(共一面,通过):https://www.jianshu.com/p/bbe21ff40724
6、便利蜂(共三面,通过):https://www.jianshu.com/p/51e2d16f16a5
7、贝壳(三面+sp假面,通过):https://www.jianshu.com/p/cd0a809cf198
8、一点资讯(共三面,通过):https://www.jianshu.com/p/fffc15c9d31d
9、百度Feed(二面未通过):https://www.jianshu.com/p/65032f77f903
10、猫眼(三面未通过):https://www.jianshu.com/p/c32787be3dc8
11、搜狗(共三面,通过):https://www.jianshu.com/p/8a116eb7fd32
12、小米(共两面,通过):https://www.jianshu.com/p/e34ebebae15f
13、滴滴(共三面,通过):https://www.jianshu.com/p/bc9d5f8206a0
14、拼多多(共两面,通过):https://www.jianshu.com/p/a15bc7d0686a
15、爱奇艺(共三面,通过):https://www.jianshu.com/p/4ceb5de29c76
16、头条(共三面,通过):https://www.jianshu.com/p/5bc533d1bf62

可以看到,个人感觉自身还是有很多不足之处的,总结几次面试失败的原因,主要有两点,首先在于数据机构题掌握的不佳,没有学会举一反三,比如百度的面试、知乎的面试;其次在于对于业务的理解不够深入,还停留在领导派活,埋头苦干的地步,自己对于业务的思考不足导致面试失败的,比如阿里和猫眼的面试。

4、资料推荐

下面推荐一些资料帮你更好的进行复习吧:
1、《统计学习方法》经典中的经典,建议至少读两遍!
2、《百面机器学习》对一些面试常见问题进行了总结和梳理
3、深度学习500问:https://github.com/scutan90/DeepLearning-500-questions/
4、SVM:http://blog.pluskid.org/?page_id=683
5、李宏毅深度学习课:https://www.bilibili.com/video/av9770302?from=search&seid=9066694202064136038
6、李宏毅强化学习课:https://www.bilibili.com/video/av24724071?from=search&seid=11841282802558935758
7、李宏毅机器学习课:https://www.bilibili.com/video/av35932863?from=search&seid=7464664329294734466
8、线性代数的本质:https://www.bilibili.com/video/av44855426?

from=search&seid=158733406463206973

写在最后

说了这么多,最后希望你在今年的秋天或者未来的某个秋天,能够顺利拿到自己心仪的offer,同时希望你能够不忘初心,砥砺前行!加油!

原文链接:我在美团的这两年,想和你分享

精彩推荐

6月29-30日,2019以太坊技术及应用大会 特邀以太坊创始人V神与以太坊基金会核心成员,以及海内外知名专家齐聚北京,聚焦前沿技术,把握时代机遇,深耕行业应用,共话以太坊2.0新生态。

扫码或点击阅读原文,既享优惠购票!

推荐阅读

  • Python从入门到精通,这篇文章为你列出了25个关键技术点(附代码)

  • 基础必备 | Python处理文件系统的10种方法

  • B站超全分享!2万人收藏的免费计算机科学速成课

  • 如何正确的获取数据?

  • 苹果 SwiftUI 踢馆谷歌 Flutter!

  • 惊!为拯救美国落伍的 STEM 教育,纷纷出手教老师编程?!

  • 超级黑幕:开发者千万别被算法迷惑了!

  • 程序员爬取 42 年高考数据,告诉你高考为什么这么难?

  • 把病毒写到区块链上可以永远不死? 我们做了一个大胆的实验…… | 技术头条

  • 新一代私有云来了!看透基于开源生态的产品化

点击阅读原文,查看更多精彩内容。

我在美团的这两年,想和你分享相关推荐

  1. 美团外卖的两个“健康闭环”

    在商业领域已经取得巨大成功的美团,正在进入其社会价值创造新阶段. 一点财经 邱 韵|作者 刘 煜|编辑 能力越大,责任越大! 一场疫情让很多企业展现出了与商业形象不同的另一面.比如,城市生活服务类的公 ...

  2. 海归|94年的高校女博导,自曝曾两次想退学,如今获国家60万资助!

    近日,人力资源和社会保障部公布了2021年度高层次留学人才回国资助计划入选名单. 全国有30人入选这一计划,而四川仅电子科技大学有1人.很快,学校官微的一篇推文引发关注. 据介绍,该计划是国家为鼓励留 ...

  3. 如果两个人想好好的在一起

             如果两个人想好好的在一起,必须有一个人特别特别会忍.那些难过.那些委屈.我很想说,其实我都懂.一个人在黑黑的夜里.被冷冷的风吹着是很孤单的. 我要你开开心心,即使再难过,当想起有个人 ...

  4. 外贸业务12年,我想和大家分享这几点感受

    如今再回看这段经历,很庆幸我的三观一直都很正确,那就是买家第一. 不管是什么原因,只要你想退,我都可以接受退,我不能退回上级供应商的那我就自己留着,只为了不想因为这一次拒绝而失去这个买家: 不管是什么 ...

  5. 做程序员累了想要转行?我想给大家分享一下看法

    今天早上起床时,我看到有粉丝评论说关于程序员的话题,如果做着觉得累了,就会觉得自己不适合这个工作,想转行.我想给大家分享一下我的看法. 在我刚开始工作时,有人说我不适合做这个工作,但是我坚持了下来,做 ...

  6. 美团后台开发两轮面经(已offer,题目很全)

    恭喜发现宝藏!搜索公众号[TechGuide]回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至美团.微软- 作者@TechGuide[全网同名] 基本情况 投递岗位:后台开发工程师 投 ...

  7. 又一位!26岁当上985博导,读博期间也曾两次想要退学......

    关注"视学算法",一起学习一起冲鸭! 设为星标,第一时间获取更多干货 来源:电子科技大学.成电教师中心.电子科大基础与前沿研究院(ID:i_ff_s) 来自:计算机视觉联盟公众号 ...

  8. 26岁已经是“双一流”高校博导!读博期间也曾两次想要退学......

    来源|成电教师中心 四岁上小学,二十四岁博士毕业,刚满26岁的她,已经从"别人家的学生"成为"别人家的老师",正式成为"双一流"高校的博导. ...

  9. 审完两篇想要发表在顶刊上的文章后,能学到什么?

    全文约4800字,阅读预计时间12分钟. 以下记录了我从刚开始准备审第一篇PC,到完成第二篇NC的审稿经历及观点,看完你大概能了解到审稿的全流程.如何审稿.review report该如何写.对撰写文 ...

最新文章

  1. 浮点数在计算机中的表示
  2. 怎样才能让一段代码每隔一段时间执行一次?
  3. Python 类常用各种方法及区别
  4. 1、leetcode437 路和总径3
  5. Linkis 编译文档
  6. 内置锁的能力不足以满足需求
  7. tde数据库加密_如何将TDE加密的用户数据库添加到Always On可用性组
  8. .NET下解析Json的方法
  9. java单线程爬虫使用Jsoup爬取bt磁力链接
  10. tomcat 热部署 生产环境_详解tomcat热部署和热加载的方法
  11. 《Head First Java》学习整理
  12. android.benign病毒,benign virus
  13. Win10桌面图标显示白色但能正常使用
  14. 最全超实用的网站SEO优化方案步骤解析
  15. Epic games 一直卡在 在我们启动更新时请稍后的解决方法
  16. Microsoft Edge浏览器安装Chrome浏览器主题
  17. WPS JS 宏实现表间导入
  18. 【信息安全】-病毒 VS 木马 VS 蠕虫
  19. 杰理6905A芯片使用T卡升级方法
  20. 造成电脑非正常关机的常见五大原因剖析

热门文章

  1. Entity Framework CodeFirst数据迁移
  2. 改变shell read命令的隔符
  3. android studio字符串转整型,Android Studio 中的FindBugs插件使用,轻松帮你发现Bug (转)...
  4. 多传感器融合技术简介
  5. 2018-3-5 (论文—网络评论中结构化信息处理的应用于研究)笔记三(互信息,信息增益,期望交叉熵,基于词频的方法,CHI统计)
  6. 记录一次爬取某昵称网站的爬虫
  7. 三、Bean的初始化
  8. OpenJDK 编译-Linux环境
  9. Install Package and Software
  10. (拆点+最小路径覆盖) bzoj 2150