前言
我是研二学生,而且导师不放实习,但是为了增加面试经验所以面了春招实习。
我的简历写的很朴素很简单,所以面试官的题目难度比较低。一面,面试时间是2018年3月8日晚7点。由于前一晚我在做阿里测试,所以面试官说延后一天面试,这也给了我时间来准备面试。特别是又把基础知识复习了一遍,很有帮助。
自我介绍
- 略
项目的经历和对你的影响
- 略
四层网络结构有哪些
- 我回答了包含有光纤、交换机、双绞线的物理层,ip的网络层,tcp icmp udp的传输层,http dns的应用层。
- 标准答案:实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。所以第一个应该是链路层,包含有ARP协议,以及设备的驱动。
你对其中的哪一层比较熟悉?
- 我回答了传输层的tcp协议。
TCP与udp的区别?
- 略
三次握手与四次挥手?
- 略
你为什么对这个过程比较熟悉?
- 我回答了是主要看书看的。当然项目里也用到了,自己用tcpdump和wireshark抓包看过过程。
I/O多路复用是怎么样的?
我回答了因为多线程比较占开销之类的,对方听了一会说,不是,他想问I/O多路复用的实现原理。我回答说忘记了,但是我记得select poll epoll的实现过程中使用了高效的数据结构来检查到底是哪一个文件描述符上出现了io操作。
-
标准答案是
epoll的高效就在于,当我们调用epoll_ctl往里塞入百万个句柄时,epoll_wait仍然可以飞快的返回,并有效的将发生事件的句柄给我们用户。这是由于我们在调用epoll_create时,内核除了帮我们在epoll文件系统里建了个file结点,在内核cache里建了个红黑树用于存储以后epoll_ctl传来的socket外,还会再建立一个list链表,用于存储准备就绪的事件,当epoll_wait调用时,仅仅观察这个list链表里有没有数据即可。有数据就返回,没有数据就sleep,等到timeout时间到后即使链表没数据也返回。所以,epoll_wait非常高效。
传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的socket是“活跃”的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。但是epoll不存在这个问题,它只会对“活跃”的socket进行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有“活跃”的socket才会主动的去调用 callback函数,其他idle状态socket则不会。
介绍C++里的多态
- 略
什么是析构函数,作用呢
- 略
虚析构函数的作用?
- 略
父类的析构函数是否要设置成为虚函数?
- 肯定要
浅拷贝和深拷贝的区别?
- 略
如果一个函数传入一个对象,那么这是浅拷贝还是深拷贝?
- 我回答了这要看拷贝构造函数。但是具体是如何的我不确定。
- 标准答案应该是,如果使用的是引用或指针不会发生拷贝,如果传入的类没有实现拷贝构造函数则是浅拷贝,如果实现了拷贝构造函数则看实现的拷贝构造函数是浅拷贝还是深拷贝。
C语言里的指针是什么。
- 我回答是首先它是一个变量,里面存的是所指向的内部数据类型或对象的地址。取内容可以获得这个数据或对象。
- 实际上指针不一定是变量,也有常量指针,不过一般都说指针是指针变量的简称。所以上述表达没有什么问题。
形参实参的区别。
- 说实话我也搞不清楚,我说不知道但是把指针、引用、普通传参都说了一遍。
- 后来查到形参指的是外部调用的时候传入的参数,实参是函数在处理内部所使用的参数。
介绍模拟退火算法
- 由于简历上写了
熵是什么,增大代表什么
- 略
部门主要以Java开发,如果让你做Java开发你会抵触吗?
- 略
对于公司有什么想了解的。
- 略
后记
总时长27分钟,语速比较快,有点紧张和激动。大概就是这些,有想起来的再补充。