面试常问问题: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防止指令重排,保证可见性;双重检查减少锁竞争。

相关推荐
_一条咸鱼_1 小时前
深度剖析:Android NestedScrollView 惯性滑动原理大揭秘
android·面试·android jetpack
_一条咸鱼_1 小时前
深度揭秘!Android NestedScrollView 绘制原理全解析
android·面试·android jetpack
_一条咸鱼_1 小时前
揭秘 Android CoordinatorLayout:从源码深度解析其协同工作原理
android·面试·android jetpack
_一条咸鱼_1 小时前
揭秘 Android View 的 TranslationY 位移原理:源码深度剖析
android·面试·android jetpack
_一条咸鱼_1 小时前
揭秘 Android NestedScrollView 滑动原理:源码深度剖析
android·面试·android jetpack
_一条咸鱼_1 小时前
深度揭秘:Android NestedScrollView 拖动原理全解析
android·面试·android jetpack
_一条咸鱼_1 小时前
揭秘!Android RecyclerView 预取(Prefetch)原理深度剖析
android·面试·android jetpack
_一条咸鱼_1 小时前
揭秘 Android ImageView:从源码深度剖析使用原理
android·面试·android jetpack
_一条咸鱼_1 小时前
深入剖析 Android AppBarLayout:从源码洞悉其工作原理
android·面试·android jetpack
_一条咸鱼_1 小时前
揭秘!Android NestedScrollView 布局原理深度剖析
android·面试·android jetpack