❤ 作者主页:欢迎来到我的技术博客😎
❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~*
🍊 如果文章对您有帮助,记得关注、点赞、收藏、评论⭐️⭐️⭐️
📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉
文章目录
- 1、JDK、JRE和JVM三者之间的关系?
- 2、Java中创建对象有几种方式?
- 3、==和equals()有什么区别?
- 4、重写和重载的区别?
- 5、构造方法有哪些特性?
- 6、自动装箱和自动拆箱的区别?
- 7、Integer 和 int 的区别?
- 8、说一说hashCode()和equals()的关系?
- 9、为什么重写 equals() 时必须重写 hashCode() 方法?
- 10、String、StringBuilder、StringBuffer 的区别?
- 11、浅拷贝和深拷贝的区别?
- 12、抽象类和接口的区别?
- 13、静态变量和实例变量的区别?
- 14、short s1 = 1;s1 = s1 + 1;有什么错?那么 short s1 = 1; s1 += 1;呢?有没有错误?
- 15、final、finally和finalize 有什么区别?
- 16、什么是Java反射机制?Java反射有哪些应用场景?
- 17、介绍一下Java中的IO流?
- 18、介绍一下Java的序列化和反序列化?
- 19、什么情况下需要序列化?
- 20、常见的异常类有哪些?
- 21、Exception和Error的区别?
- 22、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
- 23、finally是不是一定会被执行到?
- 24、throw 和 throws 的区别?
- 25、运行时异常和受检异常有何异同?
- 26、什么是注解?注解的解析方法有哪几种?
- 27、Java中常用的容器有哪些?
- 28、ArrayList 和 LinkedList有什么区别?
- 29、说一说HashSet 和 TreeSet的区别?
- 30、介绍一下HashMap 底层的实现原理?
- 31、介绍一下HashMap的扩容机制?
- 32、HashMap 的长度为什么是 2 的幂次方?
- 33、HashMap 的加载因子为何默认是0.75f?
- 34、HashMap 的 get 方法能否判断某个元素是否在 map 中?
- 35、介绍一下HashSet 的实现原理?
- 36、 Collection 和 Collections 有什么区别?
- 37、创建线程的几种方式?
- 38、进程和线程的区别?
- 39、线程的run()和start()有什么区别?
- 40、Runnable 和 Callable 有什么区别?
- 41、说一说sleep()和wait()的区别?
- 42、说一说notify()、notifyAll()的区别?
- 43、介绍一下线程的生命周期?
- 44、说一说synchronized与Lock的区别?
- 45、synchronized是什么?
- 46、如何使用synchronized?
- 47、构造方法可以用 synchronized 修饰吗?
- 48、说一说 synchronized 的底层实现原理?
- 49、JDK1.6 之后的 synchronized 底层做了哪些优化?
- 50、synchronized 和 volatile 有什么区别?
- 51、volatile 关键字有什么用?
- 52、谈谈volatile的实现原理?
- 53、synchronized 和 ReentrantLock 区别是什么?
- 54、公平锁和非公平锁有什么区别?
- 55、谈一下对悲观锁和乐观锁的理解?
- 56、如何实现乐观锁?
- 57、乐观锁存在哪些问题?
- 58、AQS是什么?
- 59、AQS的原理是什么?
- 60、什么是线程池?
- 61、为什么要用线程池?
1、JDK、JRE和JVM三者之间的关系?
JDK(Java Development Kit): 是 Java 开发工具包,是整个 Java 的核心。
JRE( Java Runtime Environment): 是 Java 的运行环境。
JVM(Java Virtual Machine): 是 Java 虚拟机,是整个 Java 实现跨平台的最核心的部分,能够运行以 Java 语言编写的软件程序。所有的 Java 程序会首先被编译为 .class 的类文件,这种类文件可以在虚拟机上执行。
2、Java中创建对象有几种方式?
-
使用
new 关键字; -
通过反射机制创建,该方法调用无参的构造器创建对象(反射):
Class.forName.newInstance(); -
使用
clone() 方法; -
反序列化,比如调用 ObjectInputStream 类的 readObject() 方法。
3、==和equals()有什么区别?
==运算符:
-
作用于基本数据类型时,是比较两个数值是否相等;
-
作用于引用数据类型时,是比较两个对象的内存地址是否相同,即判断它们是否为同一个对象;
equals()方法:
-
没有重写时,Object默认以 == 来实现,即比较两个对象的内存地址是否相同;
-
进行重写后,一般会按照对象的内容来进行比较,若两个对象内容相同则认为对象相等,否则认为对象不等。
4、重写和重载的区别?
重载 发生在同一个类中,若多个方法之间 方法名相同、参数列表不同,则它们构成重载的关系。重载与方法的返回值以及访问修饰符无关,即重载的方法不能根据返回类型进行区分。
重写 发生在父类子类中,若子类方法想要和父类方法构成重写关系,则它的 方法名、参数列表必须与父类方法相同。另外,返回值要小于等于父类方法,抛出的异常要小于等于父类方法,访问修饰符则要大于等于父类方法。还有,若父类方法的访问修饰符为private,则子类不能对其重写。
5、构造方法有哪些特性?
- 名字与类名相同;
- 没有返回值,但不能用 void 声明构造函数;
- 成类的对象时自动执行,无需调用。
6、自动装箱和自动拆箱的区别?
-
自动装箱:可以把一个基本类型的数据直接赋值给对应的包装类型;
-
自动拆箱:可以把一个包装类型的对象直接赋值给对应的基本类型;
通过自动装箱、自动拆箱功能,可以大大简化基本类型变量和包装类对象之间的转换过程。比如,某个方法的参数类型为包装类型,调用时我们所持有的数据却是基本类型的值,则可以不做任何特殊的处理,直接将这个基本类型的值传入给方法即可。
7、Integer 和 int 的区别?
- int是基本数据类型,Integer是int的包装类;
- int型变量的默认值是0,Integer变量的默认值是null,这一点说明Integer可以区分出未赋值和值为0的变量;
- Integer变量必须实例后才可以使用,而int不需要。
8、说一说hashCode()和equals()的关系?
hashCode()用于获取哈希值,eauqls()用于比较两个对象是否相等,它们应遵守如下规定:
-
如果两个对象相等,则它们必须有相同的哈希值。
-
如果两个对象有相同的哈希码,则它们未必相等。
9、为什么重写 equals() 时必须重写 hashCode() 方法?
Object类提供的equals()方法默认是用==来进行比较的,也就是说只有两个对象是同一个对象时,才能返回相等的结果。而实际的业务中,我们通常的需求是,若两个不同的对象它们的内容是相同的,就认为它们相等。鉴于这种情况,Object类中equals()方法的默认实现是没有实用价值的,所以通常都要重写。
如果重写 equals() 时没有重写 hashCode() 方法的话,就可能会导致 equals() 方法判断是相等的两个对象,哈希值却不相等。
10、String、StringBuilder、StringBuffer 的区别?
-
String 中的对象是不可变的,也就可以理解为常量,线程安全。
-
StringBuilder与 StringBuffer类似,都是字符串缓冲区,但线程不安全;
-
StringBuffer 对方法加了同步锁,因此线程安全。
执行效率:StringBuilder > StringBuffer > String
11、浅拷贝和深拷贝的区别?
- 浅拷贝:拷贝对象与原始对象是同一个对象,浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值也会随之变化,这就是浅拷贝;
- 深拷贝:拷贝对象与原始对象是同两个对象,深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝。
深拷贝的实现就是在引用类型所在的类实现 Cloneable 接口,并使用 public 访问修饰符 重写 clone 方法。

12、抽象类和接口的区别?
-
抽象类中可以定义构造函数,接口不能定义构造函数;
-
抽象类中可以有抽象方法和具体方法,而接口中只能有抽象方法;
-
抽象类中的成员权限可以是public、默认、protected,而接口中的成员权限只能是public;
-
抽象类中可以包含静态方法,而接口中不可以包含静态方法。
13、静态变量和实例变量的区别?
- 静态变量: 是被static修饰的变量,它属于类,因此不管创建多少个对象,静态变量在内存中有且只有一个拷贝,静态变量可以实现让多个对象共享内存;
- 实例变量:属于某一实例,需要先创建对象,然后通过对象才能访问到它。
14、short s1 = 1;s1 = s1 + 1;有什么错?那么 short s1 = 1; s1 += 1;呢?有没有错误?
-
对于
short s1 = 1; s1 = s1 + 1; 来说,在 s1 + 1 运算时会自动提升表达式的类型为 int ,那么将 int 型值赋值给 short 型变量,s1 会出现类型转换错误。 -
对于
short s1 = 1; s1 += 1; 来说,+= 是 Java 语言规定的运算符,Java 编译器会对它进行特殊处理,因此可以正确编译。
15、final、finally和finalize 有什么区别?
- final 和 finally 是Java中的关键字,而 finalize 是一个方法;
- final:用于修饰类、变量和方法,表示这个类、变量和方法不能被继承或重写;
- finally: 是在
try-catch语句中使用的关键字,表示不管是否发生异常,finally中的代码都会执行; - finalize: 是Object() 类中的一个方法,是一个在垃圾回收器将对象从内存中清除之前调用的方法。
16、什么是Java反射机制?Java反射有哪些应用场景?
Java反射指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。
Java的反射机制常见的应用场景有:
-
使用JDBC时,如果要创建数据库的连接,则需要先通过反射机制加载数据库的驱动程序;
-
多数框架都支持注解/XML配置,从配置中解析出来的类是字符串,需要利用反射机制实例化;
-
面向切面编程(AOP)的实现方案,是在程序运行时创建目标对象的代理类,这必须由反射机制来实现。
本文详细阐述了Java开发中的关键概念,包括JDK、JRE和JVM的关系,反射机制的应用,线程的创建、同步与管理,异常处理机制,以及集合框架中的重要类如HashMap、HashSet和线程安全。此外,还讨论了锁的实现与优化,如synchronized和ReentrantLock的差异,以及线程池的作用和优势。
最低0.47元/天 解锁文章
7558

被折叠的 条评论
为什么被折叠?



