百度数据挖掘实习工程师一、二现场面试(深圳)

一面

项目

详细介绍项目。

现场手写代码

  • 字符串反转
  • 快排

Python

  • 如何提高Python的运行效率
  • 写一个简单的正则匹配表达式(将文本中的123.4匹配出来)

机器学习

  • KNN(分类与回归)
  • CART(回归树用平方误差最小化准则,分类树用基尼指数最小化准则)
  • Logistics(推导)
  • GBDT(利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树)
  • 随机森林(Bagging+CART)
  • SVM与随机森林比较
  • 改变随机森林的训练样本数据量,是否会影响到随机森林学习到的模型的复杂度
  • Logistics与随机森林比较
  • GBDT与随机森林比较
  • 自己实现过什么机器学习算法
  • 推荐算法(基于用户的协同过滤,基于内容的协同过滤)
  • 如何做一个新闻推荐

继续阅读百度数据挖掘实习工程师一、二现场面试(深圳)

栈和堆的区别,C++ new创建对象

/*
 * 栈和堆的区别:http://blog.csdn.net/hairetz/article/details/4141043
 * C++用new来创建对象和非new来创建对象的区别:http://www.cnblogs.com/GODYCA/archive/2013/01/10/2854777.html
 */

#include <iostream>
using namespace std;


struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
 };


int main()
{
    ListNode dummy(0);
    ListNode *tail = &dummy;
    for (int i = 0; i < 5; ++i){
        // 下面两行注释的代码是错误的,它只是在循环中每次定义一个局部变量,存放于栈中相同的位置,会出现node->next = &node的情况,造成自环,而且每一次循环后,这些存储单元会被系统自动释放。
        //ListNode node(i);
        //tail->next = &node;

        // 所以正确的方法是用new,在堆中分配了内存,而堆中内存的分配和释放必须由程序员手动释放。
        tail->next = new ListNode(i);
        tail = tail->next;
    }

    ListNode *p = dummy.next;
    while(p){
        cout << p->val << endl;
        p = p->next;
    }

    return 0;
}

阿里巴巴电话面试2面总结_数据挖掘工程师(天猫事业部)

项目相关

  • 介绍项目
  • 项目相比别人有什么优劣
  • 项目的数据从哪里来
  • 项目的特征向量的归一化与异常处理
  • 项目的下载量
  • 目前在研究什么
  • 参加天猫大数据推荐算法成绩

机器学习

  • 线性分类器与非线性分类器的区别及优劣;
  • 特征比数据量还大时,选择什么样的分类器?
  • 对于维度很高的特征,你是选择线性还是非线性分类器?
  • 对于维度极低的特征,你是选择线性还是非线性分类器?
  • 如何解决过拟合问题?
  • L1和L2正则的区别,如何选择L1和L2正则?
  • 随机森林的学习过程;
  • 随机森林中的每一棵树是如何学习的;
  • 随机森林学习算法中CART树的基尼指数是什么?

算法

  • 如何找到第k大的数?

继续阅读阿里巴巴电话面试2面总结_数据挖掘工程师(天猫事业部)