分布式事务面试题java_面试题java高级_java面试题

发现网上很多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. == 和 的区别是什么?

== 解读

对于基本类型和引用类型 == 的作用效果是不同的,如下所示:

基本类型:比较的是值是否相同;

引用类型:比较的是引用是否相同;

代码示例:

java面试题_面试题java高级_分布式事务面试题java

代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new ()方法则重写开辟了内存空间,所以 == 结果为 false,而 比较的一直是值,所以结果都为 true。

解读

本质上就是 ==,只不过 和 等重写了 方法,把它变成了值比较。看下面的代码就明白了。

首先来看默认情况下 比较一个有相同值的对象,代码如下:

面试题java高级_java面试题_分布式事务面试题java

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 源码就知道了,源码如下:

java面试题_分布式事务面试题java_面试题java高级

原来 本质上就是 ==。

那问题来了,两个相同值的 对象,为什么返回的是 true?代码如下:

同样的,当我们进入 的 方法,找到了答案,代码如下:

java面试题_面试题java高级_分布式事务面试题java

原来是 重写了 的 方法,把引用比较改成了值比较。

总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 默认情况下是引用比较,只是很多类重新了 方法,比如 、 等把它变成了值比较,所以一般情况下 比较的是值是否相等。

3. 两个对象的 ()相同,则 ()也一定为 truejava面试题,对吗?

不对,两个对象的 ()相同,()不一定 true。

代码示例:

执行的结果:

java面试题_面试题java高级_分布式事务面试题java

代码解读:很显然“通话”和“重地”的 () 相同,然而 () 则为 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. 如何将字符串反转?

使用 或者 的 () 方法。

示例代码:

java面试题_面试题java高级_分布式事务面试题java

10. 类的常用方法都有那些?

11. 抽象类必须要有抽象方法吗?

不需要,抽象类不一定非要有抽象方法。

示例代码:

面试题java高级_java面试题_分布式事务面试题java

上面代码,抽象类并没有抽象方法但完全可以正常运行。

12. 普通类和抽象类有哪些区别?

13. 抽象类能使用 final 修饰吗?

不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类,如下图所示,编辑器也会提示错误信息:

面试题java高级_分布式事务面试题java_java面试题

14. 接口和抽象类有什么区别?

15. java 中 IO 流分为几种?

按功能来分:输入流(input)、输出流()。

按类型来分:字节流和字符流。

字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。

16. BIO、NIO、AIO 有什么区别?

17. Files的常用方法都有哪些?

二、容器

18. java 容器都有哪些?

常用容器的图录:

分布式事务面试题java_java面试题_面试题java高级

19. 和 有什么区别?

20. List、Set、Map 之间的区别是什么?

面试题java高级_分布式事务面试题java_java面试题

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注