版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java高级技术面试题及详细答案本套面试题精选互联网企业Java高级开发高频面试考点,覆盖Java核心基础、集合框架、JVM调优、多线程并发、Spring全家桶、数据库、Redis、微服务基础等核心模块,答案贴合实际开发场景,摒弃理论化空话,适合中高级Java开发面试复习、技术复盘。一、Java核心基础高频题1、说说==和equals的区别?String的equals是如何实现的?参考答案:==是运算符,既可以比较基本数据类型,也可以比较引用数据类型。基本类型比较的是数值本身,引用类型比较的是对象的内存地址。equals是Object类的方法,默认实现和==一致,比较对象内存地址。但大部分业务类、String类都重写了该方法,重写后用于比较对象的实际内容、属性值是否一致。String重写的equals方法,核心逻辑是:先判断两个对象内存地址是否相同,相同直接返回true;再判断是否为String类型,最后逐位比较字符串的字符内容,全部一致则返回true。2、final、finally、finalize的区别?参考答案:三者是完全不同的Java语法机制,无关联:final是修饰符,可修饰类、方法、变量。修饰类则类不可被继承;修饰方法则方法不可重写;修饰变量则变量赋值后不可修改(基本类型值不变,引用类型地址不变,属性可改)。finally是异常处理代码块,搭配try-catch使用,无论代码正常执行还是抛出异常,finally代码块都会执行,常用于释放资源、关闭连接,唯一不执行的场景是调用了System.exit()终止程序。finalize是Object类的废弃方法,JDK9之后被废弃。原本用于垃圾回收前,由JVM调用该方法完成对象最后的资源释放,但其执行时机不确定、无法保证调用,实际开发中基本不用。3、接口和抽象类的区别?什么场景下用抽象类,什么场景用接口?参考答案:核心区别:1、语法层面:抽象类可以有构造方法、成员变量、普通方法、静态方法;接口(JDK8前)只能有常量和抽象方法,JDK8后支持默认方法、静态方法,JDK9后支持私有方法,无构造方法。2、继承规则:类只能单继承抽象类,但可以多实现接口,规避单继承的局限性。3、设计思想:抽象类是is-a关系,代表同类事物的共性模板;接口是has-a关系,代表行为能力、功能规范。使用场景:需要定义子类的通用属性、通用模板、约束子类结构,且存在层级继承关系时,用抽象类;需要定义统一的行为规范、拓展功能、实现解耦,让不同类拥有相同行为时,用接口。4、Java中的异常体系?受检异常和非受检异常的区别参考答案:Java异常顶层父类是Throwable,分为Error和Exception两大分支。Error是系统级严重错误,比如栈溢出、内存溢出、虚拟机异常,程序无法捕获和处理,只能终止程序。Exception是程序可处理的异常,分为受检异常和非受检异常。受检异常(编译期异常):继承自Exception且非RuntimeException,编译阶段必须主动捕获或抛出,否则代码报错,比如IO异常、SQL异常。非受检异常(运行时异常):继承自RuntimeException,编译不报错,运行时才会触发,比如空指针、数组越界、类型转换异常,通常是代码逻辑问题导致。二、集合框架核心面试题1、ArrayList和LinkedList的区别?日常开发如何选择?参考答案:1、底层结构:ArrayList基于动态数组实现,LinkedList基于双向链表实现。2、读写性能:ArrayList随机访问、查询速度极快,通过下标直接定位元素;插入、删除时需要移动数组元素,效率较低。LinkedList不支持高效随机访问,查询慢;头尾插入、删除元素无需移动数据,效率更高。3、内存占用:ArrayList会预留数组容量,存在内存冗余;LinkedList每个节点包含前后指针,单个元素内存占用更高。选型原则:绝大多数业务场景以查询、遍历为主,优先用ArrayList;高频头尾增删、极少查询的场景,使用LinkedList。2、HashMap的底层原理?JDK1.7和JDK1.8的核心优化点参考答案:HashMap底层是数组+链表+红黑树的数据结构,基于哈希算法存储键值对,核心作用是高效存取数据。通过key的hash值计算数组下标,实现快速定位。JDK1.7问题:底层仅为数组+链表,哈希冲突严重时,链表长度过长,查询效率退化为O(n);扩容时存在链表头插法,多线程环境下会出现循环链表,引发死循环问题。JDK1.8核心优化:1、数据结构优化:链表长度大于8、数组容量大于64时,链表转为红黑树,将查询效率提升至O(logn);2、插入方式优化:改为尾插法,避免多线程扩容循环链表问题;3、扩容优化:优化hash扰动算法,减少哈希冲突;4、阈值优化:树化阈值8,退树阈值6,避免频繁树化、退树导致的性能损耗。3、HashMap为什么线程不安全?并发场景下用什么替代?参考答案:HashMap线程不安全核心体现在多线程put、扩容操作中:多线程同时put数据可能导致数据覆盖;JDK1.7扩容会产生循环链表,导致CPU飙升;JDK1.8虽解决死循环,但仍存在数据丢失、覆盖问题。并发场景替代方案:优先使用ConcurrentHashMap,采用分段锁思想(JDK1.7)+CAS+Synchronized锁(JDK1.8),并发性能高;全局锁场景可使用HashTable,但性能较差,日常不推荐。三、JVM调优与内存模型1、JVM内存区域划分?各区域的作用和异常场景参考答案:JVM运行时数据区分为线程私有区和线程共享区:线程私有(随线程启停):1、程序计数器:记录当前线程执行的字节码行号,唯一无内存溢出的区域;2、虚拟机栈:存储局部变量、方法栈帧、操作数栈,方法执行完毕自动释放,栈深度过大抛出StackOverflowError,内存不足抛出OOM;3、本地方法栈:服务于native本地方法,功能和异常同虚拟机栈。线程共享(全局共享):1、堆内存:所有对象、数组的存储区域,是GC回收的核心区域,内存不足抛出堆OOM;2、方法区(元空间):存储类信息、常量、静态变量、运行时常量池,JDK1.8后永久代改为元空间,使用本地内存,减少OOM。2、GC垃圾回收机制?CMS和G1收集器的区别参考答案:GC核心是回收堆内存中无引用的无效对象,释放内存空间,避免内存泄漏。Java堆分为新生代(Eden、Survivor)和老年代,新生代以复制算法为主,老年代以标记清除、标记整理算法为主。CMS收集器(老年代并发收集器):以最短停顿时间为目标,基于标记清除算法,并发度高,用户线程和GC线程并行执行,停顿时间短;但会产生内存碎片,无法处理浮动垃圾,大内存场景性能一般。G1收集器(分区收集器):将堆内存划分为多个等大分区,可精准控制GC停顿时间,兼顾吞吐量和低延迟;可同时处理新生代和老年代回收,内存碎片少,适合大内存、高并发、低延迟的线上项目,是JDK9后的默认收集器。3、线上常见OOM原因及排查思路参考答案:常见OOM原因:1、内存泄漏:集合、静态变量长期持有对象引用,对象无法被GC回收;2、内存溢出:一次性创建大量对象、批量查询未分页、循环创建对象;3、堆内存参数配置过小,无法支撑业务峰值流量;4、元空间溢出:大量动态生成类、反射、热部署导致类信息过多。排查思路:导出堆dump文件,通过MAT工具分析大对象、泄漏对象;查看GC日志,判断GC频率、停顿时间;排查代码中集合未清空、静态变量滥用、循环创建对象等问题;调整JVM内存参数、优化代码逻辑。四、多线程与并发编程1、synchronized和Lock的区别?底层原理差异参考答案:1、语法层面:synchronized是Java内置关键字,无需手动加锁解锁,自动释放锁;Lock是接口,需要手动调用lock()加锁、unlock()解锁,必须在finally中释放锁,避免死锁。2、锁机制:synchronized是悲观锁、可重入锁,底层基于对象头监视器锁实现,锁升级机制(偏向锁-轻量级锁-重量级锁),适配不同并发场景。3、功能差异:Lock灵活性更高,支持公平锁、非公平锁,支持可中断锁、超时锁,可绑定多个条件队列;synchronized功能简单,不支持超时、中断。4、性能:低并发场景下两者性能相近,高并发场景下Lock性能更优。2、volatile关键字的作用?能否保证线程安全?参考答案:volatile核心作用有两个:保证可见性、禁止指令重排序。可见性:一个线程修改volatile变量,其他线程能立即感知到最新值,避免变量缓存导致的数据不一致。禁止重排序:禁止编译器和CPU对该变量的操作指令进行重排序,常用于单例模式双重检查锁。volatile不能保证原子性,因此无法保证线程安全。比如i++复合操作,包含读取、修改、写入三步,volatile只能保证可见性,无法防止多线程并发修改导致的数据覆盖,复合操作需要synchronized或Atomic原子类保证线程安全。3、线程池的核心参数?为什么不推荐使用Executors创建线程池?参考答案:线程池核心参数:核心线程数、最大线程数、空闲线程存活时间、任务队列、拒绝策略、线程工厂。核心线程数是常驻线程数量,最大线程数是线程池容纳的最大线程数量,任务队列用于缓存等待执行的任务,拒绝策略用于处理线程和队列都已满的超额任务。不推荐Executors的原因:Executors创建的线程池参数固定,存在线上风险:FixedThreadPool、SingleThreadPool使用无界队列,高并发任务堆积会导致OOM;CachedThreadPool最大线程数无限制,大量创建线程会导致CPU耗尽、线程溢出。生产环境必须通过ThreadPoolExecutor自定义线程池,根据业务场景配置合理参数和拒绝策略。五、Spring核心原理1、SpringIOC的核心原理和生命周期参考答案:IOC即控制反转,核心是将对象的创建、依赖注入、生命周期管理交由Spring容器负责,替代手动new对象,实现代码解耦。核心思想是依赖倒置,高层模块不依赖低层模块,统一依赖抽象。Bean完整生命周期:1、资源加载:读取XML、注解配置,扫描Bean定义;2、实例化:通过反射创建Bean对象;3、属性填充:完成依赖注入、自动装配;4、初始化:执行前置处理器、init-method、后置处理器;5、销毁:容器关闭时执行destroy-method,释放资源。2、SpringAOP的实现原理?常用通知类型和应用场景参考答案:AOP即面向切面编程,核心是通过动态代理机制,在不修改原有业务代码的前提下,对方法进行增强,实现日志记录、事务控制、权限校验、限流等通用功能。底层实现:目标类有接口时,使用JDK动态代理;无接口时,使用CGLIB字节码增强代理。常用通知类型:前置通知、后置通知、返回通知、异常通知、环绕通知,其中环绕通知功能最强,可手动控制方法执行。日常应用:统一日志打印、方法耗时统计、事务管理、接口权限拦截、异常统一处理。3、Spring事务传播机制有哪些?核心常用的几种参考答案:Spring共7种事务传播机制,开发中最常用的4种:1、REQUIRED(默认):当前有事务则加入,无事务则新建事务,最常用,适配绝大多数业务增删改场景;2、SUPPORTS:当前有事务则加入,无事务则以非事务方式运行,适合查询业务;3、REQUIRES_NEW:无论当前是否有事务,都新建独立事务,旧事务挂起,适用于独立日志记录、异步记录场景;4、NESTED:嵌套事务,依赖父事务,父事务回滚则子事务全部回滚,子事务回滚不影响父事务。六、数据库与Redis高频题1、MySQL索引原理?B+树为什么比B树、哈希索引更适合数据库?参考答案:MySQLInnoDB引擎默认使用B+树索引,索引存储在磁盘,通过树形结构减少磁盘IO次数,提升查询效率。B+树优势:1、所有数据都在叶子节点,非叶子节点只存索引键,内存占用小,单次IO读取的索引数据更多,查询效率更高;2、叶子节点形成有序链表,范围查询、排序、分页查询效率远超B树和哈希索引;3、哈希索引不支持模糊查询、范围查询、排序,仅适合精准等值查询,适用场景有限。2、MySQL慢查询优化的通用思路参考答案:1、开启慢查询日志,定位慢SQL,通过explain分析执行计划,查看索引使用、扫描行数、是否存在全表扫描;2、优化索引:给高频查询字段、条件字段、排序分组字段建立索引,避免索引失效(like%开头、or、字段类型转换、notin等);3、优化SQL语句:避免select*,只查询需要字段;杜绝大表模糊查询、批量in查询;大表分页采用延迟分页;4、架构优化:大表分库分表、读写分离,缓解单表数据压力;5、优化业务逻辑:减少不必要的数据库查询,通过Redis缓存热点数据。3、Redis缓存穿透、击穿、雪崩的解决方案参考答案:缓存穿透:查询数据库和缓存都不存在的数据,恶意请求穿透到数据库。解决方案:接口层参数校验
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年西双版纳市烟草专卖局人员招聘参考题库及详细答案解析
- 《Weishard胶原蛋白》课件
- 2026年黑河市烟草专卖局人员招聘考试模拟试题及详细答案解析
- 2026年中国移动通信集团北京有限公司人员招聘笔试备考试题及详细答案解析
- 2026年中国烟草总公司重庆市公司人员招聘笔试参考题库及详细答案解析
- 2026年联通视频科技有限公司人员招聘考试题库及详细答案解析
- 2026年郑州铁路局人员招聘考试题库及详细答案解析
- 2026年生物技术推广服务行业市场准入研究报告及未来五至十年供应链韧性与安全
- 2026年丽水市烟草专卖局人员招聘考试备考试题及详细答案解析
- 2026年鹤壁市烟草专卖局人员招聘考试题库及详细答案解析
- 2026年新版预防未成年人犯罪法知识竞赛题库及参考答案
- 2026年水务集团招聘考试笔试试题及答案
- 2026年甘肃省酒泉市金塔县招聘社区工作者考试参考题库及答案解析
- 2026年10月自考00323西方行政学说史模拟题及答案详解
- 2026年云南云上云大数据产业发展有限公司及下属子公司第一次社会招聘(32人)笔试模拟试题及答案详解
- 冠状动脉粥样硬化性心脏病患者药物治疗管理路径专家共识
- 纺织厂安全生产管理制度
- 2026粒径分析考试题及答案
- 2026中国新能源电池技术研发行业市场现状趋势分析投资策略规划报告
- 2026秋沪教牛津版五年级上英语单词默写(默写)
- 苏教版六年级上册数学《比的意义》教学设计
评论
0/150
提交评论