入职腾讯,拿到字节offer,面经总结如下:
首先入手机器学习看了吴恩达的视频,然后看李航的统计学习方法,反复推了好几遍,大约花了2个月左右,然后对其中的算法用python实现一遍,多去敲代码(make your hands dirty)。机器学习方面你就基本上有所入门了,接下来你可以去kaggle或者天池上找一些比赛,可以找志同道合的小伙伴一起尝试一下。之后深度学习方面你可以先从吴恩达的deeplearning课程入手,然后完成相应的作业(可以在github上搜),虽然有一些还是用的tensorflow1实现,但是你会对于rnn,lstm,序列模型,attention等等有一个大概的了解,之后重要的还是实践,你可以尝试使用tensorflow2去做一些常见的nlp任务,从词嵌入到文本分类到文本生成,可以尝试基于attention机制实现一个翻译模型等等,之后还可以了解一些前沿一点的transformer,bert等等,这时候你也有了一点点的工程能力,然后**leetcode可以多刷一些题目,尝试去投投实习,毕竟个人学习的能力有限,在工业界见识一下,或许会有更好的成长
编程和 数学基础
1.两个字符串的最大重复的字符串,写个简单的dp就行了。
2.半小时手撕代码:找数组中第K大的值。
(先写了个sort的暴力解法,然后写了个维护一个长度为K的栈的解法,然后写了一个分治+剪枝的解法。比较好玩的事情是面试官没直接问我复杂度,反而是他自己在那里看了半天看不出来,才让我跟他讲讲这个复杂度的)
3.问一个体育馆每次可以让10个人比赛赛跑,而且只能记录排名顺序不能记录时间。现在有150个人,问怎么样才能找到跑得最快的五个人。之后让写了个edit distance。
4.手写了下交叉熵的公式
5.的N次方最优算法,时间复杂度,空间复杂度
6.一个5*5棋盘,从左上角走到右下角有多少种方式
7.问了我lstm,画了lstm的结构图,以及写了所有的公式,讲了下lstm的流程。之后他就问我lstm和rnn的区别,与gru的区别。之后在问我那么lstm面对特别长的文本,有什么解决办法呢?
8.将给定数组按照给定的规则排序,将数组排序成一大一小类似于山脉的样子
深度学习方面:
1.动量优化
2.adam优化
3.bert调参
4.bias和variance的区别
5.svm为什么要用核函数
6.transformer多头的意义是什么
7.问了下模型蒸馏的损失函数
8.T之类的调参
9.word2vec的模型、训练目标
10损失函数
11.优化方案
12.word2vec跟其他预训练模型的区别
13.GBDT的大概算法
14.KNN的大概算法
15.word2vec的优化,包括层级softmax的复杂度
16.推荐算法比如itemCF,userCF
17.数据集不平衡的处理方法
18.用了哪些数据增强的方法
19.剪枝的原理,为什么多头attention剪枝有用
20.Bert,elmo,word2vec等词向量的区别
21.transformer的并行,encoder decoder的细节结构
22.螺旋矩阵的题,主要看debug之类的能力
23.attention怎么计算,QKV之间相乘分别是什么意思
项目方向
1.问了adaboost与gbdt,然后两者的区别,现在为什么kaggle比赛流行gbdt,而不用adaboost加树模型呢