Java面试题答案(正在完成中......)

本文详述了Java面试中的常见问题,涵盖了Java基础、集合、JVM、Web、并发编程、网络编程、Spring框架及其相关组件、Mybatis、MySQL、分布式、消息队列等多个方面。涉及知识点包括基本数据类型、异常处理、构造器、反射、异常、内部类、泛型、集合框架、Map、List、Set的使用、多线程、线程安全、序列化、数据库操作、分布式事务、微服务、消息队列等,是准备Java面试的重要参考资料。
摘要由CSDN通过智能技术生成

JAVA基础

1. 面向对象有哪些特征?

抽象,封装,继承,多态

2. JDK与JRE的区别是什么?

jdk: 编译+运行
jre:运行
jdk包括jre
jre包括jvm

3. Java有哪几种基本数据类型?

8种:byte、short、int、long、float、double、char、boolean

4. == 和equals比较有什么区别?

equals判断指向同一个内存空间的值是不是相同,而==是判断是不是指向同一个内存空间

5. public,private,protected,默认的区别什么?

作用域 当前类 同包 子类 其他
public √ √ √ √
protected √ √ √ ×
默认 √ √ × ×
private √ × × ×

6. short s1=1; s1+=1;有错吗? s1=s1+1; 有错吗?

s1+=1:没错(s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换)
s1=s1+1:有错(1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型)

7. float f = 1.9; 有错吗?

有:应该是float f= 1.9F

8. &和&&有什么区别?

相同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and)。
不同点:&&具有短路的功能,而&不具备短路功能。(&&第一个表达式为false,则不再计算下一个表达式;&则要计算完再判断)

9. 2*8最有效率的计算方法是什么?

2<<3:位运算,效率最高。一个数左移n位,相当于乘以了2的几次方。右移则相当于除法

10. 怎么理解值传递和引用传递?

值传递:值传递是传递实参副本,函数修改不会影响实参(形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容)
引用传递:引用传递是传递实参地址,函数修改会影响实参(形参和实参指向同一块内存地址,对形参的操作会影响的真实内容)

11. Java到底是值传递还是引用传递?

Java中只有值传递

12. 一个".java"源文件的类有什么限制?

一个.java文件下可以有多个类(非内部类),但只能有一个类是public,且这个类必须与文件名一致

13. final关键字有哪些用法?

四种:修饰属性、修饰方法参数、修饰方法、修饰类

14. final、finally、finalize有什么区别?

final: final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可被继承(不能再派生出新的子类)
finally: finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句最终一定被执行,经常被用在需要释放资源的情况下
finalize: finalize是Object类中的一个方法,在垃圾收集器执行的时候会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其他资源的回收,例如关闭文件等

15. void和Void有什么区别?

void:void关键字表示方法没有返回结果
Void:(1)Void是一个Class,是void的包装方法
(2)Void不能被实例化

16. 为什么byte的取值范围为-128~127?

17. char类型可以存储中文汉字吗?

char型变量中可以存储汉字

18. 重载和重写有什么区别?

方法重载: "同一个类"中,方法名相同,参数不同(个数,类型),与返回类型无关;
方法重写: (1)访问权限可以放大
(2)返回值类型一致 或 是父类返回类型的子类
(3)方法名 和 参数必须一致
验证重写:@Override

19. 构造器可以被重写和重载吗?

不能重写,可以重载:由于构造器不能继承,所以就不能被重写。但是,在同一个类中,构造器是可以被重载的

20. Java中的断言(assert)是什么?

断言:jdk1.4之后加入的断言,用于测试判断数据是否是期望值,不是则会报错抛出AssertionError

21. Error和Exception有哪些区别?

相同点:Exception和Error都是继承了Throwable类
Error(错误): 虚拟机错误,无法依靠修改程序解决的错误
Exception(异常)

22. Java中常见的异常有哪些?

空指针异常、算数异常、数组下标越界、方法参数错误

23. Java中常见的运行时异常有哪些?

空指针异常、算数异常、数组下标越界、方法参数错误

24. 运行时异常和受检异常有什么区别?

受检异常:就是编译异常、非运行时异常
运行时异常:就是非受检异常、非编译异常

25. 什么时候会发生空指针异常?

调用null对象实例方法、访问或修改null对象字段

26. 你知道有哪些避免空指针异常的方法?

异常处理,如:try/catch

27. throw和throws有什么区别?

throw是处理异常
throws是抛出异常

28. try里面return,finally还会执行吗?

29. int和Integer有什么区别?

(1)Integer是int的包装类;int是基本数据类型;
(2)Integer变量必须实例化后才能使用;int变量不需要;
(3)Integer的默认值是null;int的默认值是0。

30. 什么是包装类型?有什么用?

包装类:与基本数据类型对应的类
作用:(1)方便涉及到对象的操作、(2)包含每种基本数据类型的相关属性

31. 什么是自动装箱和拆箱?

自动装箱和拆箱:指的是基本数据类型与他们的包装类型之间的相互转换

32. 你怎么理解Java中的自动类型转换和强制类型转换?

低类型的基本数据会自动向高类型的基本数据类型转换 ,高类型的基本数据类型需要强制向低类型的基本数据类型转换

33. 你怎么理解Java中的类型提升?

正向过程:由低字节向高字节自动转换
byte->short->int->long->float->double
逆向过程:使用强制转换,可能丢失精度。

34. 你怎么理解强、软、弱、虚引用?

强:内存即使满了,也不会GC
软:内存满了,就会被GC
弱:只要进行GC了,就会被清除
虚:任何时候都可能被GC

35. switch是否能用在long上?

switch可作用于char byte short int和其对应的包装类,和枚举、String(jdk7)类型
switch不可作用于long double float boolean和他们对应的包装类

36. switch case支持哪几种数据类型?

switch可作用于char byte short int和其对应的包装类,和枚举、String(jdk7)类型
switch不可作用于long double float boolean和他们对应的包装类

37. String的底层实现是怎样的?

String 的底层实现是基于 char[] 数组来实现的

38. String是可变的吗?为什么?

不可变:String底层是char[]数组决定

39. 为什么不能用 + 拼接字符串?

在循环和多个表达式中不能 +,频繁创建 SB 性能影响;

40. StringBuffer和StringBuilder有什么区别?

StringBuffer、StringBuilder和String一样,也用来代表字符串。
StringBuffer 和 StringBuilder 都是可变的字符串,任何对它所指代的字符串的改变都不会产生新的对象
StringBuffer则是线程安全版的StringBuilder

41. StringJoiner有什么用?

拼接字符串,添加前后缀(当拼接字符串太长时,StringJoiner更简便)

42. 普通类和抽象类有什么区别?

(1)普通类可以去实例化调用;抽象类不能被实例化,必须通过其非抽象子类来创建实例。
(2)普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法

43. 静态内部类和普通内部类有什么区别?

普通内部类持有对外部类的引用,静态内部类没有持有外部类的引用。
普通内部类能够访问外部类的静态和非静态成员,静态内部类只能访问外部类的静态成员。

44. 静态方法可以直接调用非静态方法吗?为什么?

不能:静态方法属于类层级,非静态方法属于对象层级。

45. 静态变量和实力变量有什么区别?

实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用

46. 内部类可以访问其外部类的成员吗?

普通内部类能够访问外部类的静态和非静态成员,静态内部类只能访问外部类的静态成员。

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

接口是对对象动作的抽象,抽象类是对根源(对象)的抽象
接口可以多继承,抽象类不行
接口是抽象类的变体,接口中所有的方法都是抽象的

48. 接口里面可以写方法实现吗?

jdk8之后,接口里可以写方法实现

49. Java中的UUID是什么?

机器算法生成的,唯一通用标识

50. Java类初始化顺序是怎样的?

静态变量/代码块>mian方法> 非静态变量/代码块>构造方法

51. hashCode有什么作用?

hashCode主要是为了查找快捷

52. hashCode和identityHashCode的区别?

hashCode方法可以被重写并返回重写后的值,identityHashCode会返回对象的hash值而不管对象是否重写了hashCode方法。

53. 什么是Hash冲突?

如果两个不同对象的hashCode相同,这种现象称为hash冲突

54. Java常用的元注解有哪些?

常用四种:(1)@Target:用于指定自定义注解的使用范围
(2)@Retention:用于修饰自定义注解的生存周期,或者可以保留多久
(3)@Documented:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中
(4)@Inherited:如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承

55. Java泛型中的T、R、K、V、E分别指什么?

T :表示确定的Java类型
K、V:Java中的键值对key、value
E :Element

56. Java金额计算怎么避免精度丢失?

BigDecimal类进行计算就不会出现这种精度丢失的情况

57. Java语法糖是什么意思?

语法糖:就是对现有语法的一个封装,使语法变得更加简洁
主要语法糖:
(1)自动装箱与拆箱、变长参数(方法可以接受长度不定确定的参数)
(2)增强for循环
(3)内部类与枚举类

58. transient关键字有什么作用?

transient用于修饰不需要序列化的字段

59. 如何实现对象克隆?

实现Cloneable接口,并重写object类中的clone方法,可以实现浅克隆,也可以实现深度克隆

60. 对象克隆浅拷贝和深拷贝有什么区别?

没有引用:那浅拷贝和深拷贝没有差别
有引用:浅拷贝出的对象修改时会改变引用里的值,而深拷贝会将原对象里的引用也拷贝一份

61. Java反射机制有什么作用?

对于任意一个类,都能够知道这个类的所有属性和方法。
对于任意一个对象,都能够调用它的任意一个方法和属性。

62. Java反射机制有什么优缺点?

优点:提高了程序的灵活性和扩展性,降低模块的耦合性
缺点:(1)消耗性能、(2)安全限制、

63. 什么是宏变量和宏替换?

宏变量:
1、该变量必须是final修饰的变量;
2、该变量必须在开始时就指定初始值;
3、该初始值必须是在编译时期就可以确定

64. 什么是逃逸分析?

是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法

65. 什么是伪共享?有什么解决方案?

当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享

66. Java 8新增了哪些特性?

(1)Lambda表达式
(2)函数式接口
(3)接口的默认方法和静态方法
(4)方法引用

67. Java 8中的Lambda表达式有什么作用?

优点:使用Lambda表达式可以简化接口匿名内部类的使用,可以减少类文件的生成
缺点:使用Lambda表达式会减弱代码的可读性

68. Java 8中的Optional类有什么作用?

Optional类是Java8之后的新特性,主要是为了解决空指针异常

69. Java 8中的@Repeatable注解有什么作用?

@Repeatable注解是用来标注一个注解在同一个地方可重复使用的一个注解

70. Java 8中的方法引用是指什么?

方法引用本质是lambda表达式
方法引用是一种更简洁易懂的lambda表达式
格式:使用操作符“::”将类(或对象)与方法名分隔开

71. Java 8中的Stream有什么作用?

72. Java 8中的函数式编程怎么用?

73. 如何获取一个Stream流对象?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值