发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~
本套Java面试题大全,全的不能再全,哈哈~
一、Java 基础
1. JDK 和 JRE 有什么区别?
JDK:Java Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
JRE:Java 的简称,java 运行环境,为 java 的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。
2. == 和 的区别是什么?
== 解读
对于基本类型和引用类型 == 的作用效果是不同的,如下所示:
基本类型:比较的是值是否相同;
引用类型:比较的是引用是否相同;
代码示例:
代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new ()方法则重写开辟了内存空间,所以 == 结果为 false,而 比较的一直是值,所以结果都为 true。
解读
本质上就是 ==,只不过 和 等重写了 方法,把它变成了值比较。看下面的代码就明白了。
首先来看默认情况下 比较一个有相同值的对象,代码如下:
输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 源码就知道了,源码如下:
原来 本质上就是 ==。
那问题来了,两个相同值的 对象,为什么返回的是 true?代码如下:
同样的,当我们进入 的 方法,找到了答案,代码如下:
原来是 重写了 的 方法,把引用比较改成了值比较。
总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 默认情况下是引用比较,只是很多类重新了 方法,比如 、 等把它变成了值比较,所以一般情况下 比较的是值是否相等。
3. 两个对象的 ()相同,则 ()也一定为 truejava面试题,对吗?
不对,两个对象的 ()相同,()不一定 true。
代码示例:
执行的结果:
代码解读:很显然“通话”和“重地”的 () 相同,然而 () 则为 false,因为在散列表中,()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
4. final 在 java 中有什么作用?
5. java 中的 Math.round(-1.5) 等于多少?
等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。
6. 属于基础的数据类型吗?
不属于基础类型,基础类型有 8 种:byte、、char、short、int、float、long、,而 属于对象。
7. java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:、、。
和 、 的区别在于 声明的是不可变的对象,每次操作都会生成新的 对象,然后将指针指向新的 对象,而 、 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 。
和 最大的区别在于, 是线程安全的,而 是非线程安全的,但 的性能却高于 ,所以在单线程环境下推荐使用 ,多线程环境下推荐使用 。
8. str="i"与 str=new ("i")一样吗?
不一样,因为内存的分配方式不一样。 str="i"的方式,java 虚拟机会将其分配到常量池中;而 str=new ("i") 则会被分到堆内存中。
9. 如何将字符串反转?
使用 或者 的 () 方法。
示例代码:
10. 类的常用方法都有那些?
11. 抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。
示例代码:
上面代码,抽象类并没有抽象方法但完全可以正常运行。
12. 普通类和抽象类有哪些区别?
13. 抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类,如下图所示,编辑器也会提示错误信息:
14. 接口和抽象类有什么区别?
15. java 中 IO 流分为几种?
按功能来分:输入流(input)、输出流()。
按类型来分:字节流和字符流。
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
16. BIO、NIO、AIO 有什么区别?
17. Files的常用方法都有哪些?
二、容器
18. java 容器都有哪些?
常用容器的图录:
19. 和 有什么区别?
20. List、Set、Map 之间的区别是什么?
21. 和 有什么区别?
22. 如何决定使用 还是 ?
对于在Map中插入、删除和定位元素这类操作,是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,是更好的选择。基于你的的大小,也许向中添加元素会更快,将map换为进行有序key的遍历。
23. 说一下 的实现原理?
概述:是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
的数据结构:在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,也不例外。实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
当我们往中put元素时,首先根据key的重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。
需要注意Jdk 1.8中对的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)
24. 说一下 的实现原理?
底层由实现
的值存放于的key上
的value统一为
25. 和 的区别是什么?
最明显的区别是 底层的数据结构是数组,支持随机访问,而 的底层数据结构是双向循环链表,不支持随机访问。使用下标访问一个元素, 的时间复杂度是 O(1),而 是 O(n)。
26. 如何实现数组和 List 之间的转换?
27. 和 的区别是什么?
28. Array 和 有何区别?
29. 在 Queue 中 poll()和 ()有什么区别?
poll() 和 () 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 () 失败的时候会抛出异常。
30. 哪些集合类是线程安全的?
31. 迭代器 是什么?
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
32. 怎么使用?有什么特点?
Java中的功能比较简单,并且只能单向移动:
(1) 使用方法()要求容器返回一个。第一次调用的next()方法时,它返回序列的第一个元素。注意:()方法是java.lang.接口,被继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用()检查序列中是否还有元素。
(4) 使用()将迭代器新返回的元素删除。
是Java迭代器最简单的实现,为List设计的具有更多的功能java面试题,它可以从两个方向遍历List,也可以从List中插入和删除元素。
33. 和 有什么区别?
原文链接:
来都来了,走啥走,留个言呗~
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh