阿里巴巴c++实习4面
一面 简历评估(22分钟)
面试官做java的,有一些c++基础。所以c++问的比较少,主要是网络方面。首先问了实习做的东西,估计不对口,简单问了一下就问别的了。mtu,为什么要三次握手,如果第三次握手没有收到数据包会发生什么。epoll和poll包括select具体实现。进程和线程具体区别(最好细到寄存器方面)。dns和arp之类的具体细节,还有一些简单的基础。
二面 (25分钟)
问了类在各种情况下的析构情况,虚函数的各种使用场景以及细节。c++的一些很常见的基础题。linux内核,然后让去在线的ide上写算法题。
三面(25分钟)
内存泄漏的具体解决办法(现代c++有很多解决内存泄漏的方法,对老代码可以用valgrid),各种变量在内存中的位置。问了一两个基础,就不问了,问项目。一个网络框架 主要是nio加io复用。细节讲得多了一些。然后就是分布式缓存相关,redis的本质是一个单线程的epoll服务器,他的单线程模型的优缺点,我讲了一下。包括redis-cluster的实现。以及在生产中的性能瓶颈。问了一个开放的问题,缓存怎么保证可靠。我就从我们实际测试的结果说了一下,包括与业务方在保证可靠性这方面的沟通。这个问题其实很大,可以细细讲。由于有些是公司的数据结果,这里不方便透露。
四面(交叉)30分钟
先问了算法,很多区间求并集。合并两个有序链表比较快的方法(我用的递归,面试官不太满意)。问完就是实习做的东西,面试官对分布式缓存比较熟,于是我就和他主要聊这个(codis和redis-cluster)这两个的源码我比较熟。就讲了这两个方案的具体实现方法,包括生产中出现的问题,性能瓶颈。以及目前更加流行的一些设计方案。然后面试官问我bigtable和mapreduce(我回答说不太熟,面试官让我多学点)然后讲了一个语言之间的小细节。c++用epoll的时候,它默认设置的超时时间是200ms,而golang设置的超时时间为0。为什么要这样?可以看下go net相关源码,golang的网络实现非常优雅,没有reactor模型看起来那么复杂,非常像写阻塞的io。但是在超高短连接的时候,golang在性能方面有些瓶颈(和面试官简单聊了下)其余就是些职业规划了。
感觉我面试的特别快,主要是聊实习做的东西,也没有特别多干货。但还是想着和大家分享下
#C++工程师##阿里巴巴##实习#