Java常考简答题

Java 基础

  1. Java 的特点是什么?

    • 面向对象
    • 平台无关性(一次编写,到处运行)
    • 安全性
    • 多线程支持
    • 自动内存管理(垃圾回收)
    • 丰富的类库
  2. JDK、JRE 和 JVM 的区别?

    • JDK (Java Development Kit): Java 开发工具包,包含 JRE 和开发工具
    • JRE (Java Runtime Environment): Java 运行环境,包含 JVM 和核心类库
    • JVM (Java Virtual Machine): Java 虚拟机,执行字节码
  3. Java 的基本数据类型有哪些?

    • 整型: byte(1), short(2), int(4), long(8)
    • 浮点型: float(4), double(8)
    • 字符型: char(2)
    • 布尔型: boolean(1)
  4. == 和 equals() 的区别?

    • == 比较基本数据类型的值或对象的引用地址
    • equals() 比较对象的内容(可重写)
  5. final、finally 和 finalize 的区别?

    • final: 修饰类(不可继承)、方法(不可重写)、变量(常量)
    • finally: try-catch 块中始终执行的代码块
    • finalize: Object 类的方法,垃圾回收前调用的方法

面向对象

  1. 面向对象的三大特性是什么?

    • 封装: 隐藏实现细节,提供公共访问方式
    • 继承: 子类继承父类的特征和行为
    • 多态: 同一操作作用于不同对象产生不同行为
  2. 抽象类和接口的区别?

    • 抽象类可以有构造方法,接口不能
    • 抽象类可以有普通方法,接口只能是抽象方法(Java 8 前)
    • 类只能单继承抽象类,但可以实现多个接口
    • 抽象类可以有成员变量,接口只能有常量
  3. 重载(Overload)和重写(Override)的区别?

    • 重载: 同一类中,方法名相同,参数列表不同
    • 重写: 子类中,方法名、参数列表和返回类型与父类相同
  4. Java 创建对象的方式有哪些?

    • 使用 new 关键字
    • 使用 Class 类的 newInstance() 方法
    • 使用 Constructor 类的 newInstance() 方法
    • 使用 clone() 方法
    • 使用反序列化

集合框架

  1. ArrayList 和 LinkedList 的区别?

    • ArrayList: 基于动态数组,随机访问快,插入删除慢
    • LinkedList: 基于双向链表,随机访问慢,插入删除快
  2. HashMap 的工作原理?

    • 基于哈希表实现,使用数组+链表+红黑树(JDK8)
    • 通过 key 的 hashCode() 计算存储位置
    • 解决冲突: 链表法,当链表长度>8转换为红黑树
  3. HashSet 如何保证元素不重复?

    • 基于 HashMap 实现,元素作为 HashMap 的 key
    • 通过元素的 hashCode() 和 equals() 方法判断是否重复
  4. Iterator 和 ListIterator 的区别?

    • Iterator 可以遍历 Set 和 List,ListIterator 只能遍历 List
    • ListIterator 可以双向遍历,Iterator 只能单向
    • ListIterator 可以修改集合,Iterator 只能删除元素

异常处理

  1. Java 异常体系结构?

    • Throwable
      • Error: 系统错误,程序无法处理
      • Exception: 程序可处理的异常
        • RuntimeException: 运行时异常
        • 其他Exception: 检查异常
  2. 检查异常和非检查异常的区别?

    • 检查异常: 必须捕获或声明抛出,如 IOException
    • 非检查异常: 不强制处理,如 NullPointerException
  3. throw 和 throws 的区别?

    • throw: 在方法内抛出异常对象
    • throws: 在方法声明中指定可能抛出的异常类型

多线程

  1. 线程的创建方式有哪些?

    • 继承 Thread 类
    • 实现 Runnable 接口
    • 实现 Callable 接口
    • 使用线程池
  2. sleep() 和 wait() 的区别?

    • sleep() 是 Thread 的方法,不释放锁
    • wait() 是 Object 的方法,释放锁
    • sleep() 时间到自动恢复,wait() 需要 notify()/notifyAll()
  3. synchronized 和 Lock 的区别?

    • synchronized 是关键字,Lock 是接口
    • synchronized 自动释放锁,Lock 需要手动释放
    • Lock 提供更多功能,如尝试获取锁、公平锁等
  4. volatile 关键字的作用?

    • 保证变量的可见性
    • 禁止指令重排序
    • 但不保证原子性

I/O 流

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

    • 字节流: 以字节为单位,适合二进制数据
    • 字符流: 以字符为单位,适合文本数据
    • 字符流底层使用字节流+编码表
  2. BIO、NIO 和 AIO 的区别?

    • BIO: 同步阻塞 I/O,一个连接一个线程
    • NIO: 同步非阻塞 I/O,多路复用
    • AIO: 异步非阻塞 I/O,基于回调

JVM

  1. Java 内存区域划分?

    • 程序计数器
    • 虚拟机栈
    • 本地方法栈
    • 方法区
  2. 垃圾回收算法有哪些?

    • 标记-清除
    • 复制
    • 标记-整理
    • 分代收集
  3. 类加载过程?

    • 加载
    • 验证
    • 准备
    • 解析
    • 初始化
  4. 双亲委派模型?

    • 类加载器层次结构: Bootstrap → Extension → Application → Custom
    • 加载类时先委托父类加载器,父类无法加载才自己加载

你可能感兴趣的:(Java,学习方法,java,面试)