阿里菜鸟B2B面试一面、二面、三面、C++后台开发、回馈社区
前言
我是研二学生,而且导师不放实习,但是为了增加面试经验所以面了春招实习。
我的简历写的很朴素很简单,所以面试官的题目难度比较低。一面,面试时间是2018年3月8日晚7点。由于前一晚我在做阿里测试,所以面试官说延后一天面试,这也给了我时间来准备面试。特别是又把基础知识复习了一遍,很有帮助。
二面面试时间是3月18日晚9点,感觉至少5个问题没打上来,GG。
没想到有三面。三面的时间是3月23日晚上8点。
一面
自我介绍
- 略
项目的经历和对你的影响
- 略
四层网络结构有哪些
- 我回答了包含有光纤、交换机、双绞线的物理层,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结点,在内核***里建了个红黑树用于存储以后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分钟,语速比较快,有点紧张和激动。大概就是这些,有想起来的再补充。
二面
自我介绍
同第一次
项目比赛经历
这个说了蛮久的
分布式系统中,每台机器如何产生一个唯一的随机值
不会。。貌似和guid有关
高并发量秒杀活动的处理流程
这个更不会
TCP的拥塞控制、流量控制详细说明?
流量控制除了滑动窗口还有个速率控制,但是没说上来
面向对象的四个特点结合语言说明
多态说的多一些,其他几个gg
C语言编译器原理、语法分析
完全不会
时间复杂度为O(n)的排序算法
桶排序。面试官说还有呢,我说不知道
时间复杂度为O(nlogn)的排序算法及其适用场景
不知道回答的是不是面试官想要的
对数据库了解吗
不了解
I/O模型有哪些,每一个的适用场景
简单说了下
http1.0和http2.0的区别
不会
http https的区别
不会
后记
感觉已经GG 了,再见阿里
三面
项目方面
这个聊的比较深入。
你想做软硬件结合吗
这个被我回绝了,然后面试官说我的优势就是软硬件结合。但是我的意志很坚定。
后记
感觉更像是我拒了阿里。。。
#阿里巴巴##C++工程师##面经##春招##Linux##C/C++#