-
JDK、JRE和JVM的关系
JDK是用于开发Java程序的工具包,包含了JRE;JRE是Java程序运行的环境,包含了JVM和Java类库;JVM是Java程序的运行引擎,负责解释和执行Java字节码。 -
栈和堆分别存的什么数据
栈主要存储局部变量和方法调用信息,由编译器自动管理;堆主要存储动态分配的对象实例和数组,由程序员手动管理。 -
异步和同步
同步模式是按顺序逐行执行,需要等待上一个操作完成才能进行下一个操作;异步模式可以同时执行多个任务,并能够无需等待,提高程序的并发性和响应性。 -
线程和进程区别
进程是资源分配的基本单位,拥有独立的内存空间和系统资源;线程是执行流的基本单位,共享进程的资源。线程更轻量级,切换开销小,适用于需要高并发和任务切换的场景;而进程相对重量级,适用于需要隔离和资源独立的场景。 -
java的数据类型有哪些
类型 占用字节 取值范围 包装类 默认值 byte(字节型) 1 -128~127(-2的7次方到2的7次方-1) Byte 0 short(短整型) 2 -32768~32767(-2的15次方到2的15次方-1) Short 0 int(整型) 4 -2147483648~2147483647(-2的31次方到2的31次方-1) Integer 0 long(长整型) 8 -9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1) Long 0L float(浮点型) 4 3.402823e+38~1.401298e-45(e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方 Float 0.0f double(双精度浮点型) 8 1.797693e+308~4.9000000e-324(e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方 Double 0.0d boolean(布尔型) 2 true false Boolean false char(字符型) 1 汉字字母都可以 Character \u0000 -
equals和HashCode重写的问题?
默认情况下,Object类提供的equals()方法比较的是对象的引用地址,而hashCode()方法生成的哈希码是基于对象的内存地址计算的。然而,在实际应用中,我们往往需要根据自定义的逻辑来判断两个对象是否相等,而不仅仅是比较引用地址。这就需要重载equals()方法,按照我们自己的逻辑来实现对象的相等比较。
如果我们重载了equals()方法但没有同时重载hashCode()方法,那么就会导致对象无法正确地放入哈希表中,进而影响哈希表的性能。因为hashCode()方法在哈希表中用于确定对象在桶(bucket)中的位置,如果不重载hashCode()方法,那么哈希表将无法正确找到相等的对象,从而影响了查找和删除操作的效率。 -
深拷贝和浅拷贝的区别
浅拷贝:浅拷贝是指只复制对象本身的值,不复制它所引用的对象,因此新旧对象共享同一个引用对象。在 Java 中,可以通过实现 Cloneable 接口和覆盖
clone()
方法来实现浅拷贝。深拷贝:深拷贝是指复制对象本身和所有它所引用的对象,因此新旧对象不共享任何引用对象。在 Java 中,可以通过实现 Serializable 接口和使用序列化/反序列化来实现深拷贝。
浅拷贝是复制对象的引用,多个对象指向同一块内存空间,修改其中一个对象会影响到其他对象。深拷贝是复制对象本身,创建一个新对象,新对象和原始对象完全独立,修改新对象不会影响原始对象。需要根据具体的需求选择合适的拷贝方式。如果需要保持对象之间的独立性,应该使用深拷贝。如果只是需要多个对象共享数据,可以使用浅拷贝。 -
==和equals的区别
使用"=="来检查两个对象的引用是否相等,即判断它们是否指向同一个对象。
使用"equals()"方法来比较两个对象的内容是否相等,即根据逻辑判断对象的相等性。 -
常见的运行时异常有哪些?
NullPointerException(空指针异常):当尝试在一个空对象上调用方法、访问或修改其中的属性时抛出。
ArrayIndexOutOfBoundsException(数组下标越界异常):当尝试访问数组中不存在的索引位置时抛出,索引值小于0或大于等于数组长度。
ClassCastException(类转换异常):当发生类型转换时,如果转换不是合法的,例如将一个对象强制转换为不相关的类型,就会抛出此异常。
IllegalArgumentException(非法参数异常):当传递给方法的参数不符合方法要求时抛出,包括参数为空或超出范围等情况。
ArithmeticException(算术异常):当发生数学运算错误时抛出,如除以零或超出数值范围。
NumberFormatException(数字格式异常):当无法将字符串转换为数字类型时抛出,例如使用Integer.parseInt()解析非数字字符串。