阿里巴巴面试经验分享

时间:2020-12-06 11:18:39 面试经验 我要投稿

2016阿里巴巴面试经验分享

  以下应届毕业生网搜集整理的他人阿里巴巴面试的真实经历,欢迎阅读!

2016阿里巴巴面试经验分享

  九月九号真是个值得悲痛和总结的日子,阿里的一面挂了......以前从来没有参加过面试,第一次面试就给了阿里,毫无经验(当然这不是理由)。八月二十九号发的通知,预约的九月九号的下午面试,地点是哈尔滨的曼哈顿酒店(第一次去这么高端的酒店),昨天中午,我去打印我的简历,准备下午面试,结果收到阿里的工作人员的电话,问我能不能提前去面试,所以就约的下午一点半,我吃过饭就打车去了,不到一点就到了指定的位置,我还以为我要等到一点半开始面试,所以还带了一本书(完全是心理安慰),结果我的书包还没放下,大屏幕就显示我的名字让我去面试......来的真快!!!!

  面试官是看着有二十多岁,非常平易近人,相互问候以后就开始面试了,下面就是面试的经过(写的不是那么详细)。我们暂且称面试官为A先生,我就简称M吧。

  A:你是C的吧?

  M:对,我的方向是C/C++

  A:那你先说说C++和java的区别吧

  M:(我对java了解比较少,所以这个问题以前虽然听同学说过,但是还是有点儿不知所措,所以就开始没有条理的回答)java是面相对象的语言,封装性比C++的好,另外java不允许多继承,要实现多继承的功能需要通过接口,而C++允许多继承,C++的内存管理比java的更为灵活,java有垃圾回收机制而C++需要自己管理

  A:还有么?

  M:(我想了一会儿,也没想出来啥,还是漏了一点儿,C/C++中可以操作指针而java中不可以)大概就这些了

  A:既然你说C++的内存管理比较灵活,那C++的内存管理上有什么劣势么?(对于这个问题,我没仔细考虑过)

  M:额......(我就想内存泄露啊什么的,但是我不知道该怎么回答)容易有内存泄露

  A:怎么解决?

  M:可以通过用对象管理资源的`方式,比如如果我们用malloc来申请一块内存,如果程序的执行流在free执行之前抛出了异常,那么free就不会执行,从而引起内存泄露,我们可以将其封装到析构函数中,当对象超过作用域时自动调用析构函数从而资源能得到释放

  A:嗯,这个方法可以,那么我们来假设这么一个场景,现在有一个服务器程序,上面有若干个对象,其中有三个对象的访问频率是百分之九十,而其他的对象访问频率是百分之十,请你给出一个内存的设计方案来管理这些对象

  M:(听到这个问题,完全蒙圈,不知道如何回答,可能是紧张,不知道往STL的内存设计这里想,平时挺熟悉的内存池也没想到,开始随便说了.....)以对象管理资源吧

  A:你刚才已经说过了,你还有其他的什么想法么?没事,能说多少是多少,这个问题比较大

  M:(我忽然想到这是不是多任务啊)那线程池可以么?

  A:线程池?(我听到这么一句反问,大概是方向不对,就没接着说)

  M:这个问题不大清楚.....

  A:给你点儿提示吧,怎么能减少malloc的调用

  M:(真是完全蒙圈,大脑已经不思考了,这应该就是考虑的内存池,怎么也没想起来,开始瞎扯,想到内核态和用户态的切换需要时间)内存映射可以么?

  A:这个可以,但是不能每次都内存映射吧,还有其他的方法么?

  M:不清楚了

  A:(可能有点儿失望)你都能想到线程池,想不到自己管理对象的内存么?可以有对象池啊(我觉得这应该就是内存池吧),这样可以减少malloc的次数,降低系统开销(然后就在电脑上打字)

  M:嗯,对(真无奈啊)

  注:对于第一个问题的总结,C++的内存管理,我觉得SGI中的STL两级内存分配完全可以解释这个问题,在SGI中,如果申请空间大于128B,那么直接malloc,如果小于128B,调用二级分配方法,从内存池中取出来一块内存(这里不需要使用malloc,更有效率,其实也就是更快)

  A:那我们来写一个小算法吧

  M:(前一个问题没回答好,我也有点儿失落,更紧张)

  A:(略作沉思),有这样一颗二叉树,它是有序的,也就是类似于二叉搜索树,但是有一个条件,给定一个节点A,A的左子树的根节点的值小于等于A的值,A的右子树的根节点的值大于等于A的值,(特点就是节点值可以相等),那么在中序遍历中,树的值应该是有序的对吧?假设遍历的结果是1,2,2,3,4,4,现在给你一个树的根节点的指针,给定一个关键值K,求序列中值等于K的第二个树节点的指针,如果不存在返回NULL即可

  M:(听完这个题,我感觉天黑了,我该回家了,开始思考)我的第一种思路是先比较当前节点的值C,如果给的值K大于C,那么如果存在第二个节点,那么该节点肯定在该树的右子树上生长,反之如果小于C,则在左子树上,然后递归调用,如果等于呢?我怎么能够确定它是第二个我要找的呢?这个节点可能就是我要找的第二个节点,也可能它是第一个(那么第二个应该在右子树上),同时我们要找的节点也可能是在左子树上(貌似有点儿困难啊,其实这个时候我已经把代码写完了,不过我再检查的时候发现不对,然后就没然后了)

  A:(发现有点儿困难,开始给我降难度)如果找不到第二个,能不能先找第一个呢?

  M:嗯,第一个的话比较简单(我嘴上说简单,我也知道简单,但是大脑已经不听使唤了.....),然后想了一会儿(其实经历了挺长的时间)我就想出来可以先中序遍历,将节点压栈,然后出栈判断节点的值是不是和给定值K相等,如果相等则找到了第一个节点,如果不相等,则没找到

  A:嗯,(面试官想了一会儿),这个方法可以,但是不是我们想要的,你这个方法需要遍历这颗二叉树,而有更快的方法不需要遍历整个二叉树,可以这样做,假设当前节点的值是C,如果如果K和C相同,那么我们先标记一个当前节点,因为它肯定是我们要找的候选节点,再来判断左子树的根节点的值L,如果L的值和K相同,则递归调用左子树,如果L和K不相同,是否可以判断C一定是第一个节点呢?不能,因为L的右子树也可能包含我们要找的节点,接着递归调用左子树的右子树即可,如果C大于K,递归调用左子树,如果C小于K,递归调用右子树,这个思路比较清晰把,你开始的时候应该就是这么想的吧

  M:是,但是写到后面就有点儿乱了......

  A:那我们来点儿C++基础吧,说说const的用法吧,可以用在哪里

  M:我就把const能用到的地方都说了一下,最后强调了一下在类中const static int可以在类中初始化(有一点儿没说,就是const可以作为函数的返回值和修饰形参,面试官说了一句,我就补充了一下)

  A:嗯,这个回答的对

  A:嗯,那来说说你的项目吧(最怕的来了,没做过什么项目,当时就随便说说,由于项目都不出众,所以也没大准备,不再写了)

  注:这两个问题考察是基本数据结构和算法,还有项目,其实如果静下心来想想也不难,但是就是在当时的情况下,很难有正常水平的发挥,而且我是第一次面试,结果就比较明了了

  A:你有什么问题要问我么?

  M:(其实我能去参加面试挺惊讶的,因为很多比我牛的人都没接到面试通知,我就稀里糊涂的去了,所以我想知道一下我的笔试成绩和状况),您这里有笔试的成绩么?我能知道一下么?

  A:我看看,我这里能够看到你的笔试成绩,不过这是保密的,所以不能给你.....

  M:哦,(这个问题我也没准备.....)那今年支付宝招多少个人啊?

  A:这个我听说是缩招了,但是具体情况我也不清楚

  M:那没了(真囧)

  然后我就被通知今天的面试行程已经结束,然后就没然后了......回来的时候梳理了一下面试经过,觉得一是自己的面试经验不足,二就是准备的不充分,

  所以分享给大家,对于面试要认真准备,如果有机会尽量参加几次面试总结经验(我春招的时候有机会去面试一下,但是觉得没必要就没去)。

  对于昨天的事情,要总结经验向前看,如果面试失败也不是什么大事(貌似有点儿自我安慰的意思,哈哈),借用毛主席的一句话:春天我不先开口,哪个虫儿敢做声!!

  总有自己的一碗饭吃。

【2016阿里巴巴面试经验分享】相关文章:

阿里巴巴五轮面试的经验分享01-16

2016平安银行面试经验分享12-14

分享面试经验12-04

360面试经验分享12-17

面试的经验分享01-16

面试技巧经验分享12-28

建行面试经验分享12-21

小升初面试经验分享12-13

空姐面试经验分享11-12

MBA面试经验分享11-05