黑馬程式設計師---7k面試題(銀行業務排程系統)
號碼管理器
publicclassNumberManager{ privateint lastNumber =0;//客戶數 privateList queueNumbers =newArrayList();//視窗叫號數 publicsynchronizedInteger generateNewNumber(){ queueNumbers.add(++lastNumber); return lastNumber; } publicsynchronizedInteger fetchNumber(){ if(queueNumbers.size()>0){ return(Integer)
publicclassNumberMachine{ privateNumberMachine(){}//單例 privatestaticNumberMachine instance =newNumberMachine(); publicstaticNumberMachine getInstance(){ return instance; } //建立三個號碼管理器 privateNumberManager commonManager =newNumberManager(); privateNumberManager
publicclassServiceWindow
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基礎的知識點都在裡面應用上了,非同步以及單例在裡面用很方便.