前天去金山笔试,出了4个题目。
考完以后出来,觉得比较简单的几个题目,似乎都做错了。
没抱什么希望的情况下,竟然叫我去面试,呵呵,结果仍旧是空欢喜一场!
我来说说题目吧,第一题就是一个简单的,MFC类库中的一个对象调用方法。
第二题,考察对指针变量,指针常量的sizeof,以及在类中字节对齐的知识点。
第三题,考察纠错能力。
第四题:
vector<int*>类型的变量,里面存储的是指针,他们需要我们手动来释放他们,比较麻烦,要求我们用SmartVector兼容vector,而且能够自己回收内存。
按道理,我认为似乎应该下面这样写,虽然考试的时候,我写错了格式,但是思路是:
应该要把指针类型弄个偏特化,毕竟不能对一个对象做delete吧。
现在改了下:
#include <iostream>
#include <vector>
using namespace std;
template<class T>
class SmartVector:public vector<T>
{
public:
SmartVector(){}
SmartVector(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
}
SmartVector& operator=(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
return *this;
}
};
template<class T>
class SmartVector<T*>:public vector<T*>
{
public:
SmartVector(){}
SmartVector(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
}
SmartVector& operator=(const SmartVector&s)
{
copy(s.begin(),s.end(),begin());
return *this;
}
~SmartVector()
{
while(size()!=0)
{
T* bk=back();
pop_back();
delete bk;
}
}
};
void func()
{
SmartVector<int*>svpi;
for(int i=0;i<5;i++)
{
int *p=new int;
svpi.push_back(p);
}
}
int main(int argc, char* argv[])
{
SmartVector<int>svi;
for(int i=0;i<5;i++)
svi.push_back(1);
func();
return 0;
}
呵呵。昨天面试也认识2个朋友,一个已经成功进入今天面试。他是这样写的
但是似乎是正确答案(他说他可能对了 ):
template<class T>
class SmartVector<T>:public vector<T>
{
public:
SmartVector(){}
~SmartVector()
{
while(size()!=0)
{
T bk=back();
pop_back();
delete bk;
}
}
};
不知道金山的答案如何哦。
到了面试的时候,说话完全没有套路,根本就没有向那些面试技巧什么的那样,专说自己擅长什么,而是把自己的学习经历说了下,还说了:才学半年多一点。
太诚实是错误的。一句话,对着面试官,要让他感觉你懂,所以尽量别说不知道。