(更新)数据挖掘,自学一年拿了腾讯京东华为网易YY的Offer,方法与建议


成果

秋招结束了,我最终获得了:

  • 腾讯
  • 京东
  • 华为
  • 网易游戏
  • 欢聚时代
  • 搜狐视频

这几个offer,均待遇不错,收获颇丰。


写作动机

回想起一年多以前选择数据挖掘的时候,一度以为找不到工作,非常着急。幸好有令科,梅寒,志韬等师兄为我解答了很多迷津。于是也尝试记录一下自己的学习历程,鉴于往事,以资于后道。
全文分成6个阶段,文章有点长,各位可以直接去看自己的那个阶段,看看我过去的心路历程和总结的经验能否帮上忙。
暂时写到找实习,其他部分想到再写,有什么问题可以微信问我,我在实验室群里
所有技巧仅适用于我们实验室

  • 我们实验室的一个特点是人多。
    很多优秀的师兄师姐,他们就像排头兵,考虑过你现在迷惘的几乎所有选择,去过了几乎所有重要和优秀的公司,就职于所有欣欣向荣的岗位,能带给大家很多前路上的指引。
    请大家多点跟所在的小组现在的前辈,还有以前毕业了的前辈多多交流,他们会最切身,热情地帮助你任何困惑。
  • 我们实验室的第二个特点,是有很多优秀的师弟师妹。
    以后你们的苦恼也会变成后辈的参考,你们走过的路也可能成为后辈的选择。为了让你们努力得到的经验不要只被自己使用一次,为了让更多后辈追随你的脚步壮大队伍:
    请多点分享,任何形式的都可以:书,博客,Github,私下聊天…

阶段

1. 选方向阶段

我的研究生是两年制,于是在大四暑假的时候,我必须对学习方向做一个选择,到底学C++后台还是数据挖掘。
我的情况是:

  1. C++
  • 实验室有与之相关的项目
  • 本科的时候有学过C++编程
  • 关系比较亲近的师兄都去了做C++后台
  • 全社会招的人不少,但是作为一个有相当历史的岗位,竞争者也不少
  1. 数据挖掘
    • 比较感兴趣
    • 完全没有基础
    • 当时刚开始流行,很多人在学习,可以一起学习
    • 不需要什么项目经验,但是需要参加比赛

纠结了很久,最后还是去做了数据挖掘:

  • 实在不喜欢编程
  • 对自己家庭情况做了分析(不需要非常稳定地挣钱,家里人不用我养)
  • 对自己的工作状态做了分析(不擅长做太细节的工作)
  • 数据挖掘即使没学成,起码能做Python工程师,也比C++舒服(这个设想后来无法证明正确与否,好像是错的)

综合上述情况,心里比较不讨厌数据挖掘,所以选择学习数据挖掘。


2. 学习阶段

  • 买盗版书:
    尽可能多的获取信息,虽然网课也很好,但是很多书里的内容更详细和pratical,因为没有钱,但是又想买各种书来看,上知乎看了一圈不知道买什么,就在淘宝搜“满三包邮”买了一堆盗版书,不能因为贫困而不学习。**大家一定不要学我。 **
    看下来每一本书都有各自的闪光点,相互补充效果很好,书有点多所以书架放在了语音组实验区,大家可以借阅或捐赠。

  • 学习路径:

    • 基础技巧:Python做数据分析
    • 初学者入门:Python数据挖掘与实战
    • 第一次自己上手:kaggle
    • 实际做比赛:天池/CCF
    • 有问题:stackoverflow/Github
  • 请大家关注一些很有用的企业公共KM(知识分享),我这里推荐三个:

  • 机器学习的学习方法:先学会一些常用数学,统计,思考方式等工具。然后理解新的模型的“步骤”(当有工具的时候,大概了解在数学上和哲学上这些模型是怎么构筑的就行,详细的证明当数学熟练后可以推出)

  • 【2018.1.30更新】最近在补全自己深度学习的知识,学习深度学习的话,我建议的路径是这样的:

  1. 基础:
    买,并看《Deep Learning》准备一些数学,深度学习方面的基础,英文不好可以看中文版,但是中文版翻译越到后面越糟糕,所以看到后面可能你会自动去看英文版。
  2. 选择一个领域并准备基础:
    图像/语音/NLP…并买一些对应领域的专著来看,每个领域都有一些基础知识,这些知识论文中不会讲,博客网文太零散,必须看书。
  3. 学习深度学习框架:
    • Tensorflow: 我把市面上(2018.1月)有关Tensorflow的书都买过一遍,我建议先看《面向机器智能的Tensorflow实战》有兴趣再看《Tensorflow机器学习实战指南》

    • PyTorch: 看得不多,我觉得《深度学习入门之PyTorch》挺好

    • 具体选择哪个框架当然看你领域的研究需要,不过我们公司用TensorFlow比较多,所以必知必会

    • 学习列表:这个表应该有三行,包括了你这个领域常见的技术,分成“模型”,“模块/技巧”,“其他”,可以看我的例子:

      a. 模块/技巧:重参数化,因果卷积 ,highway,attention
      b. 模型:SampleRNN,WaveNet,Griffin-Lim
      c. 其他:MCMC采样,BeamSearch
      

      必须学习原理(在Arxiv找论文),和实现(Github找实现)。三层的关系层层递进,学会了写第一层的模块,你就可以学搭第二层的模型,第三层是其他,不属于模型或者模块,但是按照结构主义的观点,所有功能都有对应的结构,第三层只是用来存放杂物的。

  4. Github:关注你们对应领域的大佬,看他们会star什么项目,你也跟进去学习
  • 写自己的博客。认识有偏差也没关系,太张狂也没关系,根据Fail-Fast原则,越早地把问题暴露出来,越好,比如我就会写:

    很遗憾,没有人来指正我的错误,纠正我的人脑神经网络中的bias,毕竟大家都很忙,有人肯花时间在你文章底下骂你应该很感谢才对

关于比赛:

  • 找到一起学习的队友
    跟焕波和乔锐一起打了比赛,也获得了阳星,梅寒,令科师兄的指导,有队友的时候因为频繁交流促进思考,各有分工也避免多路作战,对每个人的进步都会很快。我们实验室很多人打比赛,可以随意找人组队,也鼓励组与组之间的交流,一起学习。
  • 选择比赛的时候,尽可能多方面考虑:
    • 除了比赛难不难,还要考虑举办比赛的公司,找工作时找回原公司会有很大优势
    • 考虑举办比赛的类型,做过医疗AI的比赛,找对应的公司有优势
    • 很有难度的比赛,也不一定要达到很高的名次,但是名次低的时候就不要死磕,尽可能在技术上有所创新,写简历的时候也会有料
  • 要有人负责混群和讨论区了解最新技巧
  • 集中整理记录比赛的时候的笔记,找工作的时候有用
  • 面试官100%问这个问题:几个人?怎么分工的?
  • 其他关于比赛的问题请问焕波,博翰这些比赛大佬吧

以下是焕波贡献的关于比赛的建议:
(12月7日更新,其他朋友想一起编辑的请微信联系)

  1. 上手
    天池o2o新手赛
    https://tianchi.aliyun.com/getStart/introduction.htm?spm=5176.100066.0.0.772af2f5y1zxWE&raceId=231593
    o2o新手赛开源代码
    https://github.com/wepe/O2O-Coupon-Usage-Forecast
    这份代码是o2o冠军wepon开源的,包含了结构化数据挖掘的大部分特征提取套路,看完基本就可以上手了。

  2. 进阶
    kaggle平台上的kernel、discussion部分,会有很多人分享比赛的代码。可以找那种已经开始了半个月到一个月的比赛,这时上面已经有很多开源代码。在这些开源的基础上跟着继续做,上手会挺快的。

  3. 比赛的选择:
    现在许多公司都在举办比赛,但是这些比赛良莠不齐,很多比赛的数据有问题,所以选择一些质量高的比赛就很重要。

  • 尽量打大公司的比赛,许多公司举办比赛就是为了招人,大公司的比赛一般认可度比较高。其次是大公司一般举办比赛时投入的资源也比较多,对于数据的质量也更有保障。

  • 现在的比赛基本就是4类,分类、回归、图像、nlp。对于新手来说,一开始建议选择分类的比赛,相比回归这类容易上手。而图像、nlp这些需要一定的领域知识,如果之前没有接触过,难度还是比较大的。

  • 比赛的数据也是很重要的因素,最主要是由于数据质量不高,导致随机性很大,线上线下不同步。比如之前天池上有一个社保比赛,样本只有几千个。线上线下不同步,随机性特别大。对于这类比赛还是尽早弃坑。

  1. 所需工具:
    现在比赛除了天池平台的线上赛需要使用sql外,其他平台对使用的工具都没有限制。常用的就是python、pandas、xgboost、sklearn等。pandas的学习可以参考o2o的代码还有pandas官网文档。sklearn可以直接看官网的文档,还有一本书《python大战机器学习》,对于sklearn的使用介绍得挺不错的。

另外现在京东、腾讯、滴滴也有举办比赛,不过这几家公司并没有在这些平台上举办。 附带这三家公司比赛网站
腾讯http://tpai.qq.com/race
京东http://jddjr.jd.com/
滴滴https://ditech.didichuxing.com/


3. 找实习阶段

2016年11月,因为网易游戏推出了一个叫“预践未来”的非常规实习计划,这个计划中都是“某个工作室需要一个功能,找个人来做吧”这种临时工性质的任务,此次放出的计划没有太多宣传,是师兄告诉我的,当时还没什么人投。
我本科的时候做过语音于是便投了简历,结果便录取了其中一个语音的项目,录取后很快就来问什么时候能去实习了,我因为当时实在来不及于是便说之后再去,公司那边说“那我们会继续招聘,如以先到者优先录取哦”。
我说好吧,后来实习了几个月,获得了offer。
回校专心刷题,到8月刚好准备充足地参加秋招。

我个人认为的要点是:

  • 如果能力过关,尽早投实习岗位,而且尽量要投好公司:

    • 好处:适合怕找不到好工作的同学
      等到3月统一春招实习的时候,就要跟全国各大学校的大佬竞争了,但是企业对实习生的需求不是3月份一夜之间冒出来的,在那之前已经有需求了,3月统一招聘可以降低宣传成本。吸引更多优秀人才报名——对我们学生来说竞争就更激烈了。
    • 坏处:万一实习录取了,就错过了3/4月各大公司找实习的时候
      这个时候要不要辞职找实习就成为纠结了,所以一定要投好公司。
  • 注意实习时间:
    正常的实习时间是3月招聘,4月/5月入职,实习最低两个月,8月份秋招已经如火如荼了,所以尽早入职的话,还有时间回来准备刷题秋招
    (就我自己的情况,"实习的时候学的东西+实习的时候抽空复习的东西"是不够应对秋招的,必须刷题)
    建议最好不要6月中才入职,因为起码实习到8月中,万一实习的公司不发offer就傻眼了

  • 实习的地域优势

    • 很多同学找实习的时候会因为实验室有事等原因无法去外地实习,这对于外地的学生也是一样的,所以找实习的时候企业会优先录取本地学生,所以尽可能投本地最好的企业
    • 我的意思就是,记得投WXG,网易游戏,他们会优先录取你,特别是“特殊项目”
    • 进去了门槛高的企业再跳就很简单,这个道理跟高考中户口的作用一样,不懂的代进高考思考一下
    • 这条可以反过来用,请代进“异地高考”考生这件事来想
  • 什么叫能力过关就去实习:
    一个公司要人的标准,实习生比校招生的要求会降低10~20%,但是总体差不多,所以提前投简历,参加面试,也可以知道自己缺陷在哪。
    3月之前用野路子提前找实习的时候可以大胆的投,挂了就挂了,这种不会进档案的,最多不行3月再投。

  • 多了解一些旁门左道的实习路子:

    • 哪里缺人就去哪,公司的需求跟你做过项目对口了就会降低其他方面的要求录取你
    • 每周刷一次各大公司招聘网站:
    • 推荐一些会招聘实习的公众号:
      • 互联派
      • 互联网offer之路
      • 校招导师
      • datawork
      • paperweekly
    • 大街网/猎聘网/看准网/脉脉,这些网站可以关注一下,但是直接投简历成功率不高
    • 投简历的时候托师兄帮你内推简历,可能的话直接扔到HR手中(注意:内推的时候越靠师兄,实际上就越是把师兄和你的信用作为抵押,成功率也越高,万一录取了你之后你不去,那么有时候师兄会有很困扰)
  • 机器学习的实习和找工作,基本上C++这一块只要看《剑指offer》并熟悉其中题目,机器学习那一块就看各自领域了

  • 虽然有很多说法说简历不要写太长,但是如果是在线简历,是没有太多人会在意你是不是刚好一页A4纸的。当然在重点写清楚的情况下,越简短越好。

  • 牛客的校招/实习日历很管用


以下是11月27日更新:

4.笔试阶段

  • 我这里注重说一些自己琢磨的别人很少说的点,笔试常见的算法请上网刷题。(牛客网足够应付一般的笔试了。有空都刷了是没错,但是注意看看牛客上的各大企业往年题。刷的题够用就好,别浪费太多时间)

  • 虽然可能有点朋友已经知道了,但是还是提一下:因为笔试题跟ACM很像,所以多点搜索借鉴ACM大佬的经验技巧,例如下面这些:

  • 比如,看答案的时候,会看到ACM的大佬们在一些不需要用到algorithm头文件的代码中,也include了algorithm,证明对于笔试题他们会写一个模板,做题之前直接复制上去先,像这样:

#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
using namespace std;
int popMaxInVector(vector<int>&vec)
{//弹出vector中最大的元素
    vector<int>::iterator maxElementIt = max_element(vec.begin(), vec.end());
    int maxInt = *maxElementIt;
    vec.erase(maxElementIt);
    return maxInt;
}
int main()
{
    int n = 0;
    int m = 0;
    int ans = 0;
    int data = 0;
    scanf("%d %d", &n, &m);//读入参数
    int count = 0;
    int* A = new int[n];
    //vector <int>A;
    //vector<int>::iterator max_it = max_element(A.begin(), A.end());
    while (count<n)
    {
        scanf("%d", &data);
        A[count++] = data;
        //A.push_back(data);
    }
    //while (i<maxLineNum)
    //{//读入n行的输入
    //    gets_s(lines[i++], maxLineLen);
    //}
    ////gets读取一行
    //提取所有数字:scanf("%[1234567890] ", strings);
    //不提取所有数字:scanf("%[^1234567890] ", strings);
    ans = countingM(A, n, m);
    printf("%d", ans);
    return ans;
}

  • 熟悉你使用的平台的输入输出格式。比如阿里只能用 scanf和printf,牛客和赛码可以用cin和cout,对于python2和3的输入输出处理也有不同(比如python3的map返回的是个map对象,而python2中返回一个list)

  • 之前做笔试的时候总结了一些技巧,包括上面写的几个,直接看吧


以下是11月21日更新:

5. 面试阶段

  • 我这里注重说一些自己琢磨的别人很少说的点,面试常见的算法请翻其他人的面经。

  • 自我介绍的时候针对技术面和HR面设计不一样的自我介绍

  • 不要总是等着面试官问,在面试官问完一个项目之后,可以打开你纸质版的简历(没错,这就是为什么即使有了网页版的简历,你还应该带上纸质版简历的原因),把重点的项目指给他看,并简单介绍一下“这个项目我也学到了很多,特别是XXX和XXX的处理”

  • 最好要有自己的见解,不能照搬网上的回答,必须答出本质一点的区别。
    比如,一个常见问题就是“XGBoost和GBDT的区别是什么?”这个时候可以从框架上讨论:“统计学习的三要素框架”,从隐含的思想上讨论“XGB引入了残差学习和梯度衰减的思想”等。
    面试的时候针对这种“区别型”题目有一套分析框架,根据这个分析框架去思考和补充知识,那么能给面试官“很厉害”的印象

  • 没有太多见解的情况下,可以考虑借用我这篇文章里的框架:
    XGBoost模型跟Logistic Regression模型的本质区别
    这些是我自己想出来的,当然不一定是正确的,但是起码令我知道自己的不足,花时间翻源算法和代码,并使得面试官有特别好的印象。如果没时间准备了,那么可以只准备一个最常见的问题,并伺机主动提出。
    【比如LR,比如XGB,都是高频问题】
    【听说X科师兄就是用自己的见解打动BTH三家公司并都拿了sp哦】

  • 要有自己的见解还有一种稍微偷懒的方法,参考。比如XGB,可以翻阅对应领域针对XGB的优化的论文,领会了之后,你可以说”我在比赛的时候,针对XXX问题,对XGB进行了这样的改进“,这样就使得你好像自己有所领会,面试官没问你"是不是参考的别人"的话,你也不用跟他说,问了再说就是了。

  • 整理好自己的Github和博客,关于“我没有github项目”,“如何把github打扮得专业一点”请看这个文章:
    技术面试中常被问到是否参与开源,那如何清晰展示 GitHub 项目呢?

  • **关于“你有什么问题要问我吗?”想不到有什么问题的话,建议问一下“请问您的小组的业务是怎样的”**你这样问了的话,有很多好用的套路

  • **获取面试结果:**如果面试官只是草草回答,那么可能证明你"没通过面试"

  • **获取部门信息:**如果这个部门的业务你听了就不想去,那起码可以提前知道。一般面试官的回答会有夸大成分,可以找师兄查一下那个小组具体怎么样,存在感如何,有没有大佬带等。

  • **猜下一次面试的面试题:**知道了是什么部门下的哪个小组,然后就在猎聘查一下这个小组社招的需求,上其小组的网站/公众号找他们最近发表的文章,论文等。然后按照这些需求准备二面。
    比如,面腾讯一面的时候,我得知一面面试官是MIG下面一个测试中心的,然后我查了这个中心的公众号和网站,包括社招,然后针对自己做过的项目调整简历,写"标题看起能吸引这个中心的人的"博客,然后再去二面。准备万全。

  • 表现出自己的热情和兴趣:面试官想要你的话,会详细介绍,并描绘"我们小组多么多么厉害",这个时候你既可以说"我对这个也很感兴趣,我以前就做过/学过类似的项目",也可以一起吹捧一番说"听起来很好,这个产品的装机率这么高,超过今日头条肯定没问题,毕竟我们(这里拉近你跟面试官的距离,听起来就已经是同事的关系了)有渠道优势!"

  • 坦白说,如果面试官完全不知道你的项目是怎么样的,光靠说的很难讲清楚。最好把自己做过的项目做出流程图,面试的时候用平板或者打印出来,展示的时候非常直观。网易实习语音分类项目流程图

  • 如果是在线简历,可以一面后马上改简历,以适应二面,比如发现简历里有漏洞或者不清楚的地方,一面的时候被抓着问了,那么可以考虑面完马上删掉。还可以针对面试官所在的小组,把简历修改得更匹配对应职位

以下是11月27日更新:

  • 面试的时候要带的东西
    • 湿纸巾: 碧柔 可变香味爽身粉湿纸巾 【面腾讯用上了】
      含有爽身粉,烈日下一身大汗赶到面试现场,掏出来擦一下就可以恢复干爽
    • 耳罩: 3M optime 105耳罩 【面腾讯用上了】
      腾讯的御用面试酒店是东圃喜来登,面试等待的时候整个大堂都是人,焦急焦虑和现场的吵闹让人无法安静复习,掏出这个适合在105分贝下使用的耳罩,马上让心思安静下来。也可以用在赶面试的车中使用,别睡过头了就好
    • 零食:【面京东用上了】
      今年可能是京东第一次来广州面试,定在一家环境很一般的酒店,而且约的4点半面试6点还没面上,饥肠辘辘只想吃饭,没有心思跟面试官讨论Dropout和BatchNorm了,这个时候就需要零食充饥,递给身旁一起等面试的朋友,也是交友的利器(后来我去面YY的时候又见到了这个大哥,其实整个广州这一块的毕业生有几个,跑面试的来来回回都是那些人)
  • 铅笔:【春招面腾讯用上了】
    面试官让写代码,没想好就胡乱写的话,反而让草稿纸脏兮兮的。先写伪代码,写测试用例,然后用铅笔在上面修改,写批注,最后想好了一气呵成

5. 实习阶段

  • 实习任务一般是个很小的点,但是你要把它做大,扩展功能,提高稳定性,提供性能界信息,提高通用性
  • 想到再慢慢写吧

以下是11月21日更新:

  • 多认识里面的大佬,即使你不留在那个公司,也能给你一些人生建议,买卖不成仁义在
  • 多认识同期的实习生,到时候秋招的时候相互分享经验,讨论offer,甚至一起打游戏都很有用

以下是11月27日更新:

  • 多看透公司内部的情况,比如:

    • 大多数员工是哪里跳过来的
    • 晋升速度
    • 部门的好坏(跳走和跳来率)
  • 跟正式员工对比,发现自己不足的部分,如果明天你们的工作岗位交换了,能否胜任?为什么?


6. 选工作阶段

  • 如果没有“亲人重病急需现金”“我妈说我留在XX就给我一套500w的房子”这样重磅的硬理由,选你喜欢的就好。
  • 不要想太多,你喜欢做,不管大公司小公司,起码比较开心,开心了成长了,自然可以选公司
  • 我们学习十一月初才发三方,所以在那之前都可以慢慢考虑

以下是11月21日更新:

  • 认清楚自己的风险偏好类型很重要。因为我是风险中性型的人,家在广州,没有太大欲望,所以我建议选择“在产生的最坏结果能承受的前提下,收益最大”的路线。但是有的人可能会觉得不选择风险最大的路径是浪费机遇,每个人所处的环境不一样,各自人生的起点和终点不一样,选择适合自己的最重要。我们之所以相遇,你看到我的文章,只是因为我们刚好碰巧做了2年同学,偶然当了一段时间同路人,除了珍惜这段缘分之外也不要对其他人的选择做太多干涉才好。

以下是11月27日更新:

  • 成长第一,但是也要看好自己的其他可能性。
    可以搜索“京东跳槽”之类的东西了解想去的公司一般跳去哪里,实际上京东推荐很多情况下是跳去阿里,回广州顶多是唯品会,如果家在广州可能以后还会回来的话(不买房毕竟少很多支出),就需要三思

一家之言,如果有任何建议请各位师兄师姐师弟师妹指正,无任欢迎

发布了51 篇原创文章 · 获赞 62 · 访问量 12万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览