版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java核心高频面试题及详细答案(实战版)一、Java基础语法面试题1、JDK、JRE、JVM的区别是什么?答案:三者是层层包含的关系,范围从大到小依次是JDK>JRE>JVM。1、JVM(Java虚拟机):是Java程序运行的核心载体,只负责解析、执行class字节码文件,不包含任何开发工具,是Java跨平台的根本,不同系统有对应的虚拟机版本。2、JRE(Java运行环境):包含JVM+Java核心类库。只用于运行已经编译好的Java程序,普通用户运行Java软件只需安装JRE,无法用于开发代码。3、JDK(Java开发工具包):包含JRE+编译、调试、打包等开发工具(javac、java、jar等)。是开发Java程序必须安装的环境,兼顾开发和运行功能。2、==和equals()的区别?答案:1、==是运算符,可以用于基本数据类型和引用数据类型。-基本数据类型:比较的是变量的实际数值是否相等;-引用数据类型:比较的是对象的内存地址是否相同,也就是判断是否为同一个对象。2、equals()是Object类的方法,仅适用于引用数据类型。-原生Object的equals()方法底层就是==,依旧比较内存地址;-String、Integer等包装类重写了equals(),重写后只比较对象内容,不比较地址。日常开发中,比较字符串、对象内容是否一致,必须使用equals()。3、String、StringBuilder、StringBuffer的区别?答案:1、String:字符串常量,底层是被final修饰的字符数组,不可变。每次拼接、修改字符串都会生成新对象,频繁操作会产生大量垃圾对象,效率最低。适合少量字符串定义、常量赋值场景。2、StringBuffer:字符串变量,内容可变,线程安全,所有方法都加了synchronized锁。多线程环境下字符串拼接、修改优先使用,性能略低。3、StringBuilder:字符串变量,内容可变,线程不安全,无锁机制。单线程环境下性能最优,日常开发90%场景都使用它。总结场景:常量字符串用String,单线程频繁拼接用StringBuilder,多线程频繁拼接用StringBuffer。4、final、finally、finalize的区别?答案:1、final:是修饰符,用于修饰变量、方法、类。-修饰变量:变量变为常量,只能赋值一次,不可修改;-修饰方法:方法不能被重写;-修饰类:类不能被继承。2、finally:是异常处理关键字,搭配try-catch使用。无论代码是否出现异常、是否return,finally中的代码一定会执行(除JVM退出场景),常用于释放资源、关闭流、关闭连接。3、finalize():是Object类的废弃方法,JDK9之后已废弃。原本用于垃圾回收前触发,由虚拟机调用,用于对象资源收尾,但是执行时机不确定、无法保证执行,开发中完全不使用。二、面向对象OOP面试题1、面向对象的四大特性是什么?分别怎么理解?答案:四大特性:封装、继承、多态、抽象。1、封装:将类的属性私有化,通过public的get/set方法对外提供访问。隐藏内部实现细节,保证数据安全,降低代码耦合度。2、继承:子类继承父类的属性和方法,实现代码复用。子类可以在父类基础上扩展新功能,Java是单继承,一个子类只能有一个直接父类,可多实现接口。3、多态:同一行为,不同对象表现出不同结果。核心前提:继承、方法重写、父类引用指向子类对象。分为编译多态(方法重载)和运行多态(方法重写)。4、抽象:抽取事物的共性特征,忽略细节。通过抽象类或接口实现,定义规范、不关注具体实现,强制子类遵守统一标准。2、重载和重写的区别?答案:1、重载(Overload):发生在同一个类中-方法名必须相同,参数列表(个数、类型、顺序)必须不同;-返回值、访问修饰符不做限制;-属于编译期多态,代码编译时就确定调用哪个方法。2、重写(Override):发生在父子类之间-方法名、参数列表、返回值必须和父类完全一致;-访问权限不能比父类更严格(父类protected,子类不能是private);-抛出的异常不能比父类更大;-属于运行期多态,程序运行时才确定调用子类方法。3、抽象类和接口的区别?答案:1、定义与继承:抽象类用abstract修饰,子类是单继承;接口用interface定义,类可以多实现接口。2、成员变量:抽象类可以有普通变量、常量;接口默认只能是publicstaticfinal常量(JDK8之前)。3、方法:抽象类可以有普通方法、抽象方法、构造方法;JDK8后接口有默认方法、静态方法,JDK9后有私有方法,接口没有构造方法。4、设计思想:抽象类是模板设计,描述一类事物的共性;接口是行为规范,描述对象具备的能力。开发规范:优先使用接口,尽量少用抽象类。三、Java集合面试题1、ArrayList和LinkedList的区别?答案:1、底层结构:ArrayList底层是动态数组;LinkedList底层是双向链表。2、查询效率:ArrayList支持随机访问,通过下标查询速度极快;LinkedList只能从头节点/尾节点遍历查询,效率低。3、增删效率:ArrayList中间增删元素需要移动数组元素,效率低;LinkedList只需要修改节点指针,无需移动数据,中间增删效率更高。4、内存占用:ArrayList会预留扩容空间,存在内存冗余;LinkedList每个节点都保存前后指针,单个元素内存占用更大。场景选择:大量查询、少量增删用ArrayList;大量增删、少量查询用LinkedList。2、HashMap的底层原理?JDK1.8做了哪些优化?答案:HashMap底层核心是数组+链表+红黑树,基于哈希表实现,用于存储键值对数据,允许null键null值,线程不安全。存储流程:通过key计算哈希值,确定数组下标;如果下标无元素,直接存入;如果有元素,发生哈希冲突,挂载链表;链表长度超过8、数组容量大于64时,链表转为红黑树,提升查询效率。JDK1.8优化点:1、底层由纯数组+链表,升级为数组+链表+红黑树,解决链表过长查询慢的问题;2、优化哈希算法,减少哈希冲突概率;3、扩容机制优化,避免频繁重新计算哈希;4、链表长度阈值:大于8转红黑树,小于6退化为链表。3、HashMap和HashTable的区别?答案:1、线程安全:HashMap线程不安全;HashTable方法加了synchronized,线程安全。2、null值支持:HashMap允许一个null键、多个null值;HashTable不允许null键和null值。3、效率:HashMap无锁,并发效率高;HashTable锁粒度大,效率极低。4、初始容量:HashMap初始容量16,扩容2倍;HashTable初始容量11,扩容2倍+1。开发建议:并发场景不用HashTable,优先使用ConcurrentHashMap。四、多线程面试题1、线程和进程的区别?答案:1、进程:是操作系统资源分配的最小单位,独立占用内存、CPU资源,进程之间相互隔离、互不干扰,开销大。2、线程:是CPU调度的最小单位,依附于进程存在,一个进程包含多个线程,线程之间共享进程资源,切换开销小、效率高。3、核心区别:进程独立隔离,线程共享资源;进程开销大,线程轻量高效。Java程序默认是单进程多线程程序。2、synchronized和Lock的区别?答案:1、底层层面:synchronized是JVM底层原生锁,内置关键字;Lock是代码层面的锁,是接口,需要手动实现。2、锁操作:synchronized自动加锁、自动释放锁,无需手动控制;Lock需要手动lock()加锁、unlock()释放锁,必须在finally中释放,避免死锁。3、锁特性:synchronized是悲观锁、可重入、不可中断;Lock支持可中断、可超时、公平锁/非公平锁,灵活性更高。4、场景:简单同步场景用synchronized;高并发、需要灵活控制锁的场景用ReentrantLock。3、什么是线程死锁?如何避免死锁?答案:死锁定义:两个或多个线程互相持有对方需要的锁,同时等待对方释放锁,所有线程永久阻塞,程序卡死无法运行。死锁四大必要条件:互斥条件、请求与保持条件、不可剥夺条件、循环等待条件。避免方式:1、统一锁的获取顺序,打破循环等待;2、设置锁超时时间,避免永久等待;3、减少嵌套锁,尽量只加一把锁;4、使用可中断锁,主动终止阻塞线程。五、JVM与垃圾回收面试题1、Java的内存区域划分?答案:JVM运行时数据区分为5个核心区域:1、程序计数器:线程私有,记录当前线程执行的字节码行号,是唯一一个无内存溢出的区域。2、虚拟机栈:线程私有,存储局部变量、方法参数、栈帧,方法执行结束自动释放,会出现StackOverflowError。3、本地方法栈:线程私有,用于执行native本地方法,功能和虚拟机栈类似。4、堆内存:线程共享,是垃圾回收的核心区域,存储所有对象实例和数组,分为新生代、老年代,会出现OOM内存溢出。5、方法区:线程共享,存储类信息、常量、静态变量、编译后的代码,JDK8后元空间取代永久代。2、GC的种类和优缺点?CMS和G1的区别?答案:常见垃圾回收器:Serial、Parallel、CMS、G1、ZGC。CMS回收器:专注低延迟的并发回收器,以最短停顿时间为目标,适合互联网线上服务。缺点是内存碎片多、CPU占用高,无法处理浮动垃圾。G1回收器:JDK9默认回收器,将堆内存划分为多个分区,可控制停顿时间,兼顾吞吐量和低延迟,解决了CMS内存碎片问题,适合大内存服务。核心区别:CMS侧重并发低停顿,碎片严重;G1可控停顿、内存规整、适用性更广,是目前主流商用回收器。3、对象的创建与回收过程?答案:对象创建:类加载校验>分配内存>初始化零值>设置对象头>执行构造方法。对象回收判定:采用可达性分析算法,从GC根节点遍历,无法遍历到的对象判定为垃圾对象。回收流程:新生代对象频繁MinorGC,存活多次进入老年代;老年代空间不足触发MajorGC,耗时较长,线上需尽量避免频繁FullGC。六、异常与常用机制面试题1、Error和Exception的区别?答案:1、Error:系统级严重错误,属于不可处理异常,是JVM运行异常。比如内存溢出、栈溢出、虚拟机崩溃,程序无法恢复,只能终止。2、Exception:代码级异常,可捕获、可处理,分为编译时异常(受检
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026专业咨询服务行业市场规模深度分析及投资规划报告
- 2026水处理行业智能运维平台商业模式创新分析报告
- 2026年九年级化学上学期期中考试模拟试题与答案详解(第08套)
- 2026食品科技行业创新方向与投资回报预测报告
- 2026汽车零部件制造业全面分析及行业竞争格局演变与投资布局决策报告
- 2026基层医疗市场发展现状及投资机会研究报告
- 2026日本机器人制造行业市场需求分析政策支持市场潜力发展报告
- 2026柔性电子行业市场研究及行业前沿与投资价值研究报告
- 基于第一性原理的SiC材料n型掺杂微观机制与性能调控研究
- 基于竞价实例的云工作流调度策略与成本优化研究
- 《工程勘察设计收费标准》(2002年修订本)
- 农田灌溉国民经济效益费用流量表
- JT-T-1230-2018机动车发动机冷却液无机阴离子测定法离子色谱法
- 知服定制产品系列考试附有答案
- 风湿免疫疾病的凝血异常
- 人工智能创新大赛报告模板案例
- 体质测试成绩表(自动统计数据)(小学、初中)
- 无人机技术在公路基础设施检测中的应用
- 第二单元6简易木艺作品我制作(课件)-五年级上册劳动人教版
- 山洪灾害中设计暴雨计算方法
- 英语戏剧俱乐部-English-Drama-club课件
评论
0/150
提交评论