网上一牛人的阿里五面

一面(电话面 1一个小时左右  
约投递一周后接到电话,问了大概以下问题,时间比较长了,记得不太清楚了

1 ArrayList和LinkedList有什么区别,能否序列化

1) 因为Array是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据。

2) 相对于ArrayList,LinkedList插入是更快的。因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还需要更新索引(除了插入数组的尾部)。

3) 类似于插入数据,删除数据时,LinkedList也优于ArrayList。

4) LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点的位置。

两者均可实现序列化

2 如何判断链表是否有环

如图,如果单链表有环,则在遍历时,在通过6之后,会重新回到3,那么我们可以在遍历时使用两个指针,看两个指针是否相等。


方法一:使用p、q两个指针,p总是向前走,但q每次都从头开始走,对于每个节点,看p走的步数是否和q一样。如图,当p从6走到3时,用了6步,此时若q从head出发,则只需两步就到3,因而步数不等,出现矛盾,存在环

方法二:使用p、q两个指针,p每次向前走一步,q每次向前走两步,若在某个时候p == q,则存在环。


3 concurrentHashMap如何实现

这个实现分析还是比较复杂的,详见牛人博客:http://www.iteye.com/topic/344876

4 集群服务器 如何application 共享
5 四个表 记录成绩,每个大约十万条记录,如何找到成绩最好的同学

6 AIO与BIO的区别

详见:http://bbym010.iteye.com/blog/2100868

7 DirectMemory是否了解
8 对JVM了解多少?我当时提到了内存模型 ,他问我工作线程的内存如何释放
9 JVM的垃圾收集算法了解多少?有哪些垃圾收集器
10 是否了解红黑树
11 session的生命周期是多久
12 关于Mina框架了解多少?(因为我在项目里用到了Mina,所以提到了这个部分)
13 是否了解Linux
由于大概四个月过去了,能记住的只有这么多了。一面大概持续了一个小时吧,总的来说问题广而杂,而且会比较深入。这就是大家所谓的压力面试,面试基本在一个聊天+面试的氛围中进行。面试官的跳跃性很强,时不时地聊天,又会突然提问。印象中还有更多的问题吧,实在记不清了,而且我当时也没有全部回答上来。
二面(电话面 20多分钟) 
本以为一面挂了,结果还是在几天后接到二面电话。他首先自我介绍是XX事业群的总监,基本就是聊天,没有任何技术问题。比较关心如果发offer能否全职实习的事。很轻松,也很意外。
三面(交叉面 30分钟) 
第三面是杭州的电话(前两面都是北京),很明显就是大家所说的交叉面(前面的叫部门内部面试)。从他的问题中我能感觉到他完全不知道前面的面试官问过我什么问题,后来事实证明在面试系统里面应该只有评价,所以不要以为面试过的问题不会再问了。
1 介绍自己的项目,问我项目中用到的websocket,问我websocket有哪些优缺点
2 HashMap和ConcurrentHashMap的实现
3 JVM内存都分为哪些
4  是否了解数据库的索引是如何实现的
5  对Linux是否实践过?(几乎没有问,因为我只说我会用简单的命令)
三面总体说比较机械,没有过多的废话在里面,一个问题接着一个问题,不会就过,感觉有点无情。而且也没有最后的提问环节
四面(北京终面 1小时左右  
首先说为啥要去北京。其实我也不知道,当时以为是内推挂了,没想到收到短信邀请参加现场面试,内推的姐姐也让准备一下HR面之类的,但是我当时就觉得肯定还有一轮技术面。而且当时已经知道要拥抱变化了,所以这个技术面肯定不好过。记得去北京的时候,准备了厚厚一摞的复习资料,全部都是自己的博客总结以及自己想的问题,事实证明基本命中了技术面的全部题。
面试的场面就不说了,略显冷清(大家都知道原因)。被叫号后领入一个大厅,跟面试官1V1,一个小桌,一个Apple(真想问问他苹果笔记本怎么样,忍住了),桌子上有几张纸,没有很紧张。
首先讲了自己的项目,而且在纸上画了画结构图,项目引出的问题
1 BIO与NIO的区别
2 为什么要用Mina框架
3 Mina框架的实现原理
项目讲了很久,总得来说这个过程是我来主导的,我有意在说出了一些点,然后他就问了我相关的东西。
然后让我在纸上也一个HashMap的实现,set get方法,不要求线程安全。因为真的看过hashmap源代码,没什么压力,不过hash传播算法确实没写出来,不过他也不太在乎。在我写的时候,他在看我的技术博客(博客地址是我写在开放性问题里面的)。写完之后他看了一下,也没说什么,不得不说写的挺乱的,没有特意练过笔写代码,只说一个判断可以进行短路优化。
后面他又问我一个博客上写的问题,volatile和synchronized的区别。
问题不止这些,确实记不住了。后面跟他聊天中我就知道自己过了,能看出来他比较欣赏我的技术水平吧,尤其是对一些细节的掌握
五面(HR面 20分钟左右吧)

HR面嘛,大家都知道就是聊天,然后她不断对你评估。说一些问题吧
1 自己做过的项目
2 自己在大学期间有哪些做到了0到1
3 如果去问同学,他们会对你有什么评价
4 遇到了什么困难
5 喜欢哪个城市 

总结

以上说了那么多,当然我要说这应该只有所问的题目的一半吧,因为确实忘了。我觉得大家如果实在想知道到底都问的是什么,可以看看其他人的面经,在我看来这些问题真的差不多。我最后没有拿到阿里的offer,这不能说自己在拥抱变化,只能说自己还不够优秀,下面讲一下如何准备面试吧:
(1) 平时多看书,面试前看面经。有人说这不是废话吗?但我敢说大部分只做到了后半句,甚至有人都不知道还可以有面经可以看。我承认面试可以突击,可以看看别人的面经问了什么,自己查一点答案就背。但是这样在面试官前面你首先就没有自信,你会觉得那是我背的,在不断回忆的过程中怕的是背错,而不是一个正确的回答问题的过程。你以为面试官真的看不出来嘛,那他对比一下也知道谁在背了。
(2) 好好包装自己的项目。确实不是每个人都有很好项目,但你应该知道面试中总考的点是什么。看我的面试经历,有多次提到NIO与BIO,这是一个热门考点,但我要说的是所有的NIO与BIO问题都是我引导面试官问我的。因为我在介绍Mina框架的时候,我有意的提到NIO,那么他们马上就会去问这个知识点。所谓的项目,我觉得面试官是想知道你在项目中学习了什么。不是说你学习了哪些编写代码的规范,而是说你学到了哪些他们感兴趣的点。
(3)养成写博客的习惯。阿里的简历选项中有一个让提交github地址的地方,悲剧了我没有。但是我仍然想让面试官了解我,那么只能通过开放性问题了。在一个显眼的位置写上自己的博客地址。曾经在一个腾讯的面经里面看到,面试官对面试者说我们看了你全部的技术博客。博客不是让面试官看到你技术有多牛,而是让他们看你是如何学习的。把你的学习的点滴写在博客上,哪怕只是Integer类的缓存,他们一旦get到这个点,就会觉得你的学习能力很强,会对你有一个很好的印象。PS:面试我的技术官都有看过我的博客,我相信它给我加分了。
(4)利用好“你想问我什么?”。这个问题一般出现在面试的结尾,不要以为自己没用的,你能了解到很多。记得我在终面的时候问那个面试官“你对我的技术有些建议?我未来应该朝哪个方向努力。”他对我的面试过程以及博客进行了点评,而且把前面的面试评价给我讲了讲,简单了提了一些建议。我觉得这建议胜过读几本书。据说阿里的终面面试官一般都是P10(可能不是哈),他们是牛P了,有多少人有这样的机会去接触到这些牛人,并且给你做指导呢?有这样的机会为什么不抓住呢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章