23种设计模式(常见面试题)

23种设计模式(常见面试题)

1.什么是设计模式?

答:
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。

2.你当初为什么要学习设计模式?

答:

  • 为了看懂源代码:如果不懂设计模式的话,去看Jdk、Spring、SpringMVC、IO等的源码,会感到很迷惑,什么都看不懂。
  • 为了看看前辈们的代码:比如去工作不一定是直接分配给我新项目,很有可能是前辈的项目,如果他们用了设计模式,而自己不会,那会面临很大问题。
  • 为了敲自己的理想中的优质代码:生活需要仪式感,需要认真生活,对于代码,也是一样,自己开发的项目就想把项目当成自己的大宝贝一样。
3.简单说一下设计模式?你都知道哪些?

答:

  • 设计模式分为23种
  • 总体来说可以分为三大类:1.创建型模式( Creational Patterns )、2.结构型模式( Structural Patterns )、3.行为型模式( Behavioral Patterns )
  • 关注点:
    1. 创建型模式:关注对象的创建
    2. 结构型模式:关注类与对象之间的组合
    3. 行为型模式:关注对象之间的通信
  • 分类:
    1.创建型模式:
    (1)单例模式
    (2)工厂模式
    (3)抽象工厂模式
    (4)建造者模式
    (5)原型模式
    2.结构型模式
    (1)代理模式
    (2)适配器模式
    (3)桥接模式
    (4)装饰模式
    (5)外观模式
    (6)享元模式
    (7)组合模式
    3.行为型模式
    (1)模板方法模式
    (2)策略模式
    (3)命令模式
    (4)责任链模式
    (5)状态模式
    (6)观察者模式
    (7)中介者模式
    (8)迭代器模式
    (9)访问者模式
    (10)备忘录模式
    (11)解释器模式
4.能写两个单例模式吗?

答:

饿汉式:
public class Singleton { 
// 直接创建对象
 public static Singleton instance = new Singleton();
// 私有化构造函数 
private Singleton() { }
// 返回对象实例 
public static Singleton getInstance() {
 return instance; 
 }
}

懒汉式:
public class Singleton { 
// 声明变量
   private static  Singleton singleton = null;
// 私有构造函数 
   private Singleton() { }
// 提供对外方法
   public static Singleton getInstance() { 
// 两次判空是因为,等待锁时可能已经被人初始化过了,如果不再判断可能会重复初始化。
    if (singleton == null) {
      synchronized(this) {
        if (singleton == null) {
          singleton = new Singleton(); 
        } 
      }
    }

     return singleton;
    }
}
5.什么是单例?(或单例模式的核心作用是什么?)

答:
保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

6.哪些地方用到了单例模式?

答:

  • 应用程序的日志应用,一般是单例模式实现。
  • 多线程的线程池的设计,一般也是采用单例模式,因为线程池要方便对池中的线程进行控制
  • Windows的(任务管理器或者回收站),是单例模式,他不能打开俩个
  • 在项目种加载配置文件的类,一般是单例。
  • 一个项目的数据库连接池,一般是单例模式。因为数据库连接是一种数据库资源,每次都new的话,很消耗资源。
  • 在Spring中,每个bean默认就是单例的,这样做的优点是spring容器可以管理。
  • springmvc中,控制器对象是单例。
  • 在servlet中,每个servlet是单例。
  • 计数器使用的也是单例,然后保证同步访问。
7.未待完续

在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式是面向对象设计中的经典思想和解决方案,常被用于解决一些常见的软件设计问题。在Java开发中,设计模式是面试中常被问到的一个重要话题。以下是一些Java设计模式面试题示例: 1. 请介绍常见设计模式分类,并列举一个代表性的设计模式。 2. 请介绍单例模式的特点和应用场景,并给出一个线程安全的单例模式实现。 3. 请介绍工厂模式,并解释简单工厂、工厂方法和抽象工厂之间的区别。 4. 请介绍观察者模式,并给出一个使用观察者模式的例子。 5. 请介绍适配器模式的作用和应用场景,并给出一个适配器模式的示例。 6. 请介绍装饰器模式的特点和应用场景,并给出一个装饰器模式的示例。 7. 请介绍策略模式,并解释策略模式与简单if-else判断之间的区别。 8. 请介绍代理模式的作用和应用场景,并给出一个静态代理和动态代理的示例。 9. 请介绍享元模式的特点和应用场景,并给出一个享元模式的示例。 10. 请介绍模板方法模式,并解释模板方法模式与策略模式之间的区别。 这些问题可以帮助面试官了解你对设计模式的理解和实际应用能力。当然,这只是一部分问题,还有很多其他与设计模式相关的问题可以被问到。在回答这些问题时,最好能结合具体的示例或项目经验进行说明,以展示你的实际应用能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值