<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    yxhxj2006

    常用鏈接

    統(tǒng)計(jì)

    最新評論

    7K月薪面試題----銀行業(yè)務(wù)調(diào)度系統(tǒng)

    題目要求:

    銀行業(yè)務(wù)調(diào)度系統(tǒng)

    模擬實(shí)現(xiàn)銀行業(yè)務(wù)調(diào)度系統(tǒng)邏輯,具體需求如下:
    *銀行內(nèi)有6個業(yè)務(wù)窗口,1 - 4號窗口為普通窗口,5號窗口為快速窗口,6號窗口為VIP窗口。
    *有三種對應(yīng)類型的客戶:VIP客戶,普通客戶,快速客戶(辦理如交水電費(fèi)、電話費(fèi)之類業(yè)務(wù)的客戶)。
    *異步隨機(jī)生成各種類型的客戶,生成各類型用戶的概率比例為:
    VIP客戶 :普通客戶 :快速客戶  =  1 :6 :3。
    *客戶辦理業(yè)務(wù)所需時間有最大值和最小值,在該范圍內(nèi)隨機(jī)設(shè)定每個VIP客戶以及普通客戶辦理業(yè)務(wù)所需的時間,
    快速客戶辦理業(yè)務(wù)所需時間為最小值(提示:辦理業(yè)務(wù)的過程可通過線程Sleep的方式模擬)。
    *各類型客戶在其對應(yīng)窗口按順序依次辦理業(yè)務(wù)。
    當(dāng)VIP(6號)窗口和快速業(yè)務(wù)(5號)窗口沒有客戶等待辦理業(yè)務(wù)的時候,這兩個窗口可以處理普通客戶的業(yè)務(wù),
    而一旦有對應(yīng)的客戶等待辦理業(yè)務(wù)的時候,則優(yōu)先處理對應(yīng)客戶的業(yè)務(wù)。
    隨機(jī)生成客戶時間間隔以及業(yè)務(wù)辦理時間最大值和最小值自定,可以設(shè)置。
    不要求實(shí)現(xiàn)GUI,只考慮系統(tǒng)邏輯實(shí)現(xiàn),可通過Log方式展現(xiàn)程序運(yùn)行結(jié)果。

    問題分析:

    *有三種對應(yīng)類型的客戶:VIP客戶,普通客戶,快速客戶 ,異步隨機(jī)生成各種類型的客戶,
    各類型客戶在其對應(yīng)窗口按順序依次辦理業(yè)務(wù) 。
      *首先,經(jīng)常在銀行辦理業(yè)務(wù)的人更有利于理解本系統(tǒng),每一個客戶其實(shí)就是由銀行的一個取號機(jī)器產(chǎn)生號碼的方式來表示的。
         所以,我想到要有一個號碼管理器對象,讓這個對象不斷地產(chǎn)生號碼,就等于隨機(jī)生成了客戶。
      *由于有三類客戶,每類客戶的號碼編排都是完全獨(dú)立的,所以,我想到本系統(tǒng)一共要產(chǎn)生三個號碼管理器對象,
         各自管理一類用戶的排隊(duì)號碼。這三個號碼管理器對象統(tǒng)一由一個號碼機(jī)器進(jìn)行管理,
         這個號碼機(jī)器在整個系統(tǒng)中始終只能有一個,所以,它要被設(shè)計(jì)成單例。
      *各類型客戶在其對應(yīng)窗口按順序依次辦理業(yè)務(wù) ,準(zhǔn)確地說,應(yīng)該是窗口依次叫號。
        *各個窗口怎么知道該叫哪一個號了呢?
          它一定是問的相應(yīng)的號碼管理器,即服務(wù)窗口每次找號碼管理器獲取當(dāng)前要被服務(wù)的號碼。

    關(guān)系結(jié)構(gòu)分析圖:



    功能細(xì)分:


    1. "NumberManager"類    -->排號  
    2.     定義一個用于存儲上一個客戶號碼的成員變量和用于存儲所有等待服務(wù)的客戶號碼的隊(duì)列集合。  
    3.     定義一個產(chǎn)生新號碼的方法和獲取馬上要為之服務(wù)的號碼的方法,  
    4.         這兩個方法被不同的線程操作了相同的數(shù)據(jù),所以,要進(jìn)行同步。  
    5.   
    6. "NumberMachine"類    -->號碼管理器,取號  
    7.     定義三個成員變量分別指向三個NumberManager對象,分別表示普通、快速和VIP客戶的號碼管理器,  
    8.     定義三個對應(yīng)的方法來返回這三個NumberManager對象。  
    9.     將NumberMachine類設(shè)計(jì)成單例。  
    10.   
    11. "CustomerType"枚舉類  
    12.     系統(tǒng)中有三種類型的客戶,所以用定義一個枚舉類,其中定義三個成員分別表示三種類型的客戶。  
    13.     重寫toString方法,返回類型的中文名稱。這是在后面編碼時重構(gòu)出來的,剛開始不用考慮。  
    14.   
    15. "ServiceWindow"類    -->業(yè)務(wù)窗口  
    16.     定義一個start方法,內(nèi)部啟動一個線程,根據(jù)服務(wù)窗口的類別分別循環(huán)調(diào)用三個不同的方法。   
    17.     定義三個方法分別對三種客戶進(jìn)行服務(wù),為了觀察運(yùn)行效果,應(yīng)詳細(xì)打印出其中的細(xì)節(jié)信息。  
    18.   
    19. "MainClass"類  
    20.     用for循環(huán)創(chuàng)建出4個普通窗口,再創(chuàng)建出1個快速窗口和一個VIP窗口。  
    21.     接著再創(chuàng)建三個定時器,分別定時去創(chuàng)建新的普通客戶號碼、新的快速客戶號碼、新的VIP客戶號碼。  
    22.   
    23. "Constants"類      
    24.     定義三個常量:MAX_SERVICE_TIME、MIN_SERVICE_TIME、COMMON_CUSTOMER_INTERVAL_TIME  


    代碼實(shí)現(xiàn)

    NumberManager類

    1. import java.util.ArrayList;  
    2. import java.util.List;  
    3.   
    4. public class NumberManager {  
    5.       
    6.     private Integer lastNumber = 0;  
    7.     private List<Integer> queueNumber = new ArrayList<Integer>();  
    8.       
    9.     public synchronized Integer generateNewManager(){   //號碼排隊(duì)  
    10.         queueNumber.add(++lastNumber);//添加元素  
    11.         return lastNumber;      //創(chuàng)建元素  
    12.     }  
    13.       
    14.     public synchronized Integer fetchServiceNumber(){   //使用號碼獲取服務(wù)  
    15.         if(queueNumber.size() >0)  
    16.             return queueNumber.remove(0);//remove返回值為該角標(biāo)上元素  
    17.         else  
    18.             return null;  
    19.     }  
    20. }  

    NumberMechine類

    取票機(jī)

    1. public class NumberMachine {  
    2.   
    3.     private NumberMachine(){};  //單例模式,只有一個取票機(jī)  
    4.     private static NumberMachine instance = new NumberMachine();  
    5.     public static NumberMachine getInstance(){  
    6.         return instance;  
    7.     }  
    8.     //取票機(jī)中有三種票,對應(yīng)各自的取出方法  
    9.     private NumberManager commonManager = new NumberManager();  
    10.     private NumberManager expressManager = new NumberManager();  
    11.     private NumberManager vipManager = new NumberManager();  
    12.       
    13.     public NumberManager getCommonManager() {  
    14.         return commonManager;  
    15.     }  
    16.     public NumberManager getExpressManager() {  
    17.         return expressManager;  
    18.     }  
    19.     public NumberManager getVipManager() {  
    20.         return vipManager;  
    21.     }     
    22. }  

    CustomerType枚舉類

    客戶類型

    1. public enum CustomerType {  
    2.     COMMON,EXPRESS,VIP;  
    3.       
    4.     public String toString(){   //switch 接收類型為int 或 Enum 類型  
    5.         switch(this){  
    6.         case COMMON:  
    7.             return "普通";  
    8.         case EXPRESS:  
    9.             return "快速";  
    10.         }  
    11.         return "VIP";  
    12.     }  
    13. }  

    Constants常量類


    1. public class Constants {    //常量  
    2.       
    3.     public final static int Max_Service_Time = 10000;  
    4.     public final static int Min_Service_Time = 1000;  
    5.     public final static int Common_Customer_Interval_Time = 1;  
    6.   
    7. }  

    ServiceWindow類 業(yè)務(wù)調(diào)度窗口(核心)


    1. package com.itheima;  
    2.   
    3. import java.util.Random;  
    4. import java.util.concurrent.Executors;  
    5.   
    6. public class ServiceWindow {  
    7.     private CustomerType type = CustomerType.COMMON;//客戶類型  
    8.     private int windowId = 1;   //窗口號碼  
    9.       
    10.       
    11.     public CustomerType getType(){  
    12.         return type;  
    13.     }  
    14.     public void setType(CustomerType type) {  
    15.         this.type = type;  
    16.     }  
    17.     public void setWindowId(int windowId) {  
    18.         this.windowId = windowId;  
    19.     }  
    20.       
    21.     public void start(){    //線程池執(zhí)行任務(wù)  
    22.         Executors.newSingleThreadExecutor().execute(new Runnable(){ //匿名內(nèi)部類  
    23.             public void run(){  
    24.                 while(true){  
    25.                     switch(type){   //switch參數(shù)可以是int或 Enum  
    26.                     case COMMON:  
    27.                         commonService();      
    28.                         break;  
    29.                     case EXPRESS:  
    30.                         expressService();  
    31.                         break;  
    32.                     case VIP:  
    33.                         vipService();  
    34.                         break;  
    35.                     }             
    36.                 }  
    37.             }  
    38.         });  
    39.     }  
    40.         //普通客戶  
    41.         private void commonService() {  
    42.             String windowName = windowId + "號" + type +"窗口";                          
    43.             System.out.println(windowName+"正在獲取任務(wù)...");  
    44.             Integer number = NumberMachine.getInstance().getCommonManager().fetchServiceNumber();  
    45.             if(number !=null){  
    46.                 int maxRandom = Constants.Max_Service_Time - Constants.Min_Service_Time;  
    47.                 long serverTime = new Random().nextInt(maxRandom)+1+Constants.Min_Service_Time;  
    48.                 try {  
    49.                     Thread.sleep(serverTime);   //服務(wù)時間  
    50.                 } catch (InterruptedException e) {  
    51.                     e.printStackTrace();  
    52.                 }  
    53.                 System.out.println(windowName + "完成為第" +number+"個普通客戶服務(wù);耗時: "+serverTime+" Millis");  
    54.             }  
    55.             else{  
    56.                 System.out.println(windowName+"沒有任務(wù)...休息1秒鐘...");  
    57.                 try {  
    58.                     Thread.sleep(1000);         //等待時間  
    59.                 } catch (InterruptedException e) {  
    60.                     e.printStackTrace();  
    61.                 }  
    62.             }  
    63.         }  
    64.         //VIP客戶  
    65.         private void vipService() {  
    66.             String windowName = windowId + "號" + type +"窗口";                          
    67.             System.out.println(windowName+"正在獲取任務(wù)...");  
    68.             Integer number = NumberMachine.getInstance().getVipManager().fetchServiceNumber();  
    69.             if(number !=null){  
    70.                 int maxRandom = Constants.Max_Service_Time - Constants.Min_Service_Time;  
    71.                 long serverTime = new Random().nextInt(maxRandom)+1+Constants.Min_Service_Time;  
    72.                 try {  
    73.                     Thread.sleep(serverTime);   //服務(wù)時間  
    74.                 } catch (InterruptedException e) {  
    75.                     e.printStackTrace();  
    76.                 }  
    77.                 System.out.println(windowName + "完成為第" +number+"個"+type+"客戶服務(wù);耗時: "+serverTime+" Millis");  
    78.             }  
    79.             else{  
    80.                 System.out.println(windowName+"沒有VIP任務(wù)...為普通客戶服務(wù)...");  
    81.                 commonService();    //為普通客戶服務(wù)  
    82.   
    83.             }  
    84.         }  
    85.           
    86.           
    87.         private void expressService() {  
    88.             String windowName = windowId + "號" + type +"窗口";                          
    89.             System.out.println(windowName+"正在獲取任務(wù)...");  
    90.             Integer number = NumberMachine.getInstance().getExpressManager().fetchServiceNumber();  
    91.             if(number !=null){  
    92.                 int serviceTime = Constants.Min_Service_Time;  
    93.                 try {  
    94.                     Thread.sleep(serviceTime);  //快速客戶服務(wù)時間,最小值  
    95.                 } catch (InterruptedException e) {  
    96.                     e.printStackTrace();  
    97.                 }  
    98.                 System.out.println(windowName + "完成為第" +number+"個"+type+"客戶服務(wù);耗時: "+serviceTime+" Millis");  
    99.             }  
    100.             else{  
    101.                 System.out.println(windowName+"沒有快速任務(wù)...為普通客戶服務(wù)...");  
    102.                 commonService();    //為普通客戶服務(wù)  
    103.   
    104.             }  
    105.         }  
    106.           
    107.           
    108.           
    109.       
    110. }  



    MainClass 用于測試


    1. package com.itheima;  
    2.   
    3. import java.util.concurrent.Executors;  
    4. import java.util.concurrent.TimeUnit;  
    5.   
    6. public class MainClass {  
    7.   
    8.     /** 
    9.      * @param args 
    10.      */  
    11.     public static void main(String[] args) {  
    12.           
    13.         //產(chǎn)生四個普通窗口  
    14.         for(int i=1; i<5 ;i++){  
    15.             ServiceWindow commonWindow = new ServiceWindow();  
    16.             commonWindow.setWindowId(i);  
    17.             commonWindow.start();  
    18.         }  
    19.         //產(chǎn)生一個VIP窗口  
    20.         ServiceWindow expressWindow = new ServiceWindow();  
    21.         expressWindow.setType(CustomerType.VIP);    //設(shè)置客戶類型VIP  
    22.         expressWindow.start();  
    23.         //產(chǎn)生一個快速窗口  
    24.         ServiceWindow vipWindow = new ServiceWindow();  
    25.         vipWindow.setType(CustomerType.EXPRESS);    //設(shè)置客戶類型 快速  
    26.         vipWindow.start();  
    27.           
    28.         Executors.newScheduledThreadPool(1).scheduleAtFixedRate(  
    29.                 new Runnable(){         //匿名內(nèi)部類  
    30.                     public void run(){  //普通客戶  
    31.                         Integer number = NumberMachine.getInstance().getCommonManager().generateNewManager();  
    32.                         System.out.println(number + "號普通客戶等待服務(wù)");  
    33.                           
    34.                     }  
    35.                 },  
    36.                 0,  
    37.                 Constants.Common_Customer_Interval_Time,   
    38.                 TimeUnit.SECONDS);  
    39.           
    40.         Executors.newScheduledThreadPool(1).scheduleAtFixedRate(  
    41.                 new Runnable(){       
    42.                     public void run(){  //快速客戶  
    43.                         Integer number = NumberMachine.getInstance().getExpressManager().generateNewManager();  
    44.                         System.out.println(number + "號快速客戶等待服務(wù)");  
    45.                     }  
    46.                 },  
    47.                 0,  
    48.                 Constants.Common_Customer_Interval_Time*2,   
    49.                 TimeUnit.SECONDS);  
    50.           
    51.         Executors.newScheduledThreadPool(1).scheduleAtFixedRate(  
    52.                 new Runnable(){       
    53.                     public void run(){  //VIP客戶  
    54.                         Integer number = NumberMachine.getInstance().getVipManager().generateNewManager();  
    55.                         System.out.println(number + "號VIP客戶等待服務(wù)");  
    56.                     }  
    57.                 },  
    58.                 0,  
    59.                 Constants.Common_Customer_Interval_Time*6,   
    60.                 TimeUnit.SECONDS);  
    61.           
    62.               
    63.     }  
    64. }  

    運(yùn)行結(jié)果:



    另附:"關(guān)于switch的參數(shù)類型"

    switch(expr)中,expr是一個整數(shù)表達(dá)式,整數(shù)表達(dá)式可以是int基本類型或Integer包裝類型,
    由于,byte,short,char交給 switch 處理時自動轉(zhuǎn)成了int,所以,這些類型以及這些類型的包裝類型也是可以的。
    因此傳遞給 switch 和case 語句的參數(shù)應(yīng)該是 int、 short、 char 或者 byte,還有 Enum 
    long,string 由于不能直接轉(zhuǎn)成 int 所以不能作用于swtich。在jdk 1.7中switch的參數(shù)類型可以是字符串類型。 

    posted on 2014-02-28 01:31 奮斗成就男人 閱讀(260) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 男女午夜24式免费视频| 两个人看的www高清免费视频| 成年女人免费碰碰视频| 亚洲精品欧美综合四区| 亚洲va久久久噜噜噜久久天堂| 麻豆国产VA免费精品高清在线| 农村寡妇一级毛片免费看视频 | 中文字幕亚洲精品资源网| 亚洲女同成人AⅤ人片在线观看| 好爽…又高潮了毛片免费看| 91精品啪在线观看国产线免费| 亚洲日日做天天做日日谢| 亚洲av无码av制服另类专区| 国产亚洲美女精品久久久| 日本不卡视频免费| 无人在线观看完整免费版视频| 一级毛片大全免费播放| 亚洲网站在线免费观看| 又粗又大又长又爽免费视频 | 亚洲一区电影在线观看| 亚洲综合精品一二三区在线 | 亚洲精品视频免费观看| 亚洲欧洲在线播放| 亚洲精品免费在线观看| 久久久久亚洲AV片无码| 亚洲精品无码mv在线观看网站| 亚洲综合色在线观看亚洲| 亚洲精品无码99在线观看| 亚洲?V乱码久久精品蜜桃| www.亚洲色图| 亚洲精品成人在线| 亚洲日韩涩涩成人午夜私人影院| 亚洲精品成人a在线观看| 亚洲精品99久久久久中文字幕 | 国产免费久久精品99久久| 亚洲国产精品无码久久98 | 1000部拍拍拍18勿入免费视频软件| 免费成人在线视频观看| 黄网站色视频免费看无下截| 亚洲精品动漫在线| 亚洲av永久无码精品三区在线4|