一个双非渣硕的自我救赎之路

一、前言

往昔的回忆使我们激动,我们重新踏上旧日的路,一切过去日子的感情,又逐渐活在我们的心里;使我们再次心紧的是,曾经熟悉的震颤;为了回忆中的忧伤,真想吐出一声长叹……
感谢一路上曾经鼓励、帮助过我的人。愿我们在彼此追梦的道路上,一直走下去。


二、选择有时候比努力重要

2016年,那个炎热的夏天,拿着手里的保研名额,以及清北华五的录取意向,我最终选择来到了目前所在的地方 —— 北京某双非院校。
就目前来看,我当时确实做了一个不怎么正确的决定,我并没有任何诋毁我院的意思(我们这一届仍然有非常多实力强大的大佬),只是可能不适合我,或者理想与现实的差距使我有一种深深的懊恼。
整个实验室,方向是偏安全的,当时懵懵懂懂的我幻想着的是黑客帝国的名场面,以及传言中吴瀚清大佬几分钟黑进阿里系统的画面,但做了一段时间后...goog game,well play(好像知道乔碧罗真面目后的榜一,心态炸裂)
没有海量数据交互,我接触不到真正的高并发;
没有算法底蕴,我也没办法从事自己喜欢的研究;
我甚至被派去某不知名小公司做了2个月的外包,只为完成实验室当时即将要交付的任务,因为路途遥远,买了折叠床睡在公司,7、8月份酷热的北京而我只能一周洗两次澡...
我曾不止一次萌生过退学的念头,要不是组里的师兄真的非常好,要不是组里的逗比同学也足够欢乐,我可能早就坚持不下去了。
有时候,在黑暗的环境中,身边这些可爱的人,就是光。
频繁的更换方向,使我没办法在一个领域深耕下去,从大四保研到目前研二,我涉及过的方向众多:
我写过分布式系统,做过高并发后端,甚至自己提需求,完成了一套自学习算法框架(说实话,当时根本不知道有Auto ML这一说,后来发现当时的写的东西竟然和Auto ML有几分相似)
我复现过恶意代码Mirai,逆向了过大疆无人机的的漏洞,做过蜜罐也识别过蜜罐...
研究过半监督学习理论,写过态势感知平台,也做过信息抽取的设备识别...
在自己倒腾了3个月CV后,最终把方向定在了NLP领域...
现在回头看看,这些对我帮助大吗?
可能有,但并不显著,最多培养了我快速学习的能力,但是这些技能的培养完全可以通过其他方法,而并不是这种东榔头西一棒子的方式。
我现在仍然可以毫不避讳的说,研究生阶段教会我最重要的一个道理就是:
选择有时候比努力更重要。

三、下定决心,决战红海

下定决心死磕算法大概是起于研一下学期,选择的原因很简单,我们实验室不可能给我提供高并发的实验环境,但是互联网的上的公开数据集却能给我提供一个和世界上最顶尖团队同台竞技的舞台...
顶着去年算法报录比560:1的就业压力和实验室完全没有算法方向的尴尬境地,我还是义无反顾的踏上了这段旅程。
现实比我预料的要惨烈很多...
没人带的时候,入门极其艰难,第一次参加天池的比赛,靠着抄开源才能勉强爬到600名的我,一度对自己产生了怀疑。
当时一个XGB源码读了一周的我,现在想起来也不亏...
总之既然下定决心了,就一往无前吧,哪怕尸横遍野,头破血流。
Tips:
昨天有个学弟来问我,还要不要转算法,我这里还是持保留意见,这个不妨问问自己,你如果是为了钱,那大可不必,从今年校招的形式来看,算法和开发的价位并没有明显的区别,很多大厂已经持平。如果确实是对概率论、矩阵论、线性代数以及数据科学感兴趣的同学,想解决世界性难题的同学,还是依旧推荐算法岗位的。
但请务必记住:
算法工程师的前提一定是一名工程师,不论何时,你的编程能力,都是你的底牌。
如果看到这里,有想转开发的同学,欢迎移步( https://www.nowcoder.com/discuss/331574?toCommentId=4824987),看开发大神如何只用5个月,拿下美团ssp顶薪offer。



四、自我救赎

我秋招大部分拿的都是算法岗的offer(确实也会有几个开发的offer),所以这里主要谈谈算法岗的经验。
从目前的形势看,想找到一份好的算法工作,你需要具备三个特征:大厂实习(项目经验)、顶会论文、比赛Top。
  • 三者具备一者,其实就可以保证你能找到一份算法岗的工作
  • 三者具备两者,其实就具备了收割普遍大厂的offer的能力
  • 三者全具备,那就完全具备了收割大厂核心部门ssp的能力(秋梨膏,带带我好吗~ )
当然以上三点的前提是,你的编程能力必须过关。

(1)比赛

比赛这方面,最快的捷径就是有人带,如果实在没人带,只能考自己多看多学多思考,并没有其他的方法
这里放一个牛客网红天才儿童的总结,其实我想说的和他差不多(帮暴躁老哥引流一波,昨天老哥退百度群的最后一面也没见着,当然了,其实是没抢着大佬发的大红包很心疼,滑稽.jpg)
秋招总结:非机器学习科班学生漫长的算法工程师上岸之旅
这里需要加几个额外提醒:
暴躁老哥提到一个比赛的周期是三个月,所以你的试错成本很高,这里不妨同时参加多个同类型比赛,用一套基模型去尝试,然后针对特定的数据做定制化修改,最后决赛阶段选择尽可能获得高名次的那个比赛,再专心参加。
NLP类的比赛,如果数据没脱敏请一定先上Bert、ERNIE、XLNet这些预训练模型好吗...血泪教训。

(2)论文

这方面本菜鸡就不班门弄斧了,只有CCF水文的我,瑟瑟发抖...

(3)项目

项目这边也没什么好说的,都是跟着实验室走,如果有出去实习的机会一定要抓住实习的机会,这里能给简历增色不少。
那这里给大家简单介绍一下,项目在简历里如何呈现吧。
这里我觉得和写论文有几分相似:
首先你要知道该领域的state-of-the-art,但是肯定有他的缺点。
那么引出你的方法,以及你具体的改进。
最后说一下你改进的效果,是精度的提升还是缩短了时间、提高了效率等。(注意这个工作一定要是可量化的)

(4)编程能力

编程能力在我看来不是一朝一夕能练成的,当然如果你为了应付面试,其实刷完leetdode前200道题和《剑指offer》其实也够了。
这里重点推荐一下左神的程序员代码面试指南,里面总结的非常全面,配合牛客对应的OJ(https://www.nowcoder.com/ta/programmer-code-interview-guide),食用效果更佳!!
但这里我更推荐把coding当作一种基本能力,一种基本的日常,和吃饭睡觉一样。
因为我本科是做ACM的,也侥幸拿过一些奖,之后虽然退役了,但是为了保持这种Coding的习惯,我会时不时的去刷刷leetcode周赛,我觉得保持一种时刻Coding的状态是非常有必要的。这一点也为我后期准备面试节约了大量的时间。
这里记得要多看看最优解法,我始终认为最快掌握一门技能的方法就是模仿,有时候自己写10000行代码,不如看大牛写100行代码进步快...

(5)基础知识

基础知识的重要性不言而喻,我本身喜欢看书,而不喜欢看视频,觉得看书能更细致全面的掌握知识点。当然这个因人而异。
入门级别的西瓜书《机器学习》
公式详尽李航老师的《统计机器学习》(《统学》已经有第二版啦,增加了不少内容,推荐大家购买,去参加字节openday的时候,很开心获得了一本李航老师亲笔签名的《统学2》,星星眼.jpg)
偏实战的《机器学习实战》
偏架构的《深入理解Tensorflow 架构设计与实现原理》
NLP:宗成庆老师《统计自然语言处理》(当时讲课的时候,宗老师说不看好深度学习在NLP领域应用,觉得可解释不强,现在看来哈哈哈,真香,宗老师还是非常可爱的~)、《基于深度学习的自然语言处理》
CV:《计算机视觉——算法与应用》,这书看了2个月 = =放弃了,有谁要嘛?低价处理 哈哈哈~
基础理论类的《概率论基础教程》《线性代数基于应用》《最优化理论与算法
最后就是一些常用的比赛模型一定要了解,遇事不决看源码!

五、面经汇总

整个秋招过程,我面试过15家公司
vivo、阿里、百度、华为、京东、陌陌、追一、美团、搜狗、依图、拼多多、顺丰、字节、Airbnb、Google
最后侥幸获得了13家公司的offer,其中6家ssp,6家sp,1家白菜,薪资待遇30+W —— 60+W不等
下面贴一下部门公司面经:

7.8
字节提前批【超级工程师计划——算法】面试
一面(1.5h):
1.项目介绍
2.介绍一下当今在信息抽取领域的state-of-the-art
3.你提出的网络结构和CNN、LSTM等经典结构比的优劣
4.手推LSTM的梯度反向传播
5.手推LR
6.手推XGboost
7.sigmoid和softmax的区别,sigmoid判别阈值如何选?
8.选一门编程语言实现k-means

二面(1.5h):
1.挑一个你印象最深的比赛介绍一下(从拿到题目开始的所有流程)。
2.那我们做两道算法题吧:
(1)第一道题目不好描述,反正就是写了一个裸的网络流。
(2)给你一个无序数组,给你一个K,求所有和为k的倍数的子序列的个数,如果换成子数组呢,时间、空间复杂度分别是多少?(这题卡了挺久的,子序列直接dfs,子数组只能想到O(n^2)的办法,但直觉上知道一定有O(n)的解法,硬是从dp想到背包,从背包想到双指针..未果。最后在面试官的提示下,用前缀和写了个O(n)的解法,面试官人很nice,一步步引导)
之后一直没消息应该是凉了。

(总结一下,字节的提前批面试也算是我正儿八经的第一次面试,但是确实由于当时很多知识点没有深入下去仔细挖掘,导致很多东西其实有看过,但是忘记推导了,也暴露了我很多的不足... 而且,字节格外注重基础和算法功底的模式,让我在准备接下来的秋招中,有了更明确的准备方向——静下心来,对ML、DL的算法深挖,公式可以信手拈来,同时保持一个良好的demo手感)

【正式批再战字节 —— 算法工程师】
笔试成绩 350/400  顺利进入面试环节
现场三轮技术面:
这一次面试就感觉更加从容了,所有问题和大家发出的面经都大同小异,这里就不一一赘述了,模式都是手撕代码、讲项目、问一些零散的ML、DL知识点以及推一些公式。
所有问题,没有不会的,甚至我的每一个问题,都给了面试官格外的回答。
比如:
讲一下随机梯度下降的推导,我就顺手把牛顿法和拟牛顿法也说了一下,推了一下
说一下kmeans是如何做的吧(怎么又考kmeans?),我就又说了k-means的缺点,并且延伸到DBSCAN和OPTIC是如何修复它的缺点的。
三轮手撕代码,基本都是秒撕,保证每个题在5-10分钟之内做到bug free。
(1)加权编辑距离
(2)链表的局部反转
(3)不同形式的二分
(4)两个01数组,找到对应位置的最长子数组使其拥有相同个数的1

三面下来,和每一位面试官都聊的很愉快,第二天帮忙内推的学长告诉我,内网已经显示终面通过(其实还挺想再加面几轮...)。



7.20 阿里 智能营销部  机器学习
一面:
1.自我介绍
2.说说项目挑一个你最自豪的项目
3.开始针对项目中用的知识点,疯狂针对
4.几篇论文挑1篇你收获最大的,又开始新了一轮的针对
5.GRU和LSTM的优劣
6.梯度下降的算法你知道哪些?公式写一下,能推导一下嘛?
7.你觉得RNN及其衍生网络过时了嘛?
8.用C++编程题: 找两个链表的交点
9.面试官:方便加个微信吗?(我:....)

二面:
1. Linux平时用的多吗?用一条命令找一下文件中出现次数top5的word
2.C++了解到什么程度了?挑一个容器实现一下STL源码?
3.map是吧? map当key不存在时候的时候,会有什么后果?(这里真是晕...平时用的python多,dict不存在key值报错,如果是defaultdict就不会报错,这里我直接顺口说了会报错...难受..)
4.这个项目详细跟我介绍一下?
5.论文blablabla
6.编程第k大的数(NlogK之后,我说:这道题还有平均O(N)的解法需要写吗?)
7.LR推一下
8.你有什么想问我的嘛?

交叉面:
久等了~请坐,你辛苦了,也累一天了,我们来点简单吧(心里暗喜)
Q:机器学习算法都了解吧?哪些比较熟悉?
A:XGB、LGB等决策树,毕竟比赛老用
Q:这样啊,那我手推一下SVM吧
A:(我:那你问我熟悉得干嘛???)
Q:为什么必须满足KKT条件?
A:(我:不是说好简单的吗?)
Q:EM知道吧,推一下?
A:(我:不是累一天了吗?)
Q:Jensen不等式证明?
A:(我:....)
Q:有哪些防止过拟合的方法?
Q:dropout收敛性证明?
A:(心态已经崩了 ...)
Q:  说说项目
Q:有什么想问我的吗?
Q:我们加个微信吧~
A:(我:emmm,好)

HR面:
这就没啥了,安利了一波阿里
得知我晚上9点多还没吃饭,给我点了一份外卖,谢谢HR小姐姐

一天四面,从上午9点出门,晚上12点才回宿舍,一天就吃了一个面包....半条命已经没了


7.28 拼多多学霸专场



7.30 追一科技
(那我们先聊聊工程吧~)
1.python可写对象和不可写对象
2.协程
3.闭包
4.lambda
5.hash,让你设计你会如何设计
6.装饰器
7.各类排序时间复杂度,快排为什么快?
8.信息抽取相关
9.精度召回
10.NLP其他评价指标


8.1 美团北斗计划
一面(40min):
1. 聊比赛
2. 概率期望题
3. (手撕代码)N个节点,深度为K的树结构有多少种?这题可以按层次考虑,利用组合数的思想去解题。

中科院专场,隔了二十天约望京总部的2面+3面(我一度以为自己挂了=。=)

8.20
二面(1.5h):
(“嗷~中科院的呀,我也是”,“学长好,学长好~”)
1.项目
2.比赛
3.demo跳格子,用动态DP就能直接解,然后问能不能用贪心,我想了一会说可以,然后让证明贪心算法的正确性
4.demo有序数组找某个数出现的次数,二分找上下界就行
5.详述一下Elmo、GPT、Bert
6.梯度爆炸公式推导
7.transformer的优势
8.word2vec两种方法各自的优势
9.还有一些具体模型的调参细节

三面(搜索组leader面 2h):
1. 性格
2. 学术生涯
3.各种聊~~
4. 聊了聊手里的其他offer
5.如果把这些offer分成三挡,你怎么分
6.安利了一波美团智能搜索与NLP部
7.反问

四面:总监面
一周后,简单问了问项目,成绩,论文之类的。
手里的offer,大约20分钟

五面:HR面:
听常规的,没啥好说的



8.3 陌陌
一面(1h30min):
1. 手推LR
2. 大数相乘
3. 接雨水(hard  leetcode 42)
4.挑了2个项目聊
5.挑了2个比赛聊
6.聊了一下NLP的未来
面试官是个文文弱弱的大哥哥,说话细声细语的,哈哈哈   人很好~ ^_^

二面:(1h)
1. 两个项目的技术细节,问的很深
2. 聊了当前各种深度学习模型的细节,优劣,改进
3. 做了个题,忘记是啥了

三面:总监面(2h30min)
这个真的聊了非常久,收获巨大
据说总监说,他只挑了几个人面(其他还有2篇IJCAI的大佬和kaggle TOP1的大佬...我这个没顶会没top1的选手不知道为啥会被叫来),只是我看了是当天面试官评分的最高分,而且求学和ACM经历都和他相似,就把我捞出来,想我单独聊一聊。


8.5
百度
核心搜索部 Rank组
一面(1h20min):
1. 项目深挖
2. 第k大的数
3. 编辑距离
4.开放问题,搜索排名

二面(1h20min):
1. 比赛细节详聊
2. 设计一个热搜算法
3. 如何评价搜索结果好坏
4. 如何修正搜索结果
5. 还有一些具体业务方面的问题,记不清了
6. 多线程矩阵乘法能写嘛?(算法导论 P465)当时有点懵... 写了一个Strassen但肯定不是面试官想要得.. 面试官说没事,这个问得有点偏。

三面(1h10min):
1. 自我介绍
2. 性格、自我评价等
3. 具体的业务
4. 有什么诉求,更看重什么
5. 一道dp扔鸡蛋问题
6. 反问环节聊了很多,面试官也详细接受了搜索目前的现状和一些难题,感觉很有意思。

面试过程中,才发现这是百度非常核心的部门.... 稀里糊涂就报名了

8.17 搜狗
一面:1h
1.自我介绍
2.TopK代码
3.链表反转代码
4.项目
5.FastText
6.Word2Vec区别
7.DSSM
8.多线程编程基础
9.C++中STL的set和unordered_set的区别(这个刚好之前看过底层实现的源码,set底层实现是RB-tree,unordered_set是基于hashtable实现的

二面:1h
1.聊比赛
2.做特征的过程、想法和思路
3.聊项目
4.xgb中feature_importance是如何计算的
5.代码题:C++实现skip-gram中的负采样中的核心代码
6.有没有拿了其他家的offer
7.反问环节
8.然后又安利了一波自己的部门(可能看出了我得知是做垂类搜索后有点失望的表情)

总结:面试问题不难,但是面试的组是搜狗搜索的图像搜索,我也不知道我一个做NLP的为什么会被这个组拉过来面试,面搜狗肯定是想面试输入法部呀。


依图:
一面:
1. 最大连续子数组(用贪心, 然后给出贪心正确性的证明)
2. 最大连续子矩阵
由于原远程面,上面2个题,都要做到bug free(因为需要跑数据),大约用了30分钟AC了
3.项目
4.聊了聊比赛和论文


二面:
1.项目
2.比赛
3.编程题,不停扩展,难度应该是easy-》mid-》hard,我觉得这种题目还挺有意思的,挺看思维的,题目描述起来比较麻烦,就不说了
4.一道数学题
5.一道概率题
二面小哥人特别好,他那边声音比较嘈杂,在我demo的过程中,他会把他那边声音关掉,怕影响我思路~

三面:
1. 项目
2. 比赛
3. demo:螺旋矩阵
4. 反问

北京CTO面:
聊了聊项目

六、抉择

最后选择的结果,其实已经更新在资料中了...
至于为什么这么选择,我的想法也很简单,既然决定了做搜索推荐这个方向,那为什么不去看看当今中国最优秀的搜索引擎到底是怎么做的呢?(什么??第一次听说把不想996说的这么清新脱俗,hhhh)

其实遇到很多朋友纠结手里的offer情况,是该选择大厂的平台还是小厂的薪资?
这里我只能说完事都具有两面性,没有绝对的好坏不是吗?
都是应届生,我也不敢干扰大家的选择,你只需要知道自己真正想要的是什么就可以了。Follow Your Heart (这里并不推荐去脉脉上询问,你看多了会发现,没有可以去的厂,hhhh,毕竟公司内组与组的差别比公司和公司的差别都要大)
这里只说一下我对大厂的理解吧:
完善的基架,稳定的业务,正规的培养流程,积极的工作氛围,不低于市场的薪酬,身边的有该领域的大牛、我觉得可以称之为大厂……


七、后记

希望多年之后,再回来看这个帖子的时候,我不会后悔现在的选择。
或者说,这是世界上本来也没有正确的选择,只有通过以后努力奋斗,把当初的选择变得正确。

------------------------------------------------------------------------------------

如果有做搜索、推荐、NLP相关的朋友,想交朋友的,欢迎私聊,一起进步,一起加油吧~


#阿里巴巴##字节跳动##百度##校招##算法工程师##面经##学习路径#
全部评论
15个面试 13个offer 6ssp 6sp。。。我看得一愣一愣的。。。tql
60 回复 分享
发布于 2019-10-29 15:31
😂所以说嘛,还有一堆学弟学妹以为算法岗不需要编程能力挤破头想来,殊不知要求更高
4 回复 分享
发布于 2019-10-29 16:17
太强了,学不来!
3 回复 分享
发布于 2019-10-29 15:41
中国科学院大学,双非渣?你确定,双非是事实,渣?
3 回复 分享
发布于 2019-10-29 15:57
老哥自动化还是计算所?
2 回复 分享
发布于 2019-10-29 15:37
我什么时候成牛客网红了,我算哪根葱啊看了你的经历,你真踏🐎是个神仙
2 回复 分享
发布于 2019-10-29 17:32
这他妈是个神仙
1 回复 分享
发布于 2019-10-29 15:37
原来我关注的大佬竟然是闸总😁
1 回复 分享
发布于 2019-10-29 16:12
楼主帖子里提到的左老师书《程序员代码面试指南》在线配套OJ,大家别错过了。 https://www.nowcoder.com/ta/programmer-code-interview-guide
1 回复 分享
发布于 2019-10-29 16:38
最后去哪儿了 大佬
1 回复 分享
发布于 2019-10-29 17:57
中科院大佬都说自己是双非了,我连双非都不是了😭
1 回复 分享
发布于 2019-10-29 20:15
目瞪口呆
1 回复 分享
发布于 2019-10-29 22:41
乐乐崽可真是太厉害了,实验室渣渣膜拜
1 回复 分享
发布于 2019-10-30 10:04
"有时候,在黑暗的环境中,身边这些可爱的人,就是光。" 黑暗中,能给人指明方向的人,就是神。
1 回复 分享
发布于 2019-10-30 13:50
你凭什么叫自己渣硕???
1 回复 分享
发布于 2019-11-01 09:25
大佬,看来自己得好好努力了
1 回复 分享
发布于 2019-11-06 22:28
看了标题进来了,然后看完了,骂骂咧咧出去了(ps:大佬的世界俺们不懂)
1 回复 分享
发布于 2019-11-16 10:53
瑟瑟发抖,中科院能叫双非吗😂
7 回复 分享
发布于 2019-10-29 15:43
老哥 本身做开发的话算法就必要去学习了解一下吗?
点赞 回复 分享
发布于 2019-10-29 15:53
点赞 回复 分享
发布于 2019-10-29 16:32

相关推荐

120 577 评论
分享
牛客网
牛客企业服务