面试常问问题:Java基础篇

一、面向对象编程(OOP)

  1. 四大特性

    • 封装、继承、多态、抽象的具体实现与区别?

    • 抽象类与接口的区别?何时选择抽象类或接口?

    • 重写(Override)和重载(Overload)的规则与区别?

  2. 关键字

    • final修饰类、方法、变量的作用?能否修饰构造方法?

    • static的作用?静态变量与实例变量的存储位置?

    • thissuper的使用场景?

  3. 其他特性

    • 什么是内部类?匿名内部类如何访问外部变量?

    • 值传递 vs 引用传递?Java中参数传递的本质是什么?


二、集合框架

  1. 核心类

    • ArrayListLinkedList的底层实现与适用场景?

    • HashMap的底层结构(JDK 1.8前后变化)?哈希冲突如何解决?

    • HashSet如何保证元素唯一性?

    • ConcurrentHashMap如何实现线程安全?分段锁 vs CAS+synchronized?

  2. 其他问题

    • Iterator的fail-fast机制是什么?如何避免?

    • ComparableComparator的区别?如何实现自定义排序?

    • Java 8中Stream API的常用操作(如mapfilterreduce)?


三、多线程与并发

  1. 线程基础

    • 线程的6种状态(New, Runnable, Blocked, Waiting, Timed Waiting, Terminated)?

    • wait()notify()sleep()的区别?为什么wait()需要释放锁?

  2. 线程安全

    • synchronized的底层实现(对象头Monitor)?锁升级过程(偏向锁→轻量级锁→重量级锁)?

    • ReentrantLocksynchronized的区别?公平锁与非公平锁如何实现?

    • volatile的作用(可见性、禁止指令重排)?能否保证原子性?

  3. 线程池

    • ThreadPoolExecutor的7个核心参数(核心线程数、最大线程数、队列等)?

    • 线程池的4种拒绝策略(AbortPolicy、CallerRunsPolicy等)?

    • 如何合理配置线程池大小?


四、JVM与内存管理

  1. 内存结构

    • JVM内存分区(堆、栈、方法区/元空间、程序计数器等)?

    • 堆内存的分代结构(Young/Old Generation)?对象分配过程(Eden→Survivor→Old)?

  2. 垃圾回收(GC)

    • 如何判断对象是否可回收(引用计数法 vs 可达性分析)?

    • 常见的GC算法(标记-清除、复制、标记-整理)?

    • CMS和G1垃圾回收器的特点与区别?

  3. 性能调优

    • 常见的OOM错误(堆溢出、栈溢出、方法区溢出)?如何排查?

    • JVM参数调优(-Xms、-Xmx、-XX:NewRatio等)?


五、异常处理

  1. 异常分类:ErrorException的区别?受检异常(Checked Exception)与非受检异常(Unchecked Exception)?

  2. try-catch-finally的执行顺序?若tryfinally中都有return,最终返回哪个?

  3. try-with-resources的作用(自动关闭资源)?如何实现(需实现AutoCloseable接口)?


六、其他核心问题

  1. Java 8+新特性

    • Lambda表达式的作用?函数式接口(如ConsumerPredicate)的使用场景?

    • Optional类的作用?如何避免NullPointerException?

  2. 反射与动态代理

    • 反射如何获取类的私有方法?反射的性能问题如何优化?

    • JDK动态代理与CGLIB动态代理的区别?

  3. 基础语法

    • StringStringBuilderStringBuffer的区别?字符串常量池的作用?

    • 自动装箱与拆箱的原理?Integer a=127Integer b=127是否相等?为什么?

    • ==equals()的区别?如何重写equals()hashCode()


高频代码题示例

  1. 手写单例模式(双重检查锁+volatile)。

  2. 实现生产者-消费者模型(使用BlockingQueuewait()/notify())。

  3. 反转链表(考察基础算法与指针操作)。


总结

Java基础是面试的核心考察点,建议结合源码(如HashMap、ConcurrentHashMap)和实际场景(如线程池配置)深入理解。对于概念类问题(如OOP特性),需用简洁的语言表达本质;对于底层原理(如JVM、锁机制),需结合图示或代码流程说明。

答案

一、面向对象编程(OOP)

1. 抽象类与接口的区别?
  • 抽象类

    • abstract修饰,可以包含普通方法和抽象方法。

    • 单继承,子类通过extends继承。

    • 适合定义共性逻辑(如模板方法模式)。

  • 接口

    • interface定义,Java 8后支持默认方法(default)和静态方法。

    • 多实现,类通过implements实现。

    • 适合定义行为契约(如策略模式)。

2. final关键字的作用
  • 修饰类:类不可被继承(如String)。

  • 修饰方法:方法不可被重写(如Object.getClass())。

  • 修饰变量:变量值不可变(基本类型值不变,引用类型指向对象不变)。


二、集合框架

1. HashMap的底层实现(JDK 1.8+)
  • 结构:数组 + 链表/红黑树(链表长度≥8时转红黑树,≤6时转回链表)。

  • 哈希冲突解决:链地址法(拉链法)。

  • 扩容机制:默认负载因子0.75,容量翻倍,重新计算哈希分布。

2. ConcurrentHashMap的线程安全实现
  • JDK 1.7:分段锁(Segment),降低锁粒度。

  • JDK 1.8+:CAS + synchronized(仅锁链表头节点/红黑树根节点)。


三、多线程与并发

1. synchronizedReentrantLock的区别
  • 实现

    • synchronized:JVM层面实现,自动释放锁。

    • ReentrantLock:API层面实现,需手动lock()unlock()

  • 功能

    • ReentrantLock支持公平锁、条件变量(Condition)、可中断锁。
2. 线程池的拒绝策略
  • AbortPolicy:直接抛出RejectedExecutionException(默认)。

  • CallerRunsPolicy:由提交任务的线程直接执行任务。

  • DiscardOldestPolicy:丢弃队列中最旧的任务,重新提交新任务。

  • DiscardPolicy:直接丢弃新任务,不抛异常。


四、JVM与内存管理

1. JVM内存结构
  • :存储对象实例(Young/Old Generation)。

  • :存储方法调用栈帧(局部变量、操作数栈)。

  • 方法区(元空间):存储类信息、常量池(JDK 8后由本地内存管理)。

2. 垃圾回收算法:G1 vs CMS
  • CMS:标记-清除算法,追求低停顿,但存在内存碎片。

  • G1:分Region收集,标记-整理算法,可预测停顿时间(适合大内存)。


五、高频代码题示例

1. 双重检查锁单例模式

java

复制

下载

复制代码
public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

关键点volatile防止指令重排,保证可见性;双重检查减少锁竞争。

相关推荐
专注API从业者24 分钟前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠41 分钟前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY1 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克32 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠2 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌2 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
女生也可以敲代码3 小时前
AI时代下的50道前端开发面试题:从基础到大模型应用
前端·面试
Agent产品评测局3 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
阿丰资源3 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it3 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java