打怪升级

在不断积累中进步,总有一天我会卷土重来!

一、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函数返回类型是什么?



你可能感兴趣的:(打怪升级)