2020腾讯C++后台开发暑期实习电话面(一)

腾讯暑假C++后台开发实习电话一面

2020年3月24日晚上8点接到了腾讯的电话面试。主要是关于基础知识和项目经历的询问。
一、自我介绍
XXXXXXX。

二、介绍项目
XXXXXXX。

三、C++基础
1、说一下函数的重载、覆盖与隐藏
答:重载指的是同一可访问区间内被声明的几个具有不同参数列表的同名函数,根据参数列表确定调用哪个函数,与函数的返回类型无关。
重写指的是子类中存在重新定义的函数。其函数名,参数列表,返回值类型必须和被重写的函数一致。只有函数体,也就是函数花括号内的内容不同。子类调用函数时,会调用已重写的函数,不会调用父类中被重写的函数。基类中的被重写函数必须有virtual修饰。
隐藏指的是子类中函数屏蔽了其父类函数,只要派生类中函数名与基类中函数名相同,就会被隐藏。隐藏方法无法实现多态。
重载和覆盖的区别:
范围不同:覆盖与被覆盖的函数在不同的类中,一般为父类和子类;重载和被重载函数在同一个类中。
参数不同:覆盖与被覆盖的函数参数列表一定相同,重载和被重载的函数列表一定不同。
virtual区别:覆盖的父类函数必须被virtual修饰,重载函数与被重载函数可以被virtual修饰,也可以不被virtual修饰。

2、说一下程序在内存中的分布,在哪几个区?哪些区是被编译器分配的,哪些区是人工分配的。
答:一般情况下,数据在内存中分为四个区。第一个区是栈区,主要由编译器分配内存;第二个区为堆区,主要是程序员进行分配;第三个区是全局数据区,用来存储全局变量。第四个是代码区,主要是存储代码的。

3、STL中的vector、list、map的底层原理。
答:vector与数组类似,内存分配在一整块内存,不同的地方在于vector能够动态的调整存储空间的大小,数组只能是静态的调整大小。注:vector动态的调整大小并不是在原有空间的后面加上一块空间,而是以原来大小的两倍在内存的其他地方进行分配,然后将原来的内容拷贝过来,再在原内容之后构造新元素,因此,一旦引起空间重新配置,原来指向vector的迭代器都失效了。
list是数据结构中的双向链表,内存空间不连续,通过指针进行数据的访问,随机存储非常没有效率,三是删除和插入比较有效率。
map是关联容器,以键值对的形式进行存储,方便惊醒查找,关键词起到索引作用,值则表示与索引相关联的数据,以红黑树的结构实现,插入和删除操作都可以在O(logn)O(\log{n})时间内完成。

四、计算机网络
1、TCP为什么采用三次握手而不是两次握手?
答:客户端发出的第一个连接请求报文并没有丢失,二是滞留在某个网络节点,以致延误到连接释放以后的某个时间才到达server。本来是一个早已失效的报文段,但是服务器认为客户端要建立连接,于是向客户端发送确认报文段。而客户端现在不需要连接服务器,则对确认报文不予理睬。服务器认为客户端已经确认,所以开始传送数据,而客户端不接受数据。至此导致大量占用网络资源。

2、网络编程中的socket相关内容。
答:套接字是网络编程中的一种通信机制,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。其中的bind()函数,把本地的协议地址赋予一个套接字;listen()函数是一个被动的套接字,指示内核将客户端发送的connect()函数连接传送给listen();connect()函数是客户端连接服务器的一种方式。
2020腾讯C++后台开发暑期实习电话面(一)

五、Linux系统
1、查看端口号
答:nestat -tunlp | grep XXX

2、查看磁盘
答:df -l

3、查看CPU
答:没回答出来,查了百度,top vsmtat dstat。

六、有什么想问的
答:我自己有什么不足的地方。
答:知识掌握的深度和广度不够,TCP编程需要加强。