一、华为实习生面试(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 >& rt, vector tem, vector candidates, int tsum, int cur, int target) { if (tsum == target) { rt.push_back(tem); return; } if(tsum>target) return; for(int i=cur;i
> combinationSum(vector
&candidates, int target) { // write your code here vector
> rt; if(candidates.size()==0) return rt; vector 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; } }; class Solution {public: /** * @param num: Given the candidate numbers * @param target: Given the target number * @return: All the combinations that sum to target */ vector > combinationSum2(vector &num, int target) { // write your code here set > r; vector cur; sort(num.begin(),num.end()); combination(cur,num,0,0,target,r); vector > ret; copy(r.begin(),r.end(),back_inserter(ret)); return ret; } void combination(vector cur,vector &num,int index,int curSum,int target,set >&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); } };