先是电话面试:
自我介绍
问了项目上网络传输序列化是如何做到的。
服务器崩溃常见问题定位
异步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
最终也是无缘网易,难受呀。