阿里巴巴技术面

昨天晚上进行了长达近两小时的阿里巴巴技术面试,大公司技术岗的大牛就是不一般,对问题的理解剖析,高于一般公司的看法,我自身也提高不少,下面说下面试的过程吧。

整体来说就是基础的东西虽然简单,但是不能局限于表层的东西,要深入地挖掘这样才有所获。

其实面试的过程中,涉及到的知识面特别广泛,我大致总结了下从C/C++基础-》数据结构-》操作系统-》网络通信-》网站架构-》系统监控-》基本shell。

C/C++基础:

首先问的就是什么是预编译,这个比较简单;

然后是内存页面对齐,这个我只知道结构体中对齐操作,其实是属于内存页面对齐的一种;

然后是free(NULL)是否有错?malloc与alloca的区别是啥?free空指针,free函数什么也不做,不会出错,malloc与alloca的主要区别是前者在堆上分配内存,后者在栈上分配内存;

然后是另外一个比较基础的问题,两个unsigned的数字相加计算平均值,改怎么计算,这个重点考察的是溢出的问题;

然后是一个关键字volatile的用法,这个关键字我平时没怎么用过,只是模糊地记得加了这个关键字,不容许编译器过度优化而忽略,其实我只是答出了其中一种情况,像下面的情况,如果不加volatile关键字,编译器会认为是一条指令忽略其他三条:

XBYTE[2]=0x55;
XBYTE[2]=0x56;
XBYTE[2]=0x57;
XBYTE[2]=0x58;

但是其他的应用,具体怎么不晓得,最后查资料得知这个关键字在多线程环境中极其重要的,添加这个关键字的意思是说明变量的值可能会发生改变,要读取变量需要每次从变量的地址读取值,比如下面的例子:

case1 :
int i=10;
int a=i;
int b=i;

case 2:
volatile int i=10;
int a=i;
int b=i;
第一种情况下,编译器会优化代码,发现两次读取i的时候,并没有对i进行改变,则会自动从上次读取的存储的寄存器里面取值,而不会去i那里读取值,这样的话,中途如果对a做一些改变,则b读取的值就不是i的值了,如果i是一个比较重要的端口数据,那么就非常容易出错。

第二种情况下,对i加了volatile关键字,告诉编译器要读取i的值的时候,需要每次从i的地址读取,也就是强制从内存中读取变量,这样的话就避免了上面的那种情况。

一般下面这几种情况会用到volatile:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
接下来一个问题是const关键字的用法,这个比较简单;

然后是C++中STL容器里面vector该怎么去实现,这个问题当时脑子顿了一下,后面想想确实也不难;

然后是C++中虚函数是个啥?C++不熟,不晓得。


数据结构:

问的比较简单第一个问题是二叉树的有几种遍历方式;

然后是二叉树中序遍历是怎样的;

然后怎么反转一颗二叉树,反转的时间复杂度与空间复杂度。

操作系统:

首先是Linux操作系统的启动过程,从上电到系统跑起来,这个还是相对比较简单的,从post->mbr->bootloader(grub/lilo)->kernel->init->user->login。

然后是Linux系统裁剪的一些问题,怎么裁剪地只剩一个最小系统,怎么分配空间,怎控制加载,整个都是基于X86平台的裁剪过程,然后我在风中凌乱中,楼主只有嵌入式系统裁剪的一些经验,X86得好好学习啊!!

然后就是多线程编程的一些知识,首先是锁有几种,自旋锁、互斥锁、递归锁。自旋锁与递归锁均没怎么用过,被赤裸裸鄙视了。

网络通信:

第一个问题:OSI七层模型,简单的好回答;

第二个问题:怎么利用UDP实现文件的可靠传输?TCP与UDP的区别在哪里?这个问题如果只回答三次握手的区别,那只是一点点皮毛~这个问题问的是协议本身的问题,TCP自身存在一个丢包检测重传的机制而UDP没有,要使UDP实现可靠传输,得加一个检测措施。

第三个问题:hub上数据是怎么跑的?想了想啊,hub到了数据链路层了,主要就是利用MAC进行寻找相应的目标地址了。

第四个问题:TCP头与UDP头的大小?基础的需要好好看,理解~

网站架构:

第一个问题:LVS的三种调度方式,这个了解;

第二个问题:Nginx代理的方式;

第三个问题:zookeeper用来干啥的?怎么实现了数据的一致性?

第四个问题:hive是啥?

系统监控:
第一个问题:如何查看网络流量?这个简单~

第二个问题:如何查看磁盘IO情况?这个也比较简单~

第三个问题:如查看系统负载情况?这个也比较简单~


以上大致就是本次面试的内容,感觉基础的知识深入挖掘地还是太少了,像最简单的TCP数据怎么从传输层到网络层再到数据链路层都不太记得了!!!后面准备要更加仔细些,不能放过任何一个细节!理解问题,需要深入就算是一个小问题只要往里层挖掘必定会牵引出许多子问题,顺带就解决了好多问题。

你可能感兴趣的:(阿里巴巴技术面)