面试基础 -- 单例模式

       设计模式相关知识在面试中经常被问到,其中的单例模式几乎是每次必问,同时还会要求手写单例模式的代码。 至于为什么也不难理解,它的实现代码简短,用较短的时间就能完成,同时代码中也不乏一些细节可以考察面试者 的基本功。简单啰嗦一下单例模式的基本知识,借用下网络搜索的结果:
      概念上可理解成一个类只有一个实例,实现上是要注意以下三点:
  1.       单例模式的类只提供私有的构造函数,
  2.       类定义中含有一个该类的静态私有对象,
  3.       该类提供了一个静态公有函数用于创建或获取它的静态私有对象
     理解好上面这几句话,即使面试的时候一时忘代码怎么写,也可以根据原理重新写出来的,理解原理要比记住代码更重要。 用自己的话去描述给面试官听相信效果也是不错的,当然作为最后一关手写代码也很关键,在面试略有压力的情况,敢不敢保证写下的代码没有编译错误,真机测试一次通过。如果可以,那恭喜你面试暂时上岸,面试官要换题了。下面还是看两段代码吧。

//懒汉式
public class SingletonA {
     public static SingletonA instance = null;
    
     private SingletonA(){     }
    
     public static SingletonA getSingletonA(){         
          if(instance == null){
               instance = new SingletonA();
          }
          return instance;
     }    
}

//饿汉式
public class SingletonB {
     private static SingletonB instanceB = new SingletonB();
    
     private SingletonB(){}
    
     public static synchronized SingletonB getInstance(){
          return instanceB;
     }
}

//双重锁定
public class SingletonC {
     private static SingletonC instance = null;
     private SingletonC(){};
    
     public static SingletonC getInstance(){
          if(instance == null){
               synchronized (SingletonC.class) {
                    if(null == instance){
                         instance = new SingletonC();
                    }
               }
          }
          return instance;
     }
}
       写了这么多,感觉是不是有点孔乙已了。好吧,其实面试官只是想知道下面几点
  1.        面试者是否了解单例,
  2.        是否知道懒汉式和饿汉式的区别,
  3.        是不是还知道有双重锁定这么一回事,
  4.        是否会注意到饿汉式需要同步操作才好。
      实际的面试过程中一般不会让你三种都写出来,前两种比较常考察,同时有经验的面试官还会在写代码过程留意你的表现,借一斑以窥全豹,顺便看看有没有可以引出接下来问题的考察点。不过最重要还是对概念理解程度的考察,至于代码中的一些小错误,比如命名是否规范这种类似错误是不会过多纠缠的。

       就写这些,虽说一个挺简单的面试题,不过可以问的东西还是有一些的,文中提到一些个人觉得应该注意的地方不知道是否还有遗漏呢,如果有留言告诉我,非常感谢。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值