Java基础面试题

你认为的Java优势是什么?

答:java是跨平台的,java还提供了垃圾自动回收功能,以及非常全面的生态。

什么是 Java 的多态特性?

答:通过不同的实现类创建相同的对象。一个接口多种实现。

Java 中的参数传递是按值还是按引用?

答:Java 只有按值传递,不论是基本类型还是引用类型。

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

答:接口只能包含抽象方法,成员变量只能是 public static final 类型。抽象类:可以包含成员变量和一般方法和抽象方法

为什么 Java 不支持多重继承?

答:因为多继承容易产生歧义。

Java 中的序列化和反序列化是什么?

答:序列化是将对象转换成字节序列格式的过程,反序列化就是将字节序列格式转换为对象的过程

什么是 Java 中的不可变类?

答:不可变类指的是无法修改对象的值,比如 String 就是典型的不可变类,当你创建一个 String 对象之后,这个对象就无法被修改。

Java 中 Exception 和 Error 有什么区别?

答:Exception 是程序正常运行过程中可以预料到的意外情况,应该被开发者捕获并且进行相应的处理Error是程序运行过程中不太可能出现的错误。

Java 面向对象编程与面向过程编程的区别是什么?

答:面向对象编程是把类或对象作为基本单元来组织代码,并且运用提炼出的:封装、继承和多态来作为代码设计指导,面向过程是以过程作为基本单元来组织代码的,每个过程都可以写成一个函数。

Java 方法重载和方法重写之间的区别是什么?

答:重载是在同一个类中定义多个方法,他们具有相同的方法名但参数列表不同,重写是在子类中定义一个与父类相同签名的方法以便提供子类的特定实现。主要用于实现运行时多态性。

什么是 Java 内部类?它有什么作用?

答:内部类就是定义在一个类内部的类,它主要作用是为了封装和逻辑分组,提供更清晰的代码组织结构

JDK8 有哪些新特性?

答:引入了lambda表达式、新增了strean流式接口,引入了Optional类,新增了 CompletableFuture 、StampedLock 等并发实现类、‘引入了日期类、接口默认方法、静态方法、用元空间替代了永久代

Java 中 String、StringBuffer 和 StringBuilder 的区别是什么?

答:String 是 Java 中基础且重要的类,是 不可变类,StringBuffer 是一个线程安全的可修改的字符序列,StringBuilder也是一个可修改的字符序列。

Java 中包装类型和基本类型的区别是什么?

答:默认值不同,初始化的方式不同,存储方式有差异

 Java 中 hashCode 和 equals 方法是什么?它们与 == 操作符有什么区别?

答:hashCode 用于散列存储结构中确定对象的存储位置。可用于快速比较两个对象是否不同,因为如果它们的哈希码不同,那么它们肯定不相等。

equals 用于比较两个对象的内容是否相等,通常需要重写自定义比较逻辑。

== 用于比较两个引用是否指向同一个对象(即内存地址)。对于基本数据类型,比较它们的值。

什么是 Java 中的动态代理?

答:动态代理是 Java 提供的一种强大机制,用于在运行时创建代理类或代理对象,以实现接口的行为,而不需要提前在代码中定义具体的类。动态是相对于静态来说的,之所以动态就是因为动作发生在运行时

JDK 动态代理和 CGLIB 动态代理有什么区别?

答:JDK 动态代理是基于接口的,所以要求代理类一定是有定义接口的。

CGLIB 基于 ASM 字节码生成工具,它是通过继承的方式来实现代理类,所以要注意 final 方法

Java 中的注解原理是什么?

答:注解其实就是一个标记,可以标记在类上、方法上、属性上等,标记自身也可以设置一些值。有了标记之后,我们就可以在解析的时候得到这个标记,然后做一些特别的处理,这就是注解的用处。

你使用过 Java 的反射机制吗?如何应用反射?

答:反射其实就是 Java 提供的能在运行期得到对象信息的能力,包括属性、方法、注解等,也可以调用其方法。例如 Spring 使用反射机制来读取和解析配置文件,从而实现依赖注入和面向切面编程等功能。比如动态代理场景可以使用反射机制在运行时动态地创建代理对象。

什么是 Java 的 SPI(Service Provider Interface)机制?

答:SPI 机制允许服务提供者通过特定的配置文件将自己的实现注册到系统中,然后系统通过反射机制动态加载这些实现,而不需要修改原始框架的代码,从而实现了系统的解耦、提高了可扩展性。

一个典型的 SPI 应用场景是 JDBC(Java 数据库连接库),不同的数据库驱动程序开发者可以使用 JDBC 库,然后定制自己的数据库驱动程序。

此外,我们使用的主流 Java 开发框架中,几乎都使用到了 SPI 机制,比如 Servlet 容器、日志框架、ORM 框架、Spring 框架。所以这是 Java 开发者必须掌握的一个重要特性

 Java 泛型的作用是什么?什么是泛型擦除?

答:泛型可以把类型当作参数一样传递,使得像一些集合类可以明确存储的对象类型,不用显示地强制转化(在没泛型之前只能是Object,然后强转)。

泛型擦除指的是参数类型在编译之后就被抹去了,也就是生成的 class 文件是没有泛型信息的,所以称之为擦除。

Java 中的深拷贝和浅拷贝有什么区别?

答:深拷贝是完全拷贝一个对象,包括基本类型和引用类型,堆内的引用对象也会复制一份。

浅拷贝是仅拷贝基本类型和引用,堆内的引用对象和被拷贝的对象共享

 栈和队列在 Java 中的区别是什么?

答:队列是先进先出(FIFO)而栈是先进后出

Java 的 I/O 流是什么?

答:Java 的 I/O 流(Input/Output Streams)是用于处理输入和输出操作的类和接口,主要用于读取和写入数据,可以处理不同类型的数据源和目标,如文件、网络连接、内存缓冲区等等。

 什么是 Java 中的继承机制?

答:Java 中的继承是面向对象编程(OOP)的一个核心概念,它允许新创建的类(称为子类或派生类)继承现有类(称为父类或基类)的属性和方法。通过继承,子类可以复用、扩展和修改父类的行为,提高了代码的复用性,实现了多态。

什么是 Java 的封装特性?

答:封装(Encapsulation)是面向对象编程(OOP)的核心概念之一,它指的是将对象的数据(属性)和行为(方法)组合在一起,并隐藏内部的实现细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值