决定尝试进入国外市场后,我开始将简历发送到各个办事处。 甚至没有找到工作的目的,只是开阔了眼界。 选择取决于Java Developer的空缺。 我没有使用该语言的行业经验,只有个人经验,Oracle认证中心的证书,书籍等。 老实说,在一年半的最后工作时间里,我没有写过“ forov”和“ ifas”以外的任何东西(但这是完全不同的故事),所以我决定为什么不这样做。
跳过了搜索和与雇主进行对话的历史之后,我将重点介绍一下。 来自城市G的一家公司K写道,在我解决问题后,他们有兴趣采访我。
在我决定并将解决方案发送给他们之后,K回答说,在审阅代码之后,他们决定不再考虑我的申请。 这是对我的自尊心的打击。 当然,我知道该语言是新语言,总的来说,任何事情都可能发生,但是我希望至少能对我的决定提供反馈。 另外,任务真的很简单。希望您对此任务感兴趣。
以下是任务的原始文本。
餐厅锻炼

餐厅锻炼(请使用JAVA 7语法)
您的餐厅有一组不同大小的桌子:每个桌子可容纳2、3、4、5或6人。 客户可以单独或成组抵达,最多可容纳6人。 给定组中的客户必须一起坐在一张桌子上,因此您只能将一个组引导到一张可以容纳所有客人的桌子上。 如果没有桌子需要空椅子,则该组必须在队列中等待。
坐下后,该小组无法更改桌子,即,您不能将一个小组从一个桌子移到另一个桌子,以便为新客户腾出空间。
必须按到达顺序为客户组提供服务,但有一个例外:如果一张桌子上有足够的空间供较小的组稍后到达,则可以将他们安置在队列中的较大组之前。 例如,如果有一个六人组等待一张六人桌,而有一个两人组排队或到达,则可以将它们直接发送到有两把空椅子的桌子上。
团体可以共享一张桌子,但是,如果您同时有一张空桌子,桌子上有所需数量的椅子,而一张大桌子上有足够的空椅子,则必须始终将客户坐在一张空桌子上,而不要半躺着。 ,即使空表大于组的大小。
当然,该系统假定任何较大的组可能会厌倦看到较小的组到达并在其前面排在前面,然后决定离开,这意味着他们没有得到服务就放弃了队列。
请使用适当的数据结构填充RestManager类,并实现其构造函数和三个公共方法。 我们也鼓励您修改其他类(以帮助我们测试它们)并随意添加新方法。
public class Table { public final int size;
任务解析
在分析任务之后,就我看来,现在看来,没有任何复杂的事情。 但是,我立即想提请注意两点,这使我有些困惑。
- “当然,系统假定任何较大的团体都会看到较小的团体到达并在他们前面摆桌子,然后决定离开,这会感到无聊,这意味着他们没有得到服务就放弃了排队。”
- RestManager类结构
关于第一段,事实是我们的分配系统是按照上述规则运行的,因此无法避免第1段所述的情况。 我在回信中写的唯一一件事是,您可以在发布空闲表之前添加延迟。 假设有3个人在一家餐厅用餐。 目前,六号桌只有一张桌子。 按照惯例,我们必须为他们提供一张桌子(您必须始终将您的客户坐在一个空桌子上,即使该空桌子大于组的大小)。 但是,如果您不是立即执行此操作,而是大约5分钟后执行,在此期间,虽然尺寸较小,但仍有机会释放尺寸较小的座椅或桌子。 但是,它看起来毫无意义。
对于第二点,至少是恕我直言,公共Table查找方法不在其类中。 我们可以从客户端获取带有吸气剂的表,根据该想法,客户端应存储指向该表的链接。
总的来说,我强调了两点:
- 您需要以正确的顺序对表进行排序。 查找所需表的逻辑可以轻松地转移到排序中。 可以容纳一组客户的第一个表将是必需的。
- 仅两个事件使得有必要为一个客户端或一个表的客户端找到一个表。 这是一个新客户的到来,并且小组相应地离开了桌子。
实际上,整个问题可以归结为上面列出的两点。 顺便说一句,使用收藏没有用。 队列是一个队列,根据条件,可以根据空闲位置和组大小为任何队列提供服务,因此,我们将不使用与该队列有关的方法。
我留下一个链接到git的解决方案:
RestaurantTask