黑马程序员——Java面试题之银行业务调度系统

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

对象分析:

1.客户类按照业务分类,客户可以分成三类。

public enum Custommer {

COMMON ,VIP , EXPRESS;

public String
toString(){

String name =null ;

switch (this ){

case COMMON :

name ="普通" ;

break;

case VIP :

name ="VIP" ;

break;

case EXPRESS :

name ="快速" ;

break;

}

return name;

}

}

2.号码机类。号码机用于产生各种号码管理类。

public class NumberMachine {

private NumberMachine(){}

private static NumberMachine instancenew NumberMachine() ;

public static NumberMachine
getInstance (){

return instance ;

}

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 ;

}

}

3.号码管理类。号码机管理类主要作用存放号码,给外界提供号码信息。

import java. util.*;

public class NumberManager {

private int lastnumber= 0;

private List queueNumber= new ArrayList ();

public synchronized Integer generateNewNumber (){

queueNumber .add ( lastnumber++ );

return lastnumber ;

}

public synchronized Integer fetchNumber (){

if (queueNumber .size ()> 0 )

return ( Integer ) queueNumber. remove (0 );

else return null;

}

}

4.服务窗口类。为客户提供服务

public class ServiceWindow {

Custommer type= Custommer. COMMON;

public Custommer
getType() {

return type ;

}

public void setType (Custommer
type ) {

this. type = type;

}

public int getNumber () {

return number ;

}

public void setNumber (int number ) {

this. number = number;

}

int number =1 ;

public void start (){

Executors .newSingleThreadExecutor ()  .execute ( new Runnable (){

public void run () {

// TODO Auto-generated method
stub

while ( true )

switch ( type ){

case COMMON :

commonService ();

break;

case VIP :

vipService ();

break;

case EXPRESS :

expressService ();

}

}

}) ;

}

private void commonService () {

// TODO Auto-generated method
stub

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 = new Random (). 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 ();

}

}

}

private void vipService () {

// TODO Auto-generated method
stub

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 ();

}

}

private void expressService () {

// TODO Auto-generated method
stub

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 = new Random (). 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 ();

}

}

}

5.测试类类。

class Constants {

public final static int MAX_SERVICE_TIME =10 ;

public final static int MIN_SERVICE_TIME =1 ;

public static int COMMON_CUSTOMER_INTERVAL_TIME = 1;

}

public class MainClass {

private static Logger logger = Logger .getLogger ("threadTest" );

public static void main ( String[] args ) {

//产生4个普通窗口

for (int i= 1; i< 5; i++ ){

ServiceWindow
window =  new ServiceWindow() ;

window .setNumber ( i) ;

window .start ();

}

//产生1个快速窗口

ServiceWindow
expressWindow =  new ServiceWindow() ;

expressWindow .setType ( Custommer. EXPRESS) ;

expressWindow .start ();

//产生1个VIP窗口

ServiceWindow
vipWindow =  new ServiceWindow() ;

vipWindow .setType ( Custommer. VIP) ;

vipWindow .start ();

//普通客户拿号

Executors .newScheduledThreadPool ( 1) .scheduleAtFixedRate (

new Runnable(){

public void run (){

Integer
serviceNumber = NumberMachine.getInstance (). getCommonManager (). generateNewNumber() ;

System . out. println( "第" + serviceNumber + "号普通客户正在等待服务!" );

}

},

0 ,

Constants . COMMON_CUSTOMER_INTERVAL_TIME,

TimeUnit . SECONDS) ;

//快速客户拿号

Executors .newScheduledThreadPool ( 1) .scheduleAtFixedRate (

new Runnable(){

public void 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 (

new Runnable(){

public void run (){

Integer
serviceNumber = NumberMachine.getInstance (). getVipManager (). generateNewNumber() ;

System . out. println( "第" + serviceNumber + "号VIP客户正在等待服务!" );

}

},

0 ,

Constants . COMMON_CUSTOMER_INTERVAL_TIME * 6 ,

TimeUnit . SECONDS) ;

}

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

黑马程序员——Java面试题之银行业务调度系统

时间: 2024-10-21 15:58:50

黑马程序员——Java面试题之银行业务调度系统的相关文章

黑马程序员——Java面试题之交通灯调度系统

面对对象设计 面对对象设计思想:把方法定义在合适的对象上. 人在黑板上画圆,其实是调用圆的构造方法. 司机刹车,实际上刹车的方法在车上面,我们只是调用刹车的方法,刹车的方法在车上. class Circle1{ double r ; public Circle1( double r) { this. r = r; } } new对象就能新建一个圆,计算机的世界也不等同现实世界,不能说徒手画得不圆,不圆的是曲线就不是圆了. 路上的汽车减少,是路增加一个汽车或者减少一个汽车 小球怎样从绳子一端移动到

黑马程序员-java 7K面试题之银行业务调度系统

------- android培训.java培训.期待与您交流! -------- 银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 1. 银行有6个业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 2. 有三种对应类型的客户:VIP客户.普通客户.快速客户(办理如交水电费.电话费之类业务的客户). 3. 异步随机生成各种类型的客户,生成各类型用户的概率比率为: VIP客户:普通客户:快速客户=1:6:3 4. 客户办理业务所需时间有最大值和最小值,

黑马程序员-java 7K面试题之交通灯管理系统

------- android培训.java培训.期待与您交流! -------- 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1. 异常随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆----直行车辆 由西向而来去往南向的车辆----右转车辆 由东向而来去往南向的车辆----左转车辆 .......  ...... 2. 信号灯忽略黄灯,只考虑红灯和绿灯. 3. 应该考虑左转车辆控制信号灯,右转车辆不受信号灯控制. 4. 具体信号灯控制逻辑与现实

黑马程序员-入学笔试题

笔试结束,列一下笔试题和我的解答,最后得分29.7. 1. 编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value. package com.itheima; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class Test1 { public static void m

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员——Java高新技术代理

代理 普通代理 很多时候,我们使用别人代码往往会发现别人代码的功能并不是十分符合我们的需求,调用别人的方法的时候,总是先new一个对象,然后我们的前处理做完,然后调用别人代码的方法,再加入后处理,这样做往往十分麻烦.代理就为其他类提供了一种控制其对象的方法.代理类和委托类必须实现同一个接口,这样代理类才能在需要的时候代替委托类对象,执行委托类的方法. interface Solution{ public void doSomething(); } //委托类Demo实现了接口 class Dem

黑马程序员——Java I/O流基础知识点(File类)

File工具 File类就是用俩将文件或者文件夹封装对象,弥补流对象的不足--流只能操作数据,不能操作文件夹的 封装的是路径!!! 构造方法演示 1.可以将已有的未出现的文件或者文件夹封装成对象. File f1=new File("c:\\abc\\a.txt"): File f2=new File("d:\\abc","ab.txt"打印,会打印路径.:目录分隔符,为了更好地跨平台File. File类常见功能 1,创建 createNewF

黑马程序员 ---------- Java网络技术之 ---正则表达式 (Day06)

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 正则表达式 正则表达式:基本知识 1  字符,   2 字符类 , 3 预定义字符类 , 4 边界匹配器 ,5 Greedy 数量词,6 Logical 运算符 详解: 1 字符 x   字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 <= n <= 7) \0nn 带有八进制值 0 的字符 nn (0 <= n

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象