單例多例需要搞明白兩個問題

2021-07-23 21:11:37 字數 782 閱讀 2563

1. 什麼是單例多例;

2. 如何產生單例多例;

3. 為什麼要用單例多例

4. 什麼時候用單例,什麼時候用多例;

1. 什麼是單例多例:

所謂單例就是所有的請求都用乙個物件來處理,比如我們常用的service和dao層的物件通常都是單例的,而多例則指每個請求用乙個新的物件來處理,比如action; 

2. 如何產生單例多例:

在通用的ssh中,單例在spring中是預設的,如果要產生多例,則在配置檔案的bean中新增scope="prototype"; 

3. 為什麼用單例多例:

之所以用單例,是因為沒必要每個請求都新建乙個物件,這樣子既浪費cpu又浪費記憶體;

之所以用多例,是為了防止併發問題;即乙個請求改變了物件的狀態,此時物件又處理另乙個請求,而之前請求對物件狀態的改變導致了物件對另乙個請求做了錯誤的處理;

用單例和多例的標準只有乙個:

當物件含有可改變的狀態時(更精確的說就是在實際應用中該狀態會改變),則多例,否則單例;

4. 何時用單例?何時用多例?

對於struts2來說,action必須用多例,因為action本身含有請求引數的值,即可改變的狀態;

而對於struts1來說,action則可用單例,因為請求引數的值是放在actionform中,而非action中的;

另外要說一下,並不是說service或dao一定是單例,標準同第3點所講的,就曾見過有的service中也包含了可改變的狀態,同時執行方法也依賴該狀態,但一樣用的單例,這樣就會出現隱藏的bug,而併發的bug通常很難重現和查詢;

兩個單鏈表相交問題

關於兩個鍊錶相交,很容易遷移到好多地方,比如 1.找出兩個鍊錶相交的節點 2.判斷單個鍊錶是否有環等 3.二叉樹當存在父指標的時候,求樹中兩個節點的最近公共祖先 看乙個圖 一下只給出相當一部分思想 方法一 將兩個鍊錶的節點進行hash操作,然後判斷出節點,這種想法是可以的。方法二 當然採用暴力的方法...

兩個單鏈表相交的系列問題

在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null 即可。要求 如果鍊錶1的長度為n,鍊錶2的長度為m,時間複雜度請達到 o n m 額外 空間複雜...

在使用ajax需要傳遞兩個物件時問題

我們使用ajax通常傳遞的是json物件,但是我們如果需要同時傳遞兩個物件到後台時怎麼辦?如 我們後台同時需要分頁資訊pages,和查詢圖書的條件資訊books,我們可以建立乙個類關聯這兩個類 public classpagebooks nowpage nowpage clientpage var ...