禾赛科技笔试复盘
楼主投的是C++岗位,今天做了笔试题,感觉没有发挥好,这里复盘一遍,加深印象,不让错误再犯。
总共是5道题,3个问答题,2道编程题
1. 给你如下一段代码,请分析执行之后的结果:
void foo(int &b){
static int a = 3;
b += a++;
}
int main(){
int a = 4;
int &b = a;
b = a+1;
foo(a);
cout << a << " " << b << endl;
b++;
foo(b);
cout << a << " " << b << endl;
return 0;
} 正确答案 8, 8
13, 13
我第一次分析的时候,也是觉得foo函数的局部静态变量只会被创建一次,所以局部静态变量a第二次应该是4,没有坚持自己的分析,给了一个错误答案12
2. 阐述下面的代码意思:
int a[10] int *a[10]; int * const a[10] int (*a)[10] int (*a)(int) int* (*a[10])(int *)1. 整型数组
2. 指针数组
3. 顶层const修饰的指针数组
4. 数组指针
5. 函数指针
6. 函数指针数组
3. 给你如下一段代码,请分析执行之后的结果:
class A{
public:
A(){
print();
}
virtual void print(){ cout << "A" << endl; }
};
class B : public A{
public:
B(){
print();
}
virtual void print(){ cout << "B" << endl; }
};
int main(){
A a;
B b;
A *pa = &b;
pa->print();
return 0;
} 正确答案: A A B B
我的答案 A A B。我晕,这种不合理的代码,根本就没有去模拟过好吧。《Effective C++》明确指明不要在构造函数和析构函数中调用虚函数。在实例化类B的对象b时,会调用两次print,第一次是基类的print,第二次是派生类的print
4. 小端地址转大端地址
我代码写错了,下来之后自己又改了一遍,贴正确的代码:
对了,题目要求返回值是int32,也就是有符号的32位整型,这是不对的吧,这库的函数格式都是无符号的32位整型。我的代码是使用的无符号的32位整型
uint32_t func(string &ipaddr){
uint32_t t = 0;
uint32_t ans = 0;
int len = ipaddr.size();
vector<uint32_t> v;
for(int i = 0; i < len; ++i){
if(ipaddr[i] != '.'){
t *= 10;
t += ipaddr[i]-'0';
}
else{
t = t << (v.size() * 8);
v.push_back(t);
t = 0;
}
}
t = t << (v.size() * 8);
v.push_back(t);
for(auto n : v) ans += n;
return ans;
} 5. 最后一个题,设计一个电梯程序,实现以下功能: - 不使用的时候回到一楼;
- 运行过程中打印每一层楼;
- 对外一个接口,选择电梯要去的楼层
class Elev{
public:
Elev(int n):_n(n), _pos(1){}
void setF(int n){
run(n);
}
private:
int _n;
int _pos;
void run(int n){
while(_pos != n){
cout << _pos << endl;
_pos < n ? _pos++ : _pos--;
}
cout << _pos << endl;
}
}; 由于时间关系,不使用时返回一楼的方法没有实现 写到最后,复盘之后才发现,自己的笔试做的挺菜的,5个题感觉都做的不理想,还得加油啊!

查看7道真题和解析