版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2年工作经验Java高频面试题及详细答案(实战向)本套面试题针对2年Java开发经验岗位定制,剔除冷门理论,聚焦日常开发、项目落地、排查问题高频考点,答案贴合企业实际面试话术,简洁务实、无冗余书面化内容,适配社招初、中级Java岗位面试。一、Java基础核心(高频必问)1、==和equals的区别是什么?这是日常开发最常用的判断方式,核心区别分基本类型和引用类型:1)基本数据类型:==比较的是数值本身,基本类型没有equals方法;2)引用数据类型:==比较的是对象的内存地址,判断是不是同一个对象;3)equals是Object类的方法,默认和==逻辑一致,比较内存地址。但像String、Integer这些常用类,都重写了equals方法,重写后只比较对象的内容值,不比较地址。实战总结:日常判断字符串、包装类内容是否一致,一律用equals;判断是否是同一个对象,用==。2、String、StringBuilder、StringBuffer的区别?项目中怎么选用?1)String:字符串常量,不可变。每次拼接、修改字符串都会生成新的String对象,频繁操作会产生大量无用对象,浪费内存;2)StringBuffer:可变字符串,线程安全,所有方法都加了同步锁,执行效率低;3)StringBuilder:可变字符串,线程不安全,无锁机制,执行效率最高。项目选型:-少量字符串定义、无需修改的场景:直接用String;-单线程下频繁拼接、修改字符串:优先用StringBuilder(99%的业务场景);-多线程并发操作字符串的场景:用StringBuffer(业务中极少用到)。3、final、finally、finalize的区别?三个单词只是形似,功能完全无关:1)final:修饰符,用于定义常量、禁止重写和继承。修饰变量则变量不可修改,修饰方法则方法不能重写,修饰类则类不能被继承;2)finally:异常处理关键字,搭配try-catch使用。无论代码是否抛出异常,finally中的代码一定会执行,常用于关闭流、释放数据库连接等资源回收操作;3)finalize:Object类的废弃方法,JVM垃圾回收前会调用该方法,用于对象资源释放。日常开发完全不用,Java9之后已被废弃,不用刻意使用。4、接口和抽象类的区别?实际项目怎么用?1)定义区别:-抽象类:用abstract修饰,可以有构造方法、普通成员变量、普通方法、抽象方法,单继承;-接口:用interface修饰,JDK8之前只有抽象方法和常量,JDK8支持默认方法、静态方法,JDK9支持私有方法,多实现,无构造方法。2)项目实战用法:-接口:用于定义行为规范,统一业务接口标准,比如业务服务接口、DAO层接口,面向接口编程解耦;-抽象类:用于抽取公共代码,减少重复开发,多个子类有通用逻辑时,将公共代码抽入抽象类,子类只实现差异化逻辑。5、Java中的异常体系?受检异常和非受检异常区别?Java异常顶层父类是Throwable,分为Error和Exception:1)Error:系统级严重错误,比如内存溢出、栈溢出,程序无法处理,直接崩溃,无需捕获;2)Exception:业务可处理异常,分为受检异常和非受检异常;-受检异常(编译期异常):继承自Exception,比如IO异常、SQL异常,编译时必须捕获或抛出,否则代码报错;-非受检异常(运行时异常):继承自RuntimeException,比如空指针、数组越界、类型转换异常,编译不报错,运行时才会触发,日常开发最多。实战规范:业务中优先捕获具体异常,不直接捕获Exception,避免掩盖未知错误。二、集合框架(面试核心、项目常用)1、ArrayList和LinkedList的区别?怎么选型?1)底层结构:ArrayList基于动态数组,LinkedList基于双向链表;2)查询效率:ArrayList支持随机访问,查询速度极快;LinkedList只能遍历查询,速度慢;3)增删效率:ArrayList增删会涉及数组扩容、元素移位,效率低;LinkedList只修改节点指针,增删效率高;4)内存占用:ArrayList会预留扩容空间,存在内存冗余;LinkedList每个节点存储前后指针,单个元素占用内存更大。项目选型:查询多、增删少用ArrayList(95%场景);频繁头尾增删、极少查询用LinkedList(几乎不用)。2、HashMap的底层原理?JDK1.8做了哪些优化?HashMap是基于数组+链表+红黑树实现的键值对存储结构,核心是哈希寻址存储数据。核心流程:通过key的hash值计算数组下标,下标位置无元素则直接存入;有元素则发生哈希冲突,冲突后形成链表;链表长度超过8且数组容量大于64,链表转为红黑树,提升查询效率。JDK1.8关键优化:1)底层由「数组+链表」改为「数组+链表+红黑树」,解决链表过长查询慢的问题;2)优化hash算法,减少哈希冲突概率;3)插入方式由头插法改为尾插法,彻底解决多线程扩容导致的循环链表死循环问题;4)优化扩容机制,数据迁移效率更高。3、HashMap为什么线程不安全?并发场景用什么替代?HashMap线程不安全体现在两个核心场景:1)多线程同时put数据,可能出现数据覆盖,导致数据丢失;2)JDK1.7扩容会产生循环链表,引发死循环、CPU飙升,1.8解决了死循环,但仍有数据覆盖问题。并发替代方案:1)ConcurrentHashMap:分段锁机制(1.7)、CAS+Synchronized(1.8),并发效率高,业务首选;2)Hashtable:全表锁,并发效率极低,基本废弃不用。4、HashSet的底层原理?HashSet底层直接基于HashMap实现。HashSet存储的元素作为HashMap的key,value统一是一个固定的空Object对象。所以HashSet去重原理和HashMapkey去重一致:先对比hash值,再通过equals方法判断内容是否一致,一致则判定为重复元素,无法存入。三、多线程与并发(2年经验重点考察)1、线程和进程的区别?1)进程:操作系统资源分配的最小单位,独立占用内存、CPU资源,进程之间相互隔离,互不干扰;2)线程:进程内的执行单元,CPU调度的最小单位,一个进程包含多个线程,线程共享进程的内存资源(堆、方法区),仅私有栈独立;3)开销:进程创建、销毁开销极大,线程开销极小;4)稳定性:一个进程崩溃不影响其他进程,一个线程崩溃会导致整个进程崩溃。2、synchronized和Lock的区别?两者都是用于解决线程并发安全的锁机制,核心区别:1)出身不同:synchronized是Java内置关键字,底层JVM实现;Lock是Java提供的接口(JUC),代码层面实现锁;2)锁机制:synchronized是自动加锁、自动释放锁,无需手动操作;Lock需要手动lock()加锁、unlock()释放锁,必须在finally中释放,避免死锁;3)灵活性:Lock功能更强,支持可中断锁、超时锁、读写锁,适合复杂并发场景;synchronized功能简单,适合普通同步场景;4)性能:JDK1.6之后synchronized做了大量优化(偏向锁、轻量级锁、重量级锁),性能和Lock基本持平,低并发下更优。实战选型:简单同步逻辑用synchronized,复杂并发、读写分离场景用ReentrantLock。3、volatile关键字的作用?能保证线程安全吗?volatile核心两个作用:1)保证变量可见性:一个线程修改变量值,其他线程能立即感知到最新值,避免缓存过期;2)禁止指令重排序:防止JVM为了优化效率打乱代码执行顺序,解决单例模式双重锁的重排序问题。不能保证线程安全!volatile不保证原子性,像i++、变量累加这类复合操作,多线程下依然会出现数据错乱,需要配合锁使用。4、线程池的核心参数?为什么不推荐手动newThread?线程池核心7大参数(重点记5个常用):1)核心线程数:常驻线程,即使空闲也不会销毁;2)最大线程数:线程池允许的最大线程数量;3)空闲超时时间:非核心线程空闲多久后销毁;4)任务队列:存放等待执行的任务;5)拒绝策略:线程和队列都满了,处理新任务的策略。不推荐手动newThread的原因:1)频繁创建、销毁线程开销极大,浪费系统资源;2)无限制创建线程,会导致线程数量过多,CPU上下文切换频繁,系统卡顿甚至宕机;3)线程池可以统一管理线程、控制并发数、复用线程,提升系统稳定性。四、JVM基础(初级面试必问基础)1、JVM内存区域划分?各区域作用?JVM运行时数据区分为5个部分,日常排查问题重点关注堆和栈:1)程序计数器:线程私有,记录当前线程执行的行号,唯一无OOM的区域;2)虚拟机栈:线程私有,存储局部变量、方法栈帧,方法调用即入栈,执行结束出栈,栈深过大会栈溢出(StackOverflowError);3)本地方法栈:线程私有,服务于native本地方法;4)堆内存:线程共享,所有对象、数组都在堆中分配内存,是垃圾回收的核心区域,内存不足会报OOM;5)方法区:线程共享,存储类信息、常量、静态变量、编译后的代码。2、垃圾回收的基本思路?GC回收哪些区域?GC核心是回收无引用的无效对象,释放内存空间。1)主要回收区域:堆内存(99%的垃圾)、方法区;2)不回收区域:虚拟机栈、本地方法栈、程序计数器,这些区域线程私有,方法结束自动释放资源;3)回收核心逻辑:通过引用计数、可达性分析判断对象是否存活,无效对象直接回收。3、常见的OOM原因及排查思路?工作中最常见的3种OOM:1)堆内存溢出:创建大量对象、集合未清空、内存泄漏导致,比如循环创建对象、静态集合无限累加数据;2)栈内存溢出:方法递归死循环、方法嵌套过深;3)元空间溢出:加载过多类、动态生成类过多。排查思路:查看异常日志、导出堆快照、分析内存占用最高的对象、定位代码中未释放的资源和集合。五、Spring核心(业务开发重中之重)1、Spring的核心思想?IOC和AOP是什么?Spring两大核心:IOC控制反转、AOP面向切面编程1)IOC控制反转:把对象的创建、管理、依赖注入交给Spring容器,不再由开发者手动new对象。核心是解耦,降低代码依赖度,方便维护和测试;2)AOP面向切面:在不修改原有业务代码的前提下,对方法进行增强。常用于日志记录、事务控制、权限校验、接口限流等通用功能,抽离公共逻辑,避免代码冗余。2、SpringBean的生命周期?完整核心流程(日常面试记核心步骤即可):1)实例化:Spring容器通过反射创建Bean对象;2)属性填充:完成依赖注入(@Autowired等);3)初始化:执行前置处理、初始化方法(init-method)、后置处理;4)销毁:容器关闭时,执行Bean的销毁方法(destroy-method);5)最终进入容器就绪状态,供业务调用。3、Spring事务的传播机制?常用的有哪些?Spring事务共7种传播机制,开发中只用3种核心:1)REQUIRED(默认):有事务就加入,无事务就新建,最常用,适配绝大多数业务增删改;2)SUPPORTS:有事务就加入,无事务就非事务运行,适合查询接口;3)REQUIRES_NEW:新建独立事务,暂停原有事务,适合日志记录、异步记录等独立业务,不受主事务回滚影响。4、Spring事务失效的常见场景?工作中高频踩坑场景:1)方法不是public修饰,事务无法生效;2)同类中方法内部调用(A方法无事务调用本类有事务的B方法),AOP无法拦截,事务失效;3)异常类型错误:默认只捕获RuntimeException,普通Exception不回滚,需要手动配置回滚规则;4)手动捕获异常未抛出,Spring感知不到异常,不会回滚;5)数据库引擎不支持事务(MyISAM不支持,InnoDB支持)。六、MySQL数据库(CRUD开发核心)1、InnoDB和MyISAM的区别?1)事务支持:InnoDB支持事务,MyISAM不支持;2)锁机制:InnoDB支持行锁、表锁,并发性能高;MyISAM只有表锁,并发差;3)崩溃恢复:InnoDB支持事务日志,崩溃可恢复数据;MyISAM崩溃易数据损坏;4)外键:InnoDB支持外键,MyISAM不支持;选型:现在业务库全部使用InnoDB,MyISAM基本淘汰。2、索引的底层原理?B+树索引优势?MySQL索引底层基于B+树实现。B+树核心优势:1)所有数据都在叶子节点,非叶子节点只存索引键,内存占用小,查询磁盘IO次数少;2)叶子节点有序双向链表,范围查询、排序、分页效率极高;3)树的层级低,百万级数据树高基本3-4层,查询速度稳定。3、什么是索引失效?常见失效场景?索引失效就是查询时不走索引,全表扫描,导致接口变慢,高频场景:1)索引列使用函数、运算、类型转换;2)like以%开头(%xxx),前缀模糊查询失效;3)or连接的字段有一个无索引;4)违背最左匹配原则(联合索引);5)数据库判断全表扫描比索引更快,自动放弃索引。4、事务的四大特性ACID?1)原子性:事务要么全部成功,要么
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026临床医学期末复习-毕业综合考试(本临床教改)历年题库含答案详解
- 2026中药购销员-理论知识考试历年参考题库含答案详解
- 2026中级卫生职称-主治医师-肿瘤外科学(中级)代码:342历年参考题库含答案详解
- 2026中医药适宜技术-营养师-临床营养师历年参考题库含答案详解
- 2026不动产登记代理人-不动产登记代理实务考试历年参考题库含答案详解
- 2026上海市住院医师规范化培训结业理论考核(临床病理科)历年参考题库含答案详解
- 2026一级造价工程师-建设工程造价管理考试历年参考题库含答案详解
- 2026汽车制造产业前景预测与战略布局发展研究报告
- 2026年10月高等数学(工专)自考模拟试卷B(含逐题答案解析)
- 2026农业科技园区规划及产业优化与资本联动研究报告
- 2026年档案馆行业分析报告及未来五至十年竞争格局分析
- 2026年秋季道德与法治五年级上知识点
- 上海市政府采购评审专家试题库及答案
- 2026直播电商主播人才培养体系与内容创新趋势分析报告
- 2026中国资源循环集团有限公司春季校园招聘备考题库【含答案详解】
- 新一届人大代表履职课件
- 《伤逝》鲁迅大学语文教案(2025-2026学年)
- 浙江精诚联盟2025-2026学年高二上学期10月联考生物(含答案)
- 2025年教科版新教材科学三年级上册第二单元《水》教案设计
- 预防接种培训题库及答案
- 东风汽车HR SSC“五化”运营与创新实践
评论
0/150
提交评论