先是电话面试

自我介绍

问了项目上网络传输序列化是如何做到的。

服务器崩溃常见问题定位

异步IO有没有了解(ICOP/EPOLL)

xxxx有没有用到过


 

接着是现场二面,二面挂了

二面同样是自我介绍

问项目,服务器架构这些老生常谈

接着出了两道题

问题1:

给定一个数组,删除偶数项,要求空间复杂度尽可能小
void delete(int *a, int n) {}
补充函数体

  

 1 问题2:
 2 
 3 #include <iostream>
 4 
 5 using namespace std;
 6 
 7 class Base
 8 {
 9 public:
10     Base() {};
11     ~Base() {};
12 
13     virtual void print(int m = 100) { 
14         std::cout << a + 1 << std::endl; 
15     }
16 public:
17     int a = 0;
18 };
19 
20 class Derived : public Base
21 {
22 public:
23     Derived() {};
24     ~Derived() {};
25 
26     virtual    void print(int n = 101) {
27         std::cout << b + 2 << std::endl;
28     }
29 
30 public:
31     int b = 1;
32 };
33 
34 
35 
36 
37 int main()
38 {
39     Base* base = new Derived[10];
40     base[7].print();
41     /*Base* base = new Derived();
42     base->print();*/
43     return 0;
44 }

根据以上代码:
输出什么值?
最终在这里翻车,这道题考得很深入。

 1 问题1是典型的原地算法
 2 思路就是使用快慢指针,从后往前拷贝,一边循环即可完成
 3 大致伪代码
 4 
 5 for(int i=0; i<n; i++) {
 6     if(是偶数) {
 7         nSlow++;
 8         a[nSlow] = a[i];
 9     }
10 }
11 
12 问题2建议先思考,然后在编译器里运行一下看看
13 考察点比较多
14 虚函数表
15 虚函数默认参数
16 基类指向子类数组问题
17 
18 
19 这段代码运行会崩溃
20 因为基类占用8个字节,派生类12个字节
21 基类往后偏移7个对象,7×8=56 并不是一个有效的对象
22 base[3]可以正常访问,因为3×8=24=12×2
23 
24 然后解决输出的问题
25 派生类实现了基类的虚函数,此时基类的函数就被隐藏
26 因此是调用 derived.print()
27 然后默认参数不会被派生类修改,还是用的创建对象的默认参数
28 也就是m=100
问题解答

 

最终也是无缘网易,难受呀。