版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年java面试题库大全及答案Java基础Java跨平台的原理是什么?Java程序通过编译器提供与平台无关的字节码文件(.class),由不同平台的Java虚拟机(JVM)负责解释执行字节码。JVM屏蔽了底层操作系统和硬件的差异,因此相同的.class文件可在不同平台的JVM上运行,实现“一次编写,到处运行”。基本数据类型和包装类的区别有哪些?基本数据类型(如int、double)存储值本身,占用固定内存;包装类(如Integer、Double)是对象,存储在堆中,支持更多方法(如类型转换、空值处理)。自动装箱(基本类型转包装类)和拆箱(包装类转基本类型)由编译器自动提供代码实现,但需注意Integer的缓存机制(-128~127直接使用缓存对象,超出范围会新建实例)。重载(Overload)和重写(Override)的区别?重载发生在同一类中,方法名相同但参数列表(类型、顺序、个数)不同,与返回值无关,是编译时多态的体现;重写发生在子类和父类之间,方法名、参数列表、返回值完全相同(子类返回值可为父类返回值的子类),访问权限不能严于父类,是运行时多态的体现。抽象类和接口的区别(JDK8+)?抽象类可包含抽象方法、具体方法、构造方法、成员变量;接口在JDK8后支持默认方法(default)和静态方法(static),JDK9支持私有方法。抽象类体现“is-a”关系(子类是一种抽象类),接口体现“can-do”关系(具备某种能力)。一个类只能继承一个抽象类,但可实现多个接口。异常处理中,finally块是否一定会执行?通常情况下,finally块在try或catch块执行完毕后一定会执行,除非在try/catch块中调用了System.exit(0)终止JVM,或线程被中断/终止。若try和finally中均有return语句,最终返回值为finally中的结果(但会覆盖try中的return值,实际开发中不建议这样写)。集合框架HashMap在JDK7和JDK8中的实现差异?JDK7使用“数组+链表”结构,插入元素时采用头插法(可能导致多线程扩容时链表成环);JDK8改为“数组+链表+红黑树”结构,当链表长度≥8且数组长度≥64时,链表转换为红黑树(查询时间复杂度从O(n)降至O(logn)),插入采用尾插法,扩容时节点位置计算优化为(e.hash&oldCap)判断是否需要移动,减少rehash开销。ConcurrentHashMap如何保证线程安全(JDK8)?JDK8放弃了JDK7的分段锁(Segment),采用“CAS+synchronized”机制。当插入元素时,首先通过CAS尝试更新节点,若失败则对当前桶的头节点加synchronized锁,锁粒度更细(仅锁链表或红黑树的头节点),提高并发性能。ArrayList和LinkedList的适用场景?ArrayList基于动态数组,随机访问(get/set)时间复杂度O(1),但插入/删除(非末尾)需移动元素,时间复杂度O(n),适合读多写少场景;LinkedList基于双向链表,插入/删除(仅需修改指针)时间复杂度O(1)(已知节点位置时),但随机访问需遍历链表,时间复杂度O(n),适合写多读少场景。HashSet如何保证元素唯一性?HashSet底层依赖HashMap实现,元素作为HashMap的key存储,value统一为PRESENT(静态常量)。添加元素时,先计算元素的hashCode确定桶位置,若桶中无元素则直接插入;若有元素,通过equals方法比较是否已存在相同元素,存在则不插入,否则以链表或红黑树形式存储。并发编程线程的生命周期有哪些状态?Java线程状态定义在Thread.State枚举中,包括:NEW(新建)、RUNNABLE(可运行,包含就绪和运行中)、BLOCKED(阻塞,等待监视器锁)、WAITING(无限等待,需其他线程唤醒)、TIMED_WAITING(超时等待)、TERMINATED(终止)。synchronized的底层实现原理?synchronized通过对象头中的MarkWord和Monitor(监视器)实现。对于实例方法,锁对象是当前实例;静态方法锁对象是类的Class对象;代码块锁对象是指定对象。JVM会为每个对象关联一个Monitor,获取锁即获取Monitor的所有权(计数器+1,可重入),释放锁时计数器-1,减至0时唤醒等待线程。volatile的作用是什么?volatile保证变量的可见性(强制从主内存读写,禁止线程本地缓存)和禁止指令重排序(通过内存屏障实现)。但无法保证原子性(如i++操作包含读取、修改、写入三步,非原子),适用于状态标记(如线程终止标志)或单写多读场景(如DCL单例中的实例变量)。线程池的核心参数有哪些?线程池通过ThreadPoolExecutor创建,核心参数包括:corePoolSize(核心线程数,即使空闲也保留)、maximumPoolSize(最大线程数)、keepAliveTime(非核心线程空闲超时时间)、unit(时间单位)、workQueue(任务队列,如ArrayBlockingQueue、LinkedBlockingQueue)、threadFactory(线程工厂)、handler(拒绝策略,如AbortPolicy(默认,抛异常)、CallerRunsPolicy(调用者执行))。JVMJVM内存区域如何划分?JVM内存分为:程序计数器:记录当前线程执行的字节码行号,线程私有,无OOM。虚拟机栈:存储栈帧(局部变量表、操作数栈、动态链接、方法出口),线程私有,栈深度过深抛StackOverflowError,扩展失败抛OOM。本地方法栈:类似虚拟机栈,服务于本地方法(Native方法)。堆:存储对象实例和数组,线程共享,是GC的主要区域,内存不足抛OOM。方法区(元空间,JDK8后):存储类信息、常量、静态变量、即时编译后的代码,线程共享,内存不足抛OOM。类加载的过程有哪些阶段?类加载分为加载、验证、准备、解析、初始化五个阶段。加载阶段通过类加载器将.class文件加载到内存;验证阶段检查字节码格式、语义等是否合法;准备阶段为静态变量分配内存并设置初始值(如int初始为0);解析阶段将符号引用转换为直接引用(如类、方法的实际内存地址);初始化阶段执行类构造器<clinit>()方法(静态变量赋值和静态代码块)。G1收集器的特点是什么?G1(Garbage-First)是面向服务端的低延迟收集器,适用于大内存场景(≥4GB)。其将堆划分为多个大小相等的Region(默认2MB),跟踪每个Region的回收价值(回收所得内存/时间),优先回收价值高的Region(MixedGC)。G1通过RememberedSet(RSet)记录跨Region的引用,避免全堆扫描。目标是在满足停顿时间(PauseTime)目标的前提下,最大化吞吐量。内存泄漏的常见场景及排查方法?常见场景:长生命周期对象持有短生命周期对象的引用(如静态集合存储临时对象)、未关闭的资源(如IO流、数据库连接)、监听器/回调未正确移除(如注册后未注销)。排查方法:使用JVM工具(如jmap提供堆转储文件,jhat或MAT分析)、Arthas查看对象实例数、代码审计(检查静态变量、资源释放逻辑)。Spring框架SpringIOC的实现原理?IOC(控制反转)通过容器管理对象的创建和依赖关系,对象的生命周期由容器控制。底层通过BeanFactory(基础容器)或ApplicationContext(扩展容器,支持事件、国际化等)实现,核心流程包括:读取配置(XML/注解)、解析Bean定义(BeanDefinition)、实例化Bean(反射或CGLIB)、属性注入(自动装配或显式注入)、执行初始化方法(如@PostConstruct)、注册到容器中。SpringAOP的底层实现?AOP(面向切面编程)通过动态代理实现,分为JDK动态代理(基于接口)和CGLIB代理(基于类,通过继承目标类提供子类)。JDK动态代理利用java.lang.reflect.Proxy,通过InvocationHandler拦截方法调用;CGLIB通过ASM修改字节码提供子类,重写父类方法。Spring默认对接口使用JDK代理,对类使用CGLIB(可通过配置强制CGLIB)。Bean的生命周期包含哪些阶段?Bean的生命周期包括:实例化(调用构造方法)→属性注入(@Autowired、setter注入)→初始化前(BeanPostProcessor的postProcessBeforeInitialization)→初始化(实现InitializingBean的afterPropertiesSet或@PostConstruct)→初始化后(BeanPostProcessor的postProcessAfterInitialization)→销毁前(实现DisposableBean的destroy或@PreDestroy)→销毁。SpringBoot自动配置的原理?SpringBoot通过@SpringBootApplication注解(包含@EnableAutoConfiguration)启用自动配置。自动配置类位于META-INF/spring.factories(或spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,JDK9+),通过@Conditional系列注解(如@ConditionalOnClass(类存在时生效)、@ConditionalOnMissingBean(无自定义Bean时生效))判断是否生效。开发者可通过perties覆盖默认配置。MyBatisMyBatis如何处理参数和结果集?参数处理:通过{param}(预编译,防SQL注入)或${param}(字符串拼接)获取参数值,{param}会被替换为?,由PreparedStatement设置参数;${param}直接替换为参数值,用于表名、列名等动态拼接(需手动校验防注入)。结果集处理:通过ResultMap将查询结果映射到Java对象,支持基本类型、复杂对象(association)、集合(collection)的嵌套映射,可配置懒加载(延迟加载关联对象)。MyBatis一级缓存和二级缓存的区别?一级缓存是SqlSession级别的缓存(默认开启),存储同一SqlSession中相同查询的结果,SqlSession关闭或执行增删改操作时失效。二级缓存是Mapper级别的缓存(需手动开启),存储同一命名空间(Mapper)中不同SqlSession的相同查询结果,需配置缓存实现(如Ehcache、Redis),并保证缓存对象可序列化。设计模式单例模式的双重检查锁定(DCL)为什么需要volatile?DCL的代码如下:```javapublicclassSingleton{privatestaticvolatileSingletoninstance;privateSingleton(){}publicstaticSingletongetInstance(){if(instance==null){synchronized(Singleton.class){if(instance==null){instance=newSingleton();//非原子操作}}}returninstance;}}```instance=newSingleton()实际分为三步:分配内存→初始化对象→将内存地址赋给instance。JVM可能指令重排为分配内存→赋地址→初始化。若线程A执行到赋地址但未初始化时,线程B判断instance不为null,直接返回未初始化的对象。volatile禁止指令重排,保证三步按顺序执行,避免此问题。工厂模式的分类及应用场景?工厂模式分为:简单工厂:通过一个工厂类根据参数创建不同产品,缺点是新增产品需修改工厂类(违反开闭原则)。工厂方法:定义工厂接口,每个产品由具体工厂创建(如日志框架,不同日志实现对应不同工厂),解决简单工厂的扩展性问题。抽象工厂:创建产品族(相关或依赖的产品集合),如跨数据库的DAO工厂(同时创建UserDAO和OrderDAO的MySQL/Oracle实现)。数据库与分布式MySQLInnoDB和MyISAM的区别?InnoDB支持事务(ACID)、行级锁、外键约束、聚簇索引(主键索引存储数据,辅助索引存储主键);MyISAM不支持事务,使用表级锁,索引为非聚簇索引(索引和数据分开存储)。InnoDB适合高并发、需要事务的场景(如订单系统),MyISAM适合读多写少、无事务需求的场景(如日志表)。如何优化慢查询?步骤:通过慢查询日志(slow_query_log)或EXPLAIN分析执行计划,查看type(最好为const,最差为AL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年郑州亚欧交通职业学院中单招综合素质考试题库带答案详解
- 2026年武汉城市职业学院单招职业技能测试题库附答案详解
- 2026年河北省保定市单招职业适应性测试题库参考答案详解
- 2026年苏州百年职业学院中单招职业技能测试题库及完整答案详解1套
- 2026年黑龙江交通职业技术学院单招职业适应性测试题库及参考答案详解1套
- 2026年泉州工艺美术职业学院单招职业适应性考试题库参考答案详解
- 2026年石家庄理工职业学院单招职业倾向性考试题库及参考答案详解
- 2026年青岛求实职业技术学院单招职业适应性测试题库带答案详解
- 2026年江苏省南通市单招职业适应性测试题库含答案详解
- 2026年江西机电职业技术学院单招职业技能考试题库附答案详解
- 2025年人工智能训练师(三级)职业技能鉴定理论考试题库(含答案)
- 2025北京八年级(上)期末语文汇编:名著阅读
- 小学美术教育活动设计
- 蜜雪冰城转让店协议合同
- 贷款项目代理协议书范本
- 低分子肝素钠抗凝治疗
- 重庆城市科技学院《电路分析基础》2023-2024学年第二学期期末试卷
- 2025年国家开放大学管理英语3作业答案
- 乳腺癌全程、全方位管理乳腺癌患者依从性及心理健康管理幻灯
- 2024-2025学年福建省三明市高二上册12月月考数学检测试题(附解析)
- 海运货物运输方案
评论
0/150
提交评论