技术面试面的题:
hash 表原理 :
介于 1 到 100 万之间的 100 万个数,只有一个是重复的,找出这个重复的数。
构造函数的种类,拷贝构造函数在什么时候使用
对象作为一个函数的参数,如果在函数中对对象进行改变,对象本身是否改变。
SQL 中, join 连接的应用
开发中经常使用到的 C/C++ 函数
引用与指针的区别
windows 安全机制
什么句柄,句柄的应用
多线程编程
进程线程区别
.....
2011 艾默生校园招聘- 软件工程师笔试题( 部分)
1. 考察虚继承内存体系
class A
{
public:
A() { cout<<"Construct A"<<endl; }
~A() { cout<<"Destruct A"<<endl; }
void speak() { cout<<"A is speaking!"<<endl; }
};
class B:public virtual A
{
public:
B() { cout<<"Construct B"<<endl; }
~B() { cout<<"Destruct B"<<endl; }
};
class C:public virtual A
{
public:
C() { cout<<"Constuct C"<<endl; }
~C() { cout<<"Destruct C"<<endl; }
};
class D:public B, public C
{
public:
D(){ cout<<"Constsruct D"<<endl; }
~D(){ cout<<"Destruct D"<<endl; }
};
int main()
{
D *p = new D();
p->speak();
delete p;
}
输出:
Construct A
Construct B
Constuct C
Constsruct D
A is speaking!
Destruct D
Destruct C
Destruct B
Destruct A
2 。 考察非虚析构函数
class Parent
{
public:
Parent(){cout<<"Parent construct"<<endl; }
~Parent(){ cout<<"Parent destruct "<<endl; }
};
class Child : public Parent
{
public:
Child() { cout<<"Child construct "<<endl; }
~Child() {cout<<"child destruct"<<endl; }
};
int main()
{
Parent *p;
Child *c = new Child();
p = c;
delete p; 因为析构函数是非 virtual 的,故析构的时候按照指针的类型进行析构
}
输出:
Parent construct
Child Construct
Parent destruct
3 , 考察初始化列表的写法
class A
{
public:
A(int x, int y, int z):a=x,b=y,c=z {} ( 1 )
A(int x, int y, int z):a(x),b(y),c(z){} ( 2 )
private:
int a;
int b;
int c;
};
int main()
{
A a(1,2,3);
}
第 1 中写法是错误的,第 2 中正确。
4 。考察拷贝构造函数和赋值的区别。
class A
{
public:
A() { cout<<"Construct A by default"<<endl; }
A(const A& a) { cout<<"consttuct A by copy"<<endl; }
A& operator =(const A& a) { cout<<"cosnt A by operator ="<<endl; return *this;}
~A() { cout<<"Destruct A"<<endl; }
};
int main()
{
A a;
A b=a; // 调用拷贝构造函数
A c(a); // 调用拷贝构造
A d;
d=a; // 赋值
}
输出:
Construct A by default // 构造对象 a
consttuct A by copy // 拷贝构造 b
consttuct A by copy // 拷贝构造 c
Construct A by default // 构造 a
cosnt A by operator = // 赋值 d=a
Destruct A
Destruct A
Destruct A
Destruct A
5 。 考察函数指针
void func(char* a)
{
cout<<a<<endl;
}
int main()
{
void (*fp)(char*); // 填空处
fp = func; // 函数名 func 相当于函数的地址,将其赋给函数指针 fp
char* s="helloc";
fp(s);
}
2010 成都华赛面试题
1. 链表的插入、删除操作
2. 结构体的对齐
3. 用指针来历遍一个三位数组(用一个 for 循环实现)
华为面试题
有两个数组 a,b ,大小都为 n, 数组元素的值任意,无序;
要求:通过交换 a,b 中的元素,使数组 a 元素的和与数组 b 元素的和之间的差最小