以下是20道初级Java开发工程师常见面试题及其简要答案,涵盖基础语法、面向对象、常用API、集合、异常、I/O、多线程等知识点:
1. Java 的基本数据类型有哪些?
答案:byte、short、int、long、float、double、char、boolean。
2. int 和 Integer 有什么区别?
答案:int 是基本数据类型,存储在栈中;Integer 是 int 的包装类,是对象,存储在堆中,能为 null,包含方法。
3. 什么是面向对象的三大特性?
答案:封装、继承、多态。
4. String 和 StringBuilder、StringBuffer的区别?
答案:String 不可变,线程安全;StringBuffer 可变,线程安全;StringBuilder 可变,非线程安全,效率高。
5. equals() 和 == 有什么区别?
答案:== 比较的是引用(地址);equals() 比较的是内容(可被重写)。
6. 什么是构造方法?特点是什么?
答案:
构造方法用于创建对象时初始化对象。
特点:方法名与类名相同,无返回值,不写返回类型。
7. Java 中重载(Overload)和重写(Override)的区别?
答案:
重载:同类中方法名相同,参数列表不同。
重写:子类重新定义父类的方法,方法签名相同。
8. final 关键字的作用?
答案:
修饰类:类不能被继承;
修饰方法:方法不能被重写;
修饰变量:变量值不可更改(常量)。
9. 简述 List、Set、Map 的区别?
答案:
List:有序、可重复元素,如 ArrayList;
Set:无序、元素唯一,如 HashSet;
Map:键值对,键唯一,如 HashMap。
10. ArrayList 和 LinkedList 的区别?
答案:
ArrayList 底层数组,查询快、增删慢;
LinkedList 底层链表,查询慢、增删快。
11. HashMap 和 Hashtable 的区别?
答案:
HashMap 线程不安全,允许 null 键值,效率高;
Hashtable 线程安全,不允许 null 键值,效率低。
12. Java 的异常体系结构?
答案:
Throwable
├── Error(严重错误)
└── Exception
├── RuntimeException(运行时异常)
└── 非运行时异常(如 IOException)
13. throw 和 throws 的区别?
答案:
throw 用于抛出异常对象;
throws 用于声明方法可能抛出的异常类型。
14. 什么是多态?如何实现多态?
答案:
同一方法调用在不同对象上有不同表现。
实现方式:继承+方法重写+父类引用指向子类对象。
15. 什么是接口?接口和抽象类的区别?
答案:
接口只定义方法签名,无实现;
抽象类可有抽象方法和具体方法。
区别:接口不能有构造方法,支持多实现;抽象类可有构造方法,单继承。
16. 说说你对 JVM 的理解?
答案:
Java 虚拟机(JVM)是 Java 程序运行的虚拟环境,负责字节码加载、解释、执行、内存管理、垃圾回收等。
17. 什么是包(package)?有什么作用?
答案:
包是类的命名空间,用于组织类、避免命名冲突、便于管理。
18. 简述 Java I/O 流的分类。
答案:
按流向分:输入流、输出流;
按处理单位分:字节流(InputStream、OutputStream)、字符流(Reader、Writer)。
19. 线程的创建方式有几种?
答案:
两种:继承 Thread 类、实现 Runnable 接口(实际开发多用 Runnable)。
20. synchronized 关键字的作用?
答案:
用于实现线程同步,防止多线程同时访问共享资源导致数据不一致。