版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java高频面试题库及详细答案(实战版)一、Java基础核心(高频必问)1.谈谈JDK、JRE、JVM的区别与联系答案:三者是层层包含的关系,范围从大到小为JDK>JRE>JVM。JVM是Java虚拟机,是Java程序运行的核心载体,负责加载字节码文件、解释执行代码、内存管理、垃圾回收,是Java跨平台的根本,但它本身不包含任何开发工具。JRE是Java运行环境,包含JVM和Java核心类库(rt.jar等)。普通用户只需要安装JRE,就可以运行Java程序,但是无法开发Java项目。JDK是Java开发工具包,包含JRE、Java编译工具(javac)、打包工具、调试工具等所有开发所需工具。开发人员必须安装JDK,才能编写、编译、运行Java代码。2.==和equals()的区别答案:==是比较运算符,既可以比较基本数据类型,也可以比较引用数据类型。基本类型比较的是数值本身,引用类型比较的是内存地址。equals()是Object类的方法,默认情况下和==效果一致,比较对象内存地址。但像String、Integer这些常用类,都重写了equals方法,重写后不再比较地址,而是比较对象的内容值是否相等。实战注意:日常开发中比较字符串、对象内容,一律用equals,避免==出现空指针和判断错误。3.String、StringBuilder、StringBuffer的区别答案:1、可变性:String是不可变字符串,每次拼接、修改都会生成新的字符串对象;StringBuilder和StringBuffer是可变字符串,修改不会创建新对象。2、线程安全:StringBuffer所有方法加了synchronized锁,线程安全,适合多线程场景;StringBuilder无锁,线程不安全,性能更高,是单线程首选。3、性能:单线程下StringBuilder>StringBuffer>String。频繁字符串拼接场景,绝对不要用String直接+=拼接。4.基本数据类型和包装类的区别答案:Java有8种基本数据类型:byte、short、int、long、float、double、char、boolean,直接存储数值,存放在栈内存,占用内存小,默认有初始值,不能为空。对应的包装类是对象类型,存放在堆内存,默认值为null,可以为空。包装类包含很多工具方法,比如类型转换、数值判断,同时支持泛型(泛型不支持基本类型)。补充:日常开发中,实体类属性统一用包装类,避免基本类型默认值导致业务逻辑出错(比如int默认0,无法区分是用户填写的0还是未赋值)。5.自动装箱和拆箱原理答案:装箱:基本类型自动转为包装类,比如Integera=10,底层执行Integer.valueOf(10)。拆箱:包装类自动转为基本类型,比如intb=a,底层执行Value()。高频坑点:Integer存在缓存机制,默认缓存-128~127的数值。这个范围内的数值,装箱会复用缓存对象,==判断为true;超出范围会新建对象,==判断为false。6.final、finally、finalize的区别答案:final是修饰符:修饰变量,变量不可二次赋值;修饰方法,方法不可重写;修饰类,类不可被继承。finally是异常处理关键字:搭配try-catch使用,代码无论正常执行还是抛出异常,finally代码块一定会执行,常用于关闭流、释放资源。finalize是Object类的方法:JVM垃圾回收前会调用该方法,用于对象资源释放。现在已经被废弃,不推荐使用,资源释放优先用try-with-resources。7.接口和抽象类的区别答案:1、定义不同:抽象类用abstract修饰,接口用interface修饰。2、构造方法:抽象类有构造方法,用于子类初始化;接口没有构造方法。3、成员变量:抽象类可以有普通变量、常量;接口默认是publicstaticfinal常量,不能定义普通变量。4、方法特性:抽象类可以有普通方法、抽象方法、静态方法;JDK8后接口有默认方法、静态方法,JDK9支持私有方法。5、继承限制:类只能单继承抽象类,但可以多实现接口。6、设计思想:抽象类是模板复用,提取子类公共代码;接口是行为规范,定义统一标准。二、Java集合高频面试题1.ArrayList和LinkedList的区别答案:1、底层结构:ArrayList基于动态数组;LinkedList基于双向链表。2、查询效率:ArrayList支持随机访问,根据下标查询速度极快;LinkedList只能从头节点遍历,查询效率低。3、增删效率:ArrayList增删元素需要移动数组元素,尾部增删快,中间、头部增删慢;LinkedList只需修改节点指针,任意位置增删效率更高。4、内存占用:ArrayList内存连续,会有预留容量冗余;LinkedList每个节点都要存储前后指针,内存占用更大。实战场景:日常开发默认用ArrayList,只有频繁中间增删的场景才用LinkedList。2.HashMap底层原理(JDK1.8)答案:HashMap底层是数组+链表+红黑树的结构,基于哈希表实现,用于存储键值对数据。1、存储流程:通过key的hash值计算数组下标,若下标位置无元素,直接存入;若有元素,发生哈希冲突,挂链表。2、树化规则:当链表长度≥8,且数组容量≥64时,链表转为红黑树,提升查询效率;当红黑树节点数量≤6时,退化为链表。3、扩容机制:默认初始容量16,负载因子0.75。当元素数量超过容量*0.75时触发扩容,容量翻倍,重新哈希分配元素。4、特点:无序、键唯一、允许null键和null值(null键只能有一个),线程不安全。3.HashMap为什么线程不安全?怎么解决?答案:HashMap线程不安全主要体现在多线程put、扩容场景:多线程同时put会导致数据覆盖;JDK1.7扩容会出现链表环形死循环,JDK1.8虽解决了死循环,但仍存在数据丢失问题。解决方案:1、使用Hashtable:线程安全,但效率极低,全局锁,基本废弃。2、使用Collections.synchronizedMap:包装成线程安全集合,效率一般。3、使用ConcurrentHashMap:分段锁机制,并发性能高,企业开发首选。4.ConcurrentHashMap底层原理答案:JDK1.8的ConcurrentHashMap底层同样是数组+链表+红黑树,采用CAS+synchronized实现并发安全,不再是分段锁。核心优化:锁粒度细化,只锁住当前哈希桶的头节点,不会锁定整个数组,并发效率大幅提升。特点:不允许null键和null值,线程安全,高并发场景专用,支持高并发读写。5.HashSet底层原理答案:HashSet底层直接复用HashMap,存储元素时,把存入的值作为HashMap的key,value统一是一个固定的空对象。所以HashSet去重原理和HashMap一致,依靠hashCode()和equals()方法判断元素是否重复,无序、不重复、允许null元素。三、多线程与并发1.线程和进程的区别答案:进程是操作系统资源分配的最小单位,独立占用内存、CPU资源,进程之间相互隔离,通信成本高。线程是CPU调度的最小单位,隶属于进程,一个进程包含多个线程,线程共享进程的内存资源,切换成本低、通信简单。总结:进程是独立运行的程序,线程是进程内的执行单元,多线程能提升程序并发处理能力。2.线程的生命周期有哪些状态答案:Java线程一共6种状态:1、新建(NEW):创建线程对象,未调用start()方法。2、就绪(RUNNABLE):调用start(),等待CPU调度执行。3、运行(RUNNING):CPU分配时间片,线程正在执行代码。4、阻塞(BLOCKED):等待获取synchronized锁,未获取到则阻塞。7、终止(TERMINATED):线程代码执行完毕,线程销毁。3.sleep()和wait()的区别答案:1、所属类不同:sleep是Thread类静态方法;wait是Object类方法。2、锁释放不同:sleep不释放锁,抱着锁休眠;wait主动释放锁,进入等待队列。3、唤醒方式不同:sleep时间到自动唤醒;wait需要被notify/notifyAll唤醒,或设置超时时间自动唤醒。4、使用场景:sleep用于线程休眠;wait用于多线程之间的通信协作。4.synchronized和Lock的区别答案:1、实现方式:synchronized是JVM底层原生锁,关键字级别;Lock是代码层面的锁,是接口,常用实现类ReentrantLock。2、锁释放:synchronized自动加锁、自动释放锁,无需手动操作;Lock需要手动lock()加锁、unlock()释放锁,必须在finally中释放。3、锁特性:synchronized不可中断、非公平锁、不支持超时;Lock可中断、支持公平/非公平锁、支持超时等待、可绑定多个条件。4、性能:低并发下两者性能接近,高并发下ReentrantLock性能更优。5.什么是线程池?核心参数有哪些答案:线程池是管理线程的容器,核心是复用线程,避免频繁创建、销毁线程造成的资源消耗,统一管理线程、控制并发数量。核心7大参数:1、核心线程数:线程池常驻线程,即使空闲也不会销毁。2、最大线程数:线程池允许的最大线程数量。3、空闲超时时间:非核心线程空闲超过该时间会被销毁。4、时间单位:超时时间的单位。5、任务队列:存储等待执行的任务,常用LinkedBlockingQueue。6、线程工厂:创建线程的工厂,可自定义线程名称、优先级。7、拒绝策略:任务超过最大承载量时的处理策略。实战规范:禁止使用Executors创建线程池,必须手动通过ThreadPoolExecutor自定义参数,避免OOM问题。四、JVM核心面试题1.JVM内存区域划分答案:JVM运行时数据区分为5大区域:1、程序计数器:线程私有,记录当前线程执行的字节码行号,是唯一无OOM的内存区域。2、虚拟机栈:线程私有,存储局部变量、方法参数、方法栈帧,方法执行完毕自动释放,栈溢出会报StackOverflowError。3、本地方法栈:线程私有,执行native本地方法,功能和虚拟机栈类似。4、堆内存:线程共享,所有对象、数组都在堆中分配,是垃圾回收的核心区域,会发生OOM。5、方法区:线程共享,存储类信息、常量、静态变量、编译后的代码,JDK1.8后方法区改为元空间,使用本地内存。2.垃圾回收机制GC原理答案:GC是JVM自动回收堆中无引用的废弃对象,释放内存空间,无需手动释放。1、回收判定:主流是可达性分析算法,从GC根节点遍历,不可达的对象判定为垃圾对象。2、内存分代:堆分为新生代、老年代。新生代对象生命周期短,回收频繁;老年代对象存活时间长,回收频率低。3、回收算法:新生代用复制算法,效率高;老年代用标记清除、标记整理算法。3.MinorGC、MajorGC、FullGC区别答案:MinorGC:新生代垃圾回收,触发频繁,速度快,不会停顿老年代。MajorGC:老年代垃圾回收,触发次数少,速度慢,耗时较长。FullGC:全局垃圾回收,回收整个堆内存(新生代+老年代+元空间),停顿时间最长,线上项目要尽量避免FullGC频繁触发。4.常见OOM原因及解决思路答案:常见OOM场景:1、堆内存溢出:创建大量对象、集合未清空、内存泄漏。2、元空间溢出:加载过多动态类、反射生成大量类。3、线程栈溢出:递归死循环、方法嵌套过深。解决思路:通过jmap、jstack工具导出堆栈日志,定位大对象、死循环、内存泄漏代码,优化代码逻辑,合理调整JVM参数。五、Spring核心面试题1.SpringIoC原理答案:IoC即控制反转,核心是把对象的创建、管理、依赖注入交给Spring容器,不再由开发者手动new对象。传统开发是开发者主动创建对象,控制权在代码中;IoC将控制权反转给容器,容器统一管理所有Bean,按需注入依赖。核心作用:解耦,降低代码耦合度,方便项目维护和单元测试。2.SpringBean的生命周期答案:1、实例化:Spring通过反射创建Bean对象。2、属性填充:自动完成依赖注入,赋值属性。3、初始化前置处理:执行BeanPostProcessor前置方法。4、初始化:执行InitializingBean方法、自定义init方法。5、初始化后置处理:执行BeanPostProcessor后置方法。6、销毁:容器关闭时,执行DisposableBean销毁方法、自定义destroy方法。3.SpringAOP原理及应用场景答案:AOP即面向切面编程,核心是在不修改原有业务代码的前提下,对方法进行增强,基于动态代理实现。底层原理:目标类有接口用JDK动态代理,无接口用CGLIB字节码增强代理。常用场景:日志记录、事务控制、权限校验、接口限流、性能监控、缓存处理。4.Spring事务传播机制有哪些答案:一共7种传播机制,重点掌握5个常用:1、REQUIRED(默认):有事务就加入,无事务新建事务。最常用。2、SUPPORTS:有事务就加入,无事务非事务运行。3、MANDATORY:必须在事务内运行,无事务直接报错。4、REQUIRES_NEW:新建独立事务,暂停原有事务,互不影响。5、NESTED:嵌套事务,依赖父事务,父事务回滚子事务必须回滚,子事务回滚不影响父事务。六、MySQL数据库面试题1.InnoDB和MyISAM的区别答案:1、事务支持:InnoDB支持事务、ACID特性;MyISAM不支持事务。2、锁机制:InnoDB支持行锁、表锁;MyISAM只有表锁。3、并发能力:InnoDB行锁并发性能高;MyISAM读写互斥,并发差。4、崩溃恢复:InnoDB支持故障自动恢复;MyISAM崩溃易丢失数据。5、外键:InnoDB支持外键;MyISAM不支持。实战:MySQL5.5之后默认InnoDB,企业开发一律使用InnoDB。2.索引底层原理(B+树)答案:MySQL索引底层采用B+树结构,所有数据都存储在叶子节点,非叶子节点只存储索引字段和指针,不存真实数据。特点:1、层级少,查询效率高,时间复杂度稳定O(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 28705-2026无损检测铁磁性金属部件脉冲涡流检测
- 26学年秋季人教版初中语文七上期中复习题-词语
- 四川省泸州市2026年七年级上学期期中数学试卷附答案
- 加氢裂化(处理)装置操作工岗中岗位安全责任制考核试卷含答案
- 润滑油脂生产工岗位理论实践考核试卷含答案
- 无线电监测员岗前知识评估考核试卷含答案
- 手术器械装配调试工岗前专项实操考核试卷含答案
- 2025年职业技能鉴定考试(有害生物防制员中级)历年参考题库含答案详解
- 2025年智能楼宇管理员职业技能等级真题解析卷
- 2025年中级会计考试《经济法》真题及答案解析(完整版)
- 2026年注册(营养师、营养指导员)资格证必过考试题库与答案
- 2026年软件工程开发工程师试题及答案
- 消防培训防盗、防火安全课件
- 2026中国母婴新零售全渠道融合与私域流量运营策略报告
- 新国职健身教练考试题库及答案
- 2025年10月自考02126应用文写作试卷及答案
- 2026年监理员考试题库及答案
- 妇科肿瘤整合加速康复外科管理中国专家共识(2026年版)
- 2026年小学道德与法治教师专业考试试题及答案
- 2026年屠宰兽医卫生检验员考试题库(含考点)
- 2026安徽交控集团所属企业招聘笔试历年典型考点题库附带答案详解
评论
0/150
提交评论