小林coding面试题笔记(四)

AI-摘要
DeepSeek GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
小林coding面试题笔记(四)
JieJava 中 final
关键字的作用
final
是 Java 中的重要关键字,常见于面试中考察其对类、方法和变量的修饰作用。
1. 修饰类
final
修饰的类不能被继承,确保类的行为不可更改。例如,String
类是 final
的,保证了其不可变性。
1 | public final class MyFinalClass { |
面试重点:
- 为什么
String
类是final
的? - 使用
final
修饰类的实际场景。
2. 修饰方法
final
修饰的方法不能被子类重写,确保核心逻辑不被篡改。
1 | class ParentClass { |
面试重点:
final
方法如何影响多态?- JVM 对
final
方法的优化。
3. 修饰变量
final
修饰的变量在赋值后不可更改。
基本数据类型
1 | final int num = 10; |
引用数据类型
1 | final StringBuilder sb = new StringBuilder("Hello"); |
面试重点:
final
修饰引用类型的行为。final
和static
的区别。
深拷贝和浅拷贝
面试中的常见问题
浅拷贝和深拷贝的区别?
- 浅拷贝:复制对象本身,引用类型字段共享。
- 深拷贝:递归复制对象及其引用字段,完全独立。
如何实现深拷贝?
- 实现
Cloneable
接口。 - 使用序列化。
- 手动递归复制。
- 实现
示例代码
浅拷贝
1 | class ShallowCopyExample implements Cloneable { |
深拷贝
1 | class DeepCopyExample implements Cloneable { |
面试重点:
- 深拷贝的实现方式及其优缺点。
- 序列化方式的性能和适用场景。
泛型
面试中的常见问题
泛型的作用是什么?
- 提高代码复用性。
- 提供编译时类型检查,避免运行时错误。
泛型的限制?
- 不能使用基本数据类型。
- 运行时类型擦除。
示例代码
1 | private static <T extends Number> double add(T a, T b) { |
面试重点:
- 泛型的类型擦除机制。
List<?>
和List<Object>
的区别。
Java 创建对象的方式
面试中的常见问题
有哪些方式可以创建对象?
- 使用
new
关键字。 - 使用反射(
Class.newInstance()
)。 - 使用
clone()
方法。 - 通过反序列化。
- 使用
各方式的优缺点?
- 反射的性能开销。
clone()
的局限性。
反射
面试中的常见问题
反射的作用是什么?
- 动态加载类。
- 操作类的私有字段和方法。
反射的性能问题?
- 反射操作较慢,如何优化?
示例代码
1 | Class<?> clazz = Class.forName("com.example.MyClass"); |
面试重点:
- 反射的实际应用场景。
- 如何避免反射带来的性能问题?
注解
面试中的常见问题
注解的原理是什么?
- 注解是继承自
Annotation
接口的特殊接口。 - 运行时通过反射解析。
- 注解是继承自
如何自定义注解?
- 使用
@interface
定义。 - 指定元注解(如
@Retention
和@Target
)。
- 使用
示例代码
1 |
|
面试重点:
- 注解的作用域和生命周期。
- 注解在框架中的应用(如 Spring 和 JUnit)。