在不断积累中进步,总有一天我会卷土重来!
一、CVTE面试经历
一面:
1.判断一个数为素数。
写了一个最简单的。
bool IsSuShu(int num) { if (num < 2) return false; for (int i = 2; i < num; i++) { if (num % i == 0) return false; } return true; }
然后问可以怎么优化?
可以先判断是否为偶数,如果不是,除数只能是奇数了。
bool IsSuShu(int num) { if (num < 2) return false; if (num == 2) return true; if (num % 2 == 0) return false; for (int i = 3; i < num; i = i + 2) { if (num % i == 0) return false; } return true; }
接着问可不可以这样?
bool IsSuShu(int num) { if (num < 2) return false; if (num == 2) return true; if (num % 2 == 0) return false; for (int i = 3; i < sqrt(num); i = i + 2) { if (num % i == 0) return false; } return true; }接着问不使用库函数,怎样判断这个条件:
i < sqrt(num)
后来才想到可以这样:
(i*i)<num
2.二分查找。
3.判断单链表是否有环。
4.单链表反转。(思路)
1->2->3->4->5
令p=2,q=3.
当q->next不为空时
r=q->next;
q->next=p;
p=q;
q=r;
5.一个函数调用另一个函数,怎样让两个函数共享内存?
可以用static变量、返回引用、传递引用。这三种的缺点。
static:会分配内存,知道程序退出才释放。
传递引用:在函数调用时,会进行入栈出栈操作。
返回引用:如果在被调用函数内部new的内存被返回后,可能忘记释放造成泄漏。
6.多态的实现,vtpr,vtbl的存储结构。
二面:
1.项目各种问题
2.根据前序和中序构建二叉树。
二、腾讯面试经历
电话面试:
1.tcp三次握手,四次挥手。
2.构造函数能不能是虚函数。
3.epoll的两种模式
4.select的缺点。
5.time_wait的作用,如果time_wait太多会怎样,怎样不使用time_wait功能。
1)作用
可靠实现TCP全双工的连接的终止:主动关闭的socket端会进入time_wait状态,并且持续2msl(最大分节生命期,这是一个IP包能在互联网上存在的最长时间)时间长度。如果第四次挥手时,客户端发送给服务器端的ACK丢失,服务器将重新发送FIN,因此客户端为time_wait状态允许其重新发送ACK。如果不维持这个状态,那么客户端将相应RST分节,服务器将此分节响应成一个错误。
允许老的重复分节在网络中消逝:TCP不允许处于time_wait状态的连接启动一个新的化身(具有相同IP和端口号的连接),因为time_wait持续时间为2msl,可以保证建立一个TCP连接时,来自连接先前化身的重复分组已经在网络中消失。
2)time_wait太多的弊端
对于一个处理大量短连接(连接的时间很短就断开)的服务器,如果由服务器主动关闭连接,将导致服务器存在大量处在time_wait状态的socket,严重影响服务器的处理能力,甚至耗尽可用的socket和端口,
3)怎样关闭time_wait功能。
使用STCP没有time_wait功能。
6.C/C++有哪些内存区。
7.有100本书,两个人拿,每个人每次只能拿1-5本,如果让你先拿,你怎样保证拿到最后一本?
8.stl里面迭代器设计的思想是什么?
9.map的数据结构是什么,有什么特点?map的erase函数返回类型是什么?