银行业务调度

这道题还是有些难度的,不过一步一步分析,也不那么难理解,本片博客重点说说思路: 需求分析:1、银行内有6个业务窗口, 4个普通窗口,1快速窗口,1个VIP窗口。2、有三种对应类型的客户:VIP客户,普通客户,快速客户。3、VIP客户以及普通客户办理业务所需的时间有最大值和最小值,快速客户办理业务所需时间为最小值,三种客户比例为VIP客户:普通客户 :快速客户  =  1 :6 :3
摘要由CSDN通过智能技术生成


张孝祥老师7k面试题之银行业务调度:


这道题还是有些难度的,不过一步一步分析,也不那么难理解,本片博客重点说说思路:

 

一.需求分析:

(1)银行内有6个业务窗口, 4个普通窗口,1快速窗口,1个VIP窗口。

(2)有三种对应类型的客户:VIP客户,普通客户,快速客户。
(3)VIP客户以及普通客户办理业务所需的时间有最大值和最小值,快速客户办理业务所需时间为最小值,三种客户比例为VIP客户:普通客户 :快速客户  =  1 :6 :3。
(4)当VIP窗口和快速窗口没有客户等待可以为普通客户服务
 
二.用面相对象的思想可以提炼出三个对象,
1.银行窗口,
2.号码生成器(可以生成三种对应类型的客户的号码),
3.号码管理器(生成号码和获取窗口马上要服务的号码)
 
三.整个流程可这样设计:
 
1.号码管理器产生新号码,并对外提供获取窗口马上要办理的号码的方法。
2.号码生成器,由于只想它在内存中只有一个对象,采用单例设计,并在里面定义3个指向号码管理器的属性对象,分别表示普通客户,快速客户,vip客户。并对外提供访问对象的的方法。
3.开启一个线程循环调用3种窗口那类型,线程种根据不同客户,调用不同的窗口,用executors线程池。可以有switch() case :去判断怎么调用。类型这个变量只有3种考虑用枚举去定义。用if()else()去判断该类型窗口有没有等待的服务的号码,如果是快速窗口和vip窗口没有等待的,就为普通窗口服务。
 
4.主函数:创建6个窗口,并定于3个定时器,分别去创建新的普通号码,新的快速号码,新的vip号码。(定时器用execoutor接口创建)
 
四 .具体步骤:
1.  创建号码管理器类:
(1)  定义一个变量记录上一个客户的号码,方便得道下一个客户号码。
(2)  定义一个集合,存储在排队的号码。
(3)  定义一个方法可以产生新的号码。
(4)  定义一个方法能够给窗口提供马上要服务的号码。
  (面相对象的思想:谁拥有数据谁对外提供方法。)
代码体现:
public class NumberManager {
	/*步骤:1定义一个变量记录上一个生成了多少号,方便给下一个多少号。2定义一个集合来装还没有服务的号
	 *    3创建取号的方法,4创建个给窗口多少号的方法。*
	 *    说明3,4是不同线程操作相同 的数据需要同步*/
	 
	      private int lastNumber=0;
	      private  List< Integer>  queueNumbers = new ArrayList<Integer>();
	      
	      //定义方法生成号码
	      public synchronized Integer shengChengNumber(){
	    	       queueNumbers.add(++lastNumber);
	    	  return lastNumber;
	      }
	      //为窗口获取号码
	      public synchronized Integer quChuNumber(){
	    	       if(queueNumbers.size()>0){
	    	    	   return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值