人生第一次面试
今天百度机器学习方向的面试,只能用一个词来形容——懵逼。问的动态规划的题真是一点不懂,问的机器学习方面两个重要的算法又不知道,简直糟糕透了,不过还是会有很大的收获,让我知道今后需要加强哪些方面。首先按时间顺序讲一讲。
一面是一个姐姐,很温柔,问的问题也很温柔。
- 上来就是一个C中宏定义的问题。用宏写一个比较两个数大小,我是这么写的#define max(a,b) a>b?a:b,呵呵了,姐姐说如果a=x+y怎么办,很明显,这里的问题是要注意运算符优先级的事情,因此答案应该是#define max(a,b) (a)>(b)?(a):(b)。
- 然后问了一个算法题,我说用广度优先搜索,她说没必要这么麻烦,问题是这样的,一个数n将其缩小到1的最短步骤,如果是偶数就除2,如果是奇数就+1/-1。她给了提示我还是没有想出来如何求最短步数。。。
- 后来问了比较的题,数据库中有N个集合,每个集合有M个数。现在给你一个集合X判断是否有集合使得X是他的子集。我想必然需要减少复杂度,最基本的
O(N∗M2) 的方法必然不能回答。于是想到先排序,复杂度是O(N∗MlogN) ,然后按顺序比较,复杂度是O(N∗M) 这样,复杂度确实被降低了,然后姐姐说如何进行改进,能想出来已经到我的极限了,如何改进我没心思想了,就没怎么回答。 - 一面的最后一个问题是熟悉的SVM,如何用SVM解决多类问题,我只记得一对多和层次法,忘了一对一的方法,应该还行,然后问SVM解决词性标注的问题,大概按照自己的项目回答了一下大致过程,还算满意。这里想说,机器学习面试的话SVM一定是必考的,所以一定要烂熟烂熟烂熟,接下来的面试就问了推导过程和其他应用。
一面给自己打个80分吧,自己能力范围内的基本都回答了,不会的就不会了,算法是我永远的痛啊。接下来是痛苦折磨的二面, 真是哔了汪了。
- 二面上来问了一个链表翻转的问题,写C的代码,问题应该不大,确实是写出来了。
- 然后问了一道算法题,动态规划的问题,懒得说问题了,真是麻烦的很,根本不会。
- 接下来进入到了机器学习方面,上来问我会哪些算法,我就介绍了一下机器学习算法的分类,嫌我说的麻烦没让我继续说,我准备很充分的没让我说,哎。。。最后我说了决策树、感知机、LR、SVM等,然后他就问了我会不会最大熵模型,昨天晚上看了最大熵模型,没有具体推导,只能说不会。。。然后问我决策树会哪些,我说ID3、C4.5、CART,他问会不会GBDT,哎呦我这个水的啊,真心不会啊,根本没看过。。。
- 最后问到了SVM,说推导过程和证明过程,大致思路还行,说了大概,不过说的不好,他应该没有听懂我表达的意思,但是我确实按照前天推导的过程推了T_T,然后问SVM如何解决一个很大的数据集合很小的数据集分类问题,大数据集合是小数据集合的上万倍。我觉得这样直接训练肯定不行,然后说能不能把大数据集划分,然后训练多个分类器,不知道这样行不行。。。
整个两次面试下来,整个人都不好了,给问蒙蔽了。。。不过我的总结就是,算法方面不管什么面试都会问,而且会仔细的问,一点点错误都会被抓住。。。然后机器学习方面主要的算法一定要会,至少知道思想是什么,比如最大熵模型,GBDT,密度聚类等等,经典的方法不会的话会死的很惨的,希望大家如果参加机器学习面试的话一定要把基本模型嚼烂嚼烂嚼烂!