当前位置: 首页 > news >正文

Java高频面试题1:Java SE

一、Java概述

1. Java语言的特点?

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

2. JVM、JDK、JRE的区别?

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

二、基础语法

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

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

4. 自动拆箱与装箱?

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

三、面向对象

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

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

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

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

四、字符串处理

7. String、StringBuilder、StringBuffer的区别?

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

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模型等模块。面试时需结合代码示例说明原理,展示对底层机制的理解。

http://www.dtcms.com/a/107833.html

相关文章:

  • SpaceX星舰商业载人首绕月球:私人太空旅行时代正式开启
  • mycat --分片规则--
  • [Android] 共生地球 v1.1.19 国产卫星地图
  • 详细介绍一下C++中的extern关键字
  • 搭建qemu环境
  • 【pcdet3D检测】——OPenpcdet如何进行测试文件配置?能否自定义测试数据?一文看懂pointpillar(pcdet)中的test.py
  • redis7.0搭建redis-cluster集群部署实战
  • AquaMoon and Chess_CodeForces - 1545B
  • AI前沿:资本狂潮下的技术暗战:巨头博弈、开源革命与生态重构
  • Java项目之基于ssm的简易版营业厅宽带系统(源码+文档)
  • Ubuntu 使用apt安装MySQL后的升级方法
  • Share02-小小脚本大大能量
  • 【面试篇】多线程
  • RTX5080 安装torch,torchvision ,torchaudio 指南
  • 全功能在线WEB工具箱PHP源码
  • 3. 线程间共享数据
  • 跨网文件安全交换系统|国产信创认证+安全高效传输
  • 2025-4-2 蓝桥杯刷题情况(分布式队列)
  • 智能觉醒:四大AI Agent框架重构未来生产力
  • 简单描述一下Unity物理系统的主要性能消耗点
  • 【高项】信息系统项目管理师(十五)高级项目管理【4分】
  • RocketMq 5.0之后延时消息底层是怎么实现的?
  • C++(匿名函数+继承+多态)
  • MySQL GROUP BY 和 HAVING 子句中 ‘Unknown column‘ 错误的深入解析
  • 详细介绍一下C++的按位运算
  • Tinder上线《The Game Game》
  • mapreduce工作原理
  • 论文阅读10——解开碳排放与碳足迹之间的关系:文献回顾和可持续交通框架
  • TCP四次挥手
  • 《K230 从熟悉到...》颜色识别