阿里面经(附回答)面试必看

桂林seo半杯酒博客

一面(这可能是所有面试发挥最好,1小时)

问题1:项目难点。说了一下用到java反射机制的地方以及多线程建索引。

问题2:项目中用到的最复杂数据结构,回答没有。。。然后他问TreeMap听过没有,为什么查询速度会很快

答:treemap底层实现是红黑树,红黑树是一种平衡二叉树,它的时间复杂度是O(H),h为树的高度,而红黑树通过它五个性质保证了树的高度为O(logn),所以它的查询速度快(注意此处,故意提到5个性质,之前内推实习问到红黑树)。果不其然。

问题3:红黑树的5个性质是什么,快速回答之。

问题4:Object类的方法有哪些。这个问题恰巧被寝室的问到过

答:getClass/hashCode/equals/clone/toString/notify/notifyAll/wait/finalize

问题5:你刚才提到了hashCode方法,如果不重写hashCode方法会导致什么问题

答:java编程思想上面有,object的hashcode方法是根据内存地址来hash的,如果你需要根据对象的某个属性来存取的话,就会找不到该对象,重写hashcode一般必须重写equals。。。

问题6:TCP建立连接之后怎么保持连接

答:之前没有了解过,不知道是通过心跳包来保持连接的,随便扯了下TCP的三路握手。。。囧~~

问题7:说一下java集合框架

答:balabalabala,最后提到并发库,concurrentHashMap(当时紧张,还忘了怎么拼)。

问题8:concurrentHashMap为什么性能高

答:分段锁,16个写锁,重复读锁。并说了一下hashtable的性能为什么低(整表加锁)。

问题9:了解存储过程么,说一下优缺点。

答:无语。。。缺点还真没想过,先说的优点,缓存提高性能、精简代码、增加安全性、降低网络流量。本想蒙混过关,结果追问缺点呢。。。呃,可能就是存储过程没写好不好用吧,而且不灵活。。。= =! 面试官:好的,下一题。。。

问题9:数据库优化性能

答:这个在java面试宝典上面有,建立索引,建立分区,尽量使用固定长度的字段,限制字段长度;增加缓存使用连接池;减少SQL语句的比较次数,限制返回的条目数。。。还有一条想不起来,面试官提示:你刚从数据库,IO,语句方面说了可以优化,还有没有其他方面可以优化呢? 突然想到了java方面,对于反复使用的语句,使用preparedStatement。追问:preparedStatement与普通的statement有什么不同。答:preparedStatement会预先编译语句,并缓存改善性能。(阿里面试官就是不错,不仅提示,还帮总结的)。

问题10:简述一下tcp/ip协议

问题11:应用层有哪些协议

问题12:听过DNS劫持么

答:听过。。。怎么预防,不知道,随便说了个MAC地址绑定。。。无语~~后来发现潘爱民版的计算机网络上面有。

问题13:中国最大的DNS提供商

答:不知道,之后查资料发现,DNS提供商有360,阿里巴巴…好吧。。。

问题14:http端口,tomcat端口

问题15:Http响应状态号,服务器错误状态号是多少。

答:只知道404 not found。后来查阅发现服务器错误是5XX,请求错误是4XX,重定向是3XX,成功是2XX,消息是1XX。

问题16:get和post的区别

答:从逻辑上get是安全的,post是不安全的。get一般用于获取数据,post可以用来提交数据,如表单。追问:get不能提交数据么,可以,不过需要跟在url后面,这样安全性会降低,如果使用url传递用户名,密码的话会非常不安全,因为全部为明文的。而且get有最大长度限制,因为url每种浏览器都有一个最大长度。

问题17:开放性问题,如果让你设计淘宝架构,用于支持双11的访问量,你怎么设计。

答:1、减少http请求,将js,css文件打包成一个文件。其实还有页面静态化,之前项目有涉及。

2、内容分发CDN,我回答的是根据用户的IP,将用户请求负载均衡到就近的数据中心。追问:如何负载均衡?可以根据IP hash生成,根据请求响应延时负载均衡。追问:这几种负载均衡属于哪种负载均衡,答不知道。他说属于软负载均衡。然后我问他还有哪种负载均衡策略。他说还有硬负载均衡。然后我再问,这样的话是不是用软件做负载均衡就是软负载,硬件做负载均衡就是硬负载。他说也可以这么理解,哈哈。最后提示我其实可以用DNS做负载均衡,这就是内容分发的思想了。

3、在每个数据中心中建立缓存。web代理的思想(详见计算机网络,潘爱民版,神书,师弟师妹不要错过)。

4、tomcat使用短连接,或者降低keep-alive时间。追问长连接和短连接的区别,哪个版本使用长连接。(此处也故意提高短连接,这是一个面试技巧,尽量提到相关的技术)。

5、数据库优化,具体方法之前问过。

问题18:还有什么补充的。说了一下项目用到的主从复制思想。

二面 **(比较水,只问了30分钟,我以为挂了,失败从此开始)

问了下项目经历,项目,索引是怎么存储的。作为项目组长人员怎么分工的。爬虫。jdk源码(说了个hashmap),Lucene源码。一面二面总结:可能一面表现太好,二面问的比较简单,发现计算机网络,数据库,以及java并发比较重要,jdk源码,以及项目源码也很重要。二面完了,8天,杳无音讯,我以为挂了。开始新的一轮复习:补了一下网络,数据库,effective java,java并发(java并发编程实战),看jdk源码,复习项目,看lucene源码。这个时候千万别放弃。。。因为阿里状态一直不会变,特别是有些一面明显挂了得同学,状态一直是面试中,所以这时候对阿里开始有点反感。再加上看到阿里有个搜索部,而我想做搜索。最最重要的是我知道自己的性格,如果阿里过了,我肯定是提不起劲复习的,因为我喜欢搜索,所以百度是我的理想选择。总之,这个时候心里就已经放弃阿里了,开始全身心投入源码学习中了。

HR面(在心情失落的状态下看了几天书之后,晚上7点突然接到电话,30分钟)

因为之前已经放弃阿里了,接到电话还没有反应过来。。。态度一直比较冷淡。注定失败。失败了才开始后悔放弃的太早了。。问:本科到研究生的经历

因为二面介绍过,所以我几句话说完。。。面试官大呼,不要那么快。。。好吧,这就是失败的开始。这个地方要注意了,没有经验的师弟师妹肯定会觉得一面问过的问题,二面问相关的可以回答的粗略一点。实际上这种想法不好,首先二面面试官根本不知道一面问的什么问题,即便是有记录也是简短的1、2条,粗略的回答会让面试官觉得你不了解,或者不自信。

问:兴趣爱好

看书。。。好吧,只说了这一点,加上当时非常累,表现出不爱说话的样子,可能面试官觉得我比较孤僻。。。兴趣爱好最好加上一条运动,因为运动容易让人觉得乐观。

问:项目遇到的问题相关的几个问题

这个同样没有回答好。。。

问:你还有其他什么问题

问了个入职培训。。。这个同样是败笔,也许是前面表现不好,这个时候问什么都是败笔。。。

总结:因为太累了,把话语主动权叫给了HR是一大失败。后来发现,面试也要遵循28定理。面试官只说20%的话,自己最少要说80%的话。黄金法则:80/20—你要承担起80%的谈话而面试官只会说20%。白金法则:你必须试着控制面试的节奏和话题。钻石法则:对于没有把握的问题,抛回给面试官。注意这三个法则!