【学习心得】传说中的7K面试题——银行业务调度系统

      

---------------------- android培训java培训、期待与您交流! ----------------------


 

 

 

软件开发的需求很清晰,但是分析起来比交通灯问题要复杂,因为窗口分类型,客户也分类型。三种不同的客户三种不同的窗口,所以要在编写代码是生成三种客户和对应的三种服务窗口(普通、快速、VIP);各种客户是异步按一定比例“产生”的,各种客户之间独立“产生”,所以“产生”客户的机制一定要满足异步和比例的要求;还有VIP窗口在没有VIP客户时也可以为普通客户服务,快速窗口也是这样。基本要求有这些。通过张老师的分析,我们知道完成整个系统功能可以把系统分拆为客户类型类、服务窗口类、号码管理类、号码机器类(返回三种不同的号码管理器,对应三种不同的客户),然后是运行类和任务耗时类。
   首先来看客户类型类,客户类型类只需要实现产生三种不同的客户类型就行,张老师依然用枚举来实现,因为类型就只有三种,不需要改变,此外该类提供一个toString()方法,转换代码内部调用与打印的关系。其实Switch()语句的case参数可以是byte,short,int和枚举值。
   服务窗口类是比较麻烦的,理论上只需要提供三种服务,但是实际上还要实现相应的“叫号“等功能,只有根据相应的客户类型才能提供相应的服务。初始化时设定的type为CustomerType.COMMON;所以在主运行程序中要先创建普通窗口,否则后面创建快速窗口和VIP窗口会覆盖type。叫号用的是Executors.newSingleThreadExecutor().execute()方法,这个方法在说交通灯时讲过,是一个“单线程池的定时器”,然后匿名内部类中用到了switch语句判断类型,根据类型调用相关的服务。服务类被抽取出来重新定义成一个内部类,其实按照张老师说的,我们还可以把Integer serviceNumber = NumberMachine.getInstance().getxxxManager().fetchNumber()方法和输出方法抽取成类,这时代码复用效率就更高了(由于服务时间上游差异,所以服务时间也要抽取成一个类)。在实际开发中服务时间serviceTime可以换成其他应用方法。还要注意的是VIP窗口和快速窗口如果在没有客户任务时不是“休息”而是直接去取普通窗口的任务。
    最后是号码管理类和号码机器类,要注意的是号码管理类中的generateNewNumber()方法和fetchNumber()方法时同步的,在运行代码时不同取号时又增加号码,这个很显然还要注意的是号码不是int类型,而是Integer类类型,因为取号用到的是remove方法,一旦没有号返回的是null,再转换成int型会报告成空指针异常,而Integer有自动装箱功能,编号时很方便。号码机器类又用到单例思想,产生三种不同的号码管理器,理解起来不难。
    如果懂了交通灯,再来看银行业务调度其实就不大难了,开始时没大看懂,看着代码再回忆张老师的分析,整个过程就比较清晰了。
---------------------- android培训java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值