Java高频面试真题及详细答案(企业真实版)_第1页
Java高频面试真题及详细答案(企业真实版)_第2页
Java高频面试真题及详细答案(企业真实版)_第3页
Java高频面试真题及详细答案(企业真实版)_第4页
Java高频面试真题及详细答案(企业真实版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java高频面试真题及详细答案(企业真实版)一、Java基础核心面试题1.说说==和equals的区别?这是Java最基础的高频问题,核心区别是比较的内容不同:==是运算符,既可以比较基本数据类型,也可以比较引用数据类型。基本类型比较的是数值本身,引用类型比较的是对象的内存地址。equals是Object类的方法,默认情况下和==效果一致,也是比较对象地址。但像String、Integer这类常用类都重写了equals方法,重写后比较的是对象的内容值,不再比较地址。日常开发中,字符串对比、对象内容对比一律用equals,基本类型数值对比用==。2.String、StringBuilder、StringBuffer的区别?三者核心差异在于可变性和线程安全:String是不可变字符串,底层是被final修饰的字符数组。每次拼接、修改字符串都会生成新的String对象,频繁操作会产生大量垃圾对象,效率最低。StringBuilder和StringBuffer是可变字符串,修改操作不会创建新对象。其中StringBuilder线程不安全、效率高;StringBuffer所有方法都加了synchronized锁,线程安全、效率偏低。使用场景:少量字符串操作用String;单线程大量拼接用StringBuilder;多线程环境字符串操作用StringBuffer。3.final、finally、finalize的区别?三个单词看似相似,作用完全不同:final是修饰符,可以修饰类、方法、变量。修饰类表示类不能被继承;修饰方法表示方法不能被重写;修饰变量表示变量是常量,只能赋值一次。finally是异常处理的关键字,搭配try-catch使用。无论代码正常执行还是抛出异常,finally中的代码一定会执行,常用于关闭流、释放资源。finalize是Object类的废弃方法,JVM垃圾回收前会调用该方法,用于对象最后的资源释放。但该方法执行时机不确定、无法保证调用,现在开发中已经完全不推荐使用。4.接口和抽象类的区别?1.定义区别:抽象类用abstract修饰,可以包含普通方法、抽象方法、构造方法、成员变量;接口默认是public,只能定义常量、抽象方法(JDK8后支持默认方法、静态方法,JDK9支持私有方法)。2.继承区别:类只能单继承一个抽象类,但可以多实现多个接口,解决了单继承的局限性。3.构造方法:抽象类有构造方法,用于子类初始化;接口没有构造方法,不能实例化。4.设计思想:抽象类是模板设计,抽取子类通用属性和行为;接口是行为规范,定义类必须具备的功能。二、Java集合面试题1.ArrayList和LinkedList的区别?底层结构和性能差异是核心:ArrayList底层是动态数组,内存连续。随机访问、查询元素效率极高,时间复杂度O(1);增删元素需要移动数组元素,效率较低。LinkedList底层是双向链表,内存不连续。没有数组扩容和元素移动的开销,头尾增删效率高;但随机查询需要遍历链表,效率极低。场景选择:大量查询、少量增删用ArrayList;大量增删、少量查询用LinkedList。2.HashMap的底层原理?JDK1.7和JDK1.8区别?HashMap是基于哈希表实现的键值对集合,无序、允许空键空值、线程不安全。底层核心是「数组+链表+红黑树」。存储流程:通过key的hash值计算数组下标,若下标位置无元素,直接存入;若有元素,发生哈希冲突,挂链表;当链表长度超过8且数组容量大于64时,链表转为红黑树,提升查询效率。JDK1.7与1.8核心区别:1.底层结构:1.7是数组+链表;1.8新增红黑树结构,解决链表过长查询慢的问题。2.插入方式:1.7链表头插法,多线程下容易出现环形链表死循环;1.8改为尾插法,规避死循环问题。3.扩容优化:1.8扩容后元素位置重哈希更高效,不需要重新计算hash值。3.HashMap和HashTable、ConcurrentHashMap的区别?1.HashTable:线程安全,所有方法加synchronized全局锁,效率极低;不允许空键空值,目前基本被淘汰。2.HashMap:线程不安全,效率高;允许空键空值,单线程首选。3.ConcurrentHashMap:线程安全且效率高,JDK1.8采用CAS+synchronized分段锁,只锁定当前哈希桶位置,不影响其他位置操作,是多线程下键值对存储的首选。三、多线程与并发面试题1.线程和进程的区别?进程是操作系统资源分配的最小单位,线程是CPU调度的最小单位。一个进程包含多个线程,线程共享进程的内存资源(堆、方法区),线程有独立的栈空间。进程之间相互独立,开销大;线程切换开销极小,资源共享效率高。简单来说:进程是程序的一次运行,线程是进程中的执行单元。2.synchronized和Lock的区别?1.锁类型:synchronized是内置锁,JVM底层实现,自动加锁解锁;Lock是显式锁,代码手动加锁、手动解锁。2.灵活性:Lock功能更强大,可实现公平锁、非公平锁、可中断锁、超时锁;synchronized只能是非公平锁,无法中断。3.性能:JDK1.6之后synchronized做了大量优化(偏向锁、轻量级锁、重量级锁),性能和Lock基本持平,低并发下更优。4.适用场景:简单同步场景用synchronized;需要精细控制锁、公平锁、锁超时场景用ReentrantLock。3.什么是线程池?核心参数有哪些?线程池是管理线程的容器,核心作用是复用线程、减少线程创建销毁开销、控制并发数量,避免大量线程抢占资源导致系统崩溃。线程池核心7大参数:1.核心线程数:线程池常驻的线程数量,即使空闲也不会销毁;2.最大线程数:线程池允许的最大线程数量;3.空闲超时时间:非核心线程空闲后的销毁等待时间;4.时间单位:超时时间的单位;5.任务队列:存储等待执行的任务;6.线程工厂:创建线程的工厂,可自定义线程名称、优先级;7.拒绝策略:线程池满了之后,处理新任务的策略。开发规范:禁止使用Executors创建线程池,必须手动通过ThreadPoolExecutor自定义,避免资源耗尽风险。四、JVM面试题1.JVM内存区域划分?JVM运行时数据区分为5个部分,各区域职责不同:1.程序计数器:线程私有,记录当前线程执行的字节码行号,是唯一没有内存溢出的区域;2.虚拟机栈:线程私有,存储局部变量、方法栈帧,方法执行时创建,结束销毁;3.本地方法栈:线程私有,执行native本地方法;4.堆:线程共享,所有对象和数组都在堆中分配,是垃圾回收的主要区域;5.方法区:线程共享,存储类信息、常量、静态变量、编译后的代码。2.垃圾回收机制(GC)原理?哪些对象会被回收?GC是JVM自动回收堆中无用对象内存的机制,无需手动释放,避免内存泄漏。可回收对象:没有任何引用指向的对象,包括引用赋值为null、对象超出作用域、循环引用无外部引用等。回收算法:年轻代用复制算法,老年代用标记清除、标记整理算法。日常GC分为MinorGC(年轻代回收,频繁、速度快)和FullGC(整堆回收,耗时久、尽量避免)。3.内存溢出和内存泄漏的区别?内存泄漏:程序中无用对象持续被引用,无法被GC回收,长期堆积会占用大量内存,是过程问题。比如静态集合持续存放对象、未关闭流、未释放连接。内存溢出:内存空间不足,没有足够内存分配给新对象,程序直接报错崩溃,是结果问题。大部分内存溢出都是长期内存泄漏导致的。五、Spring核心面试题1.Spring的核心思想是什么?Spring两大核心:IOC控制反转和AOP面向切面编程。IOC:将对象的创建、管理、依赖注入交给Spring容器,不再由开发者手动new对象,实现组件解耦,方便项目维护和测试。AOP:在不修改原有业务代码的前提下,对方法进行增强,实现日志记录、事务控制、权限校验、性能监控等通用功能,做到业务代码和通用功能解耦。2.SpringBean的生命周期?完整生命周期流程:1.实例化:Spring扫描bean,通过反射创建bean实例;2.属性填充:完成依赖注入,给bean的属性赋值;3.初始化:执行前置处理方法、自定义初始化方法、后置处理方法;4.销毁:容器关闭时,执行bean的销毁方法;5.回收:bean被GC回收。3.Spring事务传播机制有哪些?常用的是哪种?Spring共7种事务传播机制,开发中最常用的是REQUIRED:1.REQUIRED:默认级别,当前有事务就加入,没有就新建事务;2.REQUIRES_NEW:新建独立事务,暂停当前事务;3.SUPPORTS:有事务就加入,没有就非事务运行;4.NOT_SUPPORTED:始终非事务运行;5.MANDATORY:必须在事务中运行,否则报错;6.NEVER:必须非事务运行,否则报错;7.NESTED:嵌套事务,依赖父事务,父事务回转子事务必须回滚,子事务回滚不影响父事务。六、MySQL数据库面试题1.InnoDB和MyISAM的区别?1.事务支持:InnoDB支持事务、ACID特性;MyISAM不支持事务。2.锁机制:InnoDB支持行锁、表锁,并发性能高;MyISAM只有表锁,并发读写冲突严重。3.外键:InnoDB支持外键约束;MyISAM不支持。4.崩溃恢复:InnoDB支持事务日志,崩溃可恢复数据;MyISAM崩溃易丢失数据。5.适用场景:InnoDB是默认引擎,适合增删改查频繁、需要事务的业务;MyISAM适合静态、大量查询、极少修改的场景。2.索引失效的常见场景?1.索引列使用like以%开头,如%xxx;2.索引列参与运算、函数调用、类型转换;3.使用or连接非索引字段;4.违背最左匹配原则(联合索引);5.MySQL优化器判断全表扫描比索引更快,自动放弃索引。3.什么是MVCC?原理是什么?MVCC即多版本并发控制,是InnoDB实现读写不加锁、提升并发性能的核心机制,主要用于解决事务隔离级别中的可重复读、读已提交。核心原理:通过数据版本链、readview读视图,让读操作读取数据的历史版本,避免读写阻塞,实现无锁并发查询。七、Redis高频面试题1.Redis为什么快?1.基于内存操作,没有磁盘IO开销,读写速度远超数据库;2.单线程模型,避免多线程锁竞争、线程切换开销;3.IO多路复用,单线程高效处理大量客户端连接;4.数据结构简单,底层优化极致,操作效率高。2.Redis过期键删除策略?Redis采用三种策略结合,兼顾性能和内存:1.定时删除:设置过期时间,到期立即删除,占用CPU资源,极少用;2.惰性删除:访问键时判

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论