面試題銀行業務調度系統實現_面試

來源:互聯網
上載者:User


           

                                               銀行業務調度系統

 

類比實現銀行業務調度系統邏輯,具體需求如下:

Ø         銀行內有6個業務視窗,1 - 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為VIP視窗。

Ø         有三種對應類型的客戶:VIP客戶,普通客戶,快速客戶(辦理如交水電費、電話費之類業務的客戶)。

Ø         非同步隨機產生各種類型的客戶,產生各類型使用者的機率比例為:

        VIP客戶 :普通客戶 :快速客戶  =  1 :6 :3。

Ø         客戶辦理業務所需時間有最大值和最小值,在該範圍內隨機設定每個VIP客戶以及普通客戶辦理業務所需的時間,快速客戶辦理業務所需時間為最小值(提示:辦理業務的過程可通過線程Sleep的方式類比)。

Ø         各類型客戶在其對應視窗按順序依次辦理業務。

Ø         當VIP(6號)視窗和快速業務(5號)視窗沒有客戶等待辦理業務的時候,這兩個視窗可以處理普通客戶的業務,而一旦有對應的客戶等待辦理業務的時候,則優先處理對應客戶的業務。

Ø         隨機產生客戶時間間隔以及業務辦理時間最大值和最小值自定,可以設定。

Ø         不要求實現GUI,只考慮系統邏輯實現,可通過Log方式展現程式運行結果。

用到的技術:

1、物件導向的設計

2、線程池的使用

3、枚舉

4、單例設計模式

類中設計主要方法:NumberManager-----產號和取號

                                    NumberMachine------相當於銀行的自動取號機,單例設計,能夠產生3類不同的號

                  ServiceWindow-----相當於銀行的視窗,具有叫號,處理的功能

    主要代碼實現:

NumberManager

publicclassNumberManager {

    privateintlastNumber=0;

    List<Integer>queueNumbers=new ArrayList<Integer>();

    publicsynchronized Integer generateNumber(){

       queueNumbers.add(++lastNumber);

       returnlastNumber;

    }

    publicsynchronized Integer fetchNumber(){

       if(queueNumbers.size()>0)

           returnqueueNumbers.remove(0);

       else

           returnnull;

    }

}

NumberMachine:

package cn.itcast.bank;

publicclassNumberMachine {

    private NumberMachine(){}

    publicstaticNumberMachineinstance=newNumberMachine();

    publicstaticNumberMachine getInstance(){

       returninstance;

    }

    private NumberManagercommonManager=new NumberManager();

    private NumberManagerfastManager=new NumberManager();

    private NumberManagerVipManager=new NumberManager();

    public NumberManager getCommomManager(){

       returncommonManager;

    }

    public NumberManager getFastManager(){

       returnfastManager;

    }

    public NumberManager getVipManager(){

       returnVipManager;

    }

}

ServiceWindow

package cn.itcast.bank;

import java.util.Random;

import java.util.concurrent.Executors;

publicclassServiceWindow {

    private CustomerTypetype = CustomerType.COMMON;

    privateintnumber = 1;

    publicvoid setType(CustomerType type) {

       this.type = type;

    }

    publicvoid setNumber(int number) {

       this.number = number;

    }

    publicvoid start() {

       Executors.newSingleThreadExecutor().execute(new Runnable() {

           publicvoid run() {

              while (true) {

                  switch (type) {

                  caseCOMMON:

                     commonService();

                     break;

                  caseFAST:

                     fastService();

                     break;

                  caseVIP:

                     vipService();

                     break;

                  }

 

              }

 

           }

       });

    }

    privatevoid commonService() {

       String windowName ="第" +number + "號" +type +"視窗";

       System.out.println(windowName +"開始擷取普通任務");

       Integer serviceNumber = NumberMachine.getInstance().getCommomManager()

              .fetchNumber();

       if (serviceNumber !=null) {

           System.out.println(windowName +"開始為" + serviceNumber +"號普通客戶服務");

           int time =new Random().nextInt(10) + 1;

           try {

 

              Thread.sleep(time);

           } catch (InterruptedException e) {

              e.printStackTrace();

           }

           System.out.println("完成對" + serviceNumber + "號普通客戶的服務,耗時" + time

                  + "秒");

       } else {

           System.out.println(windowName +"沒有擷取到普通任務,正在空閑一秒");

           try {

              Thread.sleep(1000);

           } catch (InterruptedException e) {

              e.printStackTrace();

           }

       }

    }

    privatevoid fastService() {

       String windowName ="第" +number + "號" +type +"視窗";

       System.out.println(windowName +"開始擷取快速任務");

       Integer serviceNumber = NumberMachine.getInstance().getFastManager()

              .fetchNumber();

       if (serviceNumber !=null) {

           System.out.println(windowName +"開始為" + serviceNumber +"號快速客戶服務");

           int time =new Random().nextInt(5) + 1;

           try {

 

              Thread.sleep(time);

           } catch (InterruptedException e) {

              e.printStackTrace();

           }

           System.out.println("完成對" + serviceNumber + "號快速客戶的服務,耗時" + time

                  + "秒");

       } else {

           System.out.println(windowName +"沒有擷取到快速任務,正在準備擷取普通任務");

           commonService();

       }

 

    }

 

    privatevoid vipService() {

       String windowName ="第" +number + "號" +type +"視窗";

       System.out.println(windowName +"開始擷取vip任務");

       Integer serviceNumber = NumberMachine.getInstance().getCommomManager()

              .fetchNumber();

       if (serviceNumber !=null) {

           System.out.println(windowName +"開始為" + serviceNumber +"號vip客戶服務");

           int time =new Random().nextInt(8) + 1;

           try {

 

              Thread.sleep(time);

           } catch (InterruptedException e) {

              e.printStackTrace();

           }

           System.out.println("完成對" + serviceNumber + "號vip客戶的服務,耗時" + time

                  + "秒");

       } else {

           System.out.println(windowName +"沒有擷取到vip任務,正在準備擷取普通任務");

           commonService();

       }

    }

}

 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.