java终极面试题目总结

声明:本博客所有的文章都是本人原创,绝不会抄袭任何人,所以,请转载后,一定要标注出处,谢谢。

目前,我面试了好多人,大家在面试过程中,我总结了,10个人,有8个人说擅长SSM(spring+springmvc+mybatis),2个人会说SSH。说实话,没有亮点,我都不愿意继续问下去。稍微牛bi一点的人呢,会写项目用过阿里云的数据库,各种搜索引擎,反正就是好多高大上的东西,然后问他,在项目中你负责做哪块,他告诉你,写写文档,然后调用别人写好的接口来开发。我当时就笑了,你说你,项目很强大,但自己啥也没做。真是醉了。

由于我每半年都会出去投简历被别人面试,通过这种方式来提高自身的不足。所以也总结了,别人的提问。

1.集合框架Set为什么会自动去重?

此题目的在于检验你是否有阅读源码的习惯。答:因为底层源码重写了equals和hashCode方法。

2.什么是IOC和AOP,说说你自己的理解?

答:控制反转,把原本是你自己要干的活交给别人去做,然后把反馈结果拿到去交差。面向切面编程,把公共的部分提取出来,一起使用。

3.事物的特性?

答:ACID,原子性,持久性,一致性,隔离性。

4.mybatis如何批量执行?

答:它并没有批量执行的方法,但是在XML里有个循环标签来代替批量执行。

5.mybatis的取值方式是什么?有何不同?

答:‘$’符号和‘#’号。美元符号具有SQL注入的风险。

6.ArrayList和Vector区别?(网上有,不说了)

7.你是如何处理高并发的?

答:动态页面静态化;制作散列表;加缓存;镜像;负载均衡;产生并发大的服务单独部署;使用线程池和连接池来管理程序。

8.有一个方法,里面有一堆数0到N,现在给该方法传递一个参数(数字),让你在这方法里面写程序判断它是否存在这堆数中,若在,请返回它所在的位置,如何用最效率的方式查询出来。

答:把这堆数截成N段,开启N个线程,同时异步读取各段的数。

9.如何同步一个线程?

答:使用synchronized关键字或者ReenTrantLock类或者ThreaLocal或者采用ExecutorService接口进行异步编程。

10.如何进行JVM调优?

答:eclipse的时候,要找到eclipse.ini文件,更改里面的Xmx和Xms。tomcat的时候,要找到catalina.sh和server.xml更改JAVA_OPTS的值(没有就自己填)和Connector标签。

11.为什么使用线程池和连接池?

答:因为它们每次使用都会进行创建,完事再关闭,十分占用开销。有了池,就只会创建一次。

为了能给广大同僚们一个准确的消息,所以我每半年便投一批简历去各公司面试,一来,是为了通过面试找出自己的不足,二来想了解面试官是否都具备真材实料。经验证,并非所有的考官都是高手。真正的高手不到十分之一。而且所有人都必须会问到spring,于是我决定将spring源码看一下。当我从解析bean入手时,我发现,它用了好多的抽象方法,原因很简单,为了可扩展(抽象方法必须被子类继承重写),那么它的阅读量就很显然了,相当庞大。当我细看IOC和AOP时,我敢打赌,大部分面试官只知其一不知其二,甚至他并不知道它的真正实现原理,以及它为什么能做到用户的需求,他也只不过是道听途说罢了。我敢说,5年经验的,他根本不懂spring,只不过会用而已,那么身为一个考官,你用你仅存的知识去拷问别人,不害臊吗?有一次,我去某公司面试,考官让我说说spring解析原理,我悄悄的把底层的解析xml的那个bean换了一个,他居然还在那听得很认真。天啊,很显然,他也并不清楚。我不明白,既然你不会,就直接说好了,没什么丢人的,不会就是不会嘛,又不是赢房赢地的。

所以,当被问及spring的知识时,能答多少是多少,如果你实际经验2年(实打实的工作),那么以你的了解,绝对不逊色考官,好一点的,甚至能完全虐掉考官,重要的是底气。像虚拟机啊,内存啊,这些东西,你上网查点,死记硬背,就绝对OK。我看过《深入理解java虚拟机》,因为这东西,理论性相当强,实践东西很少,没有人会闲的去记这些理论,你能答出一二就不错了,实际中也用不上,顶多调优下虚拟机(网上一搜一大堆)。如果你遇到的是愿意问你这些理论性问题的考官,那么对手绝对是一个能装bi的角色,好像懂得挺多,其实垃圾一个。但你又不能怼他,那你就得摆出一副虚心求教的样子。

如果你实际经验不足3年,相信我,去做外包,忍气吞声3年,只要你做外包3年,我相信你,必定是个全栈工程师。经实践验证,做外包出来的,一定会比常年呆在某个公司里强百倍。能力强百倍不止。因为外包研发周期相当快,老板想快点拿钱,就必须赶紧做完项目。我现在公司(非外包)的产品做了一年了,100多人在做,我估算了下,如果用我当时外包的团队,7个月吧,7个月就能上线。在外包,给你的活不管前端还是后端,给你了,你就去做,没有任何理由,除非你辞职滚蛋,或者被辞。第一年是最难熬的,挺过去,你就脱胎换骨了。而普通公司的研发人员,遇到问题了,只要不是自己的活,就一定交给别人,他认为,我一个后端,凭什么做前端东西,又没给我两份钱。在加上混吃等死的养老般环境,不求上进,遇到真正的难题,更是不堪一击。举个例子,我在外包工作时,甲方公司要求用double开发,与我一起的是甲方内部人员,我俩经验年限一样,我一天不到就把项目搭起来,都开始干活了,而那小伙还没整出来,都一周时间了,最后还是我帮他搞得。所以建议大家该吃苦的年纪,别享福。除非你觉得你很牛了,那么你就该正式找个好点的普通公司了,那时候就是你拿几十万年薪的时候了,先苦后甜嘛。

最后我想说,技术,尤其是开源技术。您不必畏惧任何一人,因为大家都是从零开始学的,就好比java,基础就那么点,面试官能问的就那么点东西,他还能上天不成?你俩学的是一样的,他难道就会飞?还有,不会的,就直接说不会,没必要藏掖,会什么说什么。你或许一听到,哇,10年经验的大牛!哇,15年经验的架构师。就一定认为很厉害,那你就错了,大错特错。他们多的是看问题的解决经验,思路而已,和代码毫无关系。我身边就有10多年经验的老前辈,我今天这么说不是炫耀,讲事实而已。面对问题的解决思路,人家确实反应快,因为人家经历过。但是在代码实现上,他不过如此。无论是前端还是后端,都有老前辈咨询我,所以,不是说工龄大,就真的厉害,你被带进误区了。再举个例子,我读spring源码时,有个实现方法叫做去掉字符串空白,我把逻辑屡清楚了,发现最终是用到进制算法在底层实现,我问他为什么进制算法可以去掉空白,他也说不出来,所以嘛,大家都一样。只知道用,不知道具体原理而已。

如果你能把以上都记住,那么,你面试,就不是问题了,至少找个工作还是可以的。以后的修行,就要看自己了,踏实的学习才能充实自己,说话才有底气。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值