import java.util.*;public classBank {//定义服务时间常量,后面要用。

public static final long SHORTEST_SEVICE_TIME = 1000;public static final long LONGEST_SEVICE_TIME = 10000;public static final long BETWEEN_SEVICE_TIME = LONGEST_SEVICE_TIME -SHORTEST_SEVICE_TIME;public static voidmain (String[] args){//定义3个队列。因为是先进先出,所以用到LinkedList效率会比较好,用Collections.synchronizedList让线程安全。

List comm = Collections.synchronizedList (new LinkedList());

List exp = Collections.synchronizedList (new LinkedList());

List vip = Collections.synchronizedList (new LinkedList());//建立银行窗口

BankWindow comm1 = new BankWindow(1,WindowType.COMM);

BankWindow comm2= new BankWindow(2,WindowType.COMM);

BankWindow comm3= new BankWindow(3,WindowType.COMM);

BankWindow comm4= new BankWindow(4,WindowType.COMM);

BankWindow exp5= new BankWindow(5,WindowType.EXP);

BankWindow vip6= new BankWindow(6,WindowType.VIP);//银行窗口多线程开启

FuWuGuKe f1 = newFuWuGuKe(comm1,comm, exp, vip);

FuWuGuKe f2= newFuWuGuKe(comm2,comm, exp, vip);

FuWuGuKe f3= newFuWuGuKe(comm3,comm, exp, vip);

FuWuGuKe f4= newFuWuGuKe(comm4,comm, exp, vip);

FuWuGuKe f5= newFuWuGuKe(exp5,comm, exp, vip);

FuWuGuKe f6= newFuWuGuKe(vip6,comm, exp, vip);

Thread t1= newThread(f1);

Thread t2= newThread(f2);

Thread t3= newThread(f3);

Thread t4= newThread(f4);

Thread t5= newThread(f5);

Thread t6= newThread(f6);

t1.start();

t2.start();

t3.start();

t4.start();

t5.start();

t6.start();//队列就不用额外的线程了,直接放在主线程里。

while (true){

DuiLie.shengChengDuiLie(comm, exp, vip);

mySleep((long)(Math.random()*900) + 200);

}

}//定义了一个线程休眠的方式,不然要try catch好多遍。

public static void mySleep(longhaomiao){try{

Thread.sleep(haomiao);

}catch(Exception e){

}

}

}//服务顾客这个类准备用多线程

class FuWuGuKe implementsRunnable{privateBankWindow bw;private Listcomm;private Listexp;private Listvip;//创建对象的时候把bankwindow传进来,在run里使用对应对象的方法。

public FuWuGuKe(BankWindow bw, List comm, List exp, Listvip){this.bw =bw;this.comm =comm;this.exp =exp;this.vip =vip;

}public voidrun(){while(true){//对象(bankwindow)先服务自己类型 的顾客

bw.service(bw.getType(), comm, exp, vip);

}

}

}classBankWindow{//定义窗口的id和类型,以及名字

private intid;privateWindowType type;privateString windowName;//构造函数,设置窗口id和类型。

BankWindow(intid, WindowType type){this.id =id;this.type =type;

windowName= "第"+id+"号"+type +"窗口";

}//返回对象的窗口类型的方法

publicWindowType getType(){return this.type;

}//服务顾客的方法。因为:要处理对应类型的顾客,还有可能使用到3个类型的队列,所以全部当参数传入

public voidservice (WindowType type, List comm, List exp, List vip){intcustomID;longserviceTime;

System.out.println(windowName+"正在获取" + type + "客户");if (type ==WindowType.COMM){if (comm.size() != 0){//普通类型的队列如果不为空,则处理普通顾客//处理队列中的第一个客户,把客户的ID给customID,在打印语句中使用,下同。

customID = (int)comm.remove(0);

System.out.println(windowName+"获取到客户:"+customID+"普通客户");//计算服务时间(单位毫秒),赋值给serviceTime,在打印语句中使用,下同。

serviceTime = Bank.SHORTEST_SEVICE_TIME + (long)(Math.random() *Bank.BETWEEN_SEVICE_TIME) ;//调用Bank类中的mySleep方法,避免多次写try catch下同。

Bank.mySleep(serviceTime);

System.out.println(windowName+":"+customID+"普通客户服务完毕,服务时间:"+ serviceTime +"毫秒");

}else{//没有普通顾客则休息

System.out.println(windowName+":没有待服务的普通客户,休息。");

Bank.mySleep(1000);

}

}else if (type == WindowType.EXP){//快速类型的队列如果不为空,则处理快速顾客

if (exp.size() != 0){

customID= (int)exp.remove(0);

System.out.println(windowName+"获取到客户:"+customID+"快速客户");

serviceTime=Bank.SHORTEST_SEVICE_TIME;//快速顾客服务时间为最短服务时间。

Bank.mySleep(serviceTime);

System.out.println(windowName+":"+customID+"快速客户服务完毕,服务时间:"+ serviceTime +"毫秒");

}else {//没有快速类型的顾客,则处理普通顾客。有点递归的味道,不过由于处理普通顾客的方法会休息并结束,所以不是递归。下同

System.out.println(windowName+"没有获取到快速客户;尝试获取普通客户");

service(WindowType.COMM, comm, exp, vip);

}

}else if (type == WindowType.VIP){//贵宾类型的队列如果不为空,则处理贵宾顾客

if (vip.size() != 0){

customID= (int)vip.remove(0);

System.out.println(windowName+"获取到客户:"+customID+"贵宾客户");

serviceTime= Bank.SHORTEST_SEVICE_TIME + (long)(Math.random() *Bank.BETWEEN_SEVICE_TIME) ;

Bank.mySleep(serviceTime);

System.out.println(windowName+":"+customID+"贵宾客户服务完毕,服务时间:"+ serviceTime +"毫秒");

}else{//没有类型类型的顾客,则处理普通顾客。

System.out.println(windowName+"没有获取到贵宾客户;尝试获取普通客户");

service(WindowType.COMM, comm, exp, vip);

}

}

}

}//生成队列的类

classDuiLie{//定义了静态队列编号,随着类的加载而加载,

private static Integer commCust=0;private static Integer expCust=0;private static Integer vipCust=0;//无法new对象,没有意义。

privateDuiLie(){};//每次产生一个随机数,根据随机数的大小,往对应的队列里加入对应编号的成员。

public static voidshengChengDuiLie(List comm, List exp, List vip){double randNum =Math.random();//三种顾客的比例为6:3:1,所以分为用0.6和0.9把随机数分为3种类型。

if (randNum < 0.6){

commCust++;

comm.add(commCust);

System.out.println(commCust+"号普通用户抵达银行");

}else if(randNum < 0.9){

expCust++;

exp.add(expCust);

System.out.println(expCust+"号快速用户抵达银行");

}else{

vipCust++;

vip.add(vipCust);

System.out.println(vipCust+"号贵宾用户抵达银行");

}

}

}//定义一个枚举,我也不是很懂。

enumWindowType{

COMM, EXP, VIP;publicString toString(){switch (this){caseCOMM:return "普通";caseEXP:return "快速";caseVIP:return "贵宾";

}return "";

}

}

华兴银行 java 面试题_银行业务面试题,java代码。相关推荐

  1. 陀螺产业区块链第八季 | 华兴银行-区块链服务平台

    2020年4月,国家发改委在例行新闻发布会上宣布区块链被正式列为新型基础设施中的信息基础设施,自此区块链正式搭上新基建的"风口". 可以看出,区块链,正作为数字经济革命中的重要支撑 ...

  2. java笔试题_一道简单的 Java 笔试题,但值得很多人反思

    专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...

  3. java 有意思面试题_一道有趣的Java面试题

    一个鸡蛋从第N层及以上的楼层落下来会摔破? 现在很多大型IT企业在面试时都喜欢问一些智力相关的题目,虽然智力面试题在面试笔试中占的比例不大,但很多时候,面试环节中智力题往往会成为我们拿offer的最大 ...

  4. java 基础 笔试题_非常全面的java基础笔试题

    1.下列说法正确的是() (程序结构) A java程序的main方法必须写在类甩面 B java程序中可以有多个main方法 C.java程序中类名必须与文件名一样 D.JAVA程序的main方法中 ...

  5. 中软国际java开发面试题_中软国际java面试题及参考答案

    面试题是中软国际java个人求职者在面试过程中的敲门砖,以下是小编为大家收集到的,希望对大家有帮助! :填空题 1Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序并行机制的特点? B ...

  6. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  7. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  8. 支持java虚拟主机_为何缺乏支持Java的虚拟主机

    现在很多站长们,都青睐于香港虚拟主机建站.现在常见的是asp和PHP的程序空间很多,但是Java的少之又少,下面小编我给大家聊一聊! 一.香港Java虚拟主机成本高 使用Java程序建站,就必须要用支 ...

  9. java future用法_纯干货:Java学习过程中的21个知识点和技术点

    我们在Java学习过程中要学会抓重点,善于总结,Java学习过程中常见的21个知识点和技术点你知道吗?下面和千锋广州小编一起来看看吧! 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识 ...

最新文章

  1. 转:让kindle更好的支持pdf
  2. Write-Ahead Transaction Log
  3. 网站优化时不容错过的时期有哪几个?
  4. GIS-001-gdal软件下载地址
  5. clojure入门: hello world
  6. JAVA获取项目工程下的文件
  7. linux7.0ftp,Linux(Centos7)搭建FTP服务
  8. 初识java中数组、数组在内存中、越界异常、空指针异常
  9. java简单编程_「4」Java简单编程
  10. Dubbo 集成 ZooKeeper 注册中心实现服务调用
  11. STM32工作笔记0040---认识MOS管
  12. 以Post方式向指定url地址发送数据并活得返回结果
  13. 2019年企业数据生产力调研报告,90%的人都没看过
  14. java表达式7|3,Chapter3 Java运算符
  15. 4.3定时器框架(Timer Framework)
  16. opencv3.2.0实现视频抽帧,并保存成图片
  17. sqlloader 直接路径和常规路径_sqlloader
  18. 8、网友问答之串口数据接收与数据强制转换---------labview宝典
  19. uniapp微信支付方案
  20. linux 设置 中文输入法,linux的中文输入法设置

热门文章

  1. 系统学习Python——字符串(str):字符串格式化表达-[基础知识]
  2. NVIDIA Cuda 7.5 on Ubuntu 14.04 64 bits
  3. 最坏也是最好的时代|与陆奇,阿里VP,英伟达VP等重磅嘉宾相约道创峰会
  4. Java中如何使用方法?
  5. 为什么fflush(stdin)用了并不能清除缓冲区
  6. java没思路_Java编程没思路写不出代码怎么办
  7. 机器人是如何自动避障与自主回充的?
  8. 数据库在项目中的应用(软件测试方向)
  9. 迅投qmt量化交易系统以及实盘介绍
  10. 计算机控制电缆 规范,控制电缆和计算机电缆安全CQC认证要求变更的通知