銀行業務排程

2021-06-23 04:03:10 字數 4206 閱讀 8214

張孝祥老師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視窗...