每天10道Java基础面试题,涵盖核心知识点,附简洁代码示例,掌握快速记忆的方法

1. JDK、JRE、JVM区别

  • JDK:开发工具包(含JRE+编译器)
  • JRE:运行环境(含JVM+类库)
  • JVM:执行字节码的虚拟机

2. ==与equals()区别

String a = "abc", b = new String("abc");
System.out.println(a == b); // false(地址不同)
System.out.println(a.equals(b)); // true(内容相同)

3. String不可变性

String s = "hello";
s.concat(" world"); // 返回新对象,s仍为"hello"

4. StringBuffer vs StringBuilder

  • StringBuffer:线程安全(synchronized)
  • StringBuilder:非线程安全,性能高

5. 接口 vs 抽象类

  • 接口:多继承,Java8支持默认方法
  • 抽象类:单继承,可有构造方法

6. 重载(Overload) vs 重写(Override)

// 重载:同类中方法名相同,参数不同
void print(int a) {}
void print(String s) {}

// 重写:子类方法覆盖父类,相同方法名+参数
@Override
void print(int a) { ... }

7. final关键字

  • 类:不可继承
  • 方法:不可重写
  • 变量:常量(值不可变)

8. 自动装箱/拆箱

Integer i = 10; // 装箱(Integer.valueOf(10))
int j = i; // 拆箱(i.intValue())

9. try-with-resources

try (FileInputStream fis = new FileInputStream("file.txt")) {
    // 自动关闭资源
}

10. 创建线程的两种方式

// 1. 继承Thread类
class MyThread extends Thread {
    public void run() { ... }
}

// 2. 实现Runnable接口
new Thread(() -> System.out.println("Runnable")).start();

11. 泛型擦除

List<String> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
// 运行时类型均为ArrayList

12. Lambda表达式

List<Integer> list = Arrays.asList(1,2,3);
list.forEach(n -> System.out.println(n));

13. 深拷贝 vs 浅拷贝

  • 浅拷贝:复制对象引用
  • 深拷贝:复制对象及引用对象

口诀记忆法
“数据类型四八种,面向对象三特性;
异常分类错异常,集合List与Map;
线程创建两方式,同步锁用synchronized。”

掌握核心代码示例,理解原理即可应对大部分基础面试!建议结合手写代码加深记忆。

你可能感兴趣的:(spring,boot,java,后端,开发语言,spring,cloud)