Java设计模式高频面试题(含详细实战答案)_第1页
Java设计模式高频面试题(含详细实战答案)_第2页
Java设计模式高频面试题(含详细实战答案)_第3页
Java设计模式高频面试题(含详细实战答案)_第4页
Java设计模式高频面试题(含详细实战答案)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java设计模式高频面试题(含详细实战答案)一、基础概念面试题(必问)1.什么是设计模式?为什么要用设计模式?详细答案:设计模式是软件开发中反复出现、经过无数项目验证的通用代码解决方案,不是语法,而是一套编程思想和代码套路,专门用来解决常见的设计缺陷。使用设计模式的核心目的,结合实际开发场景总结:1.解耦代码:把复杂逻辑拆分、各司其职,修改一处不影响全局,避免代码牵一发而动全身。2.复用代码:不用重复造轮子,通用逻辑标准化,提升开发效率。3.规范统一:团队协作时,所有人都懂同一套模式,代码可读性、可维护性大幅提升。4.规避BUG:成熟模式规避了新手常犯的设计问题,比如多线程不安全、对象重复创建、耦合度过高等问题。2.设计模式的三大分类,以及各自核心作用?详细答案:GoF23种设计模式分为三大类,Java面试只考核心常用的10种左右:1.创建型模式:重点解决对象创建问题,控制对象创建方式、数量、创建逻辑,避免new对象混乱。常用:单例、工厂、抽象工厂、建造者、原型2.结构型模式:重点解决类和对象的组合、适配问题,把零散对象组装成复杂结构,兼容不同接口。常用:适配器、装饰器、代理、桥接、组合、外观、享元3.行为型模式:重点解决对象之间的通信、职责分配、流程控制,规范对象交互逻辑。常用:策略、模板方法、观察者、责任链、迭代器、状态、命令3.设计模式的六大原则(面试高频,必考)详细答案:所有设计模式都是基于这6大原则设计的,是代码优化的核心标准:1.单一职责原则:一个类/方法只负责一件事。业务拆分清晰,改一个功能只动一个类,减少BUG。2.开闭原则(核心):对扩展开放,对修改关闭。新增功能不改动原有成熟代码,只新增代码,避免老功能出问题。3.里氏替换原则:子类可以完全替换父类,程序不报错。子类不要重写父类核心逻辑,保证继承的稳定性。4.依赖倒置原则:高层依赖抽象,不依赖具体实现。面向接口编程,而不是面向实现类编程,解耦彻底。5.接口隔离原则:接口要小而精,不要大而全。类不需要的接口方法不要强制实现,避免冗余空方法。6.迪米特法则(最少知道):一个类尽量少依赖其他类,只和直接朋友通信,降低耦合。二、创建型模式高频面试题1.单例模式是什么?有几种实现方式?优缺点?详细答案:单例模式:保证一个类在整个程序中只有一个实例,提供全局唯一访问入口。适用场景:工具类、配置类、连接池、缓存对象,不需要多次创建的对象。常用4种实现(面试重点):1.饿汉式类加载时直接创建实例,天生线程安全,写法简单。缺点是启动就占用内存,闲置时浪费资源。适合单例对象占用内存小、必须初始化的场景。2.懒汉式(线程不安全)用时才创建实例,节省内存。多线程下会出现多个实例,并发场景禁用。3.双重检查锁DCL(推荐)兼顾延迟加载和线程安全,性能高,业务项目最常用。需要加volatile禁止指令重排,避免空指针问题。4.枚举单例(最优)写法极简,天然防反射、防序列化破解、线程绝对安全,是EffectiveJava推荐的最佳单例写法。唯一缺点是不支持延迟加载。2.单例模式的漏洞?怎么解决?详细答案:普通单例(饿汉、DCL)存在两大漏洞:1.反射破解:通过反射调用私有构造方法,可以强行创建新实例,破坏单例。2.序列化破解:对象序列化后再反序列化,会生成新对象。解决方案:使用枚举单例,JDK底层已经帮我们屏蔽了反射和序列化的破解逻辑,彻底杜绝漏洞。3.简单工厂、工厂方法、抽象工厂的区别和使用场景?详细答案:1.简单工厂一个工厂类,通过判断参数创建不同对象。优点是简单,缺点是新增产品要改工厂代码,违反开闭原则。适合产品少、基本不迭代的场景。2.工厂方法一个产品对应一个工厂,工厂实现统一接口。新增产品只新增对应工厂,不修改原有代码,符合开闭原则。缺点是类会爆炸,适合产品频繁迭代的场景。3.抽象工厂针对产品族创建对象,一个工厂可以生产多个关联产品。比如手机工厂可以生产手机、耳机、充电器。适合一组关联产品统一创建的场景,缺点是新增产品等级困难。面试总结:简单工厂做单一产品,工厂方法做迭代产品,抽象工厂做关联产品簇。4.建造者模式和工厂模式的区别?详细答案:1.工厂模式:侧重快速创建完整对象,只负责生产,不关心对象的属性组装过程。2.建造者模式:侧重复杂对象的分步组装,对象属性多、参数混乱、部分参数可选时使用。适用场景:参数超多的实体类(DTO、配置类)、复杂对象构建,比如Spring的Bean构建、OkHttpClient构建。三、结构型模式高频面试题1.代理模式是什么?静态代理和动态代理的区别?详细答案:代理模式:通过代理对象控制对目标对象的访问,在不修改目标类代码的前提下,对方法进行增强(加日志、事务、权限、限流)。静态代理:手动写代理类,一个目标类对应一个代理类。优点是简单直观,缺点是代码冗余,每加一个类就要写一个代理类,维护成本高。动态代理(JDK代理):程序运行时动态生成代理类,不需要手动编写。特点是必须基于接口,没有接口无法代理。SpringAOP默认优先使用JDK动态代理。CGLIB代理:基于子类继承实现代理,不需要接口,可以代理普通类。通过ASM字节码框架生成子类,性能比JDK代理略低,无法代理final类和final方法。2.SpringAOP用的是什么代理模式?详细答案:Spring会自动适配:1.目标类有接口:默认使用JDK动态代理2.目标类无接口:自动切换为CGLIB代理SpringBoot2.0之后,默认强制使用CGLIB代理,不再优先JDK代理。3.装饰器模式和代理模式的区别?详细答案:两者代码结构几乎一样,核心区别在目的不同:1.装饰器模式:侧重增强对象功能,层层包装叠加能力。比如IO流:BufferedReader包装Reader,增加缓冲功能。2.代理模式:侧重控制对象访问,做权限拦截、日志记录、事务控制,不侧重功能叠加。4.享元模式的原理和使用场景?详细答案:核心原理:共享对象,减少重复创建,把不变的公共属性抽离出来共享,变化的属性单独维护,极大节省内存。JDK经典场景:String字符串常量池、Integer缓存池。业务场景:线程池、连接池、对象池,大量重复相似对象的场景。四、行为型模式高频面试题1.策略模式是什么?解决什么问题?详细答案:策略模式:定义一系列算法,把每个算法单独封装,算法之间可以自由替换,让算法和业务逻辑解耦。解决的核心问题:消除大量的if-else、switch判断。适用场景:支付方式(微信、支付宝、银行卡)、折扣算法、日志级别、多种排序规则。优点:新增算法不用改原有代码,符合开闭原则;彻底干掉臃肿的分支判断。2.模板方法模式和策略模式的区别?详细答案:1.模板方法:基于继承,父类定义固定流程骨架,子类重写部分步骤,流程不可改,步骤可改。举例:Spring的Bean生命周期,流程固定,部分方法可自定义实现。2.策略模式:基于组合接口,整套算法可以完全替换,流程不固定。3.观察者模式原理?项目中怎么用?详细答案:原理:定义一对多的依赖关系,被观察者状态变化时,自动通知所有订阅的观察者,自动触发更新。JDK自带Observer、Observable,业务中更多用事件监听机制实现。实际项目场景:1.消息通知、订单状态变更推送2.Spring的事件驱动(ApplicationEvent)3.MQ消息订阅、前端订阅后端消息优点:发布和订阅完全解耦,新增监听者不用改发布者代码。4.责任链模式是什么?使用场景?详细答案:责任链:将多个处理对象串联成一条链,请求依次经过每个处理器,每个处理器可以处理请求、放行请求或终止请求。经典场景:1.SpringMVC拦截器链、过滤器链2.权限校验、参数校验、限流校验链路3.工单审批流程(员工-组长-经理)优点:处理器独立,可随意增删、调整顺序,解耦请求和处理逻辑。5.状态模式和策略模式的区别?详细答案:1.状态模式:对象自身状态变化导致行为变化,状态内部可以自动切换。比如订单:待付款、已付款、已发货、已完成,不同状态行为不同,且状态可流转。2.策略模式:人为主动切换算法,算法之间无流转关系,只是独立替换。五、综合面试题(压轴高频)1.你项目中用过哪些设计模式?具体场景?实战标准答案(面试直接背,真实项目口吻)1.单例模式:项目中的全局配置类、常量工具类用枚举单例,保证全局唯一,避免重复创建对象浪费资源。2.策略模式:支付模块、折扣计算模块,用策略模式替代大量if-else,新增支付方式直接新增策略类,不用改核心代码。3.代理模式:基于AOP动态代理做统一日志记录、接口耗时统计、权限拦截,业务代码不用重复写通用逻辑。4.建造者模式:复杂参数的DTO、查询条件组装,用建造者构建,代码清晰,避免参数列表过长混乱。5.观察者模式:订单完成后,异步通知积分、物流、消息推送,解耦主流程,提升接口响应速度。6.责任链模式:接口参数校验、权限校验,按顺序逐层校验,逻辑分层清晰,方便增减校验规则。2.设计模式过度使用有什么弊端?详细答案:很多新手为了用模式而用模式,反而坑项目:1.过度设计:简单逻辑强行套模式,导致类数量暴增,代码晦涩难懂。2.增加复杂度:模式本身有抽象、分层、代理逻辑,简单场景使用会增加维护成本。3.性能损耗:动态代理、多层包装会带来微小的性能开销,高频接口滥用会影响性能。核心原则:能用简单代

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论