面試 乙個單例模式,足以把你秒成渣 (後記)

2021-10-22 09:26:53 字數 934 閱讀 8255

總結一下:

一,關於飢餓模式和懶載入模式的區別的標準答案「飢餓模式是在類載入時建立例項,而懶載入模式是在instance被呼叫時建立例項。」

二,關於單例模式的規範:單例模式的所有操作,都應該通過instance呼叫實現(對外不能提供其他靜態欄位或靜態方法)。這個規範是我自己定的,大家見仁見智。

三,關於效率問題:如果是符合上述規範的,那麼就不存在"過早地建立例項,從而降低記憶體的使用效率"的問題(真想不到什麼場景下會提前建立乙個單例而不使用)。

四,關於volatile:好幾個人提到了volatile,從微軟文件上我們可以得知,這個關鍵字標記乙個可能被多個執行緒同時修改的字段,當這個字段值被修改後,其他執行緒中的字段值也都會即時發生變化

指令重排是由於編譯器,執行時,或者硬體,為提高**執行效率,會在保證最終執行結果不變的情況下,改變**的執行順序。

這是一種優化方案,在單執行緒下沒有問題,但在多執行緒的情況下,由於不同執行緒內的**執行順序改變,可能產生錯誤。

怎麼證明指令重排確實發生了呢,這篇文章中給了示例,大家可以試一下,加深印象。

關於指令重排和volatile,這篇文章解釋的很好,大家可以學習一下。

最後,用一句很勵志的話來結尾:我希望乙個人在公司中被認可,被領導器重,是因為自己的技術和能力;而不是要靠阿諛奉承,溜鬚拍馬得來的。

如何設計乙個單例模式

單例類最簡單的c 實現 class single single static single getinstance return m pinstance single single m pinstance null 單例要求 參考 劍指offer c 保證執行緒安全 class single ret...

Python 寫乙個單例模式

class amimal object a none b true def new cls,args,kwargs if not cls.a cls.a object.new cls 呼叫基類的 new 方法建立物件,修改類屬性 a return cls.a def init self,name,a...

寫乙個單例模式示例

要點 1.某個類只能有乙個例項 2.它必須自行建立這個例項 3.它必須自行向整個系統提供這個例項 幾種常見形式 餓漢式 懶漢式 延遲建立物件 懶漢式 1 構造器私有化 2 用乙個靜態變數儲存這個唯一的例項 3 提供乙個靜態方法,獲取這個例項物件 class singletondemo public ...