版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面试笔试题大全及详细答案(完整版)本套试题整理互联网企业高频Java笔试、面试真题,覆盖Java基础、面向对象、集合框架、多线程、JVM、异常、IO、Spring框架、MySQL、Redis、基础算法等核心模块,答案贴合实际开发场景,通俗易懂、无书面化空话,适合求职刷题、入职笔试备考。一、Java基础核心试题1.简述JDK、JRE、JVM的区别与联系答案:三者是层层包含的关系,范围从大到小:JDK>JRE>JVM。1、JVM(Java虚拟机):是Java程序运行的核心载体,只负责解析、执行字节码文件(.class),不包含编译工具,是Java跨平台的核心,所有Java程序最终都在JVM中运行。2、JRE(Java运行环境):包含JVM+Java核心类库(基础工具类、系统类),只能运行已编译好的Java程序,无法开发、编译代码,普通用户运行Java程序只需安装JRE。3、JDK(Java开发工具包):包含JRE+开发编译工具(javac编译命令、java运行命令、debug调试工具等),是开发人员必备的环境,既可以开发编译代码,也可以运行程序。2.Java基本数据类型有哪些?区别是什么?答案:Java共8种基本数据类型,分为四大类,区别主要体现在占用字节、取值范围、默认值不同:1、整型:byte(1字节)、short(2字节)、int(4字节,默认整型)、long(8字节,赋值需加L/l)2、浮点型:float(4字节,赋值需加F/f)、double(8字节,默认浮点型)3、字符型:char(2字节,存储单个字符,可存汉字)4、布尔型:boolean(1字节,只有true/false两个值,无默认数值)核心区别:基本类型直接存储数值,存储在栈内存;包装类是对象,存储在堆内存,具备面向对象特性、支持泛型、可为null。3.==和equals()的区别答案:1、==是运算符,可用于基本类型和引用类型:-基本类型:比较的是数值本身是否相等;-引用类型:比较的是对象内存地址是否相同,即是否是同一个对象。2、equals()是Object类的方法,仅适用于引用类型:-原生Object的equals()本质和==一致,比较内存地址;-String、Integer等包装类重写了equals(),重写后只比较对象内容、数值是否相等,不比较地址。日常开发中,字符串、对象内容对比,优先使用equals();基本类型对比使用==。4.String、StringBuilder、StringBuffer的区别答案:1、String:字符串常量,底层是final修饰的字符数组,不可变。每次拼接、修改字符串都会生成新对象,频繁操作会产生大量垃圾对象,效率最低。适用于字符串极少修改的场景。2、StringBuffer:字符串变量,底层可变数组,线程安全(所有方法加了synchronized锁),多线程环境下可使用,但是锁机制会导致效率偏低。3、StringBuilder:字符串变量,底层可变数组,线程不安全,无锁机制,效率最高。是单线程环境下字符串拼接、修改的首选。优先级总结:单线程频繁操作→StringBuilder;多线程频繁操作→StringBuffer;固定不变字符串→String。5.Java中final、finally、finalize的区别答案:三者无关联,是三个完全不同的语法机制:1、final:修饰符,用于修饰类、方法、变量-修饰类:类不能被继承;-修饰方法:方法不能被重写;-修饰变量:变量变为常量,只能赋值一次,不可修改。2、finally:异常处理关键字,搭配try-catch使用无论代码正常执行还是出现异常,finally中的代码一定会执行(唯一不执行场景:手动执行System.exit(0)退出JVM),常用于释放资源(关闭流、数据库连接)。3、finalize():Object类的废弃方法JVM垃圾回收前会调用该方法,用于对象资源释放。该方法执行时机不确定、无法保证执行,官方已废弃,开发中禁止使用。二、面向对象OOP试题1.面向对象的四大特性及核心理解答案:四大特性:封装、继承、多态、抽象1、封装:将对象的属性私有化,通过公开方法访问、修改属性。隐藏内部实现细节,保证数据安全,降低代码耦合度。2、继承:子类继承父类的属性和方法,实现代码复用。Java是单继承,一个子类只能有一个直接父类,一个父类可以有多个子类。3、多态:同一行为,不同对象有不同实现。核心体现:父类引用指向子类对象,方法重写。编译看父类,运行看子类,提升代码扩展性。4、抽象:抽取事物的核心共性,忽略次要细节。通过抽象类、接口实现,约束子类行为,统一代码规范。2.抽象类和接口的区别答案:1、定义与修饰:抽象类用abstract修饰;接口用interface修饰。2、继承/实现关系:类只能单继承抽象类;类可以多实现接口,接口可以多继承接口。3、成员变量:抽象类可以有普通变量、常量;接口默认只能是publicstaticfinal常量(JDK1.8前)。4、方法:抽象类可以有普通方法、抽象方法、构造方法;JDK1.8前接口只有抽象方法,1.8新增默认方法、静态方法,1.9新增私有方法,接口无构造方法。5、核心作用:抽象类用于代码复用,抽取子类通用代码;接口用于行为约束,定义统一规范。3.重写和重载的区别答案:1、重载(Overload):发生在同一个类中多个方法方法名相同,参数列表(个数、类型、顺序)不同,与返回值、访问修饰符无关。属于编译期多态,常用于同一功能多场景适配。2、重写(Override):发生在父子类之间子类重写父类的非私有、非final、非静态方法,方法名、参数列表、返回值必须一致;访问权限不能比父类更严格;抛出异常范围不能大于父类。属于运行期多态。4.构造方法能不能重写?为什么?答案:不能重写。1、构造方法名必须和类名完全一致,子类和父类类名不同,无法满足重写的方法名一致要求;2、构造方法是创建对象时初始化资源的专属方法,仅属于当前类,不会被继承,自然无法重写;3、子类构造方法默认会通过super()调用父类无参构造,仅为调用,并非重写。三、集合框架高频试题1.List、Set、Map的区别答案:1、List(有序可重复集合):元素存入顺序和取出顺序一致,支持下标索引,允许元素重复。常用实现类:ArrayList、LinkedList、Vector。2、Set(无序不可重复集合):无下标索引,元素唯一,不允许重复。常用实现类:HashSet、LinkedHashSet、TreeSet。3、Map(键值对集合):双列集合,存储key-value键值对,key唯一不可重复,value可重复,无有序下标。常用实现类:HashMap、LinkedHashMap、TreeMap、HashTable。2.ArrayList和LinkedList的区别答案:1、底层结构:ArrayList底层是动态数组;LinkedList底层是双向链表。2、查询效率:ArrayList支持随机下标访问,查询速度快;LinkedList必须从头节点遍历查询,速度慢。3、增删效率:ArrayList增删元素会触发数组扩容、元素移位,效率低;LinkedList仅修改节点指针,无需移动元素,增删效率高。4、内存占用:ArrayList内存连续,会预留冗余容量;LinkedList每个节点存储数据+前后指针,内存占用更高。使用场景:频繁查询、少量增删用ArrayList;频繁增删、少量查询用LinkedList。3.HashMap的底层原理(高频必考)答案:JDK1.8及以上HashMap底层是数组+链表+红黑树结构,核心原理:1、存储核心:通过key的hash值计算数组下标,将key-value存入对应位置;2、哈希冲突:不同key计算出相同下标,产生哈希冲突,此时在数组对应位置生成链表,挂载冲突元素;3、树化机制:当链表长度≥8且数组容量≥64时,链表转换为红黑树,提升查询效率;当链表长度≤6时,红黑树退化为链表;4、扩容机制:默认初始容量16,负载因子0.75,当元素数量达到容量*0.75时触发2倍扩容,重新哈希分配元素;5、特点:线程不安全,key允许一个null,value允许多个null。4.HashMap和HashTable的区别答案:1、线程安全:HashMap线程不安全;HashTable线程安全(所有方法加锁)。2、null支持:HashMap允许key一个null、value多个null;HashTable不允许key和value为null。3、效率:HashMap无锁,效率高;HashTable全表锁,并发效率极低。4、初始容量:HashMap默认16,扩容2倍;HashTable默认11,扩容2倍+1。5、继承关系:HashMap继承AbstractMap;HashTable继承Dictionary(废弃类)。补充:并发场景优先使用ConcurrentHashMap,不使用HashTable。四、多线程与并发试题1.线程和进程的区别答案:1、进程:操作系统资源分配的最小单位,独立占用内存、CPU资源,进程之间相互独立,通信成本高。一个进程包含多个线程。2、线程:CPU调度执行的最小单位,共享所在进程的所有资源,线程之间切换成本低、通信简单。核心总结:进程是资源分配单位,线程是执行调度单位;进程独立,线程共享资源。2.实现多线程的几种方式答案:1、继承Thread类:重写run()方法,调用start()启动线程;缺点:单继承限制,无法继承其他类。2、实现Runnable接口:重写run()方法,传入Thread对象启动;优点:避免单继承限制,适合资源共享。3、实现Callable接口:重写call()方法,支持返回值、抛出异常,搭配FutureTask使用,适合有结果的线程任务。4、线程池创建:通过Executor、ThreadPoolExecutor创建线程,统一管理线程,减少线程创建销毁开销,企业开发主流方式。3.synchronized和Lock的区别答案:1、语法层面:synchronized是Java内置关键字,底层JVM实现;Lock是java.util.concurrent下的接口,代码层面实现锁。2、锁机制:synchronized隐式锁,自动加锁、自动释放锁;Lock显式锁,需要手动lock()加锁、unlock()释放锁。3、锁特性:synchronized不可中断、非公平锁、无法精准控制锁;Lock可中断、可实现公平锁、可绑定多个条件锁,灵活性更高。4、异常处理:synchronized出现异常自动解锁,不会死锁;Lock出现异常未手动解锁,大概率造成死锁。使用场景:简单并发场景用synchronized;高并发、需要灵活控制锁的场景用Lock(ReentrantLock)。4.volatile关键字的作用答案:volatile是轻量级同步关键字,核心两大作用:1、保证可见性:一个线程修改volatile变量,其他线程立即感知最新值,避免线程读取本地缓存数据。2、禁止指令重排:防止JVM和CPU优化代码执行顺序,解决单例模式DCL的空指针问题。局限性:不保证原子性,无法保证复合操作(i++)的线程安全,仅适合单一读写操作。五、JVM核心试题1.JVM内存区域划分答案:JVM运行时数据区分为5个区域,其中线程私有3个、线程共享2个:1、程序计数器(线程私有):记录当前线程执行的字节码行号,无内存溢出,是唯一不会OOM的区域。2、虚拟机栈(线程私有):存储方法栈帧、局部变量,方法执行完毕自动释放,栈满抛出StackOverflowError。3、本地方法栈(线程私有):为Native本地方法服务,作用和虚拟机栈类似。4、堆内存(线程共享):所有对象、数组的存储区域,GC垃圾回收的主要区域,是最容易发生OOM的区域。5、方法区(线程共享):存储类信息、常量、静态变量、编译后的代码,JDK1.8后改为元空间,使用本地内存。2.GC垃圾回收机制、哪些对象会被回收答案:GC是JVM自动回收堆内存中无效对象的机制,无需手动释放内存。1、回收判定:没有任何有效引用指向的对象,会被判定为垃圾对象,等待GC回收。2、核心回收算法:标记清除、标记整理、复制算法、分代回收(主流)。3、分代回收:堆内存分为新生代、老年代。新生代对象存活时间短,频繁GC,使用复制算法;老年代对象存活率高,使用标记清除、标记整理算法。3.常见OOM内存溢出原因及解决思路答案:1、堆内存溢出:创建大量对象、集合无限添加元素、内存泄漏;解决:优化代码释放无用对象、调整堆内存参数、排查内存泄漏。2、栈内存溢出:方法递归死循环、方法嵌套过深;解决:修改递归逻辑、限制嵌套层级。3、元空间溢出:加载过多类、动态生成大量类;解决:调整元空间大小、优化类加载逻辑。六、异常处理试题1.受检异常和非受检异常的区别答案:1、受检异常(编译期异常):继承自Exception,不继承RuntimeException。编译时必须处理(try-catch捕获或throws抛出),否则代码报错。例:IO异常、文件不存在异常、SQL异常。2、非受检异常(运行期异常):继承自RuntimeException。编译不报错,运行程序才会触发,可处理也可不处理。例:空指针、数组越界、类型转换异常。3、错误Error:系统级异常,无法处理,只能终止程序。例:内存溢出、栈溢出。2.try-catch-finally执行顺序,return对finally的影响答案:1、正常执行顺序:try代码块执行→无异常跳过catch→执行finally。2、异常执行顺序:try代码块报错→终止try执行→进入catch捕获异常→执行finally。3、return影响:try或catch中执行return,会先执行finally,再返回结果;如果finally中存在return,会覆盖上层return结果,开发中禁止在finally写return。七、Spring核心试题1.Spring核心两大特性答案:1、IOC(控制反转):将对象的创建、管理、依赖注入权限,从代码程序交给Spring容器统一管理。降低代码耦合度,实现组件解耦。核心实现:Bean工厂、依赖注入DI。2、AOP(面向切面编程):在不修改原有业务代码的前提下,对方法进行增强、扩展。核心作用:统一处理日志、事务、权限、限流等通用功能,实现业务和通用功能解耦。2.SpringBean的生命周期答案:1、实例化:Spring容器根据配置,通过反射创建Bean对象;2、属性填充:完成依赖注入,给Bean的属性赋值;3、初始化:执行前置处理方法→执行初始化方法→执行后置处理方法;4、销毁:容器关闭时,执行Bean销毁方法,释放资源;5、就绪状态:初始化完成后,Bean存入Spring容器,可供业务调用。3.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为非聚簇索引。企业选型:默认使用InnoDB,仅纯查询、无事务场景可临时用MyISAM。2.索引失效的常见场景答案:1、索引列使用函数、运算、类型转换;2、like查询以%开头(%xxx),前缀模糊查询失效;3、or连接的字段存在无索引字段;4、违背最左匹配原则(联合索引跳过前置列);5、字段隐式类型转换(字符串和数字对比);6、MySQL判断全表扫描比索引查询更快,自动放弃索引。3.事务四大特性ACID答案:1、原子性(Atomic):事务要么全部执行成功,要么全部回滚,不可部分执行;2、一致性(Consistent):事务执行前后,数据库数据状态一致,符合业务约束;3、隔离性(Isolate):多个事务并发执行互不干扰,通过隔离级别控制并发问题;4、持久性(Durable):事务提交成功后,数据永久落地,数据库崩溃也不会丢失。九、Redis高频试题1.Redis为什么快答案:1、纯内存操作:所有数据存储在内存,无需磁盘IO,读写速度远超磁盘数据库;2、单线程模型:核心读写单线程,避免多线程锁竞争、线程切换开销;3、IO多路复用:采用epoll机制,单线程处理大量客户端连接;4、数据结构优化:底层封装高效简单的数据结构,读写效率极高;5、协议简单:Redis自定义简单通信协议,数据解析开销小。2.Redis过期键删除策略答案:三种策略配合使用,兼顾性能和内存:1、定时删除:键过期立即删除,占用CPU资源,性能差,极少使用;2、惰性删除:访问键时判断是否过期,过期则删除,节省CPU,但会堆积过期无效键占用内存;3、定期删除:每隔一段时间随机抽取部分过期键删除,平衡CPU和内存压力,是核心策略。3.Redis缓存穿透、击穿、雪崩解决方案答案:1、缓存穿透:查询不存在的数据,直接穿透到数据库解决:缓存空值、布隆过滤器、接口限流校验。2、缓存击穿:热点key过期,瞬间大量请求打到数据库解决:热点key永不过期、加互斥锁、分布式锁。3、缓存雪崩:大量key同时过期/Redis宕机,大量请求压垮数据库解决:过期时间随机打散、Redis集群高可用、服务熔断降级、限流。十、编程基础手写题1.手写单例模式(双重检查锁DCL)答案:java
publicclassSingleton{
//volatile禁止指令重排,避免空指针
privatestaticvolatileSingletoninstance;
//私有构造,禁止外部new
private
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年注册安全工程师考试真题含答案(建筑施工安全)
- 2025年注册质量经理考题及答案
- 2025消毒竞赛试题及答案
- 2025一级造价工程师题库《工程计价》试题及答案
- 2026年2026年安全管理人员安全教育培训试题附参考答案(满分必刷)
- 2026年《医疗机构人员廉洁从业九项准则》考试题及答案
- 2026年大学生心理健康教育完整考试题库(含答案)
- 脑出血的微创治疗进展
- 医学1 小儿液体平衡的特点和液体疗法
- 临床医学53个经典病例
- 个案护理文章书写
- 手术三方核查正确执行率
- 第十七届山东省职业院校技能大赛高职组“英语口语”赛项规程
- 中班语言《秋天的颜色》课件
- 2020年江苏淮安中考满分作文《瞄准自己的靶心》8
- 海尔卡萨帝冰箱BCD-536WBCA使用说明书
- 百乐眠胶囊治疗失眠症临床应用专家共识-公示稿
- DL∕T 5362-2018 水工沥青混凝土试验规程
- 初中历史课程标准2022年版新课标考试题库及答案
- 《材料热膨胀系数》课件
- 中药一中药彩图
评论
0/150
提交评论