1. 程式人生 > >單例模式面試題(特點、理解)

單例模式面試題(特點、理解)

幫同事出面試題,為難之際、又逢人指點,現整理如下


(1)單例模式特點(什麼是單例模式)?
 a.單例類只能有一個例項。
 b.單例類必須自己建立自己的唯一例項。
 c.單例類必須給所有其他物件提供這一例項。


(2)單例模式的作用(用單例模式的目的)?
Singleton模式主要作用是保證在Java應用程式中,一個類Class只有一個例項存在。

(3)一般Singleton模式通常有幾種種形式:
通常有3中形式(回答2種的也對,因為第3種不常見)
第一種形式: 餓漢式單例類
 //餓漢式單例類.在類初始化時,已經自行例項化 
public class Singleton {
     private Singleton(){}
   private static Singleton instance = new Singleton(); 
   public static Singleton getInstance() {
     return instance;   
   } 

第二種形式:懶漢式單例類 
public class Singleton { 
    private Singleton(){}
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  if (instance==null)instance=new Singleton();
    return instance;
    }



第三種形式:登記式單例(省略)


(4)哪一種模式更安全?為什麼?
第一種形式要更加安全些
instance = new Singleton(); 
static屬於類的資源,類資源在jvm載入類的時候就載入好了,instance一直引用這new Singleton(),所以永遠都不會釋放一直存在與記憶體中直到程式結束執行

第2種的話如果兩個執行緒同一時刻去訪問getInstance的時候就可能建立兩個例項,所以不安全
解決辦法(加上同步鎖)

----------------------參考至單例模式詳解

相關推薦

模式試題特點理解

幫同事出面試題,為難之際、又逢人指點,現整理如下 (1)單例模式特點(什麼是單例模式)?  a.單例類只能有一個例項。  b.單例類必須自己建立自己的唯一例項。  c.單例類必須給所有其他物件提供這一例項。 (2)單例模式的作用(用單例模式的目的)? Singleton

劍指offer:試題二:模式的實現使用C++語言

#include <iostream> #include <iomanip> #include <cstdio> #include <cstdlib>

模式--餓漢按需建立懶漢多執行緒以及多執行緒下改進

程式碼註釋有介紹,(排版過於難受,下次用md排完再傳上來) package singleton; /** * @author: ycz * @date: 2018/12/24 0024 22:15 * @description: 懶漢模式 */ public class SingleTon1

模式的實現餓漢式和懶漢式

null cte get pri single singleton ins 安全 tin 1.懶漢模式。 class Singleton { private: static Singleton* m_instance; Singleton(

模式實現方法之懶漢式餓漢式

項目 只有一個 接下來 程序設計 選擇 bsp 私有 syn 屬性 Singleton 單例模式是一種經常在項目開發中使用的程序設計模式,它用於創建一個全局共享的實例對象。該實例對象在整個應用程序中只有一個,不會出現更多的該實例對象。 實現原理就是將類的構造方法私有化,即使

java之模式:餓漢式懶漢式雙重校驗鎖列舉靜態內部類

一、餓漢式: /** * 餓漢式: * 不存在多執行緒同步問題,當類被載入時,初始化並分配記憶體空間; * 當類被解除安裝時,才釋放所佔記憶體,因此在某些特定條件下會耗費記憶體。 * * @author: Rodge * @time: 2018年10月4日 下午4:35:12 * @

模式的餓漢式懶漢式

單例設計模式:保證在記憶體中只有一個物件 餓漢式: /* * 餓漢式: */ class MySingleton{ //1. 構造方法私有化,其他類不能訪問該構造(建立該物件) private MySingleton(){}; //2.

模式新談包含三種方式

  設計模式是一套被反覆使用,多數人知曉,經過分類編目的,程式碼設計的總結,也可以說是前人的智慧結晶。學習設計模式能讓我們對一些應用場景使用相同的套路達到很好的效果,我會不定時更新一些自己對設計模式的理解的文章,從定義,實現,應用場景來說說設計模式,今天我要說的物件是單例模式一,定義  什麼是單例模式,字面理

模式程式碼實現內作業

單例模式理論知識: 單例模式官方定義:確保一個類只有一個例項,並提供全域性訪問點來訪問這個唯一的例項。(全域性訪問點:實際就是全域性變數,主要解決物件隨時都可以被訪問,但是不能防止建立多個物件這個問題) 單例模式的實現:               1、單例模式的目的:

模式詳解餓漢式,懶漢式,登記式,列舉式,序列化和反序列

一、單例模式應用場景:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。 應用場景:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。 Spring 中的單例模式完成了後半句話,即提供了全域性的訪問點 BeanFactory。但沒有從構造器級別去 控制單例,這是

Java實現模式之餓漢式懶漢式列舉式,帶測試。

Java實現單例的3種普遍的模式,餓漢式、懶漢式、列舉式。 具體程式碼如下: package com.lcx.mode; /** * * 餓漢式單例,不管以後用不用這個物件,我們一開始就建立這個物件的例項, * 需要的時候就返回已建立好的例項物件,所以比較飢餓,

python中7種實現模式的方法:staticmethodclassmethod類屬性方法__new__裝飾器元類名字覆蓋

本文的以下實現方法為了簡單起見不考慮執行緒安全。 一:staticmethod 程式碼如下: class Singleton(object): instance = None def __init__(self): raise Syntax

java模式之餓漢式懶漢式

一、單例設計模式是指java中某一個類只有一個例項,並且自行例項化對外提供服務。 1、如何保證物件的唯一性? ①、不允許其它程式使用new方式建立新的例項。 ②、在該類中建立一個唯一的物件例項。 ③

web前端開發試題未完待續

tex ora 相對 設置 erl 思路 實現 多列 寬度 一、HTML與XHTML的不同:1)XHTML元素必須被正確地嵌套 2)元素必須被關閉 如:<h1>……&l

2017年8道php試題真題+答案

php 高級php1、<?php echo count(strlen(“http://php.net”)); ?>的執行結果是? 答案:1 講解:count(var)是用來統計數組或對象的元素個數的。當var是null或者空數組時,結果為0。如果var是普通變量,則返回1。正常情況下返回var中的

百度試題2018.10.29 內容生態事業部

介紹自己的專案 專案的資料量有多大 zookeeper在follower死掉後,如何重新選舉? hdfs的資料儲存和讀取過程? hdfs在資料儲存過程中,如何保證副本的資料一致性? 當時我沒想起來,於是被問道,如果是你設計,你會如何實現hdf

滴滴試題2018.10.27 HBase資深工程師

第一個面試官: 介紹專案? HBase的架構? HBase的讀寫的整個流程? HBase的主鍵設計? 對Phoenix有什麼優化? hive的分割槽表,hive的分桶表,有什麼區別? zookeeper的資料結構? z

Android試題2018.11.16

一、UI的繪製過程,常見優化手段以及原理。 二、有幾種常見的單例模式?對於這幾種單例模式synchronized具體鎖的是什麼東西? 三、問記憶體優化你做過沒有?一張十萬乘以十萬的圖片,如何載入才不會記憶體溢位? 四、問記憶體溢位,記憶體抖動,記憶體洩漏你都碰到過嗎?怎麼解決的?如何區分

java試題持續更新中

1、寫出內部類的特點 Java中的內部類共分為四種: 靜態內部類:只可以訪問外部類的靜態成員和靜態方法,包括了私有的靜態成員和方法生成靜態內部類物件的方式為: OuterClass.InnerClass inner = new OuterClass.InnerClass();   成

--20181021 試題回想總結backup

1.溝通能力;2.邏輯能力;3.職業亮點 1.CMS/VOS/EMR採用的是MVC模式,還是MVVM?後端僅僅用了spring+JPA? 答:看後端專案架構,直接檢視Maven jar包的引用,cms(spring+jpa[hibernate實現spring jpa