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

Java 高频面试题解析

精心整理了最新的面试资料和简历模板,有需要的可以自行获取

点击前往百度网盘获取
点击前往夸克网盘获取


一、Java基础

1. Java基本数据类型 vs 包装类

  • 问题intInteger的区别?自动装箱与拆箱原理?
    • 基本类型直接存储值,包装类存储对象引用
    • 自动装箱:Integer.valueOf()(注意缓存-128~127)
    • 拆箱:Integer.intValue()

2. String不可变性

  • 问题:为什么String设计为不可变类?
    • 安全性:防止参数被意外修改(如网络连接参数)
    • 哈希值缓存:提升HashMap等集合性能
    • 字符串常量池优化(intern方法)

3. ==equals()区别

    • ==比较对象内存地址
    • equals()默认比较地址,需重写实现值比较(如String)

二、集合框架

1. ArrayList vs LinkedList

    • ArrayList:数组实现,随机访问O(1),增删效率低
    • LinkedList:双向链表,增删O(1),随机访问O(n)

2. HashMap工作原理

  • 问题:HashMap如何解决哈希冲突?
    • JDK8前:数组+链表
    • JDK8+:链表长度>8转红黑树
    • 扩容机制:负载因子0.75,2倍扩容

3. ConcurrentHashMap线程安全实现

    • JDK7:分段锁(Segment)
    • JDK8+:CAS + synchronized锁单个桶

三、多线程

1. 创建线程的3种方式

  • 继承Thread类
  • 实现Runnable接口
  • 实现Callable接口(可获取返回值)

2. synchronized与ReentrantLock

  • 区别
    • synchronized是JVM级别锁,自动释放
    • ReentrantLock支持公平锁、条件变量、可中断

3. 线程池参数

  • 核心参数
    • corePoolSize
    • maximumPoolSize
    • keepAliveTime
    • 阻塞队列(ArrayBlockingQueue等)
    • 拒绝策略(AbortPolicy默认抛异常)

四、JVM

1. 内存区域划分

  • 堆(对象实例)
  • 方法区(类信息)
  • 虚拟机栈(方法调用)
  • 程序计数器
  • 本地方法栈

2. 垃圾回收算法

  • 标记-清除
  • 复制算法(新生代)
  • 标记-整理(老年代)

3. 类加载过程

  • 加载 → 验证 → 准备 → 解析 → 初始化

五、新特性

1. Java8 Stream API

  • 示例
    list.stream().filter(s -> s.length() >3).map(String::toUpperCase).collect(Collectors.toList());
    

2. Lambda表达式

  • 替代匿名内部类,如(a, b) -> a + b

六、框架相关(加分项)

1. Spring IoC原理

  • 通过反射创建对象,依赖注入实现控制反转

2. Spring AOP实现

  • JDK动态代理(接口) vs CGLIB(类)

七、设计模式

1. 单例模式实现

  • 双重检查锁
    private volatile static Singleton instance;
    public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;
    }
    

高频追问

  • 深拷贝 vs 浅拷贝
  • fail-fast机制原理
  • volatile关键字作用(可见性、禁止指令重排)
  • JVM调优参数(-Xmx, -Xss等)

建议结合具体代码示例理解原理,并准备项目中的实际应用场景说明。建议使用JVisualVM等工具实践内存分析。

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

相关文章:

  • Langchain提取结构化数据
  • 第九节:性能优化高频题-首屏加载优化策略
  • JS Array 方法 | 区分 slice 和 splice
  • `rfind()` 从字符串的右侧开始查找指定子字符串首次出现的位置
  • SiamFC算法深度解析
  • 深入浅出:Pinctrl与GPIO子系统详解
  • SpringCloud微服务架构设计与实践 - 面试实战
  • C语言别踩白块附源码
  • Trae+DeepSeek学习Python开发MVC框架程序笔记(四):使用sqlite存储查询并验证用户名和密码
  • 现代化个人博客系统 ModStartBlog v10.3.0 博客批量操作,博客评论智能审核,安全升级
  • 某大型电解铝厂电解系统谐波治理装置改造沃伦森电气
  • Linux之七大难命令(The Seven Difficult Commands of Linux)
  • U盘能识别但无法写入数据的原因
  • CSS学习笔记8——表格
  • STM32F103C8T6 GPIO 通讯原理与物理层解析
  • Git 详细使用说明文档(适合小白)
  • 数据结构-冒泡排序(Python)
  • 【硬核干货】JetBrains AI Assistant 干货笔记
  • 数据分析工具 - AxureMost
  • php 框架Workerman定时任务详解《一》
  • MCP开发实战(一)基于MCP协议的大模型网关——多个大模型API统一封装为标准化工具
  • Axure大屏可视化模板:多领域数据决策的新引擎
  • TXPOLARITY/RXPOLARITY设置
  • java延迟map, 自定义延迟map, 过期清理map,map能力扩展。如何设置map数据过期,改造map适配数据过期
  • day6-小白学习JAVA---方法_面向对象
  • 了解低功耗蓝牙中的安全密钥
  • 缓存穿透、雪崩、击穿深度解析与解决方案
  • 多线程中的ABA问题详解
  • Java并发编程|CompletableFuture原理与实战:从链式操作到异步编排
  • BGE(BAAI General Embedding)模型详解