版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BATJava高频面试题及详细答案(实战版)一、Java基础核心面试题1.谈谈==和equals的区别?答案:1)对于基本数据类型:==比较的是变量的数值本身,基本类型没有equals方法。2)对于引用数据类型:==比较的是对象的内存地址,判断是否是同一个对象;equals是用来比较对象内容是否相等。3)默认情况下,Object类的equals方法底层就是==,所以如果自定义类没有重写equals方法,默认和==效果一致。4)String、Integer等包装类都重写了equals方法,只比较内容不比较地址。常见场景:Stringa="123";Stringb=newString("123");//a==b为false,a.equals(b)为true2.String、StringBuilder、StringBuffer的区别?答案:1)String:不可变字符串,底层是final修饰的字节数组。每次拼接、修改字符串都会生成新对象,频繁操作字符串效率极低。适用于少量字符串定义、静态文本场景。2)StringBuilder:可变字符串,线程不安全,效率高。底层数组可自动扩容,适合单线程下频繁字符串拼接、修改。3)StringBuffer:可变字符串,线程安全,效率低。所有核心方法都加了synchronized锁,适合多线程环境下操作字符串。工作规范:日常开发单线程优先用StringBuilder,多线程场景用StringBuffer,杜绝频繁使用String拼接循环字符串。3.final、finally、finalize的区别?答案:1)final:修饰符,用于限制权限。final修饰的变量不可二次赋值、修饰的方法不可重写、修饰的类不可继承。2)finally:异常处理关键字,搭配try-catch使用。无论代码正常执行还是抛出异常,finally代码块一定会执行(除JVM退出场景),常用于关闭流、释放资源。3)finalize:Object类的废弃方法,JDK9之后废弃。原本用于GC回收对象前触发,用于资源回收,但执行时机不确定、无法保证调用,生产环境完全不用。4.接口和抽象类的区别?答案:1)定义修饰:抽象类用abstract修饰;接口用interface修饰。2)构造方法:抽象类有构造方法,用于子类初始化;接口没有构造方法。3)成员变量:抽象类可以有普通变量、常量;接口默认只能是publicstaticfinal常量。4)方法限制:JDK8前接口只有抽象方法,JDK8支持默认方法、静态方法,JDK9支持私有方法;抽象类可以有普通方法、抽象方法、静态方法。5)继承规则:类只能单继承抽象类;类可以多实现接口,接口可以多继承接口。6)设计思想:抽象类是模板复用,提取子类公共代码;接口是行为规范,定义统一功能标准。二、Java集合面试题(高频必考)1.ArrayList和LinkedList的区别?答案:1)底层结构:ArrayList基于动态数组;LinkedList基于双向链表。2)查询效率:ArrayList支持随机访问,通过下标查询速度极快;LinkedList只能从头节点遍历,查询效率低。3)增删效率:首尾节点增删,LinkedList效率高;中间位置增删,两者效率都差;ArrayList增删需要数组移位、扩容,效率偏低。4)内存占用:ArrayList会预留扩容空间,存在内存冗余;LinkedList每个节点存储数据和前后指针,单个元素占用内存更大。5)线程安全:两者都是线程不安全集合。业务选型:查询多、增删少用ArrayList;频繁首尾增删、极少查询用LinkedList(工作中99%场景用ArrayList)。2.HashMap的底层原理?JDK1.7和JDK1.8区别?答案:底层核心结构:HashMap基于「数组+链表+红黑树」实现,通过哈希算法定位元素存储位置,实现快速存取。JDK1.7底层:仅数组+单向链表,采用头插法插入元素,哈希冲突严重时链表过长,查询效率极低,且存在循环链表死循环问题。JDK1.8优化重点:1)结构升级:数组+单向链表+红黑树,链表长度超过8且数组容量大于64时,链表转为红黑树,将查询时间复杂度从O(n)优化为O(logn);2)插入方式改为尾插法,彻底解决循环链表问题;3)优化哈希扰动算法,减少哈希冲突概率;4)扩容时机、阈值计算逻辑优化,性能更稳定。核心参数:默认容量16,默认负载因子0.75,扩容阈值=容量*负载因子。3.HashMap为什么线程不安全?并发场景用什么替代?答案:1)线程不安全原因:多线程同时put数据时,会出现数据覆盖、丢失;JDK1.7扩容会产生循环链表,导致死循环、CPU飙升;JDK1.8虽解决死循环,但仍存在数据覆盖问题。2)并发替代方案:①HashTable:线程安全,但全局加锁,效率极低,基本废弃;②SynchronizedMap:通过同步锁保证安全,性能一般;③ConcurrentHashMap(推荐):分段锁思想(JDK1.7)+CAS+synchronized局部锁(JDK1.8),并发性能极高,是生产唯一首选。三、多线程与并发面试题1.线程和进程的区别?答案:1)进程:操作系统资源分配的最小单位,独立占用内存、CPU资源,进程之间相互隔离,切换开销大。2)线程:进程内的执行单元,CPU调度的最小单位,共享进程的内存资源,线程切换开销极小。3)一个进程包含多个线程,线程依托进程存在;进程崩溃互不影响,一个进程内某个线程异常,大概率导致整个进程崩溃。2.synchronized和Lock的区别?答案:1)底层实现:synchronized是JVM原生锁,基于对象头、监视器锁实现;Lock是Java代码层面的锁,基于AQS队列同步器实现。2)锁释放:synchronized自动加锁、自动释放锁,无需手动控制;Lock需要手动lock()加锁、unlock()解锁,必须在finally中释放,避免死锁。3)锁特性:synchronized是可重入、不可中断、非公平锁;Lock可实现可重入、可中断、可公平/非公平锁,功能更灵活。4)条件等待:synchronized只有wait/notify单一等待唤醒机制;Lock可以绑定多个Condition,精准唤醒指定线程,避免唤醒全部线程的资源浪费。选型:简单同步场景用synchronized,复杂并发、精准控制、高并发场景用ReentrantLock。3.什么是线程池?核心参数有哪些?答案:线程池是统一管理线程的容器,避免频繁创建、销毁线程的开销,提高系统并发处理能力,统一管控线程资源,防止无限创建线程导致OOM。ThreadPoolExecutor七大核心参数:1)核心线程数:常驻线程,即使空闲也不会销毁;2)最大线程数:线程池允许创建的最大线程数量;3)空闲超时时间:非核心线程空闲后的存活时间;4)时间单位:超时时间的单位;5)阻塞队列:存储等待执行的任务;6)线程工厂:创建线程的工厂,可自定义线程名称、优先级;7)拒绝策略:任务超出最大承载能力时的处理策略。工作中规范:禁止使用Executors快捷创建线程池,必须手动自定义ThreadPoolExecutor,避免队列无界、线程数无限导致的线上问题。四、JVM核心面试题1.JVM内存区域划分?各区域作用?答案:JVM运行时数据区分为5个区域,线程私有3个、线程共享2个:线程私有(随线程创建销毁):1)程序计数器:记录当前线程执行的字节码行号,是唯一无OOM的内存区域;2)虚拟机栈:存储局部变量、方法栈帧、操作数栈,方法执行完毕栈帧出栈,栈溢出会报StackOverflowError;3)本地方法栈:为JNI本地方法服务,功能和虚拟机栈类似。线程共享(随JVM启动销毁):1)堆内存:所有对象、数组的存储区域,GC主要回收区域,会发生OOM;2)方法区:存储类信息、常量、静态变量、即时编译代码,JDK1.8改为元空间,使用本地内存,基本避免方法区OOM。2.GC垃圾回收机制?MinorGC、FullGC区别?答案:GC是JVM自动回收堆内存中无效对象,释放内存空间的机制,无需手动操作。堆内存分为新生代、老年代。1)MinorGC(新生代GC):只回收新生代内存,触发频率高、速度快,停顿时间短,多数对象存活时间短,回收效率高。2)FullGC(全局GC):回收整个堆内存(新生代+老年代+元空间),触发频率低、速度极慢、STW(Stop-The-World)时间长,会导致系统卡顿,线上必须尽量避免。FullGC常见触发场景:老年代空间不足、方法区不足、显式调用System.gc()、MinorGC后晋升失败等。3.常见OOM原因及解决方案?答案:1)堆内存溢出:创建大量对象、大对象未释放、内存泄漏。解决方案:调整堆内存参数、排查集合未清空、静态集合常驻对象、避免循环引用。2)栈内存溢出:递归死循环、方法调用层级过深。解决方案:优化递归逻辑、调整栈内存大小。3)元空间溢出:动态生成大量类、频繁热部署。解决方案:调整元空间最大值。4)直接内存溢出:NIO缓冲区未释放。解决方案:手动释放直接内存资源。五、Spring核心面试题1.SpringIOC原理?答案:IOC即控制反转,核心是将对象的创建、管理、依赖注入权限交给Spring容器,摆脱代码主动new对象的硬编码。核心流程:1)容器启动,扫描项目注解/配置文件,解析Bean定义信息;2)将Bean的类信息、属性信息封装成BeanDefinition,注册到Bean工厂;3)容器启动完成前,提前初始化单例Bean,通过反射创建对象;4)自动完成依赖注入、初始化方法执行,后续业务直接从容器获取Bean使用。优势:解耦代码、统一管理对象、方便后续AOP、事务等功能扩展。2.SpringAOP原理及应用场景?答案:AOP即面向切面编程,基于动态代理实现,在不修改原有业务代码的前提下,对方法进行增强,实现公共逻辑复用。代理规则:目标类有接口用JDK动态代理,无接口用CGLIB字节码代理。常见应用场景:统一日志记录、统一权限校验、事务控制、接口限流、性能耗时统计、异常统一处理。3.Spring事务传播机制及隔离级别?答案:7种传播机制(重点常用):1)REQUIRED:默认级别,有事务加入当前事务,无事务新建事务;2)SUPPORTS:有事务就加入,无事务以非事务运行;3)REQUIRES_NEW:无论是否有事务,都新建独立事务,暂停原有事务;4)NESTED:嵌套事务,依赖父事务,父事务回滚子事务必须回滚,子事务回滚不影响父事务。4种隔离级别:1)READ_UNCOMMITTED:读未提交,存在脏读、不可重复读、幻读;2)READ_COMMITTED:读已提交(默认),解决脏读,存在不可重复读、幻读;3)REPEATABLE_READ:可重复读,解决脏读、不可重复读,存在幻读(MySQL默认);4)SERIALIZABLE:串行化,解决所有并发问题,性能最低。六、MySQL数据库面试题1.InnoDB和MyISAM区别?答案:1)事务支持:InnoDB支持事务、ACID;MyISAM不支持事务。2)锁机制:InnoDB支持行锁、表锁;MyISAM只有表锁,并发写入极差。3)并发能力:InnoDB读写并发高;MyISAM读多写少可用,写入阻塞所有读写。4)崩溃恢复:InnoDB支持事务日志,崩溃可恢复数据;MyISAM崩溃易数据损坏。5)外键:InnoDB支持外键;MyISAM不支持。生产选型:互联网项目全部使用InnoDB,MyISAM基本淘汰。2.索引失效场景有哪些?答案:1)like以%开头,如%xxx;2)索引列使用函数、运算、类型转换;3)or连接的字段有非索引列;4)违背最左匹配原则(联合索引);5)字段隐式类型转换,字符串和数字对比;6)MySQL优化器判断全表扫描比索引更快,主动放弃索引。3.什么是幻读、脏读、不可重复读?如何解决?答案:1)脏读:一个事务读取到另一个事务未提交的脏数据,数据不可靠;2)不可重复读:同一事务内,两次查询同一数据,结果被其他事务修改,前后不一致;3)幻读:同一事务内,两次范围查询,其他事务新增/删除数据,导致查询总数不一致。解决方式:READ_COMMITTED解决脏读;REPEATABLE_READ解决不可重复读;SERIALIZABLE解决幻读。MySQLInnoDB通过MVCC机制在可重复读级别规避大部分幻读问题。七、Redis高频面试题1.Redis为什么快?答案:1)完全基于内存操作,避免磁盘IO开销;2)数据结构简单,底层优化
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于项目开发进度的季度汇报函7篇范文
- 教师助教绩效评定表
- 影视创意影响力评估表
- 网络维护质量与效率绩效评价表
- 合同续签条款沟通联系函7篇范文
- 浙江省G5联盟2025-2026学年高一上学期11月期中联考生物试题(含答案)
- 湖南省岳阳市云溪区2025-2026学年八年级上学期期中生物试题(含答案)
- 环保技术研发项目技术转化绩效评估表
- 广东省汕尾市海丰县2025-2026学年七年级上学期期中生物学试题(含答案)
- 互联网产品经理产品优化与市场推广绩效考评表
- 小学道德与法治新部编版五年级上册全册教案(2026秋)
- 秋冬季老年人防病保健
- 反诈知识竞赛题库及答案(共286题)
- 建筑电气线路绝缘电阻、接地电阻检测技术规程
- 油漆购销合同范本
- 浙江省城镇净水厂安全运行管理规范
- DZ∕T 0305-2017 天然场音频大地电磁法技术规程(正式版)
- 酒店客房样板间装修验收记录表
- 设计速写(室内设计和环境艺术设计专业)全套教学课件
- 《孙周兴:艺术哲学美是如何诞生的》2021-2022超星尔雅课后测试答案
- 湖南单招信息技术基础知识题库及答案
评论
0/150
提交评论