首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

月工资7K面试题之银行业务调度系统

2012-11-21 
月薪7K面试题之银行业务调度系统?详解还在整理中……?/** * @fileName NumberManager.java * @description

月薪7K面试题之银行业务调度系统

?

详解还在整理中……

?

/** * @fileName NumberManager.java * @description 号码管理器,负责产生号码(现实中是客户到取号机去取号)和取号(现实中是柜台服务员取号) * @date 2012-6-23 * @time 9:25 * @author wst */public class NumberManager {private int lastNumber=1;private List<Integer> queueNumber=new ArrayList<Integer>();//等待办理业务的号码/** * 客户在取号机取号,或者说将号码存到待办业务号码集合 * 必须加上同步锁,因为是两个不同线程在调用同一个对象的两个方法,客户和柜台服务员的取号方法必须排队 * @return 取到的号码 */public synchronized int generateNewManager(){queueNumber.add(lastNumber);return lastNumber++;}/** * 柜台服务员从待办业务号码集合里面取号 * @return 号码集合大于零则返回号码,否则返回零 */public synchronized int fetchServiceNumber(){//假设当前取号为1,那么集合里面的号码1就没有了,先加进去的要先取出来if(queueNumber.size()>0){return queueNumber.remove(0);}else{return 0;}}}
?

/** * @fileName NumberMachine.java * @description 管理号码管理器,有普通客户、快速客户、VIP客户 * @date 2012-6-23 * @time 10:30 * @author wst */public class NumberMachine {//普通号码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;}/* * 单例 */private NumberMachine(){}private static NumberMachine instance=new NumberMachine();public static NumberMachine getInstance(){return instance;}}
?

/** * @fileName ServiceWindow.java * @description 服务窗口 * @date 2012-6-24 * @time 20:54 * @author wst */public class ServiceWindow {private CustomerType type;//窗口类型private int number;//窗口序号public void setType(CustomerType type) {this.type = type;}public void setNumber(int number) {this.number = number;}//开始服务public void start(){Executors.newSingleThreadExecutor().execute(new Runnable(){@Overridepublic void run() {while(true){switch(type){case COMMON:commonService();break;case EXPRESS:expressService();break;case VIP:vipService();break;}}}});}//为普通客户服务private void commonService() {int serviceNumber=NumberMachine.getInstance().getCommonManager().fetchServiceNumber();String windowName="第"+number+"号"+type+"窗口";System.out.println(windowName+"开始获取普通任务……");if(serviceNumber!=0){System.out.println(windowName+"开始为"+serviceNumber+"号普通客户服务……");int maxRandom=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;//产生Constants.MIN_SERVICE_TIME到(maxRandom+Constants.MIN_SERVICE_TIM)的随机数(毫秒)int serviceTime=(new Random().nextInt(maxRandom)+1+Constants.MIN_SERVICE_TIME)/1000;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"号普通客户的服务,总共耗时"+serviceTime+"秒!");}else{try {System.out.println("没有获取到普通任务,休息一秒!");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}//为快速客户服务private void expressService() {int serviceNumber=NumberMachine.getInstance().getExpressManager().fetchServiceNumber();String windowName="第"+number+"号"+type+"窗口";System.out.println(windowName+"开始获取快速任务……");if(serviceNumber!=0){System.out.println(windowName+"开始为"+serviceNumber+"号快速客户服务……");int maxRandom=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;//产生Constants.MIN_SERVICE_TIME到(maxRandom+Constants.MIN_SERVICE_TIM)的随机数(毫秒)int serviceTime=(new Random().nextInt(maxRandom)+1+Constants.MIN_SERVICE_TIME)/1000;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"号快速客户的服务,总共耗时"+serviceTime+"秒!");}else{System.out.println("没有获取到快速任务!");commonService();//获取普通任务}}//为vip客户服务private void vipService() {int serviceNumber=NumberMachine.getInstance().getVipManager().fetchServiceNumber();String windowName="第"+number+"号"+type+"窗口";System.out.println(windowName+"开始获取vip任务……");if(serviceNumber!=0){System.out.println(windowName+"开始为"+serviceNumber+"号vip客户服务……");int maxRandom=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;//产生Constants.MIN_SERVICE_TIME到(maxRandom+Constants.MIN_SERVICE_TIM)的随机数(毫秒)int serviceTime=(new Random().nextInt(maxRandom)+1+Constants.MIN_SERVICE_TIME)/1000;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"号vip客户的服务,总共耗时"+serviceTime+"秒!");}else{System.out.println("没有获取到vip任务!");commonService();//获取普通任务}}}
?

?

/** * @fileName CustomerType.java * @description 客户类型 * @date 2012-6-23 * @time 11:37 * @author wst */public enum CustomerType {COMMON,EXPRESS,VIP;public String toString(){switch(this){case COMMON:return "普通";case EXPRESS:return "快速";case VIP:return name();}return null;}}
?

?

/** * @fileName Constants.java * @description 常量 * @date 2012-6-24 * @time 20:50 * @author wst */public class Constants {public static int MIN_SERVICE_TIME=1000;//最小服务时间,1秒public static int MAX_SERVICE_TIME=10000;//最大服务时间,10秒/* 每个普通窗口服务一个客户的平均时间为5秒,一共有4个这样的窗口, * 也就是说银行的所有普通窗口合起来 * 平均1.25秒内可以服务完一个普通客户, * 再加上快速窗口和VIP窗口也可以服务普通客户,所以, * 1秒钟产生一个普通客户比较合理 */public static int COMMON_CUSTOMER_INTERVAL_TIME = 1; }

?/**

 * @fileName MainClass.java * @description 测试 * @date 2012-6-24 * @time 21:42 * @author wst */public class MainClass {public static void main(String[] args) {//产生4个普通窗口for(int i=1;i<5;i++){ServiceWindow commonWindow=new ServiceWindow();commonWindow.setNumber(i);commonWindow.setType(CustomerType.COMMON);commonWindow.start();}//产生一个快速窗口ServiceWindow expressWindow=new ServiceWindow();expressWindow.setNumber(1);expressWindow.setType(CustomerType.EXPRESS);expressWindow.start();//产生一个vip窗口ServiceWindow vipWindow=new ServiceWindow();vipWindow.setNumber(1);vipWindow.setType(CustomerType.VIP);vipWindow.start();//普通客户拿号Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){int serviceNumber=NumberMachine.getInstance().getCommonManager().generateNewManager();System.out.println("第"+serviceNumber+"号普通客户正在等待服务……");}},0,Constants.COMMON_CUSTOMER_INTERVAL_TIME,TimeUnit.SECONDS);//快速客户拿号Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){int serviceNumber=NumberMachine.getInstance().getExpressManager().generateNewManager();System.out.println("第"+serviceNumber+"号快速客户正在等待服务……");}},0,Constants.COMMON_CUSTOMER_INTERVAL_TIME*2,TimeUnit.SECONDS);//vip客户拿号Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){int serviceNumber=NumberMachine.getInstance().getVipManager().generateNewManager();System.out.println("第"+serviceNumber+"号vip客户正在等待服务……");}},0,Constants.COMMON_CUSTOMER_INTERVAL_TIME*6,TimeUnit.SECONDS);}}

热点排行