版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java设计模式高频面试题及详细答案(实战向)一、基础概念类(必问基础)1.什么是设计模式?为什么要用设计模式?答案:设计模式是软件开发中反复出现的、经过验证的通用代码设计解决方案,不是固定代码模板,而是一套设计思想和套路。日常开发用设计模式,核心就四个目的:1.解耦:把变化的代码和不变的代码分开,改一处不牵动全局;2.复用:通用逻辑抽离出来,不用重复造轮子;3.易维护、易扩展:后续加功能不用大幅改原有代码;4.统一编码规范:团队都懂这套模式,代码可读性高,交接成本低。简单说:设计模式就是前辈们踩坑总结出来的最优写代码姿势,避免写出烂代码。2.设计模式的三大分类,以及各自核心作用?答案:GoF23种设计模式分为三大类,面试不用记全,重点记分类核心:1.创建型模式(5种)核心:控制对象的创建方式,屏蔽对象创建细节,让创建和使用分离。常用:单例、工厂、抽象工厂、建造者、原型。2.结构型模式(7种)核心:组装类或对象,灵活搭配现有类,实现功能拓展,不改动源码。常用:适配器、装饰器、代理、组合、外观。3.行为型模式(11种)核心:规范对象之间的交互、职责和流程,解决对象通信、职责分配问题。常用:策略、模板方法、观察者、责任链、状态、迭代器。3.设计模式六大原则是什么?日常开发最常用的是哪几个?答案:六大原则是所有设计模式的底层规范,不用死记定义,理解落地场景即可:1.单一职责:一个类/方法只做一件事,职责唯一(最常用);2.开闭原则:对扩展开放,对修改关闭。加功能新增类/方法,不改原有源码(核心原则);3.里氏替换:子类可以完全替换父类,不破坏原有逻辑;4.依赖倒置:依赖抽象接口,不依赖具体实现,解耦核心;5.接口隔离:接口要小而精,不要大而全,类不用实现自己用不到的方法;6.迪米特法则:最少知道原则,一个类尽量少依赖其他类,减少耦合。日常开发落地最多的:单一职责、开闭原则、依赖倒置。二、创建型模式(面试高频重点)1.单例模式:手写双重检查锁单例,说清优缺点和使用场景答案:单例核心:整个系统中只有一个实例,全局统一访问,避免重复创建对象、浪费资源。常用:双重检查锁(DCL)单例(兼顾线程安全和性能)java
publicclassSingleton{
//volatile禁止指令重排,避免半初始化对象
privatestaticvolatileSingletoninstance;
//私有构造,禁止外部new
privateSingleton(){}
publicstaticSingletongetInstance(){
//第一次判断:不用每次都加锁,提升性能
if(instance==null){
synchronized(Singleton.class){
//第二次判断:防止多线程穿透创建多个对象
if(instance==null){
instance=newSingleton();
}
}
}
returninstance;
}
}关键知识点(面试必问)1.为什么加volatile?new对象会分三步:分配内存、初始化对象、赋值引用。JVM可能指令重排,导致其他线程拿到半初始化对象,volatile可以禁止重排,保证线程安全。2.优缺点:优点:全局唯一、节省内存、减少对象创建销毁开销;缺点:不符合开闭原则、单例对象生命周期长,容易内存泄漏、多线程下有并发风险。3.使用场景:工具类、配置类、线程池、数据库连接池、Redis客户端等全局唯一对象。2.饿汉式和懒汉式单例的区别?各自问题?答案:饿汉式:类加载时直接初始化实例,天然线程安全,实现简单。问题:不管用不用,对象都创建,浪费内存,适合小对象、常驻内存的对象。懒汉式:用到的时候才创建实例,懒加载,节省内存。问题:普通写法线程不安全,多线程下可能创建多个实例,必须加锁优化(DCL)。3.工厂模式、简单工厂、抽象工厂的区别和使用场景答案:三者核心都是封装对象创建逻辑,隔离创建和使用,区别在拓展性和层级:1.简单工厂(静态工厂)一个工厂类,通过参数判断创建不同对象。缺点:违反开闭原则,新增产品要改工厂代码。场景:产品少、基本不会迭代变化的场景。2.工厂方法模式一个产品对应一个工厂,定义工厂接口,不同产品由不同子工厂创建。优点:符合开闭原则,新增产品只加新工厂,不改老代码。缺点:类爆炸,每加一个产品多一个工厂类。3.抽象工厂模式针对产品族创建,一个工厂可以创建一组相关联的产品。场景:多系列、多配套产品的场景,比如安卓、IOS两套系统的按钮、弹窗组件。面试总结话术:简单工厂适合简单固定场景,工厂方法适合单一产品迭代,抽象工厂适合多产品族配套场景,日常开发用的最多的是工厂方法。4.建造者模式是什么?和工厂模式的区别?答案:建造者核心:分步构建复杂对象,可以灵活搭配参数,构建不同属性的对象。适用场景:对象属性多、参数混乱、部分参数可选的复杂对象(比如实体类、DTO、复杂配置类)。现在开发最常用的是Lombok@Builder,就是建造者模式的简化实现。和工厂模式核心区别:工厂模式:关注对象整体创建,直接返回完整对象;建造者模式:关注对象构建过程,分步赋值、灵活组合参数。三、结构型模式(面试高频)1.代理模式是什么?静态代理和动态代理的区别?答案:代理模式核心:不修改目标类源码,对目标方法做增强、拦截、扩展。日常AOP、事务、权限拦截、日志记录,底层都是代理思想。1.静态代理需要手动写代理类,代理类和目标类实现同一个接口,编译期就确定代理关系。缺点:接口新增方法,代理类必须同步改,冗余代码多,类爆炸。2.动态代理(JDK动态代理)运行时动态生成代理类,不用手动编写。限制:目标类必须实现接口,只能代理接口方法。3.CGLIB代理基于继承实现,不需要接口,可以代理普通类,通过子类重写方法实现增强。SpringAOP默认规则:有接口用JDK动态代理,无接口用CGLIB。2.装饰器模式和代理模式的区别?答案:两者代码结构很像,都是增强原有功能,核心区别在目的和职责:代理模式:侧重控制访问,对原方法做拦截、权限、事务、日志,不改变原有功能,只是增强管控;装饰器模式:侧重叠加功能,动态给原有对象叠加新功能,可以多层嵌套装饰。举例:IO流中BufferedReader装饰FileReader,就是典型装饰器,叠加了缓冲功能。3.适配器模式使用场景?答案:核心:适配不兼容的接口,让两个原本不匹配的类可以协同工作,不用改原有源码。日常场景:老系统接口适配新接口、第三方SDK接口统一封装、新旧数据格式转换。比如:老接口返回字段和新前端要求不一致,写一个适配器做字段转换,不用改老代码。四、行为型模式(面试重中之重)1.策略模式是什么?解决什么问题?实际开发场景?答案:策略模式核心:把不同的算法/业务规则抽成独立策略类,可动态切换。主要解决大量if-else、switch分支臃肿的问题,完美契合开闭原则。真实业务场景:1.支付方式:微信支付、支付宝、银行卡、积分支付,不同支付策略;2.折扣计算:会员、普通用户、VIP、超级VIP不同折扣策略;3.日志输出:控制台、文件、数据库不同日志策略。优点:分支逻辑解耦、新增策略不用改原有代码、方便拓展。2.模板方法模式?和策略模式区别?答案:模板方法核心:定义固定算法流程骨架,子类重写具体步骤,流程固定,步骤可变。场景:Spring容器初始化、文件解析、报表生成,整体流程固定,部分步骤不同。和策略模式核心区别:策略模式:整体算法完全替换,互相独立;模板方法:整体流程固定,只替换局部步骤。3.观察者模式?实际开发场景?答案:观察者模式核心:一对多订阅机制,被观察者状态变化,自动通知所有订阅的观察者。真实场景:1.Spring事件发布监听(ApplicationEvent);2.消息推送、订单状态变更通知;3.MQ消息消费、订阅发布模式。优点:发布和订阅解耦,新增监听方不用改发布方代码。4.责任链模式是什么?日常使用场景?答案:责任链核心:多个处理器链式处理请求,请求依次传递,可拦截可放行。日常高频场景:1.Spring拦截器、Filter过滤器链;2.权限校验、参数校验、风控审核链式处理;3.多级审批流程。优势:每个处理器只负责自己的逻辑,解耦、可灵活组合、随意增减流程节点。5.状态模式和策略模式的区别?(进阶面试题)答案:两者代码结构几乎一致,面试高频区分:策略模式:不同算法规则,互相无状态关联,主动切换;例:支付方式、折扣算法,人为主动选择使用哪个策略。状态模式:对象状态流转,状态之间有依赖,自动切换;例:订单状态(待付款、已付款、发货、完成、取消),状态改变自动触发不同逻辑,且状态流转有顺序限制。五、源码框架中的设计模式(高薪必问)1.Spring中用到了哪些设计模式?答案:1.单例:SpringBean默认单例;2.工厂模式:BeanFactory、ApplicationContext工厂创建Bean;3.代理模式:AOP动态代理实现事务、日志增强;4.模板方法:JdbcTemplate、TransactionTemplate,固定流程,自定义实现;5.观察者:Spring事件监听机制;6.适配器:HandlerAdapter适配不同处理器;7.装饰器:BeanWrapper装饰Bean对象。2.JDK源码中的设计模式举例?答案:1.单例:Runtime.getRuntime();2.装饰器:IO流BufferedReader、InputStreamReader;3.迭代器:Iterator遍历集合;4.工厂:Calendar、NumberFormat;5.策略:ThreadPoolExecutor拒绝策略、Comparator比较器。六、面试压轴题(实战思维)1.工作中你用过哪些设计模式?举1-2个真实业务案例标准答案(面试直接背,真实落地):工作中用的最多的是策略模式和建造者模式,偶尔用责任链和观察者。第一个是策略模式:之前做支付模块,有微信、支付宝、银行卡三种支付方式,最开始用if-else判断,代码臃肿、新增支付方式要改原有代码。后面重构用策略模式,把每种支付逻辑抽成独立策略类,通过工厂获取对应策略,新增支付渠道只需要新增策略类,完全符合开闭原则,代码清爽很多。第二个是建造者模式:项目中很多复杂DTO、查询参数类,字段多、可选参数多,用Lombok的@Builder构建对象,避免构造器参数过多、参数顺序混乱
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年三尖瓣解剖考点试卷及答案
- GB/T 48210-2026电力系统北斗短报文业务数据编码基本要求
- 2026学年湖北省老河口市六年级语文期末自我评估培优拓展题详细参考解析详细答案和解析
- 2026学年江苏省靖江市四年级数学期末通关素养提升题详细参考解析详细答案和解析
- 2026学年安徽省明光市五年级数学期末高分预测黑金试题详细参考解析详细答案和解析
- 2026人工智能安全问题试题(含答案解析)
- 2026-2027学年人教版七年级数学下册期末测试卷(附答案和解析)
- 机电一体化综合设计实训教程 课件 第11章 机电液联合仿真
- 碳排放交易员基础晋升测试考核试卷含答案
- 飞机铅锌模工岗中创新意识考核试卷含答案
- NBT高原用变压器现场绝缘干燥第1部分:低频短路加热法
- 脊柱解剖课件教学
- 村级水管员业务知识培训课件
- 电机学教案本
- 跳高技术动作要领
- 奖励旅游市场42课件
- 小学生课间游戏课件
- tb-10314-2021《邻近铁路营业线施工安全监测技术规程》内容解析
- 护林员考试试题及答案
- 煤矿20版标准化-瓦斯参数测定管理制度
- 研究生职业规划与求职攻略智慧树知到答案2024年东北林业大学
评论
0/150
提交评论