版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面试题及答案(2025年金九银十新版)1.Java跨平台的核心原理是什么?JDK、JRE、JVM三者的关系如何?Java跨平台的核心是JVM(Java虚拟机)。Java程序经过编译提供与平台无关的字节码文件(.class),由对应平台的JVM解释执行,实现“一次编写,到处运行”。三者关系:JDK(Java开发工具包)包含JRE(Java运行时环境)和开发工具(如javac、jconsole);JRE包含JVM和运行Java程序所需的核心类库;JVM是执行字节码的虚拟计算机,负责内存管理、垃圾回收等底层操作。2.基本数据类型和包装类的区别是什么?Integer的缓存机制有哪些注意点?基本数据类型(如int、double)存储值,无方法;包装类(如Integer、Double)是对象,提供属性和方法(如类型转换、比较)。Integer缓存机制:JVM默认缓存-128到127的Integer对象,通过Integer.valueOf()提供时直接复用缓存,而newInteger()始终创建新对象。例如,Integera=127;Integerb=127;a==b为true(缓存复用);但Integerc=128;Integerd=128;c==d为false(超出缓存范围)。需注意:缓存范围可通过-XX:AutoBoxCacheMax调整,但不建议修改,可能引发兼容性问题。3.重载(Overload)和重写(Override)的本质区别是什么?构造方法能否被重写?重载是同一类中方法名相同、参数列表不同(类型/顺序/个数)的多态形式,与返回值、访问修饰符无关;重写是子类覆盖父类同名同参数方法,需满足:访问权限不小于父类,不能抛出比父类更宽泛的异常(运行时异常除外)。构造方法不能被重写,因为构造方法名必须与类名一致,子类无法定义与父类同名的构造方法(类名不同),但可以通过super()调用父类构造方法。4.简述Java异常体系的结构。finally块中的代码是否一定会执行?Java异常顶层是Throwable,分为Error(JVM错误,如OutOfMemoryError,不可恢复)和Exception(程序可处理异常)。Exception又分RuntimeException(未检查异常,如NullPointerException,可不显式处理)和受检异常(CheckedException,如IOException,必须捕获或声明抛出)。finally块中的代码在以下情况不执行:①执行finally前调用System.exit();②线程被中断或终止;③JVM崩溃。其他情况(如try/catch中return),finally会在return前执行(若finally中有return,会覆盖try/catch的返回值)。5.HashMap在JDK1.8中的底层结构有哪些优化?如何解决哈希冲突?JDK1.8前HashMap使用“数组+链表”结构;1.8优化为“数组+链表+红黑树”。当链表长度≥8且数组长度≥64时,链表转为红黑树(查询时间复杂度从O(n)降为O(logn));当红黑树节点数≤6时,退化为链表。哈希冲突解决:①计算哈希值时,通过hash(key)=key.hashCode()^(key.hashCode()>>>16)扰动函数,减少高位碰撞;②冲突时用链表或红黑树存储。需注意:扩容时(默认负载因子0.75),新数组长度为原2倍,元素通过e.hash&(newCap-1)重新分配位置,1.8通过高低位分组优化扩容效率(无需重新计算哈希)。6.ConcurrentHashMap在JDK1.8中如何保证线程安全?对比1.7有哪些改进?JDK1.7的ConcurrentHashMap使用分段锁(Segment数组,继承ReentrantLock),每个Segment管理一段链表,锁粒度为Segment;1.8放弃分段锁,采用“synchronized+CAS”机制:①数组节点(Node)作为锁对象,锁粒度更细(仅锁定冲突链表的头节点);②空桶插入时用CAS(Compare-And-Swap)保证原子性;③红黑树节点(TreeBin)作为锁对象,支持读写并发。改进点:锁粒度更小(从Segment到Node),减少锁竞争;移除分段锁结构,降低内存占用;利用synchronized优化(JVM对synchronized的锁升级优化,如偏向锁、轻量级锁)提升性能。7.线程的生命周期有哪些状态?调用start()和run()方法的区别是什么?Java线程状态(Thread.State枚举):NEW(新建)、RUNNABLE(可运行,含运行中)、BLOCKED(阻塞,等待锁)、WAITING(无限等待,需notify/notifyAll唤醒)、TIMED_WAITING(超时等待)、TERMINATED(终止)。start()是启动线程的正确方式,会调用本地方法启动新线程,最终执行run();直接调用run()等同于普通方法调用,不会启动新线程,仍在当前线程执行。8.线程池的核心参数有哪些?为什么不建议使用Executors工厂类创建线程池?ThreadPoolExecutor的核心参数:①corePoolSize(核心线程数,保留在线程池中的线程数);②maximumPoolSize(最大线程数,允许的最大线程数);③keepAliveTime(非核心线程空闲存活时间);④unit(时间单位);⑤workQueue(任务队列,如ArrayBlockingQueue、LinkedBlockingQueue);⑥threadFactory(线程工厂,用于创建线程);⑦handler(拒绝策略,任务无法处理时的回调)。不建议用Executors的原因:①FixedThreadPool和SingleThreadExecutor使用无界队列(LinkedBlockingQueue),任务过多时可能OOM;②CachedThreadPool的maximumPoolSize为Integer.MAX_VALUE,可能创建大量线程导致OOM。实际开发应通过ThreadPoolExecutor自定义参数,控制队列大小和线程数。9.synchronized的锁升级过程是怎样的?偏向锁、轻量级锁、重量级锁的适用场景?synchronized的锁状态随竞争激烈程度升级(不可逆):①偏向锁:单线程多次获取同一锁时,在对象头存储线程ID,减少CAS操作;②轻量级锁:多线程交替获取锁(无竞争),通过CAS尝试获取,失败则自旋(避免线程阻塞);③重量级锁:竞争激烈时,向OS申请互斥锁,线程阻塞,适合长时间持锁场景。适用场景:偏向锁适合单线程重复访问;轻量级锁适合短时间竞争;重量级锁适合长时间锁持有(如复杂业务逻辑)。10.volatile的作用是什么?如何保证可见性和禁止指令重排?volatile的作用:①保证变量可见性(修改后立即刷新到主内存,其他线程读取时从主内存获取);②禁止指令重排(通过内存屏障,如StoreLoad屏障,限制编译器和CPU的重排序)。可见性实现:JVM通过内存屏障(如lock前缀指令)强制将工作内存数据刷回主内存,并使其他线程的工作内存缓存失效。禁止重排:JVM在volatile变量读写前后插入内存屏障,确保“前序操作结果对后续可见,且顺序不被打乱”。例如,单例模式的双重检查锁定(DCL)中,volatile修饰实例变量可避免指令重排导致的“半初始化”问题。11.如何排查Java程序的内存泄漏?常见的内存泄漏场景有哪些?排查步骤:①使用JVM工具(如jmap、jconsole、VisualVM)提供堆转储文件(heapdump);②用MAT(MemoryAnalyzerTool)分析对象引用链,定位未被回收的大对象;③检查是否存在长生命周期对象持有短生命周期对象的引用(如静态集合未清理)。常见场景:①ThreadLocal未调用remove(),导致Entry(弱引用key)的value(强引用)无法回收;②缓存未设置过期时间(如HashMap做本地缓存,未清理旧数据);③监听器/回调未注销(如注册事件监听器后未反注册);④数据库连接、IO流未关闭(虽然finally中关闭,但代码异常可能跳过)。12.Spring的IOC容器如何解决循环依赖?三级缓存的具体作用是什么?Spring通过三级缓存解决循环依赖(仅支持单例Bean,原型Bean/构造注入无法解决)。三级缓存为:①singletonObjects(一级缓存,存储已初始化完成的Bean);②earlySingletonObjects(二级缓存,存储未初始化完成但已创建实例的Bean);③singletonFactories(三级缓存,存储Bean工厂,用于提供早期Bean引用)。流程:A创建时,将A的工厂(ObjectFactory)存入三级缓存;A需要B,B创建时需要A,此时从三级缓存获取A的工厂,提供早期A实例存入二级缓存;B完成初始化后存入一级缓存,A获取B后完成初始化,从二级缓存将A移至一级缓存。三级缓存的核心是通过ObjectFactory的getObject()方法(可能包含AOP代理),确保早期Bean是最终代理对象(而非原始对象)。13.MyBatis的{}和${}有什么区别?为什么推荐使用{}?{}是预编译占位符(?),SQL执行前会替换为参数值,防止SQL注入;${}是字符串拼接,直接将参数值拼入SQL,存在注入风险。例如,查询用户名为{name}时,SQL为“SELECTFROMuserWHEREname=?”,参数值会被预处理;而${name}会提供“SELECTFROMuserWHEREname=张三”,若name为“'OR1=1--”,会导致全表查询。推荐{}的原因:安全(防注入)、性能(预编译语句可重用)。14.如何设计一个高并发场景下的秒杀系统?需要考虑哪些技术点?设计要点:①流量拦截:前端限流(按钮防抖、验证码),Nginx层限流(限制IP请求频率);②库存扣减:Redis预存库存(原子操作decr),避免数据库压力;③异步处理:订单提供用MQ(如RocketMQ)异步解耦,减少主线程等待;④数据库保护:悲观锁(forupdate)或乐观锁(版本号机制)防止超卖;⑤幂等性:通过唯一订单号(如雪花算法提供)避免重复提交;⑥降级熔断:用Hystrix或Sentinel对非核心服务降级,保证核心流程可用。示例流程:用户请求→Nginx限流→Redis检查库存(库存>0则扣减)→MQ发送订单事件→异步服务消费MQ,提供订单并同步数据库(二次校验库存)。15.解释TCP的三次握手和四次挥手过程。为什么挥手需要四次?三次握手(建立连接):①客户端发送SYN=1,seq=x(请求连接);②服务器回复SYN=1,ACK=x+1,seq=y(确认连接);③客户端发送ACK=y+1,seq=x+1(确认服务器确认)。四次挥手(关闭连接):①客户端发送FIN=1,seq=u(请求关闭);②服务器回复ACK=u+1,seq=v(确认收到关闭请求);③服务器发送FIN=1,ACK=u+1,seq=w(服务器准备关闭);④客户端回复ACK=w+1,seq=u+1(确认服务器关闭)。挥手需四次的原因:服务器收到FIN后可能还有未发送的数据(需先回复ACK,待数据发送完毕再发FIN),因此ACK和FIN分两次发送。16.什么是分布式事务?常见的解决方案有哪些?分布式事务指跨多个服务或数据库的事务,需保证所有参与方要么全成功,要么全回滚。常见方案:①XA协议(两阶段提交,如JTA):协调者(Coordinator)先询问各参与者(Participant)是否就绪,再统一提交/回滚;缺点是阻塞时间长,性能差。②TCC(Try-Confirm-Cancel):Try阶段预留资源,Confirm阶段提交,Cancel阶段回滚;适合业务可拆分的场景(如电商扣库存、扣余额)。③事务补偿(Saga模式):通过反向操作补偿失败的步骤(如订单创建失败,需回滚库存增加、积分退回);无全局锁,性能较好,但需保证补偿操作的幂等性。④Seata框架:支持AT(自动补偿)、TCC、Saga模式,通过RM(资源管理器)和TM(事务管理器)协调,简化分布式事务开发。17.如何优化MySQL的慢查询?索引失效的常见原因有哪些?优化步骤:①开启慢查询日志(long_query_time=1),定位执行时间长的SQL;②用EXPLAIN分析执行计划,查看type(理想为ref或eq_ref)、key(使用的索引)、rows(扫描行数);③优化索引(添加覆盖索引、复合索引),避免全表扫描;④改写SQL(如避免SELECT,用JOIN代替子查询);⑤分库分表(数据量超1000万时,按时间或ID分片)。索引失效原因:①条件字段使用函数/表达式(如WHEREDATE(create_time)='2025-01-01');②左模糊查询(LIKE'%abc')或全模糊(LIKE'%abc%');③复合索引未遵循最左匹配(如索引(a,b,c),查询WHEREb=1不生效);④字段类型隐式转换(如VARCHAR字段用数字查询,导致全表扫描);⑤条件使用OR(若OR前后字段均无索引,索引失效)。18.什么是一致性哈希?在分布式缓存中的作用是什么?一致性哈希将节点和数据映射到2^32的环上,数据通过哈希值定位到顺时针最近的节点。当节点增减时,仅影响相邻节点的数据,减少缓存失效范围。例如,环上有节点A、B、C,数据X哈希到A和B之间,则归属B;若B下线,X归属C(原B的下一个节点),仅X和原B的部分数据需要迁移,而非全部重新分配。在分布式缓存(如Redis集群)中,一致性哈希解决了传统哈希取模(节点增减时大量缓存失效)的问题,提升系统扩展性。19.Java17的密封类(SealedClasses)有什么作用?如何定义?密封类限制哪些类可以继承或实现它,增强类型安全性。通过sealed修饰类,并在permits子句中列出允许的子类。例如:```javapublicsealedclassShapepermitsCircle,Rectangle{//父类定义}publicfinalclassCircleextendsShape{//必须为final或sealed//实现}publicnon-sealedclassRectangleextendsShape{//允许其他类继承Rectangle//实现}```作用:控制类的继承层级,避免非法子类破坏业务逻辑(如支付类型仅允许支付宝、微信支付,禁止其他扩展)。20.什么是虚拟线程(VirtualThreads)?对比平台线程(PlatformThreads)有哪些优势?虚拟线程是JDK19引入的轻量级线程(JEP425),由JVM管理(而非OS内核),与平台线程(映射OS线程)相比,具有以下优势:①低资源消耗:单个JVM可创建百万级虚拟线程,内存占用仅KB级(平台线程需MB级);②高效调度:基于协程模式,阻塞时不阻塞OS线程(通过载体线程(CarrierThread)切换),提升CPU利用率;③代码兼容:使用Thread.startVirtualThread()创建,与传统线程API(如Runnable、ExecutorService)兼容。适用场景:高并发IO密集型应用(如HTTP服务器处理大量请求),减少线程上下文切换开销。21.设计一个线程安全的单例模式(懒汉式),要求防止反射和序列化攻击。推荐使用枚举实现单例(天然线程安全,防反射/序列化攻击),但懒汉式可通过静态内部类+私有构造检查实现:```javapublicclassSingleton{privatestaticbooleaninitialized=false;//防反射攻击privateSingleton(){synchronized(Singleton.class){if(initialized){thrownewIllegalStateException("Instancealreadyexists");}initialized=true;}}privatestaticclassHolder{staticfinalSingletonINSTANCE=newSingleton();}publicstaticSingletongetInstance(){returnHolder.INSTANCE;}//防序列化攻击protectedObjectreadResolve(){returngetInstance();}}```解释:静态内部类Holder在第一次调用getInstance()时加载,保证懒加载;私有构造方法通过synchronized和initialized标志防止反射调用多次;readResolve()方法在反序列化时返回已存在的实例,避免提供新对象。22.如何实现一个自定义的SpringBootStarter?核心步骤有哪些?步骤:①创建Maven项目,添加spring-boot-autoconfigure依赖;②定义自动配置类(@Configuration),使用@Conditional注解(如@ConditionalOnClass、@ConditionalOnMissingBean)控制配置生效条件;③定义属性配置类(@ConfigurationProperties),绑定perties中的参数;④在META-INF/spring.factories中注册自动配置类(org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.MyAutoConfiguration);⑤打包发布,其他项目引入依赖后自动生效。示例:实现一个Redis客户端Starter,自动配置JedisConnectionFactory,允许通过spring.redis.host等属性配置连接参数。23.什么是CAP理论?分布式系统中如何权衡C、A、P?CAP理论指分布式系统无法同时满足一致性(Consistency)、可用性(Availability)、分区容错性(PartitionTolerance),最多满足两个。C要求所有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养老院入住老人福利待遇保障制度
- 企业内部信息传播制度
- 公共交通应急预案管理制度
- 2026年法学专业知识进阶考试题目及答案
- 2026年财务会计专业知识模拟考试试题
- 2026年汽车制造质量监督执纪模拟测试题
- 2026年围棋培训协议
- 母婴护理质量控制与安全管理
- 化验楼抗爆安全改造项目环境影响报告表
- 河南省许昌市襄城县玉成学校2025-2026学年第一学期期末教学质量检测七年级生物(含答案)
- 农业科技合作协议2025
- 护理文书书写规范与法律风险规避
- DGTJ08-10-2022 城镇天然气管道工程技术标准
- 建筑抗震加固技术方案设计案例
- 提高护理效率的好用工作计划
- 2025年广东省深圳市辅警招聘《行政职业能力测验》真题及答案
- 医院医疗纠纷案例汇报
- 红外线桑拿毯行业跨境出海项目商业计划书
- 2025安徽职高单招试题及答案
- 《文献检索与科技论文写作入门》课件(共八章)
- 2025至2030铸铁产业行业市场深度研究及发展前景投资可行性分析报告
评论
0/150
提交评论