版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面试题大全(完整版·真实职场版)本题库整理一线互联网、传统软件企业高频Java面试真题,涵盖Java基础、面向对象、集合框架、多线程并发、JVM、Spring全家桶、数据库、Redis、MQ、微服务、算法等核心板块,所有题目均为面试官高频提问题型,解析贴合实战,无空洞理论,适合面试刷题、查漏补缺。一、Java基础核心面试题1.JDK、JRE、JVM的区别与联系JVM是Java虚拟机,是Java程序运行的核心载体,负责加载、执行字节码文件,实现了Java跨平台的特性,不同系统有对应版本的JVM。JRE是Java运行环境,包含JVM和Java核心运行类库,仅用于运行Java程序,不具备代码编译、开发的能力,普通用户运行Java程序只需安装JRE。JDK是Java开发工具包,包含JRE、Java编译工具、调试工具、打包工具等开发必备组件,是开发Java项目的必备环境。三者层级关系:JDK>JRE>JVM。2.Java基本数据类型有哪些?区别是什么?Java共有8种基本数据类型,分为四大类:整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)浮点型:float(4字节)、double(8字节)字符型:char(2字节)布尔型:boolean(1字节,仅有true/false两个值)核心区别:基本类型直接存储数值,存储在栈内存,赋值是值传递;包装类是对象,存储在堆内存,赋值是引用传递。补充:long类型赋值必须加L后缀,float必须加F后缀,否则会编译报错。3.==和equals()的区别==是运算符,可用于基本类型和引用类型:基本类型比较数值是否相等;引用类型比较对象的内存地址是否相同。equals()是Object类的方法,默认逻辑和==一致,比较对象地址。像String、Integer等类重写了该方法,重写后用于比较对象的内容是否相等。实战要点:字符串比较必须使用equals(),禁止使用==,避免地址比较导致的业务bug。4.String、StringBuilder、StringBuffer的区别String:不可变字符串,底层是final修饰的字符数组,每次拼接、修改都会生成新对象,频繁操作会产生大量垃圾对象,效率最低。StringBuffer:可变字符串,线程安全,所有方法加了synchronized锁,多线程场景下使用,并发效率较低。StringBuilder:可变字符串,线程不安全,无锁机制,单线程场景下效率最高,日常开发优先使用。开发规范:少量字符串拼接用String;频繁拼接、循环拼接优先用StringBuilder。5.final、finally、finalize的区别final:修饰符,可修饰类、方法、变量。final类不可被继承;final方法不可被重写;final变量赋值后不可修改(常量)。finally:异常处理关键字,搭配try-catch使用,代码块中的代码无论是否发生异常都会执行,常用于释放资源(关闭流、连接)。finalize:Object类的废弃方法,JVM垃圾回收前会调用该方法,用于对象资源回收,目前已被废弃,不推荐使用。6.接口和抽象类的区别1、定义修饰:抽象类用abstract修饰;接口用interface修饰。2、继承规则:类只能单继承抽象类;类可以多实现接口。3、成员特性:抽象类可以有构造方法、成员变量、普通方法、抽象方法;JDK8之前接口只有常量和抽象方法,JDK8支持默认方法、静态方法,JDK9支持私有方法。4、设计思想:抽象类是对事物的抽象,包含属性和行为;接口是对行为的抽象,仅定义行为规范。7.重载和重写的区别重载:发生在同一个类中,方法名相同,参数列表(个数、类型、顺序)不同,与返回值、权限修饰符无关,属于编译时多态。重写:发生在父子类中,子类重写父类的非私有、非final、非静态方法,方法名、参数列表、返回值必须一致,权限修饰符范围大于等于父类,属于运行时多态。二、集合框架高频面试题1.ArrayList和LinkedList的区别底层结构:ArrayList基于动态数组;LinkedList基于双向链表。查询效率:ArrayList支持随机访问,通过下标查询速度极快;LinkedList只能遍历查询,效率低。增删效率:ArrayList增删需要移动数组元素,效率低;LinkedList仅修改节点指针,增删效率高。内存占用:ArrayList内存连续,存在一定扩容冗余空间;LinkedList每个节点存储数据和指针,内存占用更高。开发场景:高频查询、少量增删用ArrayList;高频增删、少量查询用LinkedList。2.HashMap底层原理(JDK1.8)HashMap底层采用数组+链表+红黑树的结构,基于哈希表实现,默认初始容量16,负载因子0.75。存储流程:通过key的hash值计算数组下标,若下标位置无元素,直接存入;若有元素,发生哈希冲突,采用链地址法解决。链表长度小于8时,继续挂载链表节点;链表长度大于等于8且数组容量大于等于64时,链表转为红黑树,提升查询效率。扩容机制:当元素数量达到容量*负载因子时触发扩容,容量翻倍,重新哈希分配元素位置。JDK1.8优化:新增红黑树结构,解决链表过长查询效率低的问题;插入元素采用尾插法,避免JDK1.7头插法导致的循环链表问题。3.HashMap和HashTable的区别1、线程安全:HashMap线程不安全;HashTable线程安全,所有方法加锁。2、null值支持:HashMap允许key、value为null(key仅一个null);HashTable不允许key、value为null。3、效率:HashMap无锁,并发效率高;HashTable全局锁,效率极低。4、初始容量:HashMap默认16;HashTable默认11。实战替代:多线程场景不使用HashTable,推荐使用ConcurrentHashMap。4.ConcurrentHashMap底层原理JDK1.7:采用分段锁机制,将集合分为16个分段,每个分段独立加锁,降低锁粒度,提升并发效率。JDK1.8:摒弃分段锁,采用CAS+synchronized锁机制,锁粒度细化到数组节点。底层依旧是数组+链表+红黑树,并发性能大幅提升。仅对当前操作的节点加锁,不影响其他节点的读写操作,支持高并发场景。5.HashSet底层原理HashSet底层基于HashMap实现,HashSet的元素作为HashMap的key,value统一为固定的空对象。因此HashSet具备去重特性,规则与HashMapkey去重规则一致。三、多线程与并发面试题1.线程和进程的区别进程是操作系统资源分配的最小单位,独立占用内存、CPU资源,进程之间相互隔离,切换开销大。线程是CPU调度的最小单位,隶属于进程,一个进程包含多个线程,线程共享进程资源,切换开销小,并发能力强。2.Java创建线程的四种方式1、继承Thread类,重写run()方法,调用start()启动线程。2、实现Runnable接口,重写run()方法,传入Thread对象启动线程。3、实现Callable接口,重写call()方法,支持返回值、抛出异常,搭配FutureTask使用。4、通过线程池创建线程,复用线程资源,避免频繁创建销毁线程的开销,企业开发主流方式。3.start()和run()的区别start():开启新线程,由JVM调用run()方法执行线程任务,是真正的异步执行,只能调用一次。run():普通成员方法,直接调用不会开启新线程,仅在当前主线程中同步执行,可重复调用。4.synchronized和Lock锁的区别1、锁类型:synchronized是内置锁、隐式锁,JVM层面实现;Lock是显示锁,代码层面实现,需要手动加锁、释放锁。2、灵活性:Lock灵活性更高,可实现公平锁、非公平锁、可中断锁、超时锁;synchronized仅支持非公平锁,功能单一。3、性能:低并发场景两者性能相近,高并发下Lock锁粒度更细,性能优于synchronized。4、解锁机制:synchronized代码执行完毕或异常自动解锁;Lock必须手动在finally块解锁,否则会造成死锁。5.线程池核心参数及工作原理核心参数:核心线程数、最大线程数、空闲线程存活时间、任务队列、线程工厂、拒绝策略。工作流程:提交任务后,首先判断核心线程数是否已满,未满则创建核心线程执行任务;核心线程已满,任务进入队列排队;队列已满,创建非核心线程执行任务;线程数达到最大值,触发拒绝策略。开发规范:禁止使用Executors创建线程池,必须手动通过ThreadPoolExecutor自定义,避免资源耗尽风险。6.volatile关键字的作用1、保证可见性:一个线程修改共享变量,其他线程可立即感知变量最新值。2、禁止指令重排:避免JVM、CPU指令优化导致的代码执行顺序错乱。3、不保证原子性:volatile无法保证复合操作(i++)的原子性,不能替代锁实现线程安全。四、JVM虚拟机面试题1.JVM内存区域划分程序计数器:线程私有,记录当前线程执行的字节码行号,是唯一无内存溢出的区域。虚拟机栈:线程私有,存储局部变量、方法参数、栈帧,方法执行创建栈帧,执行完毕销毁。本地方法栈:线程私有,为Native本地方法服务。堆内存:线程共享,存储所有对象实例、数组,是垃圾回收的主要区域,分为新生代、老年代。方法区:线程共享,存储类信息、常量、静态变量、编译后的代码,JDK1.8后改为元空间,使用本地内存。2.垃圾回收机制GC原理GC核心是回收堆内存中无引用的对象,释放内存空间,避免内存泄漏。回收流程:新生代对象频繁创建销毁,采用复制算法,效率高;老年代对象存活率高,采用标记清除、标记整理算法。MinorGC:新生代垃圾回收,频率高、速度快;FullGC:整堆回收(新生代+老年代),频率低、耗时久,尽量避免频繁触发。3.四种引用类型强引用:默认引用方式,只要有强引用,对象永远不会被回收。软引用:内存不足时才会被回收,适合缓存场景。弱引用:下次GC一定会被回收,适合临时存储数据。虚引用:最弱的引用,无实际存储作用,仅用于监控对象回收状态。4.常见内存溢出问题及解决方案堆内存溢出:对象创建过多、缓存未清理、循环创建对象。解决方案:优化代码、合理设置JVM堆参数、使用软引用缓存。栈内存溢出:方法递归过深、栈帧过多。解决方案:优化递归逻辑、调整栈内存大小。五、Spring核心面试题1.SpringIoC原理IoC即控制反转,将对象的创建、管理、依赖注入权限交给Spring容器,替代开发者手动new对象。核心思想是反转资源获取方式,由主动创建变为被动接收。核心作用:解耦代码、统一管理Bean、方便对象依赖注入,大幅降低代码耦合度。2.SpringBean的生命周期1、实例化:Spring容器扫描配置,通过反射创建Bean实例。2、属性填充:完成依赖注入,给Bean的属性赋值。3、初始化:执行前置处理方法、自定义初始化方法、后置处理方法。4、销毁:容器关闭时,执行Bean的销毁方法。3.SpringAOP原理及应用场景AOP即面向切面编程,基于动态代理实现,在不修改原有业务代码的前提下,对方法进行增强,实现业务解耦。核心概念:切点、通知(前置、后置、异常、环绕通知)、切面、连接点。应用场景:日志记录、事务控制、权限校验、性能监控、缓存处理。4.Spring事务传播机制和隔离级别传播机制(常用):REQUIRED(默认,有事务加入,无则新建)、SUPPORTS(支持事务,无则非事务运行)、REQUIRES_NEW(新建独立事务,暂停原有事务)。隔离级别:读未提交、读已提交(默认)、可重复读、串行化,解决脏读、不可重复读、幻读问题。5.SpringMVC执行流程1、客户端发送请求,被前端控制器DispatcherServlet拦截。2、DispatcherServlet调用处理器映射器,查找对应的Controller处理器。3、调用处理器适配器,执行Controller中的业务方法。4、Controller返回数据和视图信息,封装为ModelAndView。5、视图解析器解析视图,渲染页面,响应客户端。六、数据库面试题(MySQL)1.InnoDB和MyISAM的区别1、事务支持:InnoDB支持事务、ACID特性;MyISAM不支持事务。2、锁机制:InnoDB支持行锁、表锁;MyISAM仅支持表锁。3、并发能力:InnoDB并发性能高;MyISAM并发读写冲突严重。4、崩溃恢复:InnoDB支持事务回滚、崩溃恢复;MyISAM崩溃易丢失数据。5、外键:InnoDB支持外键;MyISAM不支持。生产环境默认使用InnoDB引擎。2.索引原理及优缺点MySQL索引底层基于B+树实现,平衡多路查找树,所有数据存储在叶子节点,有序排列,支持范围查询。优点:大幅提升查询效率、减少数据库IO、加速排序和分组。缺点:占用磁盘空间、降低增删改效率(索引需要同步维护)。3.慢查询优化方案1、开启慢查询日志,定位慢SQL。2、通过explain分析执行计划,查看索引失效、全表扫描问题。3、合理建立索引,避免索引失效(like%前缀、字段类型转换、or无索引等)。4、优化SQL语句,避免select*、减少子查询、拆分大事务。5、分库分表、读写分离,分担数据库压力。4.事务四大特性ACID原子性:事务要么全部执行成功,要么全部回滚,不可拆分。一致性:事务执行前后,数据库数据状态保持一致。隔离性:多个事务并发执行时,相互隔离,互不干扰。持久性:事务提交成功后,数据永久落地,宕机不丢失。七、Redis高频面试题1.Redis为什么快1、基于内存操作,无需磁盘IO,读写速度极高。2、单线程模型,避免线程切换、锁竞争开销。3、IO多路复用模型,高效处理大量客户端请求。4、数据结构设计精简,操作逻辑简单高效。2.Redis持久化机制RDB:快照持久化,定时将内存数据写入磁盘,恢复速度快,可能丢失少量数据。AOF:日志持久化,记录每一条写操作指令,数据安全性高,文件体积大,恢复速度慢。生产环境推荐RDB+AOF混合持久化,兼顾性能和数据安全。3.缓存穿透、击穿、雪崩解决方案缓存穿透:查询不存在的数据,绕过缓存直接查库。解决方案:布隆过滤器、空值缓存、接口校验。缓存击穿:热点key过期,大量请求直击数据库。解决方案:互斥锁、热点key永不过期。缓存雪崩:大量key同时过期/缓存宕机,请求全部打库。解决方案:过期时间随机化、集群部署、多级缓存、服务熔断降级。八、微服务&中间件面试题1.微服务优缺点优点:服务独立拆分、独立部署、独立迭代、容错性高、便于团队协作、技术栈灵活。缺点:分布式复杂度高、服务调用链路长、运维成本高、需要解决注册发现、熔断、限流、分布式事务问题。2.服务注册与发现原理(Nacos/Eureka)服务启动后向注册中心注册自身服务信息,注册中心维护服务列表;消费者定期从注册中心拉取服务列表,调用服务时通过负载均衡选择节点,实现服务发现。3.熔断、限流、降级的区别熔断:服务故障时,断开调用链路,避免级联故障,保护整体
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025自考专业(人力资源管理)真题(考点梳理)附答案详解
- 2026年二级建造师继续教育考试试卷及答案
- 2026年物流师仓储管理能力测试卷(附答案)
- 一年级语文下册部编版《语文园地三》
- 口腔颌面外科手术安全分析
- 中西医结合治疗慢性病预防
- 省级医院心肺复苏技术规范
- 车辆服务专业职业前景
- 肺隔离症的临床表现及CT诊断课件
- 恶性肠梗阻多学科协作姑息治疗方案
- 新生儿转运箱使用
- 北师大版数学六年级上册第一次月考测试题及答案
- 幼儿园课程:爱祖国爱家乡
- 水工混凝土结构设计规范sl191-2008
- 山西省建筑工程施工安全资料管理规程表格部分
- 小学道德与法治三年级上册《生命最宝贵》教学反思
- 2023年4月2日湖北省事业单位联考A类《职业能力倾向测验》真题及答案
- 丰田技术员培训手册13原厂p01t
- 《服务设计 用极致体验赢得用户追随》读书笔记思维导图PPT模板下载
- GB/T 16422.2-2022塑料实验室光源暴露试验方法第2部分:氙弧灯
- GB/T 13834-2008纤维用亚麻雨露干茎
评论
0/150
提交评论