Desafio de uma empresa estrangeira ou como eu falhei em uma entrevista

Tendo decidido tentar minha mão no mercado externo, comecei a enviar currículos para vários escritórios. Nem mesmo com o objetivo de encontrar trabalho, mas simplesmente de ampliar os horizontes. A escolha recaiu sobre a vaga do Java Developer. Não tenho experiência industrial trabalhando com o idioma, apenas experiência pessoal, certificados do Oracle Certification Center, livros, etc. Honestamente, no último local de trabalho por um ano e meio, não escrevi nada além de “forov” e “ifas” (mas essa é uma história completamente diferente), então decidi por que não.

Tendo pulado o histórico de pesquisas e conversas com os empregadores, chegarei ao ponto. Uma empresa K da cidade G escreveu que eles estavam interessados ​​em me entrevistar depois que eu resolvi o problema.

Depois que decidi e enviei a solução, K respondeu que, após o código de revisão, eles decidiram não considerar mais minha inscrição. Foi um golpe na minha auto-estima. Obviamente, entendo que o idioma é novo e, em geral, tudo pode acontecer, mas esperava pelo menos um feedback sobre minha decisão. Além disso, a tarefa é realmente simples ... Espero que você esteja interessado na tarefa.

Abaixo está o texto original da tarefa.

EXERCÍCIO DE RESTAURANTE


imagem

EXERCÍCIO DE RESTAURANTE (use a sintaxe JAVA 7)

O seu restaurante possui um conjunto de mesas de tamanhos diferentes: cada mesa pode acomodar 2, 3, 4, 5 ou 6 pessoas. Os clientes chegam sozinhos ou em grupos, até 6 pessoas. Os clientes de um determinado grupo devem estar sentados juntos em uma mesa; portanto, você pode direcionar um grupo apenas para uma mesa, que pode acomodar todos eles. Se não houver uma mesa com o número necessário de cadeiras vazias, o grupo terá que esperar na fila.

Uma vez sentado, o grupo não pode alterar a tabela, ou seja, você não pode mover um grupo de uma tabela para outra para abrir espaço para novos clientes.

Os grupos de clientes devem ser atendidos na ordem de chegada, com uma exceção: se houver espaço suficiente em uma mesa para um grupo menor chegar mais tarde, você poderá acomodá-los antes do (s) grupo (s) maior (is) na fila. Por exemplo, se houver um grupo de seis pessoas aguardando uma mesa de seis lugares e houver um grupo de duas pessoas na fila ou chegando, você poderá enviá-las diretamente para uma mesa com duas cadeiras vazias.

Os grupos podem compartilhar tabelas, no entanto, se ao mesmo tempo você tiver uma mesa vazia com o número necessário de cadeiras e cadeiras vazias suficientes em uma maior, você deve sempre sentar o (s) cliente (s) em uma mesa vazia e nenhum parcialmente sentado , mesmo se a tabela vazia for maior que o tamanho do grupo.

É claro que o sistema assume que qualquer grupo maior pode se cansar de ver grupos menores chegando e colocar suas mesas à frente deles, e então decidir sair, o que significaria que eles abandonariam a fila sem serem atendidos.

Preencha a classe RestManager com estruturas de dados apropriadas e implemente seu construtor e três métodos públicos. Você também deve modificar outras classes (para nos ajudar a testá-las) e adicionar novos métodos conforme sua vontade.

public class Table { public final int size; // number of chairs } public class ClientsGroup { public final int size; // number of clients } public class RestManager { public RestManager (List<Table> tables) { // TODO } // new client(s) show up public void onArrive (ClientsGroup group) { // TODO } // client(s) leave, either served or simply abandoning the queue public void onLeave (ClientsGroup group) { // TODO } // return table where a given client group is seated, // or null if it is still queuing or has already left public Table lookup (ClientsGroup group) { // TODO } } 

Análise de tarefas


Depois de analisar a tarefa, como me pareceu e parece agora, bem, não há absolutamente nada de complicado. No entanto, quero chamar imediatamente a atenção para dois pontos que me confundiram um pouco.

  1. "É claro que o sistema assume que qualquer grupo maior pode se cansar de ver grupos menores chegarem e colocar suas mesas à frente deles, e então decidir sair, o que significaria que eles abandonariam a fila sem serem atendidos".
  2. Estrutura de classe RestManager

Em relação ao primeiro parágrafo, o fato é que nosso sistema de distribuição funciona de acordo com as regras acima, portanto a situação descrita no parágrafo 1 não pode ser evitada. A única coisa que escrevi na carta de resposta é que você pode adicionar um atraso antes de emitir uma tabela gratuita. Digamos que um grupo de 3 pessoas chegue a um restaurante. No momento, há apenas uma mesa no dia 6. Por convenção, devemos fornecer a eles uma mesa (você deve sempre sentar seus clientes em uma mesa vazia ... mesmo que a mesa vazia seja maior que o tamanho do grupo). Mas se você fizer isso não imediatamente, mas após cerca de 5 minutos, durante esse período, há uma chance, ainda que pequena, de que um assento ou mesa com uma dimensão menor fique livre. Mas parece frívolo, é claro.
Para o segundo ponto, pelo menos IMHO, o método de pesquisa de tabela público não está em sua classe. Podemos obter a tabela com um getter do cliente, que, de acordo com a idéia, deve armazenar um link para a tabela.

De maneira geral, destaquei dois pontos principais:

  1. Você precisa classificar as tabelas na ordem correta. A lógica de encontrar a tabela desejada pode ser facilmente transferida para a classificação. A primeira tabela que pode acomodar um grupo de clientes e será necessária.
  2. Apenas dois eventos tornam necessário encontrar uma tabela para um cliente ou um cliente para uma tabela. Esta é a chegada de um novo cliente e depois que o grupo saiu da mesa de acordo.

Na verdade, todo o problema é reduzido aos dois pontos listados acima. A propósito, não adianta usar a coleção. A fila é uma fila e, por condição, qualquer uma das filas pode ser atendida, dependendo dos locais livres e do tamanho do grupo e, como resultado, não usaremos métodos relacionados à fila.

Deixo um link para o git com uma solução: RestaurantTask

Source: https://habr.com/ru/post/pt436282/


All Articles