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

2025 Java面试大全技术文章(面试题2)

Java核心语法

数据类型与包装类
Java的8种基本数据类型对应包装类:byte-Byteshort-Shortint-Integerlong-Longfloat-Floatdouble-Doublechar-Characterboolean-Boolean。包装类提供对象操作能力,如集合存储和泛型使用。

自动装箱与拆箱原理
装箱调用valueOf()方法,拆箱调用xxxValue()方法。Integer缓存-128~127的实例,高频复用。

Integer a = 100;  // 自动装箱 Integer.valueOf(100)
int b = a;        // 自动拆箱 a.intValue()

String、StringBuffer、StringBuilder区别

  • String不可变,每次操作生成新对象
  • StringBuffer线程安全(synchronized修饰)
  • StringBuilder非线程安全,性能更高

final关键字作用场景

  • 修饰类:不可继承
  • 修饰方法:不可重写
  • 修饰变量:基本类型值不可变,引用类型地址不可变

面向对象特性

多态的实现机制
基于JVM方法调用指令:

  • invokestatic:调用静态方法
  • invokevirtual:调用实例方法(多态核心)
  • invokeinterface:调用接口方法
  • invokespecial:调用构造函数、私有方法等

抽象类与接口的异同

维度抽象类接口
方法实现可包含具体方法Java8后默认方法
变量无限制默认public static final
继承单继承多实现
设计目的代码复用行为契约

JVM深度剖析

内存模型与GC算法

  • 堆分区:新生代(Eden+S0+S1)、老年代
  • GC算法:
    • 标记-清除(产生碎片)
    • 标记-整理(老年代常用)
    • 复制算法(新生代)

类加载机制
双亲委派模型流程:

  1. 加载:获取二进制字节流
  2. 验证:文件格式、元数据等
  3. 准备:分配内存并初始化默认值
  4. 解析:符号引用转直接引用
  5. 初始化:执行<clinit>方法

OOM问题排查

  • java.lang.OutOfMemoryError: Java heap space:堆内存不足
  • java.lang.OutOfMemoryError: Metaspace:元空间溢出
  • java.lang.OutOfMemoryError: unable to create new native thread:线程数超限

并发编程体系

AQS实现原理分析
核心结构:

  • state:同步状态(如ReentrantLock的重入次数)
  • CLH队列:线程等待队列
    关键方法:
public final void acquire(int arg) {if (!tryAcquire(arg) &&acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt();
}

ThreadLocal内存泄漏防范
使用弱引用避免Key内存泄漏,但需手动remove()清理Value。

并发容器源码解读
ConcurrentHashMap JDK8改进:

  • 数组+链表+红黑树
  • CAS+synchronized替代分段锁
  • 扩容时协助迁移

Spring核心技术

IOC容器启动流程

  1. 初始化BeanDefinitionReader
  2. 解析配置生成BeanDefinition
  3. 执行BeanFactoryPostProcessor
  4. 实例化单例Bean(依赖注入、初始化回调)

AOP动态代理实现

  • JDK动态代理:基于接口
  • CGLIB:基于子类继承
public Object getProxy() {return Enhancer.create(target.getClass(), (MethodInterceptor)(obj, method, args, proxy) -> {System.out.println("Before method");Object result = proxy.invokeSuper(obj, args);System.out.println("After method");return result;});
}

分布式系统设计

CAP理论公式
分布式系统最多满足两个特性:
一致性(C) + 可用性(A) + 分区容错性(P) ≤ 2

Kafka高可用设计

  • 分区副本机制(ISR列表)
  • 生产者ACK配置(0/1/all)
  • 消费者偏移量管理

分布式ID生成方案

  • UUID:无序,索引效率低
  • 数据库自增序列:存在单点瓶颈
  • Snowflake算法:
    • 1位符号位 + 41位时间戳 + 10位机器ID + 12位序列号

系统设计案例

短链服务设计

  • 哈希算法:MD5截取/自增ID转62进制
  • 301/302重定向选择
  • 缓存预热策略

秒杀系统架构

  • 分层削峰:页面静态化+读写分离+队列缓冲
  • 库存扣减:Redis原子操作或分布式锁
  • 限流策略:令牌桶/漏桶算法

Java新特性

虚拟线程(Java21)
轻量级线程,由JVM调度:

Thread.startVirtualThread(() -> {System.out.println("Virtual thread running");
});

GraalVM原生镜像
通过AOT编译生成独立可执行文件:

native-image -jar app.jar

相关文章:

  • 文生图模型的dev、fast、full版本的区别
  • 移动端H5输入框调起手机软键盘,导致底部固定定位被顶起解决方法
  • 计算机基础知识(第三篇)
  • 力扣面试150题--二叉搜索树中第k小的元素
  • 线程池RejectedExecutionException异常
  • 用 PyQt5 打造一个可视化 JSON 数据解析工具
  • Playwright 多浏览器并行测试与数据隔离实战指南
  • 【算法设计与分析】实验——汽车加油问题, 删数问题(算法实现:代码,测试用例,结果分析,算法思路分析,总结)
  • ARM架构推理Stable Diffusiond
  • Foundation Models for Generalist Geospatial Artificial Intelligence(NASA发布Prithvi)论文阅读
  • 【运维】统信UOS操作系统aarch64自制OpenSSH 9.6p1 rpm包(含ssh-copy-id命令)修复漏洞
  • OD 算法题 B卷【代码编辑器】
  • Flotherm软件许可与硬件要求
  • 【复习】软件测试
  • RTOS:初始化新任务(含源码复杂点解读)
  • unity UI Canvas“高”性能写法
  • Unity-UI组件详解
  • 【mysql】BIGINT UNSIGNED字段被表示为float科学计数法 丢失精度问题
  • C++初赛的三讲
  • Java详解LeetCode 热题 100(25):LeetCode 141. 环形链表(Linked List Cycle)详解
  • 网站搭建 主机推荐/创量广告投放平台
  • 西安网站/智能网站推广优化
  • 做网站和做网页有什么区别/商城网站建设
  • 深圳沙井做网站公司/上海seo推广整站
  • 个人网站空间一般多大/百度统计工具
  • 西安市建设厅网站/推广软文范例大全500