版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java必背面试题及详细答案(实战完整版)一、Java基础核心面试题1.JDK、JRE、JVM的区别与联系答案:JVM是Java虚拟机,是运行Java字节码的虚拟机器,是Java实现跨平台的核心,只负责解释运行class文件,没有编译功能。JRE是Java运行环境,包含JVM+Java核心类库,只用来运行已经写好的Java程序,普通用户运行程序只需要安装JRE。JDK是Java开发工具包,包含JRE+编译工具、调试工具、打包工具等开发指令,开发者写代码、编译代码必须安装JDK。包含关系:JDK>JRE>JVM2.Java语言的主要特点答案:1.跨平台:一次编译,到处运行,依靠JVM屏蔽系统差异;2.面向对象:支持封装、继承、多态三大特性;3.安全性高:有字节码校验、权限机制、垃圾回收,避免内存泄露和非法访问;4.简单易用:去除了指针、多继承等复杂语法,语法规整;5.多线程:内置多线程支持,适合开发高并发程序;6.分布式、健壮性强:适合企业级后端开发。3.基本数据类型有哪些?和包装类的区别答案:Java8种基本数据类型:整型:byte、short、int、long浮点型:float、double字符型:char布尔型:boolean对应的包装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean核心区别:1.基本类型是基本数据,存储在栈内存,默认有默认值,效率高;2.包装类是对象,存储在堆内存,默认值为null,提供大量工具方法;3.集合、泛型只能存包装类,不能存基本类型;4.基本类型不参与自动装箱拆箱,包装类支持JDK5自动转换。4.==和equals的区别答案:1.==是比较运算符:基本类型:比较的是数值是否相等;引用类型:比较的是对象的内存地址是否相同。2.equals是Object类的方法:默认底层就是==,比较地址;String、Integer等类重写了equals,用来比较内容是否相等。面试总结:比较字符串、对象内容一律用equals,比较基本类型用==。5.String、StringBuilder、StringBuffer的区别答案:1.String:字符串不可变,每次拼接都会生成新对象,频繁拼接效率极低;适合少量、固定字符串。2.StringBuffer:线程安全,方法加了synchronized,效率低,适合多并发场景字符串拼接。3.StringBuilder:线程不安全,无锁,效率最高,是日常开发首选,适合单线程大量字符串拼接。优先级:单线程StringBuilder>多线程StringBuffer>尽量不用String拼接二、面向对象OOP面试题(高频必考)1.面向对象三大特性及详解答案:封装:将属性私有化,通过public方法对外提供访问,隐藏内部细节,保证数据安全,降低耦合。继承:子类继承父类的属性和方法,实现代码复用,减少冗余,为多态提供前提,Java是单继承、多实现。多态:父类引用指向子类对象,同一个行为,不同子类有不同实现。分为编译多态(方法重载)和运行多态(方法重写)。2.重载和重写的区别答案:重载(Overload):1.发生在同一个类中;2.方法名相同,参数列表不同(个数、类型、顺序);3.和返回值、访问修饰符无关;4.编译期多态。重写(Override):1.发生在父子类之间;2.方法名、参数列表、返回值必须一致;3.访问权限不能比父类更严格;4.不能抛出更宽泛的异常;5.运行期多态。3.抽象类和接口的区别答案:1.抽象类有构造方法,接口没有构造方法;2.抽象类可以有普通成员变量、常量,接口只能有公共静态常量;3.抽象类可以包含普通方法、抽象方法,JDK8后接口有默认方法、静态方法,JDK9有私有方法;4.类是单继承抽象类,可多实现接口;5.抽象类是对事物的抽象,包含属性和行为;接口是对行为的抽象,只定义规范。4.final、finally、finalize的区别答案:final:是修饰符,修饰变量不可修改、修饰方法不可重写、修饰类不可继承。finally:是异常处理关键字,搭配try-catch使用,无论是否异常都会执行,常用于释放资源。finalize:是Object类的废弃方法,JVM垃圾回收前会调用,不确定性极强,开发中完全不使用。三、集合框架高频面试题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.无哈希冲突:直接存入数组对应位置;3.有哈希冲突:形成单向链表;4.链表长度大于8且数组容量大于64:链表转为红黑树,提升查询效率;5.链表长度小于6:红黑树退化为链表;6.默认容量16,负载因子0.75,达到阈值自动扩容为原来2倍。特点:线程不安全,key允许一个null,value允许多个null,存取效率高。3.HashMap和HashTable的区别答案:1.线程安全:HashTable线程安全,所有方法加锁;HashMap线程不安全;2.null值:HashTable不允许key和value为null;HashMap允许一个key为null;3.效率:HashTable加锁导致效率极低,HashMap无锁效率高;4.底层结构:JDK1.8后HashMap有红黑树,HashTable始终是数组+链表;5.初始容量:HashTable默认11,HashMap默认16。4.ConcurrentHashMap原理答案:是线程安全的键值对集合,用于替代HashTable,并发效率极高。JDK1.7:分段锁机制,将集合分成多个Segment分段,只锁当前分段,不影响其他分段并发;JDK1.8:废弃分段锁,采用CAS+synchronized锁数组节点,锁粒度更细,并发性能更好,底层同样是数组+链表+红黑树。四、多线程与并发面试题1.线程和进程的区别答案:1.进程是资源分配的最小单位,线程是CPU调度的最小单位;2.进程相互独立,拥有独立内存空间;线程共享进程内存资源,相互通信简单;3.进程开销大,创建销毁慢;线程开销小,效率高;4.一个进程包含多个线程,线程依附于进程存在。2.实现多线程的四种方式答案:1.继承Thread类,重写run方法;缺点:单继承限制,无法继承其他类;2.实现Runnable接口,重写run方法;优点:避免单继承限制,常用;3.实现Callable接口,重写call方法;支持返回值、抛出异常,配合FutureTask使用;4.线程池创建线程:Executors、ThreadPoolExecutor,企业开发首选,复用线程、减少开销。3.synchronized和Lock锁的区别答案:1.底层:synchronized是JVM原生锁,自动加锁释放锁;Lock是代码层面锁,需要手动lock()、unlock();2.功能:Lock可以中断等待锁、可以尝试获取锁、可以公平锁;synchronized只能非公平锁,功能单一;3.性能:JDK1.6之后synchronized做了大量优化,偏向锁、轻量级锁、重量级锁,性能和Lock基本持平;4.场景:简单同步用synchronized,需要精细控制锁、公平锁、超时锁用Lock。4.线程的生命周期状态答案:一共5种核心状态:1.新建(NEW):创建线程对象,未调用start;2.就绪(RUNNABLE):调用start,等待CPU调度;3.运行(RUNNING):CPU分配时间片,执行run方法;5.终止(TERMINATED):线程执行完毕或异常结束。五、JVM与垃圾回收面试题1.JVM内存区域划分答案:1.程序计数器:线程私有,记录当前执行行号,唯一无OOM的区域;2.虚拟机栈:线程私有,存储局部变量、方法栈帧,方法执行创建,结束销毁;3.本地方法栈:线程私有,服务native本地方法;4.堆内存:线程共享,所有对象、数组存在这里,GC主要回收区域;5.方法区:线程共享,存储类信息、常量、静态变量、运行时常量池。2.垃圾回收机制GC原理答案:GC主要回收堆内存中没有引用指向的无效对象,避免内存溢出。1.年轻代:对象新生区域,大部分对象朝生夕灭,使用复制算法,回收频繁、速度快;2.老年代:存活久的对象,经历多次GC依然存活,进入老年代,使用标记整理、标记清除算法,回收频率低、速度慢;3.永久代/元空间:存储类元数据,基本不回收。3.常见垃圾回收器答案:1.Serial:单线程回收,适合客户端、小内存程序;2.Parallel:多线程并行回收,JDK默认,注重吞吐量;3.CMS:并发低停顿回收器,注重用户响应速度,适合互联网项目;4.G1:分区回收,可预测停顿,JDK9之后默认,平衡吞吐量和停顿时间。六、异常处理面试题1.受检异常和非受检异常区别答案:受检异常(编译期异常):继承Exception,编译阶段必须处理,要么try-catch捕获,要么throws抛出,例如IO异常、SQL异常。非受检异常(运行时异常):继承RuntimeException,编译不报错,运行时报错,可处理可不处理,例如空指针、数组越界、类型转换异常。错误Error:系统级严重问题,无法处理,例如内存溢出、栈溢出。2.try、catch、finally执行顺序答案:1.无异常:执行try代码块,跳过catch,执行finally;2.有异常:中断try执行,跳转到对应catch捕获异常,最后执行finally;3.finally几乎必执行,唯一不执行场景:手动执行System.exit(0)退出虚拟机。七、JavaIO与新特性面试题答案:1.BIO:同步阻塞IO,一个连接一个线程,客户端等待服务端响应,并发低,适合小并发场景;2.NIO:同步非阻塞IO,基于缓冲区、通道、选择器,一个线程处理多个连接,高并发高性能,Netty框架底层基于NIO;2.JDK8核心新特性答案:1.Lambda表达式:简化匿名内部类写法,精简代码;2.Stream流:简化集合遍历、筛选、排序、聚合操作;3.接口默认方法、静态方法:解决接口升级兼容问题;4.Optional类:解决空指针异常问题;5.新日期时间类:替代老旧的Date、Calendar,线程安全;6.元空间替代永久代,解决永久代内存溢出问题。八、高频基础面试压轴题1.什么是泛型?有什么作用答案:泛型是参数化类型,在编译阶段约束数据类型。作用:1.编译期类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025上半年教师资格考试《中学教育知识与能力》试题答案解析
- 氢氧化镁市场-多元需求推动应用与价值升级
- 2026年职业病防治试题(答案)
- 医疗科研礼仪:严谨求实推动医学发展
- 作用于肾素血管紧张素醛固酮系统药物
- 2026下半年小学英语教资面试语法试卷
- 《现代建筑设计理念》课件
- 荣耀人工智能手机:智慧生活的体验
- 人工智能泰迪熊的故事
- 气象安全整治方案讲解
- 胆总管结石诊疗指南
- 儿科护理工作压力管理
- 2026年卫生高级职称面审答辩(儿童保健代码094)在线题库副高面
- 2026年国考证监会专业通关练习试题完整版附答案详解
- 链家员工合同
- 民办高校管理风险剖析与防范体系构建:理论、实践与创新路径
- 化学化工专业英语讲义
- CAM制造软件厂商竞争格局研究市场调研报告
- 2026银行间市场数据报告库(上海)股份有限公司招聘30人笔试参考题库及答案解析
- 2026高考数学复习微专题:75.立体几何与解析几何综合问题的三种常见类型
- 2026年宠物食品欧美细分市场项目投资计划书
评论
0/150
提交评论