版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年Java高频面试题及详细答案(真实面试版)一、Java基础核心面试题1.==和equals的区别是什么?答案:1、==是运算符,既可以比较基本数据类型,也可以比较引用数据类型。基本类型比较的是数值本身,引用类型比较的是对象的内存地址。2、equals是Object类的方法,默认情况下和==效果一致,比较对象地址。但String、Integer等包装类重写了该方法,重写后只比较对象内容,不比较地址。3、核心区别:基本类型只能用==;引用类型想要对比内容是否一致,必须用equals。2.String、StringBuilder、StringBuffer的区别?答案:1、String:字符串常量,底层是final修饰的字符数组,不可变。每次拼接、修改字符串都会生成新对象,效率低,适合少量字符串操作。2、StringBuilder:字符串变量,可变、线程不安全,效率高,单线程场景下字符串拼接、修改首选。3、StringBuffer:字符串变量,可变、线程安全,所有方法加了synchronized锁,多线程场景使用,效率低于StringBuilder。使用场景总结:少量操作用String;单线程大量拼接用StringBuilder;多线程大量拼接用StringBuffer。3.final、finally、finalize的区别?答案:1、final:修饰符。修饰变量表示常量,不可修改;修饰方法不可重写;修饰类不可继承。2、finally:异常处理关键字,配合try-catch使用。无论代码是否抛出异常,最终都会执行,常用于关闭流、释放资源。3、finalize:Object类的废弃方法,JVM垃圾回收前会调用该方法清理资源,执行时机不确定,现已废弃,不推荐使用。4.接口和抽象类的区别?答案:1、定义:抽象类用abstract修饰,接口用interface定义。2、继承:类只能单继承抽象类,可以多实现接口。3、成员变量:抽象类可以有普通变量、常量;接口默认只能是publicstaticfinal常量。4、方法:抽象类可以有普通方法、抽象方法、构造方法;JDK8后接口有默认方法、静态方法,JDK9支持私有方法,无构造方法。5、设计思想:抽象类是模板复用,接口是行为规范。5.基本数据类型和包装类的区别?自动装箱拆箱原理?答案:1、基本类型:8种(byte、short、int、long、float、double、char、boolean),存放在栈内存,无默认null值,效率高。2、包装类:基本类型的对象封装,存放在堆内存,默认值为null,支持泛型、对象操作。3、自动装箱:基本类型自动转为包装类,底层执行valueOf()方法;自动拆箱:包装类自动转为基本类型,底层执行xxxValue()方法。4、缓存机制:Integer、Short等包装类有缓存,Integer缓存范围-128~127,范围内对象复用,超出范围新建对象。二、Java集合面试题(高频必考)1.ArrayList和LinkedList的区别?答案:1、底层结构:ArrayList基于动态数组;LinkedList基于双向链表。2、查询效率:ArrayList支持随机访问,查询速度快;LinkedList只能遍历查询,速度慢。3、增删效率:ArrayList增删会触发数组拷贝、扩容,头尾以外位置增删慢;LinkedList只需修改节点指针,任意位置增删快。4、内存消耗:ArrayList会预留冗余容量,占用内存多;LinkedList每个节点存指针,内存碎片化更高。场景:查询多、增删少用ArrayList;频繁头尾增删、随机查询少用LinkedList。2.HashMap底层原理?JDK1.7和JDK1.8区别?答案:底层核心原理:HashMap基于数组+链表+红黑树实现,通过hash算法计算数组下标,解决哈希冲突,存储键值对。JDK1.7特点:1、底层:数组+单向链表,无红黑树;2、冲突解决:单纯链表头插法;3、线程不安全:并发扩容会出现链表循环、数据丢失。JDK1.8优化:1、底层新增红黑树,链表长度≥8且数组容量≥64时,链表转红黑树,查询效率大幅提升;2、链表改为尾插法,避免循环链表问题;3、优化hash算法,减少哈希冲突;4、扩容时机、阈值计算逻辑优化。3.HashMap和ConcurrentHashMap的区别?答案:1、线程安全:HashMap线程不安全,并发场景会数据覆盖、丢失;ConcurrentHashMap线程安全。2、锁机制:JDK1.8ConcurrentHashMap采用CAS+synchronized分段锁,只锁当前冲突链表/树节点,不锁整个数组,并发效率极高。3、null值:HashMap允许key、value为null;ConcurrentHashMap不允许key、value为null,防止空指针歧义。4、使用场景:单线程用HashMap;多线程并发存取用ConcurrentHashMap。4.HashSet底层原理?为什么元素不可重复?答案:1、HashSet底层直接封装HashMap,存储元素时,将元素作为HashMap的key,固定常量作为value。2、去重原理:添加元素时,先调用hashCode()计算哈希值定位下标,哈希值相同再调用equals()对比内容,两者都相同则判定元素重复,不存入;否则存入集合。3、无序、不重复,线程不安全。三、多线程与并发面试题1.线程和进程的区别?答案:1、进程:操作系统资源分配的最小单位,独立占用内存、CPU资源,进程间相互隔离,开销大。2、线程:CPU调度的最小单位,隶属于进程,共享进程的内存资源,线程间切换开销小。3、关系:一个进程至少包含一个线程;进程间通信复杂,线程间通信简单。2.synchronized和Lock的区别?答案:1、来源:synchronized是JVM原生关键字,底层依赖对象锁;Lock是Java接口(ReentrantLock实现类),代码层面实现锁。2、锁特性:synchronized是隐式锁,自动加锁、释放锁;Lock是显式锁,手动lock()加锁、unlock()释放锁。3、灵活性:Lock可实现超时锁、可中断锁、公平锁;synchronized只能是非公平锁,无法中断、超时。4、性能:低并发下两者性能接近;高并发下Lock性能更优。5、异常处理:synchronized异常自动释放锁;Lock必须在finally中手动释放锁,否则会死锁。3.volatile关键字的作用?能否保证线程安全?答案:1、两大核心作用:保证可见性,一个线程修改变量,其他线程立即感知最新值;禁止指令重排,避免JVM编译优化导致的代码执行顺序错乱。2、不能保证原子性,所以无法保证复合操作线程安全(如i++),只能保证单个变量读写安全。3、适用场景:状态标记、读写分离的简单变量。4.线程池核心参数及工作原理?答案:七大核心参数:核心线程数、最大线程数、空闲超时时间、时间单位、任务队列、线程工厂、拒绝策略。工作流程:1、提交任务,优先创建核心线程执行;2、核心线程已满,任务存入阻塞队列;3、队列已满,创建非核心线程执行任务;4、线程数达到最大值,触发拒绝策略。四种拒绝策略:直接抛出异常、丢弃最旧任务、丢弃当前任务、调用者线程执行任务。四、JVM面试题(2026重点)1.JVM内存区域划分及作用?答案:1、程序计数器:线程私有,记录当前线程执行的字节码行号,无内存溢出。2、虚拟机栈:线程私有,存储局部变量、方法栈帧,方法执行结束自动释放,会出现栈溢出。3、本地方法栈:线程私有,执行native本地方法。4、堆内存:线程共享,所有对象、数组存储区域,GC主要回收区域,分新生代、老年代。5、方法区(元空间):线程共享,存储类信息、常量、静态变量、编译后的代码,JDK1.8后由永久代改为元空间,使用本地内存。2.GC垃圾回收机制?MinorGC和FullGC区别?答案:JVM通过GC自动回收堆内存中无引用的废弃对象,避免内存泄漏。1、MinorGC:针对新生代回收,频率高、速度快,不会触发Stop-The-World长时间暂停。2、FullGC:针对整个堆内存(新生代+老年代+元空间),频率低、速度慢,暂停时间长,线上尽量避免。FullGC触发场景:老年代空间不足、方法区内存不足、显式调用System.gc()、MinorGC后晋升失败。3.常见的JVM调优参数及线上问题?答案:1、-Xms:初始堆内存;-Xmx:最大堆内存,线上一般设置两者相等,避免堆扩容震荡。2、-Xmn:新生代内存大小;-XX:SurvivorRatio:新生代分区比例。3、-XX:+UseG1GC:使用G1垃圾收集器,线上主流收集器,低延迟、高吞吐量。常见线上问题:内存溢出、内存泄漏、GC频繁、GC停顿时间过长、线程死锁。五、Spring核心面试题1.SpringIOC原理及作用?答案:IOC即控制反转,将对象的创建、管理、依赖注入权限从代码中交给Spring容器。核心原理:容器启动时扫描注解/配置文件,解析Bean定义,通过反射创建Bean对象,统一管理Bean生命周期,自动完成依赖注入。作用:解耦代码、统一管理对象、减少new对象冗余代码、方便后续AOP、事务等功能扩展。2.SpringAOP原理及应用场景?答案:AOP面向切面编程,基于动态代理机制,在不修改原有业务代码的前提下,对方法进行增强。底层代理规则:目标类有接口用JDK动态代理,无接口用CGLIB字节码代理。应用场景:统一日志记录、权限校验、事务控制、接口限流、性能监控、异常统一处理。3.Spring事务传播机制及隔离级别?答案:七大传播机制(高频4种):1、REQUIRED:默认,有事务加入,无事务新建;2、SUPPORTS:有事务加入,无事务非事务执行;3、REQUIRES_NEW:新建独立事务,挂起原有事务;4、NESTED:嵌套事务,依赖父事务,可单独回滚子事务。四大隔离级别:读未提交、读已提交、可重复读、串行化,解决脏读、不可重复读、幻读问题。六、MySQL数据库面试题1.InnoDB和MyISAM区别?答案:1、事务:InnoDB支持事务,MyISAM不支持;2、锁机制:InnoDB行锁+表锁,并发性能高;MyISAM只有表锁,并发差;3、外键:InnoDB支持外键,MyISAM不支持;4、崩溃恢复:InnoDB支持故障恢复,MyISAM崩溃易数据损坏;5、场景:InnoDB增删改查业务首选;MyISAM纯查询、静态数据场景。2.索引失效的常见场景?答案:1、like以%开头(%xxx);2、索引列参与运算、使用函数;3、类型不匹配,字符串不加引号、数值查字符串;4、or连接无索引字段;5、违反最左前缀原则;6、MySQL优化器判定全表扫描更快,主动放弃索引。3.慢查询优化思路?答案:1、开启慢查询日志,定位慢SQL;2、用explain分析执行计划,查看索引、扫描行数、是否全表扫描;3、优化索引,建立联合索引、避免索引失效;4、优化SQL语句,避免select*、避免大量in、子查询嵌套;5、大表分页优化、分库分表、读写分离;6、优化数据库参数、减少锁等待。七、Redis高频面试题1.Redis为什么快?答案:1、基于内存操作,无需磁盘IO,读写速度极快;2、单线程模型,避免线程切换、锁竞争开销;3、IO多路复用,单线程处理大量客户端连接;4、数据结构设计高效,底层封装简单高效的基础结构;5、协议简单,网络传输开销小。2.Redis缓存穿透、击穿、雪崩解决方案?答案:缓存穿透:查询不存在的数据,直达数据库。解决方案:布隆过滤器、空值缓存、接口限流。缓存击穿:热点key过期,大量请求打向数据库。解决方案:互斥锁、热点key永不过期、定时续期。缓存雪崩:大量key同时过期/Redis宕机,数据库压力骤增。解决方案:过期时间加随机值、Redis集群高可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产行业产业链深度研究报告
- 母婴用品市场风险分析及对策研究报告总结
- 2026工业软件云化迁移趋势及服务商转型路径分析
- 2026中亚农业无人机行业现状分析与发展策略评估规划研究
- 2026珠宝玉石之印度珠宝品牌市场国际化竞争力分析及加工工艺与品牌营销深度研究
- 2026中国金融科技行业发展动态及投资风险评估报告
- 2026美容食品行业市场健康趋势及消费行为与投融资策略报告
- 2026中国智能衣帽间系统制造行业市场发展现状供需评估及投资评估产业布局规划报告
- 2026重型机械制造供需形态与未来投资评估规划研究报告
- 2026直播电商行业消费行为分析及市场增长与资本运作研究报告
- 肝癌患者免疫治疗护理
- 低效用地招商开发
- 煤矿作业规程培训课件
- 2026年广东高考物理试卷及答案
- 杂交水稻原理课件
- 雨课堂在线学堂《项目管理概论》作业单元考核答案
- GB/T 46412-2025资产管理碳资产管理体系应用指南
- 生命早期一千天课件
- 物流营销与客户关系 课件 单元五 物流客户开发
- 大连恒力石化管理制度
- JG/T 169-2016建筑隔墙用轻质条板通用技术要求
评论
0/150
提交评论