黑馬程式設計師_7k面試題之銀行業務排程系統
----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! ---------
一.專案需求:
模擬實現銀行業務排程系統邏輯,具體需求如下:
- 銀行內有6個業務視窗,1 - 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為VIP視窗。
- 有三種對應型別的客戶:VIP客戶,普通客戶,快速客戶(辦理如交水電費、電話費之類業務的客戶)。
- 非同步隨機生成各種型別的客戶,生成各型別使用者的概率比例為:
VIP客戶:普通客戶:快速客戶 = 1 :6 :3。
- 客戶辦理業務所需時間有最大值和最小值,在該範圍內隨機設定每個VIP客戶以及普通客戶辦理業務所需的時間,快速客戶辦理業務所需時間為最小值(提示:辦理業務的過程可通過執行緒Sleep的方式模擬)。
- 各型別客戶在其對應視窗按順序依次辦理業務。
- 當VIP(6號)視窗和快速業務(5號)視窗沒有客戶等待辦理業務的時候,這兩個視窗可以處理普通客戶的業務,而一旦有對應的客戶等待辦理業務的時候,則優先處理對應客戶的業務。
- 隨機生成客戶時間間隔以及業務辦理時間最大值和最小值自定,可以設定。
- 不要求實現GUI,只考慮系統邏輯實現,可通過Log方式展現程式執行結果。
- 二,專案分析:
- 面向物件的分析和設計:
(一)有三種對應型別的客戶:VIP客戶,普通客戶,快速客戶,非同步隨機生成各種型別的客戶,各型別客戶在其對應視窗按順序依次辦理業務。
1.首先,經常在銀行辦理業務的人更有利於理解本系統,例如,我經常陪老婆跑銀行,對銀行的這個業務算是比較熟悉了,我知道每一個客戶其實就是由銀行的一個取號機器產生號碼的方式來表示的。所以,我想到要有一個號碼管理器物件,讓這個物件不斷地產生號碼,就等於隨機生成了客戶。
2.由於有三類客戶,每類客戶的號碼編排都是完全獨立的,所以,我想到本系統一共要產生三個號碼管理器物件,各自管理一類使用者的排隊號碼。這三個號碼管理器物件統一由一個號碼機器進行管理,這個號碼機器在整個系統中始終只能有一個,所以,它要被設計成單例。
(二)各型別客戶在其對應視窗按順序依次辦理業務 ,準確地說,應該是視窗依次叫號。
1.各個視窗怎麼知道該叫哪一個號了呢?它一定是問的相應的號碼管理器,即服務視窗每次找號碼管理器獲取當前要被服務的號碼。
2.如果我不是多次親身經歷銀行的這種業務,再加之積累了大量面向物件的應用開發經驗,我也不知道能否輕鬆進行這種設計,能否發掘出其中隱含的物件資訊,我真說不出具體的經驗是什麼,就是日積月累出來的一種感覺。
(三)類圖:
- 類的編碼實現
(一)NumberManager類
1.定義一個用於儲存上一個客戶號碼的成員變數和用於儲存所有等待服務的客戶號碼的佇列集合。
2.定義一個產生新號碼的方法和獲取馬上要為之服務的號碼的方法,這兩個方法被不同的執行緒操作了相同的資料,所以,要進行同步。
原始碼如下:
- package cn.itcast.bankqueue;
- import java.util.ArrayList;
- import java.util.List;
- publicclass NumberManager {
- private
int lastNumber = 0;- private List queueNumbers = new ArrayList();
- publicsynchronized Integer generateNewNumber(){
- queueNumbers.add(++lastNumber);
- return lastNumber;
- }
- publicsynchronized Integer fetchNumber(){
- if(queueNumbers.size()>0){
- return (Integer)queueNumbers.remove(0);
- }else{
- returnnull;
- }
- }
- }
(二)NumberMachine類
1.定義三個成員變數分別指向三個NumberManager物件,分別表示普通、快速和VIP客戶的號碼管理器,定義三個對應的方法來返回這三個NumberManager物件。
2.將NumberMachine類設計成單例。
原始碼如下:
- package cn.itcast.bankqueue;
- publicclass NumberMachine {
- private NumberMachine(){}
- privatestatic NumberMachine instance = new NumberMachine();
- publicstatic NumberMachine getInstance(){
- return instance;
- }
- private NumberManager commonManager = new NumberManager();
- private NumberManager expressManager = new NumberManager();
- private NumberManager vipManager = new NumberManager();
- public NumberManager getCommonManager() {
- return commonManager;
- }
- public NumberManager getExpressManager() {
- return expressManager;
- }
- public NumberManager getVipManager() {
- return vipManager;
- }
- }
(三)CustomerType列舉類
1.系統中有三種類型的客戶,所以用定義一個列舉類,其中定義三個成員分別表示三種類型的客戶。
2.重寫toString方法,返回型別的中文名稱。這是在後面編碼時重構出來的。
原始碼如下:
- package cn.itcast.bankqueue;
- publicenum CustomerType {
- COMMON,EXPRESS,VIP;
- public String toString(){
- String name = null;
- switch(this){
- case COMMON:
- name = "普通";
- break;
- case EXPRESS:
- name = "快速";
- break;
- case VIP:
- name = name();
- break;
- }
- return name;
- }
- }
(四)ServiceWindow類
1.定義一個start方法,內部啟動一個執行緒,根據服務視窗的類別分別迴圈呼叫三個不同的方法。
2.定義三個方法分別對三種客戶進行服務,為了觀察執行效果,應詳細打印出其中的細節資訊。
原始碼如下:
- package cn.itcast.bankqueue;
- import java.util.Random;
- import java.util.concurrent.Executors;
- import java.util.logging.Logger;
- /**
- * 沒有把VIP視窗和快速視窗做成子類,是因為實際業務中的普通視窗可以隨時被設定為VIP視窗和快速視窗。
- * */
- publicclass ServiceWindow {
- privatestatic Logger logger = Logger.getLogger("cn.itcast.bankqueue");
- private CustomerType type = CustomerType.COMMON;
- privateint number = 1;
- public CustomerType getType() {
- return type;
- }
- publicvoid setType(CustomerType type) {
- this.type = type;
- }
- publicvoid setNumber(int number){
- this.number = number;
- }
- publicvoid start(){
- Executors.newSingleThreadExecutor().execute(
- new Runnable(){
- publicvoid run(){
- //下面這種寫法的執行效率低,最好是把while放在case下面
- while(true){
- switch(type){
- case COMMON:
- commonService();
- break;
- case EXPRESS:
- expressService();
- break;
相關推薦
黑馬程式設計師_7k面試題之銀行業務排程系統
----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! --------- 一.專案需求: 模擬實現銀行業務排程系統邏輯,具體需求如下: 銀行內有6個業務視窗,1 - 4號視窗為普通視窗,5號視窗為快速
黑馬程式設計師---7k面試題(銀行業務排程系統)
號碼管理器 publicclassNumberManager{ privateint lastNumber =0;//客戶數 privateList queueNumbers =newArrayList();//視窗叫號數 publicsynchronizedInteger generateN
黑馬程式設計師_7K面試題之銀行排程系統
------- android培訓、java培訓、期待與您交流! ---------- 銀行業務排程系統 1. 模擬實現銀行業務排程系統邏輯,具體需求如下:銀行內有6個業務視窗,1 - 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為VIP視窗。有三種對應型別的客戶:
黑馬程式設計師_7k面試題之交通燈管理系統
交通燈管理系統 1. 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下:非同步隨機生成按照各個路線行駛的車輛。例如:由南向而來去往北向的車輛---- 直行車輛由西向而來去往南向的車輛---- 右轉車輛由東向而來去往南向的車輛---- 左轉車輛 ...... 訊號燈忽略黃燈,只考
黑馬程式設計師------------高新面試題之銀行排程系統
面向物件的分析和設計說明: 1、有三種客戶:VIP客戶、普通客戶、快速客戶。需要非同步隨機產生各種型別的客戶。 2、每一個客戶其實就是由銀行的一個取號機器產生號碼的方式來表示的。所以,要有一個號碼管理器物件,讓這個物件不斷地產生號碼,就等於隨機生成了客戶。
黑馬程式設計師_7K面試題之交通燈
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank"&g
黑馬程式設計師_7K面試題之交通燈系統
交通燈訊號模擬系統 一、概述 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下:(需求直接來源於老師的文件) ① 非同步隨機生成按照各個路線行駛的車輛。 例如:
黑馬程式設計師----7k面試題之交通燈管理系統
畫圖非常有助於分析和理解問題。 十字路總共有12條線路,為了統一程式設計模型,可以假設每條線路都有一個紅綠燈對其進行控制, 右拐的四條線路假設稱為常綠狀態,另外,其他的8條兩兩成對的,可以歸為4組, 所以程式只需考慮途中標註了數字號的4條線路的控制燈的切換順序, 這四條路線的反方向的路線控制燈跟隨
黑馬程式設計師-7k面試題之交通燈管理系統
---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- 面試題要求: 1.非同步隨機生成按照各種路線行駛的車輛。例如:由南向而來去往北向的車輛--------直行車輛由西向
黑馬程式設計師_7k面試題(交通燈管理系統)學習筆記
總共有12條路線,為了統一程式設計模型,可以假設每條路線都有一個紅綠燈對其進行控制,右轉彎的4條路線的控制燈可以假設稱為常綠狀態,另外,其他的8條線路是兩兩成對的,可以歸為4組,所以,程式只需考慮圖中標註了數字號的4條路線的控制燈的切換順序,這4條路線相反方向的路線的控制燈跟隨這4條路線切換,不必額外考慮
黑馬程式設計師_7K面試題_交通燈管理系統
-面向物件分析設計經驗:誰用於資料,誰就對外提供操作這些資料的方法。 典型案例: 人在黑板上畫圓。 分析: 共有三個物件:人、黑板、圓。動作:畫 畫圓需要圓心和半徑,圓心和半徑都是圓的屬性上,圓擁有資料,所以圓物件提供畫圓的方法 圓在黑板上,黑板擁有
黑馬程式設計師__7K面試題之交通燈管理系統
---------------------- Android開發、java培訓、期待與您交流! ---------------------- 一.需求 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下: 1.非同步隨機生成按照各個路線行駛的車輛。 例如:
黑馬程式設計師_12_7k面試題之交通燈
---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ---------------------- 交通燈管理系統的專案需求: 非同步隨機生成按照各個路線行駛的車輛。 例如:由南來向北去的車輛——直
黑馬程式設計師-----7K面試題之交通燈系統
------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 現在每晚都加大力度去學習和加強自己的J
黑馬程式設計師——面試題——2.銀行業務排程系統
---------- android培訓、java培訓、期待與您交流! ---------- 銀行業務排程系統 ----------------------------------------------------------------------------
黑馬程式設計師——java面試題之基礎語法
型別轉化 float f1 = (float)12.345; float f2 = 12.345f; f1其實是通過一個double型別轉換過來的。 而f2本身就是一個flo
黑馬程式設計師_面試題1(交通燈管理系統)
一.專案需求: 模擬實現十字路口的交通燈管理系統邏輯: 非同步隨機生成按照各個路線行駛的車輛。 例如: 由南向而來去往北向的車輛 ---- 直行車輛 由西向而來去往南向的車輛 ---- 右
黑馬程式設計師-----高薪面試題-銀行業務排程系統
------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 一、需求 模擬實現銀行業務排程系統邏輯
【本人禿頂程式設計師】面試題之死鎖解密
←←←←←←←←←←←← 我都禿頂了,還不點關注! 死鎖的概念 在多執行緒環境中,我們經常會遇到多個執行緒訪問同一個共享資源的情況,這個時候必須考慮如何維護資料一致性,常見的方式是加鎖處理。只有拿到鎖的執行緒才可以訪問共享資源,通過鎖就可以讓執行緒對共享資源的訪問都是順序的,避免出現
黑馬程式設計師--7k面試題交通燈
package com.itheima.traffic; import java.beans.VetoableChangeSupport; import java.util.ArrayList; import java.util.List; import java.util.Random; import j