面试小记
一、华为实习生面试(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