版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java3年开发经验面试题及详细答案(实战版)说明:本套面试题适配工作3年左右Java开发,侧重原理理解、实战踩坑、场景应用,摒弃纯背诵概念,贴合企业真实面试节奏,答案为职场口语化表述,适合面试背诵、自我复盘。一、Java基础核心(高频必问)1.==和equals的区别?日常开发怎么用?==是比较运算符,基本数据类型比较的是数值本身,引用数据类型比较的是内存地址。equals是Object类的方法,默认底层也是==,但像String、Integer这类常用类都重写了该方法,重写后是比较对象内容/值,不比较地址。实战规范:1)基本类型判断相等只用==;2)字符串、包装类对象比较值,一律用equals;3)为了避免空指针,日常写法都是常量在前,比如"test".equals(str)。2.String、StringBuilder、StringBuffer的区别?业务场景怎么选?1)String:不可变字符串,底层是final修饰的字符数组(JDK9+是字节数组),每次拼接都会生成新对象,频繁拼接性能差;2)StringBuilder:可变字符串,线程不安全,效率高;3)StringBuffer:可变字符串,所有方法加了synchronized,线程安全,效率低。场景选择:单线程、频繁字符串拼接用StringBuilder;多线程共享变量拼接用StringBuffer;固定不变的字符串、常量定义直接用String。3.final、finally、finalize的区别?三个完全不相关的关键字:final:修饰符,修饰变量不可修改、修饰方法不可重写、修饰类不可继承;日常用来定义常量、防止方法被篡改。finally:异常处理关键字,搭配try-catch使用,一定会执行(除了System.exit退出等极端情况),主要用来释放资源,比如关闭流、关闭连接。finalize:Object类的废弃方法,JVM垃圾回收前触发,但是执行时机不确定、无法保证调用,生产中绝对不用,已经被废弃。4.接口和抽象类的区别?实际项目怎么用?核心区别:1)抽象类有构造方法,接口没有;2)抽象类可以有普通成员变量、静态变量,接口只能有常量(默认publicstaticfinal);3)抽象类单继承,接口多实现;4)抽象类可以有普通方法、抽象方法,JDK8后接口有默认方法、静态方法,JDK9有私有方法。项目用法:接口用来定义行为规范,比如业务服务接口、DAO接口;抽象类用来抽取公共代码、复用通用逻辑,减少子类重复代码。二、Java集合框架(面试重点,必考)1.ArrayList和LinkedList的区别?随机访问和增删场景怎么选?1)底层结构:ArrayList基于动态数组,LinkedList基于双向链表;2)查询效率:ArrayList支持下标随机访问,查询快;LinkedList必须遍历,查询慢;3)增删效率:头尾增删LinkedList更快,中间增删两者都慢;ArrayList增删需要扩容、移位,开销大;4)内存:ArrayList会有冗余容量,占用连续内存;LinkedList每个节点存指针,内存占用更高。实战:日常业务90%场景用ArrayList,只有频繁头尾增删的场景才用LinkedList。2.HashMap底层原理?JDK1.7和JDK1.8的区别?HashMap底层是「数组+链表+红黑树」,基于哈希表实现,用来存储键值对,允许null键和null值,线程不安全。存储流程:通过key的hash值计算数组下标,下标为空直接存入;下标有值则发生哈希冲突,挂链表;链表长度大于8且数组容量大于64,转为红黑树;链表长度小于6,树退化为链表。JDK1.7和1.8核心区别:1)底层结构:1.7是数组+链表,1.8新增红黑树;2)哈希算法:1.8优化了hash扰动,减少冲突;3)插入方式:1.7头插法,多线程会出现环形链表死循环;1.8尾插法,规避了死循环问题;4)扩容优化:1.8扩容后节点位置只在原位置或原位置+旧容量,不需要重新计算hash。3.HashMap线程不安全体现在哪里?生产怎么解决?不安全场景:多线程同时put数据,会出现数据覆盖、JDK1.7扩容死循环、数据丢失问题。生产解决方案:1)简单场景用Collections.synchronizedMap包装;2)高并发场景优先用ConcurrentHashMap,分段锁(1.7)/CAS+Synchronized(1.8),并发性能更好;3)禁止多线程直接操作HashMap。4.ConcurrentHashMap1.8原理?为什么比Hashtable快?JDK1.8ConcurrentHashMap采用CAS+synchronized+数组+链表+红黑树实现。锁粒度细化,只锁住当前哈希桶的头节点,不是全表锁。Hashtable是全表synchronized锁,任意线程操作都会锁住整个表,并发时竞争激烈、阻塞严重。而ConcurrentHashMap支持多线程同时操作不同桶,并发吞吐量高很多。三、多线程与并发(3年必掌握)1.线程的生命周期有哪些状态?日常开发常接触哪些?Java线程一共6种状态:新建、就绪、运行、阻塞、等待、超时等待、终止。核心常用:1)NEW:新建线程,未启动;2)RUNNABLE:就绪+运行状态,等待CPU调度或正在执行;3)BLOCKED:阻塞,等待获取锁;6)TERMINATED:线程执行完毕。2.synchronized和Lock的区别?项目中怎么选型?1)synchronized是内置关键字,自动加锁释放锁;Lock是接口,需要手动lock()、unlock(),必须在finally释放;2)synchronized不可中断,Lock可中断锁等待;3)synchronized只能非公平锁,Lock可实现公平/非公平锁;4)Lock可以绑定多个条件,精准唤醒线程,synchronized只能随机唤醒。选型:普通同步场景、代码块同步用synchronized(JDK1.6后锁优化,性能不差);需要公平锁、可中断、精准唤醒、超时锁场景用ReentrantLock。3.volatile关键字的作用?能保证线程安全吗?volatile两个核心作用:保证可见性、禁止指令重排。不能保证原子性,所以不能完全保证线程安全。比如i++操作,是读、改、写三步,volatile只能保证每次读到最新值,无法保证三步原子执行,多线程下依然会有数据错乱。常用场景:状态标记位、双重检查锁单例模式。4.线程池核心参数?核心拒绝策略?工作中怎么配置?核心7大参数:核心线程数、最大线程数、空闲超时时间、时间单位、任务队列、线程工厂、拒绝策略。四种拒绝策略:1)AbortPolicy:直接抛异常(默认);2)CallerRunsPolicy:调用者线程自己执行任务;3)DiscardPolicy:直接丢弃任务,不报错;4)DiscardOldestPolicy:丢弃队列最旧任务,执行新任务。实战配置:生产禁止用Executors创建线程池,必须手动newThreadPoolExecutor。IO密集型(接口、数据库操作)核心线程数设大一点,CPU密集型(计算逻辑)核心线程数接近CPU核心数,避免线程过多导致上下文切换频繁。四、JVM与内存调优(3年进阶考点)1.JVM内存区域划分?各区域作用?哪些是线程私有?线程私有(随线程创建销毁):程序计数器、虚拟机栈、本地方法栈。线程共享(全局共享):堆、方法区(元空间)。各区域作用:1)程序计数器:记录当前线程执行的行号,唯一无OOM的区域;2)虚拟机栈:存储局部变量、方法栈帧,方法调用与执行;3)堆:存放所有对象实例、数组,GC主要回收区域;4)方法区:存放类信息、常量、静态变量、编译后的代码;JDK8后永久代改为元空间,使用本地内存。2.垃圾回收机制?MinorGC、MajorGC、FullGC区别?MinorGC:新生代垃圾回收,频率高、速度快,不会触发Stop-The-World长时间卡顿;MajorGC:老年代GC,频率低、速度慢,通常伴随MinorGC;FullGC:整堆回收(新生代+老年代+元空间),开销极大,生产要尽量避免。常见触发FullGC场景:老年代空间不足、元空间溢出、显式调用System.gc、MinorGC后晋升失败。3.常见OOM场景及解决方案?工作中遇到过哪些?1)堆内存溢出:创建大量对象不释放、集合无限添加数据;解决:增大堆内存、排查内存泄漏、优化代码释放对象;2)栈溢出:递归死循环、方法嵌套过深;解决:优化递归逻辑;3)元空间溢出:动态生成大量类、反射频繁创建类;解决:调大元空间大小、清理无用类;4)直接内存溢出:NIO未释放缓冲区。五、Spring核心框架(面试重中之重)1.SpringIOC原理?Bean的生命周期?IOC控制反转:把对象的创建、管理、依赖注入交给Spring容器,不再手动new对象,解耦代码。Bean完整生命周期:1)加载配置、解析Bean定义;2)实例化Bean(反射创建对象);3)属性填充(依赖注入);4)初始化前置处理(BeanPostProcessor);5)初始化方法执行(init-method、InitializingBean);6)初始化后置处理;7)Bean就绪,供业务使用;8)容器关闭,执行销毁方法。2.SpringAOP原理?动态代理两种方式区别?AOP面向切面编程,核心是在不修改原有代码的前提下,对方法进行增强,比如日志、事务、权限、监控。动态代理:JDK动态代理:基于接口代理,只能代理实现接口的类,速度快;Cglib代理:基于子类继承代理,无需接口,可以代理普通类,通过字节码增强实现。Spring规则:有接口用JDK代理,无接口用Cglib。3.Spring事务传播机制?常用的有哪些?实战踩坑?一共7种传播机制,工作最常用3种:1)REQUIRED(默认):有事务就加入,没有就新建事务;2)SUPPORTS:有事务就加入,没有就非事务运行;3)REQUIRES_NEW:新建独立事务,暂停原有事务。常见踩坑:同类中方法自调用,事务失效。因为AOP代理只拦截外部调用,内部this调用不会走代理,事务无法生效。解决:通过容器获取自身Bean调用,或者拆分方法。4.Spring事务失效的场景?1)方法不是public;2)同类内部方法调用;3)异常类型不对(默认只回滚RuntimeException,普通Exception不回滚);4)手动捕获异常未抛出;5)数据库引擎不支持事务(MyISAM);6)多线程调用事务方法,事务独立,无法回滚主线程。六、MySQL数据库(业务开发核心)1.InnoDB和MyISAM区别?生产怎么选?1)事务:InnoDB支持事务、ACID,MyISAM不支持;2)锁机制:InnoDB行锁+表锁,MyISAM只有表锁;3)并发:InnoDB并发高,MyISAM读写互斥,并发差;4)崩溃恢复:InnoDB支持故障恢复,MyISAM容易数据损坏;5)外键:InnoDB支持外键,MyISAM不支持。生产全部用InnoDB,MyISAM基本淘汰。2.索引原理?B+树为什么比B树、哈希索引适合MySQL?MySQL索引默认B+树结构。B+树优势:1)所有数据都在叶子节点,非叶子节点只存索引键,内存占用小,磁盘IO少;2)叶子节点有序链表,支持范围查询、排序、分页;3)B树数据分散各个节点,范围查询效率低;哈希索引不支持范围查询、排序。3.慢查询优化思路?日常怎么优化SQL?1)先用explain分析执行计划,看是否走索引、是否全表扫描、是否临时表、文件排序;2)避免索引失效:禁止select*、避免like%xx、or、函数操作索引字段;3)遵循最左匹配原则,合理建立联合索引;4)大表分页用延迟关联、覆盖索引优化;5)减少join关联大表、避免嵌套子查询;6)控制返回数据量,分页查询、按需返回字段。4.事务隔离级别?默认级别?幻读、不可重复读、脏读区别?四个隔离级别(从低到高):读未提交、读已提交、可重复读、串行化。MySQLInnoDB默认可重复读。脏读:一个事务读到另一个事务未提交的数据;不可重复读:同一事务内,两次查询结果不一致(其他事务更新提交);幻读:同一事务内,范围查询条数不一致(其他事务新增/删除)。七、Redis缓存(高频业务面试)1.Redis常用数据结构及业务场景?1)String:缓存、计数器、分布式ID、限流;2)List:消息队列、有序列表;3)Hash:存储用户信息、订单详情、对象数据;4)Set:去重、交集并集、点赞收藏;5)ZSet:排行榜、延时队列。2.缓存穿透、击穿、雪崩解决方案?(必问)1)缓存穿透:查询不存在的数据,直接打数据库。解决:布隆过滤器、空值缓存、接口限流校验;2)缓存击穿:热点key过期,瞬间大量请求打数据库。解决:热点key永不过期、互斥锁、本地缓存;3)缓存雪崩:大量key同时过期/Redis宕机,流量全部打数据库。解决:过期时间加随机值、集群高可用、多级缓存、限流降级。3.Redis分布式锁原理?Redisson优势?基础原理:setkeyvaluenxex过期时间,保证加锁原子性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年化工企业八大特殊作业综合能力测评卷及答案
- 2026年密闭空间氧含量监测作业解析卷及答案
- 2027年护士资格考试传染病学模拟卷
- 2026年靶向药物医保报销核查方案
- 2026年企业招聘面试现场办公模拟冲刺卷
- 2026年教师招聘考试外国教育史高分突破卷
- 小学五年级信息技术《信息在线巧收集》教学设计
- 2026年安庆市迎江区社区网格工作人员考试题库及答案
- 小学五年级德育与法治《快乐寒假安全护航》教学设计
- 高二年级德育主题班会教学设计:核心素养视域下感恩教育的深度推进与实践
- (正式版)DB33∕T 988-2022 《柔性生态加筋挡土墙设计与施工技术规范 》
- 理疗师服务话术培训课件
- 2026年四川发展控股有限责任公司招聘笔试题
- 食品安全管理制度手册(标准版)
- 合作学习模式在初中数学课堂中的有效性分析课题报告教学研究课题报告
- 高中地理教学中数字资源整合与地理实践活动研究教学研究课题报告
- 糖尿病母亲婴儿(DM婴儿)的临床管理与预后关键要点解析
- 2025~2026学年黑龙江省哈尔滨市第三中学高一上学期期中物理试卷
- 第13课《美丽中国我们的家》课件 2025-2026学年道德与法治二年级上册统编版
- 广东省深圳市龙岗区2025-2026学年六年级上学期10月月考数学试卷(含答案)
- 2025年信托业务行业分析报告及未来发展趋势预测
评论
0/150
提交评论