收藏 分销(赏)

java面试题知识点总结.doc

上传人:人****来 文档编号:9799140 上传时间:2025-04-08 格式:DOC 页数:11 大小:24.54KB 下载积分:8 金币
下载 相关 举报
java面试题知识点总结.doc_第1页
第1页 / 共11页
java面试题知识点总结.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
1. 为何要使用同步?      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时〔如数据的增删改查〕,将会导致数据不准确,相互之间产生冲突,因此参加同步锁以防止在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性与准确性。   〔1〕同步方法 :即有synchronized关键字修饰的方法。由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否那么就处于阻塞状态。  代码如:      public synchronized void save(){}    注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类 〔2〕同步代码块 :即有synchronized关键字修饰的语句块。 被该关键字修饰的语句块会自动被加上内置锁,从而实现同步  代码如:      synchronized(object){  注:同步是一种高开销的操作,因此应该尽量减少同步的内容。通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可。  2.说好拿到offer就来牛客发面经,实现承诺 一面: 不知道。我不是学C的。 2.你知道基数排序么? 忘了,知道计数。 〔这时候心想玩了,连续2个问题都不会,还玩个P?〕 内存溢出:介绍JVM中7个区域,然后把每个区域可能造成内存的溢出的情况说明 内存泄露:介绍GC 与GC Root不正常引用。 4.看来你对JVM蛮熟悉的啊,那你说说JAVA怎么分配直接内存? A:JAVA不能直接分配内存吧? Q:我说是分配直接内存不是直接分配内存。 A:是NIO类的直接内存么? Q:是的。 A:有点不记得了,能提示下么? Q:sun的一个包。 A:我想起来了,sun.misc.Unsafe类,那个要通过反射获取吧。平常没怎么用过。 Q:不用反射 A:我咋记得要。 Q:不用的,你再回去看看看〔面试官记错,后面他自己纠正错误了〕 A:好吧。 6.能介绍下mybatis的原理么? 从configuration类说起,然后MapperStatement,然后SqlNode解析,然后连接池,然后resultMap映射,balala说了10分钟。 7.网络方面熟悉么? A:熟悉 Q:那说说TCP/IP 三次握手 8.说说 ,tcp,udp之间关系与区别。 9.说说浏览器访问,经历了怎样的过程。 二面、  IOC原理以及生命周期。  2.讲讲mybatis的连接池。  3.讲讲IO里面的常见类,字节流字符流。  4.讲讲NIO。  5.讲讲tomcat与你做的 Server.  6.你是通过哪些途径学习这些技术。  7.你是否有想过把mybatis实现成分布式吗? 8.java的根底类型与字节大小。 3.很不幸,二面面完就完毕了今天的面试。  预约的时间是下午4点30分到5点15分的时间段,天气比拟闷热,算好时间,下午2点半从学校出发,3点50到达面试酒店,本想买瓶水,想想阿里这么大个公司,面试应该会给我们发瓶水的吧,于是我就没买,事实证明我想多了,没有!签完到去一个厅里面等候,左看看右看看,真没有水!人挺少的,没过几分钟,3点55分,叫到我的号去某某位置上面试,说好的4点半呢,人与人之间这么点信任都没有了吗?于是我气还没喘匀就去到面试的大厅了,,到了一个面试官跟前,坐下来,把我的简历给了他,他边看边让我自我介绍。  一面:整整70分钟!〔说好的45分钟呢?人与人之间这点信任都没有了吗?〕  1、问:你把java内存模型的架构给我画一下吧?  我: 迟疑了一下,心想,JMM这玩意儿有架构图吗?这可怎么画。面试官看我迟疑,说,那你不画,先说一说吧,我就跟他说了由于什么指令重排序,处理器缓存什么的,不同的系统或者平台有不同的内存模型,使得一样的java程序在不同的处理器架构下的表现不一致啊,java内存模型就是为了在不同的处理器架构与平台下给java程序员提供一致性内存访问的保证的。本以为后面要问到volatile的内存语义,内存屏障,happens-before之类的,没想到面试官来了一句:你完全说错了,你说的这个是java的跨平台特性,不是内存模型,然后说内存模型是什么什么堆、栈之类的。 于是我就懵了,我就想到了原来面试官理解的内存模型就是我理解的java运行时数据区域〔程序计数器,虚拟机栈,本地方法栈、java堆,方法区〕。我也不敢跟面试官多争论,简单地表达了一下我的观点,然后他就接着问我,那你说说java是如何实现跨平台的。  2、问:说一下HashMap是如何实现的吧  我:就先画了一下构造,再说了一些什么拉链法解决冲突,什么JDK8里面冲突到达一定数量的时候就改用了红黑树的存储等等,然后问我怎么扩容。  3、问:说一下ConcurrentHashMap吧  我:JDK7里面采用的是分段锁机制什么的,读的时候不加锁,写的时候分段加锁,先定位到某个段,然后段里面的操作委托给HashMap等等。然后又说JDK8里面 ConcurrentHashMap有很大变化,从1600多行代码扩大到了6000多行代码。〔还好没接着问我JDK8里面是怎么实现的,就昨天晚上瞄了一眼,6000多行代码确实没看下来〕  4、问:用他的电脑给我看了一段程序,问我输出结果是什么,跟finally块相关的,考察点就是try块里面return了某个值,finally里面又对该值进展操作了,问最后的结果是什么,我知道return之前会先执行finally块里面的操作,但是操作的是引用类型还是值类型的情况是不一样的。本想把那个代码回忆起来,想想还是算了,应该有人能知道我说的是什么意思。我在答复这道题的时候面试官还“贱贱地“说这道题是有坑的,然后看我踩坑了还很鄙视的说一句:看那么多书连引用类型与值类型都搞不清楚。 5、synchronized相关的,为什么同步块太大会影响性能?不同的线程拥有不同的对象锁,它们之间会有影响吗?如果synchronized加在静态方法上面那么锁指的是什么?〔在这个地方又跟面试官就几个名词纠缠了一会儿,我说锁是Class对象,他问是实例还是对象,他说实例是静态的,对象是动态的,我说Class是静态的,对象是动态的,然后他说我们不说类了,用英文,instance与对象,我说instance我理解的就是对象啊,可能他觉得instance是指类,对象就是new出来的对象,也许是我没看过英文版的书吧〕于是我接着说,指的是对象,是java虚拟机将一个类的字节码加载进内存之后生成的一个java.lang.Class对象,然后他可能没听明白我说的,还是在问,到底是类还是对象,我其实已经明白他的意思了,然后说,按照您的描述,那就是类。然后他好似满意了,就下一题了。〔那明明就是一个Class对象嘛,Class对象不也是对象〕 6、问:根本排序与查找相关的,问我有哪些排序与哪些查找算法,〔期待让我写个快排什么的,早就憋在心里了,分分钟搞定的事, 然而并没有〕他让我描述一下选择排序的过程,就扯了扯,然后他问,你确定这是选择排序吗?我说,我很确定。〔强调了“很〞字,说的很坚决,他也没说什么,希望别又在理解上面跟我有偏差,我说的那个绝对是纯粹的选择排序,如假包换〕。 7、写代码,给我5分钟,让我实现一个Stack,底层数据构造用数组。我问他需要支持扩容吗,他说先不用。写完他拿过去一看,可能是我写的太丑了,他又还给我,让我解释一下代码,然后就解释了一下。 8、问我用栈怎么实现队列,我说用2个栈来实现,他问我具体怎么操作,我说我可以想一下吗?他说可以,然后我想了一下,画个图给演示了一下。 9、问我有没有登过网页版微信,问我用手机扫二维码登录是怎么实现的。不会 10、问我知道阻塞队列吗,让我自己实现阻塞队列我会怎么做?我说我会用两种方法来实现,一种是用wait与notify的方式,一种是用Condition条件变量的方式,然后他问怎么用wait与notify实现,我就把思路说了一下。 最后他还问我是什么时候接触编程的,我说大一。我不知道他最后问了我一个这个问题是什么意思 就想起来这么些了,整整70分钟,我已经说的口干舌燥了。面试完,他说,今天的面试完毕了,我顿时就懵了,按照我了解的,这就代表没通过的意思,但是我觉得我答的很好,百分之九十都答出来了,而且很多都说的很详细。我一脸疑惑,还是很客气的说谢谢,准备走呢,马上又听到他说,你先到外面等一下,然后我又说好的,谢谢。然后他接着说,准备下一轮吧,我说好的,谢谢。然后就出来了。 出来之后到了等候的大厅,整个人都虚脱了,又左看看,右看看,还是没有水,没过几分钟,元气还没恢复,让我去二面 二面:45分钟。拖着疲惫的身子,走到二面面试官前,一见其人,明显能感受到这就是大神,那拖鞋,那发型,那胡子,此时我已经身心俱疲,硬着头皮坐下来,先自我介绍,问了几个问题,然后说那我们写一个简单的题目吧。他把电脑转过来,让我看其中某个题目,说你做一下这道题吧。 用java统计一个文本文件中出现的频率最高的20个单词。多经典的题目啊。我问能用shell命令来实现吗?他说用java。于是我用了HashMap,都弄到map里面去了之后,我发现我不会排序。集合类里面的排序方法确实没怎么用过,于是我就卡在这里了。然后我跟他说我数据构造选错了,我应该选能排序的map,比方说TreeMap,他说那你接着写,我又不想写了,因为我只是知道TreeMap是怎么一回事,并没有去用过这个TreeMap,而且排序的话它应该是按照key来排序的,我这里的key是单词,并没有什么用,我也不知道该怎么按照后面的value来排序,我也想到可以调用map的entrySet方法得到一个集合,然后我可以对这个集合进展操作,总之我想了很多,但是对一些操作不太熟就没有继续下去了。我觉得这道题目应该很简单啊,没想到我竟然没写出来。其实方法还是有的,map都拿到了,排个序岂能难倒我,大不了再倒腾一下,我冒泡也能给它解决了,但是我实在是不想用这么low的方式,然后我就放弃了,没接着写。然后面试官说,好的,那我们再来写一个简单的题目吧。题目大概意思就是用面向对象的思想实现题目说的那个场景,具体题目就不说了,我并没有太明白题目的意思,感觉可以用一个HashMap的数据构造来实现,然后我就自己照着HashMap的代码写了写,写了点我又停下了,因为我并没有太理解题目的意思,所以我也不知道该怎么写,于是我又放弃了,真要我实现一个HashMap我也是可以写出来的,毕竟源码我看过很多遍了,一是想到有点麻烦,二是想到我可能没正确理解题目的意思,然后我就放弃了,放弃了,弃了,了。两道题目下来,我心理已经被击溃了,然后他问我有没有研究java方面的新技术,问我想从事哪一方面的开发,问我阿里云,淘宝等等这些有没有对哪个比拟有意向,这个时候的我意识已经开场模糊了,话也说不清楚了,舌头也捋不顺了,这几个开放性的问题答的我都恨不得抽死自己。 总之,一面给自己打90分,二面给自己打20分 经历就不说了,没什么好的经历 教训就说一下吧: 面试之前带好水〔之前牛客上有篇面经提到过要带水的,我没有听那位兄弟的话。也可能是有水我没看到吧〕 对于面经里面的题目没必要太看重,每个人遇到的问题肯定是很大不同的,除了一些太常见的题目,比方HashMap,ConcurrenthashMap之类的,就像很多面经里面提到的数据库,网络方面的问题,我这次面试就提都没提这方面的东西。对于面经我们可以从中看看哪些大的方面在面试的过程当中会问的比拟多,然后可以在这些方面加强学习。大方面比方说JVM,java多线程,TCP,数据库等等。面经就好比是给我们划了重点,我们需要把相关的知识都好好看一下。感谢那些提供面经的同学,指明了我应该学习的方向,所以在这里也算是反应一下牛客网,几个月来确实让我学到了很多,希望校招之后能有时机来分享一下成功的面试经历。 虽然失败了,但我觉得该,自己的能力还是有所欠缺的。不管怎么样,这次面试虽然停顿了,但是奋斗是不会停顿的。 -----------------又想起来一些问题,补充一下--------------- 1、ArrayList与LinkedList相关的,问分别在什么情况下使用,以及查找一个元素的话这两个的时间复杂度分别是多少〔如果是调用contains(Object  o)方法的话复杂度都是O(n),如果是根据下标进展查找的话ArrayList的时间复杂度是O(1),LinkedList是O(n)〕。 2、java 线程有哪些状态,这些状态之间是如何转化的。 3、linux命令相关的。将当前目录下所有以“.txt〞结尾的文件打印出来,再追问,除了“.txt〞再加上“.abc〞结尾的也打印出来。 4、有两个线程A与B,如果一个线程要等另一个线程执行完,该怎么做。〔我说在ThreadA中调用ThreadB.join()方法,二面面试官问我入参呢?我说我见过的join方法没有要传入参的啊,可能面试官记错了,他也没说什么。被这么一搞我又虚了,面试官怎么能质疑我呢,我好怕。后来我回来看了一下Thread类的源码,里面有三个join方法,分别是join();  join(long millis); join(long millis, int nanos),后面两个方法含义是一样的,只不过是精度不同,都是指等待一定时间,而不带参数的join方法里面直接调用的是join(0),即调用了带参的join方法,该方法如果参数是0的话就代表一直等待下去直到所等待的那个线程执行完,所以我推断面试官问我入参可能是想让我说入参为0,其实入参为0与没有参数含义是一样的。 〕 5、List接口与Set接口的区别,〔说了2个区别,一直被二面面试官说“还有还有〞,那种淡定的语气,我又开场慌了,心想果然是大神,不好糊弄啊〕 6、Spring相关的,问我要把一个组件注入到Spring中该怎么做?我说可以用配置文件与注解的方式,他问我有哪些注解,我说@Controller,@Service等等,他说我说的都是Spring MVC里面的。然后我就没说话,我也不知道面试官想让我说的是什么。又被质疑,又慌了。 7、Cookie与Session的区别 8、如何获取一个网站每天的访问用户数 9、自己定义的类如何实现hashCode方法 10、equals方法与hashCode方法相关的,问如果要向集合中添加自定义类的对象该怎么做?〔在类中重写equals方法与hashCode方法〕 第 11 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服