记一次阿里巴巴电话面试

我已经不太记得当时的感受了,因为时刻太久,本来已经写着一篇的了,但是因为使用马克飞象操作不当导致。数据都没有了。尝试自己解决,发现并没有想象中简单,只能寻求作者,希望能找回。

回想下当时,就是前一天接到电话,我被吓了一跳,当他说他是阿里巴巴的,我当时就不知所措了,问我有没有空,我就直接说没有了。
吧电话面试推到了明天这个时候,没有丝毫准备,问到岂不是等死。挂了电话后,我便洗个澡,定定神。后面我妈说洗发水漏得一地,可见我有多紧张,真个人都不好了。

接下来,我便要认真复习了,上网搜索下,知道大概要问什么,侧重于基础为主,然后复习,我不知道的以及我急切需要知道,被遗忘的知识点。但并不顺利,现实笔记因为我的误操作(流氓软件首页被篡改,以为清除数据可以解决),点击谷歌浏览器里面的清除数据,导致缓存在本地的马克飞象的笔记全部都没有了,我昨晚一晚的笔记以及之前所有的笔记,都88.当时就吓蒙了,接着上网找到好不容易的数据恢复,只能扫面整个盘,结果数据太大,只能用移动硬盘来存储,存储过程中发现硬盘发生异常的声音,怕爆炸,赶紧拔掉,结果我的硬盘再次插入数据时候,就无法显示出来了,我里面的照片,再次哭死。

在此之后,终于知道云备份是多么重要。为毛今天发生这么多的事情,我晚上还要面试的。

网上19:30之后每一秒都是煎熬,因为等待电话的降临,快点来电话,让我死得痛快点。

自我介绍

在询问确认是本人之后便进行这次的电话面试了。

他:先自我介绍下吧。
我:(一天都在准备复习知识点,结果把自我介绍忘了)。
你好,我叫xx,来自xxx,大一学习C语言,下半学期开始学习java。因为有一定的C基础,所以就转学java至今,平时喜欢运动…(当时没有这个通顺的,不断地补充)

自我觉得这个自我介绍非常失败,应该写稿,是可以按着套路来的,并且,不要出现“因为所以”的句子,变想变补充,会显得思维很糟糕,听完之后,别人可能还不知道你说什么。

数据结构(排序)

他:有学过数据结构吧?(感觉只会问你学过的东西)
我:恩
他:有多少种排序算法?
(我当时就愣了,怎么知道有多少种那得算算。)
我:冒泡,直接插入,选择,堆,归并,快速…(边数字手指头)一共8种。
他:恩,那堆排序是怎么实现的,讲一下实现的过程。
我:(我第一时间想到推排序的那棵树,插入移动)在一棵树,插入数据的时候,重底部插入,进行比较,放置左边还是右边,然后相应的移动节点,然后循环这个过程。(这是我现在整理的思路,当时哪有讲的这么顺,想到一点,就马上补充,并且我也不是很了解整个过程,将不清楚)。

现在想想,根本不对(知道后面为什么不继续问下去了)。正确答案:经典排序算法 – 堆排序Heap sort

他:好。那描述下快速排序的实现过程吧
我:有两个想指针的东西,一个在最前,一个在最后,进行比较,交换,当前面的>后面的,进行跳出,然后分开两边进行递归,循环这个过程。(当时讲得并不通顺,有点糊涂,自己也只是想起就那样的过程。)
他:(他应该觉得我知道点,又不知道点,讲得不太清除)你现在有纸和笔吗?
我:好,我去找找。

结果我妈妈拿来一叠纸,和笔。关键笔没有笔芯。他已经开始念数据了,凭着记忆,还是可以记下来的。

他:4 2 6 3 7 10。对给你数字进行快速排序,说明下实现的步骤。
我:(我当时不明白,)这这么说啊。
他:你就告诉我,第一步得到的数据时这么样,接着第二步…
(大概明白点)
我:假设有i,j。4跟10比,4跟7比,4跟3交换…(喃喃自语,他也在听的)
我:答案经过第一步为:3 2 4 6 7 10 (我停顿,一度怀疑自己的答案。)
他:下一步该怎么做?
我:3 2 4分一组,6 7 10 分一组进行递归.
他:确定
我:恩
他:为什么4进行归为一组,不是..
我:哦哦。对,不应该。3 2 一组才对。笑着说,紧张。
他:没事,我们就当当聊聊天嘛。(有这样聊天的吗?)

数据结构(B树)

他:知道什么是B树吗?
我:不知道(真的不知道,忘了。)
他:那知道平衡二叉树吧?
我:不怎么清楚,但我知道红黑树。
他:那你描述下什么是红黑树
我:红黑树,将叶子节点为黑色,非叶子节点为红色。然后当有数据进行插入的时候,从底部进行,设为红色,再跟节点进行比较,判断是左旋还是右旋,因为要保持平衡二叉树的特质。(他没有问下去了)

感觉他当时是想问B树的知识点的,想不到我不会,想问平衡二叉树,发现我也不怎么会。弥补的是,我讲了个红黑树(一种二叉查找树)。这块知识薄弱。

操作系统(直接跪了)

他:学过操作系统吧。
我:恩。学过。
他:知道内存分配,占用(忘记是什么了)
我:不知道。我知道进程和线程。(跪了,发现自己学的只够考试而已)
他:那你说下进程和线程的区别
我:进程能分配多个线程。当程序进行读操作等待用户的时候,就可以开一个线程去做其他的事了。
他:那他们的区别是什么,哪个占用率大?为什么?(这一轮询问后,真的发现我并不知道)
我:这不知道耶。
他:课本上不是说的清清楚楚的吗?
我:对概念不太记得住。(我发神马神经,居然说出这样的话来)
他:这不是概不概念的问题,最大区别你都说不出来。

操作系统,直接就跪了。还出现面试官不愉快的事情。一定要狠狠补补操作系统。

编程语言(C,java)

他:C和java有什么区别。(这肯定是按着简历上出发的)
我:c是面向过程,而java是面向对象的。
他:那什么是面向对象?(我一时转不过弯来,我已经想到是不是问我面相对象的4大特性了,其实这可以回答,这是区别面向过程的。)
我:(举例类和对象)类是一个模具,可以生产不同的汽车。人是一个类,每个不同的人的每个不同的对象。(答非所问)
他:那类和结构体有什么区别?
我:(前面接连回答不出,已经奔溃一般。我在专牛角尖,在想类和结构体的区别,而不会换个角度想)类有函数。
他:结构体没有函数吗?
我:有
(几番周折,还是说不知道了。)

这个实在是意想不到啊,这么简单我都不知道,当人紧张起来,什么都想不起。

深入了解JVM

他:你了解java虚拟机吗?
我:恩。了解过。
他:那你说下java的JVM吧?
我:不知道怎么说?
他:(进行引导)JVM的全称是什么?
我:java virtual machine.
他:那它有什么优势?
我:它跨平台。
他:怎么跨平台?(他会捕捉你的回答,深入地问到地)
我:(一次编译,处处运行。)编译成中间代码,然后到不同平台的jvm中进行解析。
他:你对项目进行优化过吗?你进行了哪些优化?(按着简历发问)
我:对于强引用,弱引用,适当地使用弱引用。使用StringBuilder来代替String。因为再不围棋项目中要不断地记录步数,更新别人和自己的走法。(有意识引导我将要知道的知识点String,StringBuilder区别)
他:(见缝插针)那为什么用StringBuilder来代替String
我:因为String是不可变对象。
他:那什么事不可变对象。
我:不能使用引用对对象进行修改,当对象需要改变的时候,只能重新创建一个对象。

java多线程

他:有使用过多线程吧?你是怎么使用的?直接new吗?
我:恩。(沉默了一会,发现不直接new想不到其他他想要的答案)是直接new。不过,我会使用线程池进行缓存,因为new出一条线程是很耗费资源的,所以需要把他们利用起来。
他:(这里给他抓到痛脚了)你使用的是什么线程池。
我:(凭着印象)使用ThreadPool线程池。
他:那使用过BlockingQueue吧,他们之间有好几种接口,简述下之间的区别,以及效率方面,为什么选BlockingQueue
我:(这一问问傻了)不知道。
他:那你不是用过吗?

我:恩。真的不知道之间的区别
他:那是类需要跟他一起用是吧。
我:恩。

不知会用,还要知道相关的差别,以及为什么?

MVC

他:什么是MVC,简述下三个字母,各代表什么
我:三层架构,m代表model,view代表视图,c代表控制器。对view传来的数据,进行处理,给相应的model执行。
他:那MVC有什么好处呢?
我:健壮性,可以让工作分开,专做 view的做view。model的做model等。

编程题

他:那笔记下题目:无序列栈A,有序栈B,现在要从无序栈A中取出元素,放到有序栈B中使得有序。给你5分钟吧。
我:(沉默。这次体会到什么叫做脑子一片空白。不就是一比较就出来了吗?)有什么辅助空间限制的?
他:你先想。
我:(我自己给栈添加具体的数据,有具体的数据比较好想)将a取出的放在b里面,然后a进行取出并进行比较,比较大的放进去,比较小的话,取出b的,不断取出标胶,知道大的,然后再把取出的元素进栈回来。
他:恩,那就必须有需要另一个想栈的空间,进行存储取出来的数据。
我:恩。
他:现在只能有一个临时变量c,只能存储一个元素,那该怎么做。
我:想了很久,我尝试说,进行之间的交换,但都不怎么对。(因为,当时没想到可以想象成汉诺塔的模型)最后只能说不知道。

编程题是我没有意料到,还以为电话面试就不会出的了,不过感觉不会太难,程度肯定没有笔试的编程题难,感觉更考逻辑。一定要冷静,将具体实例套进去。

项目(这是考我表达能力吗)

他:你做过什么项目,说一下是怎么实现的
我:不围棋吧。使用蒙特卡洛模拟结果,UCB决策来判断需要模拟的下一个点…..(不多说了)

项目中,他不断地反馈我告诉他的信息,这是考我的表达能力吗?感觉我讲给他听,还是不能完全明白的感觉

英语水平

他:你的英语水平怎么样?过了四六级吗?
我:(真的不太好意思)我说没有。平时谷歌完中文,找不到答案,只能谷歌英文了。虽然没过四六级,但是能看懂java里面的源码的。因为直接看源码的话,知道是调用什么,知道怎么一回事。
他:那你看了什么源码?
我:最近看Map集合
他:HashMap底层实现是什么
我:(还是那句不能够明白那要什么,我只能举例)当有插入数据的时候,先获取参数的hashcode,变进行运算,得到哈希值,判断当前位置的哈希值有没有元素,没有加入,有的话进行链表的形式连接。
他:就是链表的形式吧?
我:恩。

其他

他:平时爱逛哪些技术性的网站?
我:csdn,importNew。
他:那英文网站有没有?
我:(一时想不起stackoverflow)没有
他:还有什么疑问的吗?
我:没有

问完后,感觉希望都不大了。

总结

  1. 一定要对简历后写的一切进行反问自己,如果你是面试官,你会怎么问,可以对自己面自己进行模拟,及时发现遗漏的知识点。
  2. 面试官不会问你不知道的东西,但会问你一直半解的东西。
  3. 对自己回答的信息,一定要自圆其说,明白个所以然,不是面试官一深入问下去就完蛋了
  4. 补充自己计算机基础的知识:操作系统,计算机网络(这次居然没有闻到网络的问题),等。
  5. 练好自己口头表达能力
  6. 不要太紧张,要冷静冷静。
    原文作者:肉团先生
    原文地址: https://www.jianshu.com/p/5efa4e14cf88
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞