美东一公司的郁闷面试题

说是题目可以用不同的语言,但是貌似 Java 是多线程的,用 Java 写肯定容易不少。

但,觉得这个题目用多线程简直是有点脱了裤子放屁。

完整题目内容

题目的网站内容如下:

Please complete the following challenge in one of the following programming languages: C, C++, C#, Java, Python, Go, or Typescript. Please only use standard or ubiquitous libraries. If you heavily rely on a library, please include a description on how that library call works with as much detail as possible.
Busy Body Bank services many in-person customers every day in their large luxurious lobby at the center of a city. They have N Tellers in stalls at any time to accommodate heavy traffic while optimizing for employee hours whenever possible. N changes from day-to-day as the bank’s management anticipates surges or reductions of Customer count.

When the bank is empty, tellers are asleep. When a Customer enters, they announce themselves and a teller wakes up and conducts a transaction that takes some amount of time. As more customers arrive, they wake Tellers and conduct a transaction or wait in the bank’s queue for a teller to become available (if there are none immediately available). The bank’s queue line has M possible positions where Customers can wait for tellers to become available. If a Customer walks into the bank to find no available tellers and a full queue, they will take their business to Small and Simple, a bank across the street.

If the bank gets more customers than it expects on any day, then it will call more Tellers in to accommodate this surge, but calling Tellers on-demand usually costs the bank more money than the lost business from under-staffing. The bank would only call in additional Tellers after a day starts if there was a very significant number of customers taking their business elsewhere.

Write a program that simulates a work day for the bank that models the behavior of each actor in this scenario: Teller and Customer. It might be necessary to simulate other actors to match the above scenario. Each actor should be a separate thread. The program will not be run, but should be clear enough to follow to ensure it would run without error. You may choose to provide an example output of the program running. If you do, assume the bank has only slightly underestimated the number of customers that would come in.

With the introduction of different forms of banking (online and ATMs) and an upcoming city festival bringing in countless possible customers, the bank’s analysts say that the customer count forecast has been thrown into disarray. For the below questions, feel free to choose values or value ranges for any undefined variables as you see fit. They may be answered in pseudo-code.

Write an algorithm that the bank can use to optimize the Number of Tellers (N) to call in if they expect C customers for any given day.

Write an algorithm that the bank can use to determine if they should call in or send home Tellers to minimize operation costs.

题目大意

如果没有理解错的话,就是希望实现一个类似银行的处理系统。

这个系统有固定的营业员,同时还有一个缓冲池。

当自己银行柜员不够用的时候,我们可以让客户到别的银行去办理业务,我们也可以从其他银行去调柜员来处理业务。

希望用一个程序的方式对上面的情况进行表述,并且还希望判断当用户数量等于多少的时候,我们希望多银行配备多少柜员。

当用户为多少的时候,我们可以把柜员发回家休息。

解读

如果非要实现的话,使用线程和线程池的概念是比较好实现的。

在开始的时候,默认允许创建 3 个线程,如果还创建线程请求的话,就把这个请求放到线程池里面,等待已经创建的线程完成。

如果线程池都已经满了,那么就需要创建其他的银行线程,把请求的线程放到其他银行里面去执行。

程序里面只有 Java 线程概率用得比较多,Python 的线程是假的多线程,通常没有线程使用的创建,等待,这些概念。

TypeScript 是单线程语言,这真不知道怎么去实现多线程了。

其实我最开始考虑的是使用 List,在一个 List 里面定义一个空间,这个表示的是初始化创建的柜员,在另外一个 List 里面定义空间,这个空间就是缓存了。

当数据开始调用的时候,首先先把第一个 List 进行填充,在定义的对象的时候还需要定义一个时间,我们还知道柜员在处理一个业务需要多少时间。

当第一个 List 填充满了以后,再填充换成 List,当柜员的时间完成后,把第一个 List 中的对象设值为空,然后从缓存 List 里面拿数据这样一种方式。

同时计算总共需要的耗时时间,这样才能确定当前的用户量的时候,需要多少时间才能完成,同时有多少柜员是工作的,有多少柜员是休息的。

但是,题目说要用多线程,所以感觉就是纯粹在多此一举。

另,我们认为这个题目设计得其实非常糟糕。

因为是太多的开放条件和可能性了。 这个在程序设计中是非常难设计的,因为每个可能性都有条件。

比如说下面的:

  1. 每个柜员的处理时间是不是一样的,如果不一样我们应该如何定义?
  2. 每个 List 的初始值应该是多少,队列是可以随时调整的还是固定好的。
  3. 当我们要求其他银行进行帮助的时候,是在 Q 满了的时候,还是在 Q 满了再等多长时间在进行调用。
  4. 对其他银行的调用初始值是多少,是一次调用一个还是根据客户情况调用多个?

还有其他的很多条件都没有说明白,所以我们觉得这个题目非常糟糕,不确定的地方太多,完全考察不了人的数据设计能力。

同时又要求使用线程,线程的开销其实也是比较大的,也没有必要去做。

所以这个题目非常不好做,感觉有点乱,他们自己都不知道要设计一个什么东西。

总结

不管怎么样还是 OA 的结果上传下吧。

但在提交的文档中,我也明确的说明了这个题目有很多种做法,其实并不是非常理想。

2023-09-13_12-16-43

然后,还用手给大致画了一个用 List 列表解决的方案。

2023-09-13_12-24-25

不管题目怎么样,但我感觉能基本上提供一个解决方案就好了。

针对程序的实现,我们也提供了程序的实现。

2023-09-13_13-37-24

上面是程序的输出,大致表示了线程的调用情况。

感觉这个面试题实在是有点搞不明白,更是有点奇葩。

美东一公司的郁闷面试题 - 求职路上 - iSharkFly

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131953.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【自动驾驶决策规划】POMDP之Introduction

文章目录 前言Markov PropertyMarkov ChainHidden Markov ModelMarkov Decision ProcessPartially Observable Markov Decision ProcessBackground on Solving POMDPsPOMDP Value Iteration Example 推荐阅读与参考 前言 本文是我学习POMDP相关的笔记,由于个人能力…

2024字节跳动校招面试真题汇总及其解答(一)

1. 【算法题】重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:hea…

Kafka3.0.0版本——消费者(自动提交 offset)

目录 一、自动提交offset的相关参数二、消费者(自动提交 offset)代码示例 一、自动提交offset的相关参数 官网文档 参数解释 参数描述enable.auto.commi默认值为 true,消费者会自动周期性地向服务器提交偏移量。auto.commit.interval.ms如果…

基于视觉重定位的室内AR导航APP的大创项目思路(2):改进的项目思路——建图和定位分离

文章目录 一、建图二、定位首先是第一种方法:几何方法其次是第二种方法:图像检索方法最后是第三种方法:深度学习方法 前情提要: 是第一次做项目的小白,文章内的资料介绍如有错误,请多包含! 一、…

华为云云耀云服务器L实例评测|初始化centos镜像到安装nginx部署前端vue、react项目

文章目录 ⭐前言⭐购买服务器💖 选择centos镜像 ⭐在控制台初始化centos镜像💖配置登录密码 ⭐在webstorm ssh连接 服务器⭐安装nginx💖 wget 下载nginx💖 解压运行 ⭐添加安全组⭐nginx 配置⭐部署vue💖 使用默认的ng…

【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传

目录 一、0x00 前言 二、基础知识 1、Flash 2、crossdomain.xml文件 3、crossdomain.xml格式 4、crossdomain.xml相关参数 三、漏洞利用 1、方法: 2、上传漏洞配置文件 一、0x00 前言 在很多地方都会见查是否跨域 比如某些特定的步骤、CSRF、flash跨域劫…

SimpleCG程序交互操作

前言 之前所有示例程序都是属于展示型的,只是作为展示板输出使用,不涉及键盘和鼠标的输入交互,下面我们开始接触具有交互功能的程序。 没有交互功能的程序可以满足一定需求,不过大部分的程序是不能脱离交互功能的。程序依据使用者的操作进行相…

PbootCMS在搭建网站

1、打开网站 https://www.pbootcms.com/ 2、点击 “本站” 下载最新的网站代码 3、在本地laragon/www下创建目录(hejuwuye),并将代码放进去 4、创建本地数据库,数据库名称为: hejuwuye,然后将static/bac…

第三方软件测试机构有哪些测试服务软件测试报告收费标准是怎样的?

软件验收机构 一、什么是第三方软件测试机构? 第三方软件测试机构是区别于软件开发公司以及软件需求方的第三方机构,软件企业将软件测试外包给第三方软件测试机构已经成为了行业发展趋势。既省心省力,又降低企业成本,得出的软件测试结果以…

《机器学习核心算法》分类算法 - 朴素贝叶斯 MultinomialNB

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 朴素贝叶斯 1、朴素贝叶斯API2、朴素贝叶斯算法实际应用2.1、获取数据集2.2、划分…

EasyPHP-Devserver-17安装和配置mantisBT

文章目录 1、准备工作2、安装easyphp2.1 http://127.0.0.1 无法访问 3、安装mantisBT和phpMyAdmin3.1 配置浏览器的访问url和端口号(配置局域网内可访问)3.2 安装mantis 4、Administrator 注册新用户时设置登录密码5、附件上传6、邮件配置 文章参考自&am…

前端开发工具:助力创造精彩Web体验

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 当涉及到前端开发工具时…

Spring Boot配置文件(YAML Properties)总结

文章目录 配置文件的作用YAML配置文件Properties配置文件配置文件的加载顺序激活不同的配置文件配置文件的占位符自定义配置属性加密敏感信息配置文件的最佳实践结论 🎉欢迎来到架构设计专栏~Spring Boot配置文件(YAML & Properties)总结…

C#控制台程序中使用log4.net来输出日志

Apache log4net 库是一个帮助程序员将日志语句输出到各种输出目标的工具。log4net 是优秀的 Apache log4j™ 框架到 Microsoft .NE​​T 运行时的端口。 我喜欢他可以自定义输出,区分等级等特点。 导入库 我们在工程里添加NuGet的包。输入名称log4net &#xff0…

【每日一题】852. 山脉数组的峰顶索引

852. 山脉数组的峰顶索引 - 力扣&#xff08;LeetCode&#xff09; 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] < arr[1] < ... arr[i-1] < arr[i] ar…

SpringMVC 的三种异常处理方式详解

目录 1. 什么是异常 2. 为什么要全局异常处理 3. SpringMVC异常分类 4. 异常处理思路 5. 三种异常处理方式示例 ① 配置 SimpleMappingExceptionResolver 处理器 ② 实现 HandlerExceptionResolver 接口 ③ 使用ControllerAdviceExceptionHandler实现全局异常 6. 响应…

如何在windows环境下编译T

一&#xff0c; 安装MYSYS2 1. 去https://www.msys2.org下载 msys2-x86_64-xxxxx.exe; 2. 按照msys2.org主页提示的步骤安装; 3.安装完默认起来的是 UCRT的&#xff0c; 可以根据环境的需要选择&#xff0c; 我选择的 MSYS2 MINGW64 4. 搭建编译环境&#xff0c; 安装对应的软…

18. 线性代数 - 线性变换

文章目录 线性空间线性变换线性变换的几何意义特征值与特征向量NumPy的矩阵操作Hi, 你好。我是茶桁。 经历了几节线性代数课程之后,终于咱们到了最后一节课了。本节课的内容说多不多,说少也不少。 我们先是要理解一下线性空间和线性变换,并且探讨一下线性变换的几何意义。…

目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)

目标分类 一、目标分类介绍1.1 二分类和多分类的区别1.2 单标签和多标签输出的区别 二、代码获取三、数据集准备四、环境搭建4.1 环境测试 五、模型训练六、模型测试6.1 多标签训练-单标签输出结果6.2 多标签训练-多标签输出结果 一、目标分类介绍 目标分类是一种监督学习任务…

如何利用AirDroid远程访问安卓设备屏幕?

屏幕镜像也叫屏幕截图或投屏&#xff0c;是AirDroid 个人版的一个免费功能&#xff0c;局域网或非局域网条件下都可以使用。 利用AirDroid的屏幕镜像功能&#xff0c;你可以将自己的安卓设备投屏到电脑进行直播或开会演示&#xff1b;也可以将安卓设备的屏幕共享到另一台手机或…