一面:

1. 从 k 位开始反转链表

二面

1. C++ socket的架构模式

2. 线程调度中,切换线程的详细过程

3. 找出树上任意节点的公共父节点

三面

1. 分析下面程序的输出

  1. class A{
  2. public:
  3. virtual void F(){cout<<"1"<<",";}
  4. void CallF(){ F(); }
  5. virtual ~A(){ CallF(); F();}
  6. };
  7. class B : public A{
  8. public:
  9. void F(){cout<<"2"<<",";}
  10. void CallF(){ F(); }
  11. ~B(){}
  12. };
  13. class C : public B{
  14. public:
  15. void F(){cout<<"3"<<",";}
  16. void CallF(){ F(); A::CallF(); }
  17. ~C(){CallF();F();}
  18. };
  19. int main() {
  20. A* p = new C;
  21. p->CallF();
  22. delete p;
  23. return 0;
  24. }
  25. // 3 3 3 3 1 1

知识点:

  • 虚函数自动继承
  • 析构函数中子类已经被析构,不调用子类复写的函数。

2. 解读下面代码堆空间和栈空间的变化

  1. {
  2. vector<int> arr(10);
  3. }

3. 给一个大于10的数,找到它任意两位交换一次能得到的最大的数