1. 两个方向:
现在能做的也就是,Web开发,分前后段,前端js,后端c#,sql,和数据挖掘,算法部分c++,数据部分Python,Hadoop。
2. 简历上两个错误:
一个是GBDT写成了GBRT,GBDT核心是BOOST迭代过程,重视错误分类。随机森林是大家来决策取众数。二是邮箱的后缀.cn写成了.com。
3.不会:
不会就是不会,不需要解释。我不会Python,我不会Linux,我不熟C++。
4.第一轮电话面试
第一轮就是问到了迪杰斯特拉算法,问题的关键是边松弛,广度优先+损失度量函数。第二是快排,快排的核心是选一个基准和递归的调用。递归是核心。两个问题都很基本。最后就是解释一下机器学习中的逻辑回归算法。
5.第二轮技术面试:
5.1 Hadoop:因为做过阿里巴巴的大数据竞赛,而且他们也是做类似的事情 ,所以对此很感兴趣。
解释一下Hadoop的MapReduce的map和reduce过程。Hadoop就是解决了大数据问题,大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理的可靠存储和处理问题。Hadoop框架的核心是:HDFS和MapReduce。HDFS分布式文件系统,为数据提供了存储,类似于阿里的ODPS,MapReduce提供了计算,一个job分为map和reduce两个阶段,采用分治思想。Map函数接受一组数据并将其转换成一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce函数接受Map函数生成的列表,然后根据他们的键合并同类项。经典实例就是Wordcount,单词计数。看了下面的两幅图,才发现自己之前的理解是错的,map映射是一个分工的过程,reduce减少也就是一个合并的过程。最后再给一个博客的参考链接:http://blog.csdn.net/opennaive/article/details/7514146;清楚明白。
5.2 算法编程:一个九宫格从左上角到右下角的所有走法。
递归解法,就是把一个问题分解成子问题,然后找出最小子问题。动态规划还需要找出问题的求解顺序。
5.3 扩展一个栈Stack,实现三个函数,min(), pop(), push(), 要求时间复杂度是O(1).
因为时间上要求快了,所以考虑牺牲空间换取时间,而且负责度是O(1),不能遍历,所以考虑增加空间,思路是把当前最小值存起来,并且在pop和push操作的时候维护它:a. 如果有比当前最小值大的元素入栈,当前最小值不变;b. 如果有比当前最小值小的元素入栈,当前最小值变为新加入元素。c. 如果有比当前最小值大的元素出栈,当前最小值不变。d.如果有和当前最小值的元素相同出栈,当前最小值变为当前最小值入栈之前那个最小值,当前最小值退出。