面试小记

一、华为实习生面试(2017.4.22)

笔试:三道编程题,只做对了1.3道。进入面试。

一面:

(1)问了自己常用的语言,说了C++,然后问了关于C++面向对象的一些问题,如封装,继承,多态啊等等。

(2)关于从一个数据库解析xml文档,然后再存入一个数据库。这个系统怎么设计。本质上是一个生产者消费者问题,回答的一般。

(3)又聊了一些自己做过的课题,主要是深度学习,没啥好说的。

 

二面:

(1)对于华为公司的文化有什么了解。(奋斗者,通过努力改变自己的生活等等)。

(2)你觉得华为公司怎么样。

(3)家庭情况

(4)工作地点的选择,想要的职位。

4.25日收到短信,通知通过面试,但是依旧没有得到offer,跪。。。。

额。。。剧情反转了,5.16接到通知,获得华为实习offer。猜测应该是前面大佬有放弃的,现在备胎补上了,感谢华为!

 

二、新氦数据实习生面试(2017.5.12)

笔试:

题目覆盖较广,计算机基础知识都有涉及,但比较简单。

算法、数据结构、计算机网络、数据库、操作系统。

主要偏重算法与数据结构,期中一个考察哈夫曼树的构造过程,另一个是编码问题,关于C++还是要熟练,这样才看得懂代码细节。

最后两个编程题,我用的编程语言为:C++

第一个,写一个二叉树的层次遍历,主要用到队列,这个简单。

第二个,给出一组候选数字(C)和目标数字(T),找出C中所有的组合,使组合中数字的和为T。主要用到递归的思想,当时没想出来,没有给出完善的解法。

这里贴出代码:

class Solution {  
public:  
    /** 
     * @param candidates: A list of integers 
     * @param target:An integer 
     * @return: A list of lists of integers 
     */  
       
       
       
       
void countall(vector<vector<int> >& rt, vector<int>tem, vector<int> candidates, int tsum, int cur, int target)  
    {  
      
    if (tsum == target)  
    {  
        rt.push_back(tem);  
        return;  
  
    }  
    if(tsum>target)  
    return;  
  
  
    for(int i=cur;i<candidates.size();i++)  
    {  
    tem.push_back(candidates[i]);  
    tsum+=candidates[i];  
    countall(rt,tem,candidates,tsum,i,target);  
    tsum-=tem[tem.size()-1];  
    tem.pop_back();  
    }  
  
    }  
       
    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {  
        // write your code here  
          
        vector<vector<int> > rt;  
        if(candidates.size()==0)  
        return rt;  
          
        vector<int> tem;  
        sort(candidates.begin(),candidates.end());  
       candidates.erase( unique( candidates.begin(), candidates.end() ), candidates.end() ); //删除掉candidate中的重复元素,因为重复元素会导致rt中有重复的解  
         
        countall(rt,tem,candidates,0,0,target);  
          
       
      
        return rt;  
          
    }  
};  

 问题的一个变种给出一组候选数字(C)和目标数字(T),找出C中所有的组合,使组合中数字的和为T。C中每个数字在每个组合中只能使用一次。

class Solution {
public:
	/**
	 * @param num: Given the candidate numbers
	 * @param target: Given the target number
	 * @return: All the combinations that sum to target
	 */
    vector<vector<int> > combinationSum2(vector<int> &num, int target) {
        // write your code here
        set<vector<int> > r; 
        vector<int> cur; 
        sort(num.begin(),num.end());
        combination(cur,num,0,0,target,r);
        vector<vector<int> > ret;
        copy(r.begin(),r.end(),back_inserter(ret));
        return ret;
    }
    void combination(vector<int> cur,vector<int> &num,int index,int curSum,int target,set<vector<int> >&ret)  
    {  
        if(curSum>target)  
            return;  
        if(curSum==target)  
        {  
            ret.insert(cur);  
            return;  
        }  
        if(index==num.size())  
            return;  
        combination(cur,num,index+1,curSum,target,ret);  
        cur.push_back(num[index]);  
        combination(cur,num,index+1,curSum+num[index],target,ret);  
    }  
};

技术面试:
(1)卷积神经网络,卷积的作用,为什么要卷积。(过拟合)

(2)牛顿法的优点和缺点。(凸函数,正定)

(3)梯度消失,怎么来避免。(batch normalization)

(4)上面贴出代码的那个编程题目。怎么解?

原理,原理。算法基础,机器学习基础,数学基础,知其然,也要知其所以然,真正看懂。

哎,人业余机器学习的都比我懂得多,看的深。。。ORZ。。

综合面试:

个人的基本情况,将来想做什么。

自己的优势是什么,自我评价。

为什么想做机器学习。

自然语言处理,怎么来做。。。

问问题:

1.贵公司想招聘到什么样的应届生。

2.贵公司未来对机器学习会怎么部署(因为自己想做机器学习的东西)。

over

总结:

1.注重基础,需要学的东西很多,基本算法一定要会,算法基础好才会有下文。

2.机器学习方面,自己在做的东西一定理解十分透彻,不能只知道个大概。

继续努力吧!

2017.5.12

原文地址:https://www.cnblogs.com/Allen-rg/p/6846466.html