1. 程式人生 > >黑馬程式設計師---7k面試題(銀行業務排程系統)

黑馬程式設計師---7k面試題(銀行業務排程系統)


號碼管理器

publicclassNumberManager{ privateint lastNumber =0;//客戶數 privateList queueNumbers =newArrayList();//視窗叫號數 publicsynchronizedInteger generateNewNumber(){ queueNumbers.add(++lastNumber); return lastNumber; } publicsynchronizedInteger fetchNumber(){ if(queueNumbers.size()>0){ return(Integer)

queueNumbers.remove(0); }else{ returnnull; } } }

叫號機

publicclassNumberMachine{ privateNumberMachine(){}//單例 privatestaticNumberMachine instance =newNumberMachine(); publicstaticNumberMachine getInstance(){ return instance; } //建立三個號碼管理器 privateNumberManager commonManager =newNumberManager(); privateNumberManager

expressManager =newNumberManager(); privateNumberManager vipManager =newNumberManager(); publicNumberManager getCommonManager(){ return commonManager; } publicNumberManager getExpressManager(){ return expressManager; } publicNumberManager getVipManager(){ return vipManager; }

視窗服務

publicclassServiceWindow

{ privateCustomerType type =CustomerType.COMMON;//視窗型別 privateint number =1;//幾號視窗 publicCustomerType getType(){ return type; } publicvoid setType(CustomerType type){ this.type = type; } publicvoid setNumber(int number){ this.number = number; } //開始叫號 publicvoid start(){ Executors.newSingleThreadExecutor().execute( newRunnable(){ publicvoid run(){ //下面這種寫法的執行效率低,最好是把while放在case下面 //找NumberMachine要號碼管理器 while(true){ switch(type){ case COMMON: commonService(); break; case EXPRESS: expressService(); break; case VIP: vipService(); break; } } } } ); } privatevoid commonService(){ String windowName ="第"+ number +"號"+ type +"視窗"; System.out.println(windowName +"開始獲取普通任務!"); Integer serviceNumber =NumberMachine.getInstance().getCommonManager().fetchNumber(); if(serviceNumber !=null){ System.out.println(windowName +"開始為第"+ serviceNumber +"號普通客戶服務"); int maxRandom =Constants.MAX_SERVICE_TIME -Constants.MIN_SERVICE_TIME; int serviceTime =newRandom().nextInt(maxRandom)+1+Constants.MIN_SERVICE_TIME; try{ Thread.sleep(serviceTime); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(windowName +"完成為第"+ serviceNumber +"號普通客戶服務,總共耗時"+ serviceTime/1000+"秒"); }else{ System.out.println(windowName +"沒有取到普通任務,正在空閒一秒"); try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } } } privatevoid expressService(){ Integer serviceNumber =NumberMachine.getInstance().getExpressManager().fetchNumber(); String windowName ="第"+ number +"號"+ type +"視窗"; System.out.println(windowName +"開始獲取快速任務!"); if(serviceNumber !=null){ System.out.println(windowName +"開始為第"+ serviceNumber +"號快速客戶服務"); int serviceTime =Constants.MIN_SERVICE_TIME; try{ Thread.sleep(serviceTime); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(windowName +"完成為第"+ serviceNumber +"號快速客戶服務,總共耗時"+ serviceTime/1000+"秒"); }else{ System.out.println(windowName +"沒有取到快速任務!"); commonService(); } } privatevoid vipService(){ Integer serviceNumber =NumberMachine.getInstance().getVipManager().fetchNumber(); String windowName ="第"+ number +"號"+ type +"視窗"; System.out.println(windowName +"開始獲取VIP任務!"); if(serviceNumber !=null){ System.out.println(windowName +"開始為第"+ serviceNumber +"號VIP客戶服務"); int maxRandom =Constants.MAX_SERVICE_TIME -Constants.MIN_SERVICE_TIME; int serviceTime =newRandom().nextInt(maxRandom)+1+Constants.MIN_SERVICE_TIME; try{ Thread.sleep(serviceTime); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(windowName +"完成為第"+ serviceNumber +"號VIP客戶服務,總共耗時"+ serviceTime/1000+"秒"); }else{ System.out.println(windowName +"沒有取到VIP任務!"); commonService(); } } }

視窗型別

publicenumCustomerType{ COMMON,EXPRESS,VIP; publicString toString(){ String name =null; switch(this){ case COMMON: name ="普通"; break; case EXPRESS: name ="快速"; break; case VIP: name = name(); break; } return name; } }

工作時間

publicclassConstants{ publicstaticint MAX_SERVICE_TIME =10000;//10秒! publicstaticint MIN_SERVICE_TIME =1000;//1秒! publicstaticint COMMON_CUSTOMER_INTERVAL_TIME =1;// }

main主函式

publicclassMainClass{ privatestaticLogger logger =Logger.getLogger("cn.itcast.bankqueue"); publicstaticvoid main(String[] args){ //產生4個普通視窗 for(int i=1;i<5;i++){ ServiceWindow window =newServiceWindow(); window.setNumber(i); window.start(); } //產生1個快速視窗 ServiceWindow expressWindow =newServiceWindow(); expressWindow.setType(CustomerType.EXPRESS); expressWindow.start(); //產生1個VIP視窗 ServiceWindow vipWindow =newServiceWindow(); vipWindow.setType(CustomerType.VIP); vipWindow.start(); //普通客戶拿號 Executors.newScheduledThreadPool(1).scheduleAtFixedRate( newRunnable(){ publicvoid run(){ Integer serviceNumber =NumberMachine.getInstance().getCommonManager().generateNewNumber(); //logger.info("第" + serviceNumber + "號普通客戶正在等待服務!"); System.out.println("第"+ serviceNumber +"號普通客戶正在等待服務!"); } }, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS); //快速客戶拿號 Executors.newScheduledThreadPool(1).scheduleAtFixedRate( newRunnable(){ publicvoid run(){ Integer serviceNumber =NumberMachine.getInstance().getExpressManager().generateNewNumber(); System.out.println("第"+ serviceNumber +"號快速客戶正在等待服務!"); } }, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME *2, TimeUnit.SECONDS); //VIP客戶拿號 Executors.newScheduledThreadPool(1).scheduleAtFixedRate( newRunnable(){ publicvoid run(){ Integer serviceNumber =NumberMachine.getInstance().getVipManager().generateNewNumber(); System.out.println("第"+ serviceNumber +"號VIP客戶正在等待服務!"); } }, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME *6, TimeUnit.SECONDS); } }


總體來講:思路 步驟和程式設計三個步驟都需要縝密,很多JAVA基礎的知識點都在裡面應用上了,非同步以及單例在裡面用很方便.

------ android培訓java培訓、期待與您交流! ----------