版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java后台高频面试题及详细答案(实战版)一、Java基础核心1.讲讲==和equals的区别答案:1)==是运算符,既可以比较基本数据类型,也可以比较引用数据类型。-基本类型:比较的是数值本身是否相等;-引用类型:比较的是对象的内存地址是否相同。2)equals是Object类的方法,默认只能比较对象内存地址。-像String、Integer、Long等常用类都重写了equals方法,重写后比较的是对象内容是否一致;-自定义对象如果不重写equals,默认和==效果一致。实战总结:日常开发中,字符串对比一律用equals,基本类型用==。2.String、StringBuilder、StringBuffer的区别答案:1)String:不可变字符串,底层是final修饰的字符数组。每次拼接、修改字符串都会生成新对象,频繁操作会产生大量垃圾对象,效率低。2)StringBuilder:可变字符串,线程不安全,效率高,日常单线程字符串拼接首选。3)StringBuffer:可变字符串,方法加了synchronized锁,线程安全,效率低,多用于多线程场景。开发规范:绝大多数业务场景使用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)构造方法:抽象类有构造方法,用于子类初始化;接口没有构造方法。业务场景:接口用于定义行为规范、解耦;抽象类用于抽取子类公共代码、复用通用逻辑。二、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算法确定元素存储位置,解决hash冲突。JDK1.7版本:1)底层:数组+单向链表;2)冲突解决:单纯链表挂链;3)扩容问题:头插法,多线程扩容会出现链表死循环,线程不安全;4)无树化机制,哈希冲突多会导致链表过长,查询效率极低。JDK1.8版本优化:1)底层:数组+链表+红黑树;2)树化规则:链表长度>=8且数组长度>=64,链表转为红黑树;链表长度<=6退化为链表;3)插入方式:改为尾插法,避免扩容死循环;4)优化hash算法,减少哈希碰撞概率。补充:HashMap默认初始容量16,负载因子0.75,达到容量*0.75触发扩容,扩容为原容量2倍。3.HashMap和ConcurrentHashMap的区别答案:1)线程安全:HashMap线程不安全,并发场景会出现数据覆盖、丢失问题;ConcurrentHashMap线程安全。2)锁机制:JDK1.7ConcurrentHashMap采用分段锁(Segment),细化锁粒度;JDK1.8废弃分段锁,采用CAS+synchronized锁数组节点,锁粒度更细,并发性能更高。3)效率:HashMap单线程效率高;ConcurrentHashMap兼顾并发安全和性能,是并发存键值对的首选。避坑:多线程场景禁止使用HashMap,优先用ConcurrentHashMap,不建议用Hashtable(全局锁,效率极差)。三、JVM与垃圾回收1.JVM内存区域划分答案:JVM运行时数据区分为5个区域:1)程序计数器:线程私有,记录当前线程执行的字节码行号,唯一无OOM的区域。2)虚拟机栈:线程私有,存储局部变量、方法栈帧、操作数栈,方法执行完毕自动释放,栈深度过大报StackOverflowError。3)本地方法栈:线程私有,为Native本地方法服务。4)堆内存:线程共享,所有对象、数组都在堆中分配,是垃圾回收的核心区域,会发生OOM。5)方法区:线程共享,存储类信息、常量、静态变量、即时编译代码,JDK1.8后改为元空间,使用本地内存,不再占用堆内存。2.讲讲Java垃圾回收机制,哪些对象会被回收答案:Java自动垃圾回收主要针对堆内存对象,核心是判断无用对象、回收内存,无需手动释放内存。对象回收判定:1)引用计数法:对象引用次数为0则回收,无法解决循环引用问题,JVM未采用;2)可达性分析算法:JVM主流算法,以GCRoots为起点,无引用链连通的对象判定为垃圾对象。可作为GCRoots的对象:-虚拟机栈中引用的对象;-方法区静态变量、常量引用的对象;-本地方法栈JNI引用的对象。垃圾回收分类:-MinorGC:新生代回收,频率高、速度快;-FullGC:老年代+新生代整体回收,耗时久、卡顿明显,开发中尽量避免。3.OOM常见原因及排查思路答案:常见原因:1)内存泄漏:集合、静态变量无限堆积对象,未及时清空;2)内存溢出:一次性创建大量大对象、批量查询不分页、文件流未关闭;3)JVM参数配置不合理,堆内存分配过小;4)线程过多导致栈内存溢出。排查步骤:1)导出堆快照dump文件;2)用MAT、JProfiler分析大对象、常驻对象;3)定位代码中集合未清理、对象未释放、循环创建对象等问题;4)优化代码逻辑,调整JVM参数。四、多线程与并发1.线程的生命周期有哪些状态答案:Java线程共6种状态:1)NEW:新建状态,创建线程对象,未调用start();2)RUNNABLE:可运行状态,包含就绪和运行中,等待CPU调度或正在执行;3)BLOCKED:阻塞状态,等待获取锁资源;6)TERMINATED:终止状态,线程执行完毕。2.synchronized和Lock的区别答案:1)底层实现:synchronized是JVM原生锁,底层依赖监视器锁;Lock是Java代码层面的锁(接口),常用实现类ReentrantLock。2)锁特性:synchronized隐式锁,自动加锁释放锁;Lock显式锁,手动lock()加锁、unlock()释放锁。3)灵活性:Lock支持可中断锁、超时锁、公平锁、读写锁;synchronized仅支持非公平锁,功能单一。4)性能:低并发下两者性能相近,高并发下Lock粒度更细,性能更优。开发选择:简单同步场景用synchronized,复杂并发、需要灵活锁机制用ReentrantLock。3.线程池的核心参数及工作原理答案:核心5大参数:1)核心线程数:线程池常驻线程,空闲也不会销毁;2)最大线程数:线程池允许创建的最大线程数量;3)空闲超时时间:非核心线程空闲超时后自动销毁;4)时间单位:超时时间的单位;5)阻塞队列:存储等待执行的任务。线程池执行流程:1)新任务进来,判断核心线程数是否满,未满则创建核心线程执行任务;2)核心线程已满,任务进入阻塞队列排队;3)队列已满,判断最大线程数,未满则创建非核心线程执行任务;4)线程数达到最大值、队列已满,触发拒绝策略。开发规范:禁止使用Executors创建线程池,必须手动通过ThreadPoolExecutor自定义参数,避免资源耗尽风险。五、Spring核心1.SpringIOC原理答案:IOC即控制反转,核心是将对象的创建、管理、依赖注入权限交给Spring容器,摆脱代码主动new对象的硬编码。核心流程:1)容器启动,扫描项目注解、配置文件,加载所有Bean定义信息;2)根据Bean定义,通过反射创建Bean实例;3)完成Bean的依赖注入、初始化方法执行;4)将完整Bean放入单例池,供业务代码直接使用。核心优势:解耦、统一管理对象、方便后续AOP、事务等功能扩展。2.SpringAOP的原理及应用场景答案:AOP面向切面编程,核心是在不修改原有业务代码的前提下,对方法进行增强。底层原理:动态代理-目标类有接口:使用JDK动态代理;-目标类无接口:使用CGLIB字节码代理。常用场景:统一日志打印、权限校验、事务控制、接口限流、性能监控、缓存处理。核心注解:@Aspect、@Before、@After、@Around、@AfterReturning。3.Spring事务传播机制、隔离级别答案:传播机制(常用3种核心):1)REQUIRED(默认):有事务就加入,无事务新建事务;最常用;2)SUPPORTS:有事务就加入,无事务非事务运行;3)REQUIRES_NEW:新建独立事务,挂起原有事务,互不影响。事务隔离级别:1)读未提交:最低级别,存在脏读、不可重复读、幻读;2)读已提交(Oracle默认):解决脏读,存在不可重复读、幻读;3)可重复读(MySQL默认):解决脏读、不可重复读,存在幻读;4)串行化:最高级别,完全解决所有并发问题,性能最差。常见坑:同类中方法内部调用@Transactional方法,事务会失效(AOP代理失效)。六、MySQL数据库1.InnoDB和MyISAM的区别答案:1)事务支持:InnoDB支持事务、ACID;MyISAM不支持事务。2)锁机制:InnoDB支持行锁、表锁;MyISAM只有表锁。3)并发能力:InnoDB行锁粒度细,读写不冲突,并发性能高;MyISAM读锁共享、写锁独占,并发差。4)崩溃恢复:InnoDB支持事务日志,崩溃可恢复数据;MyISAM崩溃易数据损坏。5)外键:InnoDB支持外键,MyISAM不支持。开发选择:业务表一律用InnoDB,MyISAM基本淘汰。2.索引原理、B+树优势答案:MySQL索引底层采用B+树结构。B+树核心优势:1)所有数据都在叶子节点,非叶子节点只存索引键,内存存储索引更多,磁盘IO更少;2)叶子节点双向链表串联,范围查询、排序查询效率极高;3)树高度低,查询速度稳定,千万级数据树高基本控制在3层以内。索引分类:主键索引、唯一索引、普通索引、联合索引、覆盖索引。3.慢SQL优化思路答案:1)先用explain分析SQL执行计划,查看是否走索引、是否全表扫描、是否临时表、是否文件排序;2)优化索引:建立合适联合索引,遵循最左匹配原则,避免索引失效;3)避免索引失效场景:慎用like%xx、or、notin、字段类型隐式转换、orderby字段无索引;4)优化业务:禁止select*,只查需要字段,使用覆盖索引;5)大表分页优化:避免limit大偏移量,用主键分页、延迟关联优化;6)大批量数据禁止全表更新删除,分批操作。七、Redis缓存1.Redis数据结构及常用场景答案:1)String:字符串,缓存用户信息、配置、计数器、限流;2)List:列表,有序队列、消息队列、排行榜;3)Hash:哈希,存储对象信息、用户详情、商品信息;4)Set:集合,去重、交集并集、好友列表、抽奖;5)ZSet:有序集合,延时队列、热搜排行榜、积分排名。2.缓存穿透、击穿、雪崩解决方案答案:1)缓存穿透:查询不存在的数据,直接打到数据库。解决方案:缓存空值、布隆过滤器、接口校验拦截非法参数。2)缓存击穿:热点Key过期,大量请求瞬间打数据库。解决方案:热点Key永不过期、互斥锁、定时主动刷新缓存。3)缓存雪崩:大量Key同时过期或Redis宕机,全部请求压数据库。解决方案:过期时间加随机值、Redis集群高可用、服务熔断降级、多级缓存。3.Redis持久化机制答案:1)RDB:快照持久化,定时将全量数据写入磁盘。优点:文件小、恢复快;缺点:会丢失最后一次快照后的增量数据。2)AOF:日志持久化,记录每一条写命令。优点:数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年中国电子织物强力仪数据监测研究报告
- 宁夏回族自治区银川市兴庆区第一中学七年级英语第7单元课后练习题及答案
- 2027届江苏省镇江市实验初级中学数学九年级第一学期期末监测模拟试题含解析
- 工业园区特种设备隐患排查方案
- 变电站工程监理实施细则
- 2026物联网终端设备市场发展趋势与商业变现路径研究报告
- 2026中国医疗器械注册审批制度改革与行业影响评估报告
- 牙周探诊检查护理配合
- 心脏支架术后的护理
- 2026生物识别技术市场发展分析及前景趋势与商业价值研究报告
- 医务人员艾滋病职业暴露预防与处置培训课件
- 2026秋小学教科版科学三年级上册第一单元测试卷及参考答案
- 水库放空技术导则(NBT10966-2022 )
- 成人植入式组织间液葡萄糖监测护理技术
- 2026年暨南大学308护理综合考研真题考研试题硕士研究生入学考试试题
- 心梗三项临床意义标准化解读
- 小学道德与法治新部编版五年级上册全册教案(2026秋)
- 建筑环境与能源测试技术 第4版 课件全套 第1-10章 测量及测量仪表的基本知识 -建筑环境综合测试技术及应用
- 第6课 了解国家机构 第1课时 课件(内嵌视频)2026-2027学年道德与法治六年级上册统编版
- 辅酶Q10-增强心动力课件
- 综合实践-奇妙的指纹课件
评论
0/150
提交评论