Java大厂面试全覆盖:30+反射、注解、IO高频面试题详解(含腾讯/阿里/美团/百度真题)

Java大厂面试全覆盖:30+反射、注解、IO高频面试题详解(含腾讯/阿里/美团/百度真题)

1. 什么是Java反射?

考察知识点:反射机制原理。

Java反射是一种在运行时动态获取类的信息,并操作类对象、方法和属性的机制。通过反射,程序可以加载未知类,动态创建对象,调用方法,访问属性,极大提高了Java的灵活性和扩展性。

2. 反射的常用类有哪些?

考察知识点:反射API。

主要有Class、Field、Method、Constructor四个核心类。Class用于描述类本身,Field代表成员变量,Method代表方法,Constructor代表构造方法。

3. 如何获取Class对象?

考察知识点:Class对象获取方式。

有三种方式:1)Class.forName("类全名"); 2)对象.getClass(); 3)类名.class。推荐静态加载用类名.class,动态加载用Class.forName。

4. 反射创建对象的方式?

考察知识点:实例化对象。

通过Class对象的newInstance()方法(已过时,推荐getDeclaredConstructor().newInstance()),可以动态创建实例。也可以通过Constructor对象的newInstance()创建对象。

5. 如何通过反射调用方法?

考察知识点:Method对象。

先通过Class的getMethod/getDeclaredMethod获取Method对象,再调用invoke方法进行调用。支持传递参数、访问私有方法需setAccessible(true)。

6. 反射访问属性的方式?

考察知识点:Field对象。

用Class的getField/getDeclaredField获取Field对象,通过get/set方法获取或设置属性值。访问私有属性需setAccessible(true)。

7. 反射和普通调用的区别?

考察知识点:性能和应用场景。

反射是动态调用,性能略低于普通调用,但灵活性高。常用于框架开发、通用代码、依赖注入等场景。

8. 反射机制的优缺点?

考察知识点:反射的影响。

优点是灵活、解耦、适合通用框架。缺点是性能开销较大、类型安全性弱、可能破坏封装性。

9. 如何获取泛型信息?

考察知识点:泛型反射。

可通过Field的getGenericType、Method的getGenericReturnType等方法获取泛型类型信息,常用于ORM/序列化等框架。

10. 反射如何访问私有成员?

考察知识点:可访问性。

通过field/method/constructor对象的setAccessible(true)临时关闭Java的访问检查,从而操作私有成员。

11. 反射能否操作静态成员?

考察知识点:静态成员访问。

可以。只需传null作为对象实例即可操作静态字段和方法。

12. 如何通过反射获取类的注解?

考察知识点:注解反射。

用Class/Field/Method对象的getAnnotation(s)方法获取注解实例,通过注解实例读取注解参数。

13. 注解的分类?

考察知识点:元注解与自定义注解。

分为内置注解(如@Override、@Deprecated)、元注解(如@Retention、@Target)和自定义注解。元注解用于描述注解的作用范围和生命周期。

14. 如何自定义注解?

考察知识点:注解定义及参数。

用@interface声明,支持参数、默认值。可通过元注解指定作用域(@Target)、保留策略(@Retention)。

15. 注解的保留策略有哪些?

考察知识点:@Retention。

有SOURCE(源码级)、CLASS(编译期,默认)、RUNTIME(运行时可反射获取)。大多数框架注解用RUNTIME。

16. 注解的作用范围?

考察知识点:@Target。

@Target指定注解可用在类、方法、字段、参数、局部变量等位置,常见ElementType有TYPE、METHOD、FIELD等。

17. 如何读取方法、字段上的注解?

考察知识点:反射读取注解。

通过Method/Field对象的getAnnotation方法获取注解实例,再获取注解参数值。支持多注解或重复注解。

18. 常用的JDK注解有哪些?

考察知识点:标准注解。

@Override(重写)、@Deprecated(弃用)、@SuppressWarnings(压制警告)、@FunctionalInterface、@SafeVarargs等。

19. 注解与反射的结合应用举例?

考察知识点:框架设计。

如Spring、MyBatis等框架通过注解+反射动态扫描类、方法、字段,实现依赖注入、自动装配、ORM映射等功能。

20. 注解处理器(APT)是什么?

考察知识点:编译期注解处理。

APT(Annotation Processing Tool)在编译期扫描注解并生成代码或校验,常用于自动化代码生成、依赖注入等。

21. 什么是Java IO?

考察知识点:IO基础。

Java IO用于数据的输入/输出操作,包括文件、网络、内存等。分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)。

22. 字节流和字符流区别?

考察知识点:IO流分类。

字节流(InputStream/OutputStream)按字节处理适合所有数据;字符流(Reader/Writer)按字符处理,适合文本,自动处理编码转换。

23. File类的常用方法?

考察知识点:文件操作。

File类支持文件/目录的创建、删除、重命名、判断存在、获取路径、遍历目录等操作。是IO操作的基础。

24. BufferedInputStream和BufferedReader区别?

考察知识点:缓冲流。

BufferedInputStream是字节缓冲流,提高字节读写效率;BufferedReader是字符缓冲流,支持按行读取文本,效率高且易用。

25. Java IO如何高效读取大文件?

考察知识点:缓冲、分块。

推荐使用Buffered流进行缓冲,或用FileChannel、MappedByteBuffer进行分块读写,提升大文件处理效率。

26. 对象序列化和反序列化?

考察知识点:ObjectInputStream/ObjectOutputStream。

对象需实现Serializable接口,ObjectOutputStream写对象到文件,ObjectInputStream反序列化恢复对象。可用于持久化、网络传输。

27. NIO与IO的区别?

考察知识点:新IO特性。

NIO为非阻塞IO,基于缓冲区和通道,支持Selector多路复用,适合高并发。IO为阻塞IO,基于流。

28. Java NIO的核心组件?

考察知识点:Channel、Buffer、Selector。

Channel负责数据传输,Buffer负责数据存储,Selector实现多路复用。三者协作实现高效IO。

29. FileChannel的用途?

考察知识点:NIO文件操作。

FileChannel支持高效的文件读写、内存映射、数据传输等,可实现大文件分块/零拷贝操作。

30. MappedByteBuffer的原理?

考察知识点:内存映射文件。

MappedByteBuffer可将文件的部分或全部直接映射到内存,支持高效读写大文件,减少操作系统切换。

31. NIO的多路复用机制?

考察知识点:Selector。

Selector可监听多个Channel事件,实现单线程管理多连接,极大提升并发处理能力,常用于高性能网络编程。

32. 管道(Pipe)和缓冲区(Buffer)的区别?

考察知识点:NIO组件。

Pipe用于线程间单向通信,Buffer用于数据的读写存储。二者在NIO中协同工作。

33. IO流的关闭和资源释放?

考察知识点:资源管理。

应通过try-with-resources自动关闭流,防止资源泄漏;手动关闭需catch异常,保证finally中close操作。

34. 常见IO异常处理方式?

考察知识点:异常与健壮性。

应捕获IOException,合理处理文件不存在、权限不足、网络中断等异常,保证应用健壮性。


以上题目涵盖了大厂Java反射、注解、IO相关的高频和基础知识点,建议结合源码和实际项目深入理解与掌握,知其然且知其所以然,助力高分通过面试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值