当前位置: 首页 > ai >正文

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

http://www.xdnf.cn/news/1883.html

相关文章:

  • 【金仓数据库征文】- 深耕国产数据库优化,筑牢用户体验新高度
  • 【编译原理】 第四章 自上而下语法分析
  • 【速写】钩子与计算图
  • B 树失败结点个数计算好题分享
  • 【黑马 微服务面试篇】
  • 多模态深度学习: 从基础到实践
  • 星火燎原:大数据时代的Spark技术革命在数字化浪潮席卷全球的今天,海量数据如同奔涌不息的洪流,传统的数据处理方式已难以满足实时、高效的需求。
  • windows编程字符串处理
  • 【QQMusic项目界面开发复习笔记】第二章
  • 工业相机——镜头篇【机器视觉,图像采集系统,成像原理,光学系统,成像光路,镜头光圈,镜头景深,远心镜头,分辨率,MTF曲线,焦距计算 ,子午弧矢】
  • 【TS入门笔记2---基础语法】
  • python_BeautifulSoup提取html中的信息
  • 1GB与1MB的数值换算关系
  • DeepSeek本地部署保姆级教程
  • tkinter的文件对话框:filedialog
  • Graph Database Self-Managed Neo4j 知识图谱存储实践2:通过官方新手例子入门(未完成)
  • 软考中级-软件设计师 知识点速过1(手写笔记)
  • 五一去荣昌吃卤鹅?基于Java和天地图的寻找荣昌卤鹅店实践
  • C++入侵检测与网络攻防之暴力破解
  • 系统架构师2025年论文《论非功能性需求对企业应用架构设计的影响》
  • Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解
  • 深度剖析!GPT-image-1 API 开放对 AI 绘画技术生态的冲击!
  • 【HTTP通信:生活中的邮局之旅】
  • docker的安装和简单使用(ubuntu环境)
  • 【2026第十三季】国考行测模考大赛复盘
  • 如何解决windows端口被占用
  • Python数据分析案例72——基于股吧评论数据的情感分析和主题建模(LDA)
  • 数字化转型的“暗礁“与突围:失败案例深度复盘
  • 联合体和枚举类型
  • WebUI可视化:第4章:Streamlit数据可视化实战