版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java开发高频面试题及详细答案(实战版)一、Java基础核心面试题1、JDK、JRE、JVM的区别与联系?答案:三者是层层包含的关系,范围从大到小:JDK>JRE>JVM。1、JVM:Java虚拟机,是Java程序运行的核心环境,负责加载class文件、解释/编译代码、内存管理、垃圾回收。只负责运行,不包含编译工具。2、JRE:Java运行环境,包含JVM+Java核心类库(常用的基础工具类)。只用于运行Java程序,普通用户部署项目只需要安装JRE。3、JDK:Java开发工具包,包含JRE+开发编译工具(javac编译、java运行、jar打包等)。开发人员必须安装JDK,用于编写、编译、调试代码。核心总结:JVM保障Java跨平台,JRE保障程序运行,JDK保障程序开发。2、==和equals()的区别?答案:1、==是运算符:-基本数据类型:比较的是变量的数值是否相等;-引用数据类型:比较的是对象的内存地址是否相同(是否为同一个对象)。2、equals()是Object类的方法:-原生Object的equals()方法底层就是==,默认比较地址;-String、Integer等包装类重写了equals(),重写后只比较内容值,不比较地址。实战场景:日常开发中,字符串对比必须用equals(),基本类型对比用==。3、String、StringBuilder、StringBuffer的区别?答案:1、String:不可变字符串,底层是final修饰的字符数组。每次拼接、修改字符串都会生成新对象,频繁操作会产生大量垃圾对象,效率最低。适合少量字符串定义、静态文本。2、StringBuffer:可变字符串,线程安全(所有方法加了synchronized锁),并发场景下不会出现数据错乱,但加锁会带来性能损耗,效率中等。适合多线程下频繁字符串拼接。3、StringBuilder:可变字符串,线程不安全,无锁,执行效率最高。适合单线程环境下大量字符串拼接,是日常开发最常用的类。核心结论:单线程用StringBuilder,多线程用StringBuffer,固定文本用String。4、final、finally、finalize的区别?答案:1、final:修饰符,用于限制变量、方法、类。final变量不可二次赋值,final方法不可重写,final类不可被继承。2、finally:异常处理关键字,搭配try-catch使用。无论代码是否抛出异常,finally中的代码一定会执行(除了System.exit(0)终止程序),主要用于释放资源、关闭流、关闭连接。3、finalize:Object类的废弃方法,JVM垃圾回收前会调用该方法,用于对象资源回收。该方法执行时机不确定、无法保证调用,现在开发中完全不推荐使用,已经被淘汰。5、接口和抽象类的区别?答案:1、定义与修饰:抽象类用abstract修饰,接口用interface修饰;抽象类可以有构造方法,接口无构造方法。2、成员变量:抽象类可以有普通变量、常量;接口默认只能是publicstaticfinal常量(JDK8之前)。3、方法:抽象类可以有抽象方法、普通实例方法、静态方法;JDK8后接口支持默认方法、静态方法,JDK9支持私有方法。4、继承规则:类只能单继承抽象类,可以多实现接口。5、设计思想:抽象类是模板复用,抽取子类通用属性和行为;接口是行为规范,定义统一的功能标准。二、Java集合面试题1、ArrayList和LinkedList的区别?答案:1、底层结构:ArrayList基于动态数组;LinkedList基于双向链表。2、查询效率:ArrayList支持随机访问,通过下标直接定位元素,查询速度极快;LinkedList必须从头节点遍历查找,查询效率低。3、增删效率:ArrayList增删元素需要移动数组元素、扩容,末尾增删效率高,中间增删效率低;LinkedList只需要修改节点指针,无需移动元素,中间、首尾增删效率高。4、内存占用:ArrayList会预留冗余容量,存在内存浪费;LinkedList每个节点存储数据和前后指针,单个元素内存占用更大。实战选择:查询多、末尾增删多用ArrayList;中间频繁增删多用LinkedList。2、HashMap的底层原理?JDK1.7和1.8的区别?答案:底层核心原理:HashMap基于哈希表实现,核心是「数组+链表+红黑树」,通过hash算法计算key的索引位置,实现快速存取。JDK1.7与1.8核心区别:1、数据结构:1.7是「数组+单向链表」;1.8新增红黑树,结构为「数组+单向链表+红黑树」。2、哈希冲突优化:1.7链表过长查询效率极低;1.8当链表长度>8、数组容量>64时,链表转为红黑树,大幅提升查询速度。3、插入方式:1.7是头插法,多线程环境下容易出现环形链表死循环;1.8改为尾插法,规避了环形链表问题。4、扩容机制:1.7扩容需要重新计算所有元素hash位置;1.8优化扩容逻辑,部分元素无需重算hash,直接高低位迁移。补充:HashMap线程不安全,并发场景推荐使用ConcurrentHashMap。3、HashMap的key可以为null吗?为什么?答案:HashMap的key允许一个null键,value可以多个null。原因:当key为null时,底层会固定将元素存入数组下标0的位置,不会执行hash计算,所以可以存储。后续再存入nullkey时,会覆盖原有value。对比:Hashtable的key和value都不允许为null,直接报错空指针。4、ConcurrentHashMap线程安全原理?答案:JDK1.8的ConcurrentHashMap放弃了分段锁,采用CAS+synchronized+红黑树/链表实现线程安全。1、无冲突时:通过CAS自旋赋值,无锁操作,性能高;2、发生哈希冲突时:对数组当前桶的头节点加synchronized锁,只锁定当前位置元素,不锁定整个数组,锁粒度极小;3、红黑树节点使用专门的锁机制,保证树结构修改安全。相比Hashtable的全局锁,ConcurrentHashMap并发性能大幅提升,是并发场景首选Map集合。三、多线程面试题1、线程和进程的区别?答案:1、进程:操作系统资源分配的最小单位,每个进程独立占用内存、CPU资源,进程之间相互隔离,切换开销大。2、线程:CPU调度的最小单位,是进程的子集,一个进程包含多个线程,线程共享进程的内存资源,线程切换开销极小。3、核心特点:进程独立不共享资源;线程共享堆、方法区资源,独有栈内存。4、适用场景:进程适合独立程序运行,线程适合任务并行处理,提升程序效率。2、synchronized和Lock的区别?答案:1、锁类型:synchronized是内置锁,JVM层面实现;Lock是显式锁,代码层面实现(接口,常用ReentrantLock)。2、加锁解锁:synchronized自动加锁、自动释放锁,无需手动控制;Lock需要手动lock()加锁、unlock()解锁,必须在finally中释放,避免死锁。3、锁特性:synchronized不可中断、只能非公平锁;Lock支持可中断锁、超时锁、公平锁、读写锁。4、性能:低并发下两者性能相近,高并发下Lock性能更优,扩展性更强。实战选择:简单同步场景用synchronized,复杂并发、需要灵活控制锁场景用ReentrantLock。3、线程的生命周期有哪些状态?答案:Java线程一共5种核心状态:1、新建(NEW):创建线程对象,未调用start()方法;2、就绪(RUNNABLE):调用start(),等待CPU调度执行;3、运行(RUNNING):CPU分配时间片,线程正在执行代码;5、终止(TERMINATED):线程代码执行完毕或异常终止,生命周期结束。4、volatile关键字的作用?答案:volatile是轻量级同步关键字,核心两大作用:1、保证可见性:一个线程修改变量值,其他线程立刻可见,避免变量缓存导致数据不一致;2、禁止指令重排:防止JVM、CPU优化代码执行顺序,避免并发场景逻辑错乱。重点短板:volatile不保证原子性,无法解决i++这类复合操作的线程安全问题,需要配合锁使用。四、JVM面试题1、JVM内存区域划分?答案:JVM运行时数据区分为5个区域,线程私有3个、线程共享2个:线程私有(随线程创建销毁):1、程序计数器:记录当前线程执行的字节码行号,唯一无OOM的内存区域;2、虚拟机栈:存储局部变量、方法栈帧,方法调用与执行,栈溢出报错StackOverflowError;3、本地方法栈:执行native本地方法,功能和虚拟机栈类似。线程共享(随JVM启动销毁):1、堆内存:所有对象、数组的存储区域,垃圾回收的核心区域,容易发生OOM;2、方法区:存储类信息、常量、静态变量、即时编译代码(JDK8后改为元空间,使用本地内存)。2、垃圾回收的对象判定方式?答案:JVM采用可达性分析算法判定垃圾对象,替代了传统的引用计数法。1、核心逻辑:以GC根对象(虚拟机栈变量、静态变量、本地方法变量等)为起点遍历,能遍历到的对象是存活对象,无法遍历到的对象判定为垃圾对象,可被回收。2、为什么不用引用计数:引用计数无法解决对象循环引用问题,会导致垃圾无法回收,造成内存泄漏。3、MinorGC、MajorGC、FullGC的区别?答案:1、MinorGC:新生代垃圾回收,频率高、速度快,不会停顿老年代,日常频繁触发;2、MajorGC:老年代垃圾回收,频率低、速度慢,耗时远高于新生代GC;3、FullGC:全局垃圾回收,回收整个堆内存(新生代+老年代+元空间),会造成长时间STW(程序暂停),线上项目必须尽量避免。触发场景:老年代空间不足、显式调用System.gc()、MinorGC后晋升失败,都会触发FullGC。五、Spring核心面试题1、SpringIOC原理?答案:IOC即控制反转,核心是把对象的创建、管理、依赖注入权限交给Spring容器,摆脱代码主动new对象的耦合。执行流程:1、容器启动,扫描项目注解/配置文件,识别需要托管的Bean;2、通过反射创建Bean实例,初始化对象;3、自动完成依赖注入(DI),管理Bean的生命周期;4、程序使用时直接从容器获取Bean,无需手动创建。核心优势:解耦代码、统一管理对象、方便后续AOP扩展、事务管理。2、SpringAOP的原理和应用场景?答案:AOP即面向切面编程,核心是在不修改原有业务代码的前提下,对方法进行增强,基于动态代理实现。底层实现:1、目标类有接口:使用JDK动态代理;2、目标类无接口:使用CGLIB字节码代理。常用场景:统一日志记录、权限校验、事务控制、接口限流、性能监控、异常统一处理。3、SpringBean的生命周期?答案:1、实例化:Spring通过反射创建Bean对象;2、属性填充:自动注入依赖属性,完成赋值;3、前置处理:执行Bean后置处理器的前置方法;4、初始化:执行InitializingBean初始化方法、自定义init方法;5、后置处理:执行Bean后置处理器的后置方法;6、销毁:容器关闭时,执行DisposableBean销毁方法、自定义destroy方法。4、Spring事务传播机制有哪些?常用的是?答案:Spring共7种事务传播机制,日常开发最常用3种:1、REQUIRED(默认):当前有事务就加入,没有就新建事务,最常用;2、SUPPORTS:当前有事务就加入,没有就非事务运行;3、REQUIRES_NEW:无论当前是否有事务,都新建一个独立事务,挂起原有事务;4、其他:NOT_SUPPORTED、MANDATORY、NEVER、NESTED,业务场景较少使用。高频坑点:Spring事务基于AOP动态代理,同类内部方法调用、非public方法事务会失效。六、MySQL数据库面试题1、InnoDB和MyISAM的区别?答案:1、事务支持:InnoDB支持事务、ACID特性;MyISAM不支持事务。2、锁机制:InnoDB支持行锁、表锁,并发性能高;MyISAM只有表锁,并发读写冲突严重。3、外键:InnoDB支持外键约束;MyISAM不支持。4、崩溃恢复:InnoDB支持故障自动恢复;MyISAM崩溃容易数据损坏。5、查询性能:MyISAM简单查询速度略快,但不支持并发。实战选择:互联网项目全部使用InnoDB,MyISAM基本淘汰。2、MySQL索引失效的常见场景?答案:1、索引列使用函数、运算、类型转换;2、like查询以%开头(%xxx),前置模糊匹配失效;3、or连接的字段有未建索引的列;4、复合索引不遵循最左前缀原则;5、字段隐式类型转换(字符串和数字对比);6、MySQL优化器判断全表扫描比索引更快,主动放弃索引。3、事务四大隔离级别及问题?答案:1、读未提交:最低级别,可读取未提交数据,存在脏读、不可重复读、幻读;2、读已提交(MySQL默认):只能读取已提交数据,解决脏读,存在不可重复读、幻读;3、可重复读:保证同一事务多次查询结果一致,解决脏读、不可重复读,存在幻读;4、串行化:最高级别,事务串行执行,解决所有并发问题,性能极低,基本不用。问题解释:脏读(读未提交数据)、不可重复读(同一事务多次查询结果不同)、幻读(其他事务新增/删除数据)。七、Redis高频面试题1、Redis为什么快?答案:1、基于内存操作,无需磁盘IO,读写速度远超数据库;2、单线程模型,避免多线程锁竞争、线程切换开销;3、IO多路复用,单线程处理大量客户端连接;4、数据结构简单,底层优化极致,操作效率高;5、避免多余内存拷贝,使用缓冲区优化读写。2、Redis缓存穿透、击穿、雪崩解决方案?答案:1、缓存穿透:查询不存在的数据,直接打穿到数据库。解决方案:布隆过滤器、空值缓存、接口校验拦截。2、缓存击穿:热点key过期,瞬间大量请求打到数据库。解决方案:互斥锁、热点key永不过期、定时预热刷新。3、缓存雪崩:大量key同时过期/Redis宕机,大量请求压垮数据库。解决方案:过期时间加随机值、搭建Redis集群、多级缓存、服务熔断降级。八、实战手写代码面试题1、手写单例模式(双重校验锁)答案:java
publicclassSingleton{
//volatile禁止指令重排,保证线程安全
privatestaticvolatileSingletoninstance;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年锦泰财产保险股份有限公司人员招聘笔试备考题库及详细答案解析
- 2026年建筑用木料及木材组件加工行业产业洞察报告及未来五至十年需求升级与结构演变
- 2026年华阳新材料科技集团有限公司人员招聘考试备考题库及详细答案解析
- 2026年宁夏联通人员招聘笔试参考试题及详细答案解析
- 2026年蛋品加工行业市场前景报告及未来五至十年产业链安全与韧性提升
- 2026年美白行业洞察报告及未来五至十年发展趋势报告
- 四年级英语上册单元综合能力测评卷复习试卷
- 色彩渐变与扁平化设计风格试题及答案
- 2026年飞行器制造技术(飞行器零部件加工)试题及答案
- 初中语文八年级下册《子衿》诵读教学设计
- 长征胜利纪念日综合实践活动课件
- DB65T5067-2026村庄规划编制技术规程
- 2026年全国保密教育线上培训考试试题库(全优)附答案详解
- 辛亥革命纪念日红色记忆课件
- 旋风分离器设计计算表-自动计算版(带公式自动计算版)
- 胸腔闭式引流管的护理
- 《第3课 星际旅行》课件2026-207学年人教版四年级上册美术
- 2026南宁市青秀区农业农村局招聘1人笔试模拟试题及答案详解
- 26版一上语文全册每课一练(含答案)
- 2026年共青团团校入团知识点题库附答案
- CSCO原发性肝癌诊疗指南2026
评论
0/150
提交评论