Java高频面试题1:Java SE

一、Java概述

1. Java语言的特点?

  • 面向对象:封装、继承、多态。
  • 跨平台:通过JVM实现“一次编写,到处运行”。
  • 内存管理:自动垃圾回收(GC),避免手动内存管理。
  • 多线程:内置多线程支持,通过Thread类和Runnable接口实现。

2. JVM、JDK、JRE的区别?

组件 描述 包含内容
JVM Java虚拟机,负责执行字节码 解释器、即时编译器(JIT)
JRE Java运行时环境 JVM + 核心类库(如java.lang
JDK Java开发工具包 JRE + 编译器(javac)、调试工具等

二、基础语法

3. Java基本数据类型有哪些?

  • 数值型byteshortintlong(整数);floatdouble(浮点数)。
  • 字符型char
  • 布尔型boolean

4. 自动拆箱与装箱?

  • 装箱:基本类型 → 包装类(如intInteger)。
  • 拆箱:包装类 → 基本类型(如Integerint)。
  • 缓存机制Integer缓存范围为-128~127,超出范围会创建新对象。

三、面向对象

5. 面向对象的三大特性?

  • 封装:数据和方法绑定,通过访问修饰符(publicprivate等)控制访问。
  • 继承:子类复用父类属性和方法,使用extends关键字。
  • 多态:父类引用指向子类对象,运行时动态决定调用的方法。

6. 抽象类与接口的区别?

特性 抽象类 接口
实例化 不能直接实例化 不能直接实例化
方法 可包含抽象和非抽象方法 所有方法均为抽象方法
继承 单继承 多实现

四、字符串处理

7. String、StringBuilder、StringBuffer的区别?

特性 String StringBuilder StringBuffer
不可变性 不可变(线程安全) 可变(非线程安全) 可变(线程安全)
性能 拼接效率低(生成新对象) 高(直接操作数组) 高(线程安全但稍慢)
场景 常量字符串 单线程下频繁拼接 多线程下频繁拼接

8. String的intern()方法作用?

  • 将字符串对象放入字符串常量池。若池中已存在相同内容的字符串,则返回池中的引用;否则,将当前对象加入池中并返回。

9. String的不可变性有什么好处?

  • 安全性(如作为HashMap的键)。
  • 字符串常量池优化内存。
  • 哈希值固定,提高哈希表效率。

五、异常处理

10. 异常的分类?

  • Error:JVM错误(如OutOfMemoryError),程序无法处理。
  • Exception
    • 编译时异常(Checked):需显式处理(如IOException)。
    • 运行时异常(Unchecked):无需显式处理(如NullPointerException)。

11. finally块的执行顺序?

  • try中的return语句会先暂存返回值,再执行finally,最后返回暂存值。
  • finally中也有return,会覆盖try中的返回值。

六、IO与网络

12. BIO、NIO、AIO的区别?

模型 阻塞性 核心机制 适用场景
BIO 同步阻塞 线程 per 连接 连接数少且长连接
NIO 同步非阻塞 通道 + 选择器 连接数多且短连接
AIO 异步非阻塞 事件 + 回调 高并发、长连接

13. 序列化的作用?

  • 将对象转换为字节流,用于存储或网络传输。需实现Serializable接口,transient关键字可忽略某些字段。

14. 字节流和字符流的区别?

  • 字节流(如FileInputStream)处理二进制数据,字符流(如FileReader)处理文本数据。
  • 字符流内部通过字节流实现,自动处理编码转换。

七、多线程与并发

15. 线程的生命周期?

  • 新建(New) → 就绪(Runnable) → 运行(Running) → 阻塞(Blocked/Waiting/Timed Waiting) → 终止(Terminated)。

16. wait()和sleep()的区别?

  • wait():释放锁,需在synchronized块中调用。
  • sleep():不释放锁,可在任意位置调用。

八、 反射与注解

17. 什么是反射?反射的应用场景有哪些?

  • 反射允许在运行时动态获取类信息、调用方法、访问字段。
  • 应用场景:框架开发(如Spring)、单元测试、动态代理。

18. 常见的Java注解有哪些?

  • 内置注解:@Override(重写方法)、@Deprecated(过时)、@SuppressWarnings(抑制警告)。
  • 元注解:@Retention(生命周期)、@Target(作用目标)。
  • 框架注解:@Component(Spring)、@Autowired(依赖注入)。

九、其他高频问题

19. ==和equals的区别?

  • ==:比较引用地址(基本类型比较值)。
  • equals():默认比较引用地址,常被重写为比较内容(如String)。

20. 为什么重写equals必须重写hashCode?

  • 哈希表(如HashMap)通过hashCode定位存储位置,若equals相等但hashCode不等,会导致数据不一致。

21. 泛型的作用?

  • 类型安全:编译期检查类型错误。
  • 代码复用:减少强制类型转换,提高可读性。

十、代码实战

22. 以下代码输出什么?

Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b); // true(缓存范围内)
System.out.println(c == d); // false(超出缓存范围)

23. finally块中的return会覆盖try中的return吗?

public static int test() {
    try {
        return 1;
    } finally {
        return 2; // 最终返回2
    }
}

总结:以上题目覆盖Java基础核心知识点,建议结合实际项目经验,重点掌握String特性、异常处理、多态、IO模型等模块。面试时需结合代码示例说明原理,展示对底层机制的理解。

你可能感兴趣的:(面试,java,开发语言,面试)