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

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

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

相关文章:

  • 哪些IT运维工具支持自定义监控项?
  • 将jar包添加到本地maven仓库
  • 物联网通信技术全景指南(2025)之如何挑选合适的物联网模块
  • 什么是「镜像」?(Docker Image)
  • 【linux】VNC无头显示器启动方法
  • 剑指offer15_数值的整数次方
  • 酷狗概念版4.1.6深度体验:探索音乐新境界的便捷之选
  • 网络原理1
  • 《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》
  • MeloTTS中文发音人训练
  • CUDA与venv的配置
  • 【机器学习及深度学习】机器学习模型的误差:偏差、方差及噪声
  • vue2上传图片
  • matlab实现求解兰伯特问题
  • Filebeat技术之多行采集
  • java-spring
  • Blinko智能笔记系统实现跨平台同步与隐私保护的完整技术方案解析
  • 2025年MathorCup数学建模D题短途运输货量预测及车辆调度问题解题文档与程序
  • dataX(入门,mysql到doris)
  • 软件评测师 案例真题笔记
  • RDMA简介1之RDMA开发必要性
  • Java 中执行命令并使用指定配置文件的最佳实践
  • [蓝桥杯]生物芯片
  • 今日主题二分查找(寻找峰值 力扣162)
  • 初识小智AI项目
  • 酵母杂交那些事儿(一)
  • [Python] struct.unpack() 用法详解
  • 在 Linux 上安装 Nmap 工具
  • CSRF攻击与防御
  • 现代密码学介绍