張孝祥老師7k面試題之銀行業務排程:
這道題還是有些難度的,不過一步一步分析,也不那麼難理解,本片部落格重點說說思路:
一.需求分析:
(1)銀行內有6個業務視窗, 4個普通視窗,1快速視窗,1個vip視窗。
(2)有三種對應型別的客戶:vip客戶,普通客戶,快速客戶。
(3)vip客戶以及普通客戶辦理業務所需的時間有最大值和最小值,快速客戶辦理業務所需時間為最小值,三種客戶比例為vip客戶:普通客戶 :快速客戶 = 1 :6 :3。
(4)當vip視窗和快速視窗沒有客戶等待可以為普通客戶服務
二.用面相物件的思想可以提煉出三個物件,
1.銀行視窗,
2.號碼生成器(可以生成三種對應型別的客戶的號碼),
3.號碼管理器(生成號碼和獲取視窗馬上要服務的號碼)
三.整個流程可這樣設計:
1.號碼管理器產生新號碼,並對外提供獲取視窗馬上要辦理的號碼的方法。
2.號碼生成器,由於只想它在記憶體中只有乙個物件,採用單例設計,並在裡面定義3個指向號碼管理器的屬性物件,分別表示普通客戶,快速客戶,vip客戶。並對外提供訪問物件的的方法。
3.開啟乙個執行緒迴圈呼叫3種視窗那型別,執行緒種根據不同客戶,呼叫不同的視窗,用executors執行緒池。可以有switch() case :去判斷怎麼呼叫。型別這個變數只有3種考慮用列舉去定義。用if()else()去判斷該型別視窗有沒有等待的服務的號碼,如果是快速視窗和vip視窗沒有等待的,就為普通視窗服務。
4.主函式:建立6個視窗,並定於3個定時器,分別去建立新的普通號碼,新的快速號碼,新的vip號碼。(定時器用execoutor介面建立)
四 .具體步驟:
1. 建立號碼管理器類:
(1) 定義乙個變數記錄上乙個客戶的號碼,方便得道下乙個客戶號碼。
(2) 定義乙個集合,儲存在排隊的號碼。
(3) 定義乙個方法可以產生新的號碼。
(4) 定義乙個方法能夠給視窗提供馬上要服務的號碼。
(面相物件的思想:誰擁有資料誰對外提供方法。)
**體現:
(注意:不同執行緒操作共享資源,需要加鎖。)public class numbermanager
//為視窗獲取號碼
public synchronized integer quchunumber()else
}}
2. 號碼生成器由於只想它在記憶體中只有乙個物件,採用單例設計,並在裡面定義3個指向號碼管理器的屬性物件,分別表示普通客戶,快速客戶,vip客戶。並對外提供訪問物件的的方法。
(1) 單例設計號碼管理器類
(2) 定義3個屬性物件
提供方法返回號碼管理器對像。
public class numbermachne ;
private static numbermachne instance = new numbermachne();
public static numbermachne getinstance()
//建立三個屬性,分別表示普通客服,快速客服,vip客服。
private numbermanager commonmanager = new numbermanager();
private numbermanager expressmanager = new numbermanager();
private numbermanager vipmanager = new numbermanager();
//建立放回物件的三個方法。
public numbermanager getcommonmanager()
public numbermanager getexpressmanager()
public numbermanager getvipmanager()
}
3, (1)定義3種客服視窗的列舉:
(2)開啟乙個執行緒,迴圈呼叫不同的服務視窗(需要使用executors執行緒池)
(3)如果快速視窗和vip視窗沒有服務的號碼,呼叫普通視窗的服務。
public enum customer
return name; }
public class servicewindow
public void settype(customer type)
public void setnumber(int number)
public void start()
} }
} );
} private void commonservice() catch (interruptedexception e)
system.out.println(windowname + "完成為第" + servicenumber + "號普通客戶服務,總共耗時" + servicetime/1000 + "秒");
}else catch (interruptedexception e)
} }
private void expressservice() catch (interruptedexception e)
system.out.println(windowname + "完成為第" + servicenumber + "號快速客戶服務,總共耗時" + servicetime/1000 + "秒");
}else
} private void vipservice() catch (interruptedexception e)
system.out.println(windowname + "完成為第" + servicenumber + "號vip客戶服務,總共耗時" + servicetime/1000 + "秒");
}else
} }
}
4主函式:(1)建立視窗物件,4個普通視窗,1個快速視窗,1個vip視窗
(2)建立3個定時期,定時建立普通號碼,快速號碼,vip號碼。
public class mainclass
//產生1個快速視窗
servicewindow expresswindow = new servicewindow();
expresswindow.settype(customertype.express);
expresswindow.start();
//產生1個vip視窗
servicewindow vipwindow = new servicewindow();
vipwindow.settype(customertype.vip);
vipwindow.start();
//普通客戶拿號
executors.newscheduledthreadpool(1).scheduleatfixedrate(
new runnable()
},
0,
constants.common_customer_interval_time,
timeunit.seconds);
//快速客戶拿號
executors.newscheduledthreadpool(1).scheduleatfixedrate(
new runnable()
},
0,
constants.common_customer_interval_time * 2,
timeunit.seconds);
//vip客戶拿號
executors.newscheduledthreadpool(1).scheduleatfixedrate(
new runnable()
},
0,
constants.common_customer_interval_time * 6,
timeunit.seconds);
} }
銀行業務排程系統
一 銀行業務排程系統 一 需求 模擬實現銀行業務排程系統邏輯,具體需求如下 1.銀行內有6個業務視窗,1 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為vip視窗。2.有三種對應型別的客戶 vip客戶,普通客戶,快速客戶 辦理如交水電費 費之類業務的客戶 3.非同步隨機生成各種型別的客戶,生成各...
銀行業務排程系統
今天看了張老師的銀行業務排程系統,還是感覺不可思議。開始看專案需求時感覺這裡邊的業務邏輯太複雜。沒想到還是被張老師寫了個把小時的 給搞定。雖然看完之後腦海中對於程式執行過程有些模糊,但起碼現在努力努力寫出個類似的程式不是天方夜談。張老師分析專案的時候,又通過物件導向的思想結合專案分析了下。不禁又想感...
銀行業務排程系統
上次說道了 交通燈管理系統 的設計需求,今天我們來說下 銀行業務排程系統 設計需求分析。大家看者這個名字是不是比較感興趣銀行是怎麼辦公的。今天我們來分析下 1.設計需求 模擬實現銀行業務排程系統邏輯,具體需求如下 銀行內有6個業務視窗,1 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為vip視窗...