Desafío de una empresa extranjera o cómo fallé una entrevista

Habiendo decidido probar suerte en el mercado extranjero, comencé a enviar hojas de vida a varias oficinas. Ni siquiera con el objetivo de encontrar trabajo, sino simplemente para ampliar los horizontes. La elección recayó en la vacante de Java Developer. No tengo experiencia industrial trabajando con el idioma, solo experiencia personal, certificados del Centro de Certificación de Oracle, libros, etc. Honestamente, en el último lugar de trabajo durante un año y medio no escribí nada más que "forov" e "ifas" (pero esta es una historia completamente diferente), así que decidí por qué no en realidad.

Habiendo omitido el historial de búsquedas y conversaciones con empleadores, iré al grano. Una compañía K de la ciudad G escribió que estaban interesados ​​en entrevistarme después de resolver el problema.

Después de que decidí y les envié la solución, K respondió que después del código de revisión decidieron no considerar más mi solicitud. Fue un duro golpe para mi autoestima. Por supuesto, entiendo que el lenguaje es nuevo y, en general, cualquier cosa puede suceder, pero al menos esperaba recibir comentarios sobre mi decisión. Además, la tarea es realmente simple ... Espero que te interese la tarea.

A continuación se muestra el texto original de la tarea.

EJERCICIO DE RESTAURANTE


imagen

EJERCICIO DE RESTAURANTE (utilice la sintaxis de JAVA 7)

Su restaurante tiene un conjunto de mesas de diferentes tamaños: cada mesa tiene capacidad para 2, 3, 4, 5 o 6 personas. Los clientes llegan solos o en grupos, hasta 6 personas. Los clientes dentro de un grupo dado deben estar sentados juntos en una mesa, por lo tanto, puede dirigir un grupo solo a una mesa, que puede acomodarlos a todos. Si no hay una mesa con el número requerido de sillas vacías, el grupo debe esperar en la cola.

Una vez sentado, el grupo no puede cambiar la mesa, es decir, no puede mover un grupo de una mesa a otra para dejar espacio para nuevos clientes.

Los grupos de clientes deben ser atendidos en el orden de llegada, con una excepción: si hay suficiente espacio en una mesa para que un grupo más pequeño llegue más tarde, puede sentarlos antes que los grupos más grandes en la cola. Por ejemplo, si hay un grupo de seis personas esperando una mesa de seis asientos y hay un grupo de dos personas haciendo cola o llegando, puede enviarlos directamente a una mesa con dos sillas vacías.

Los grupos pueden compartir mesas, sin embargo, si al mismo tiempo tiene una mesa vacía con el número requerido de sillas y suficientes sillas vacías en una más grande, siempre debe sentar a sus clientes en una mesa vacía y no en una parcialmente sentada. , incluso si la tabla vacía es más grande que el tamaño del grupo.

Por supuesto, el sistema supone que cualquier grupo más grande puede aburrirse de ver llegar a grupos más pequeños y poner sus mesas por delante, y luego decidir irse, lo que significaría que abandonan la cola sin ser atendidos.

Complete la clase RestManager con estructuras de datos apropiadas e implemente su constructor y tres métodos públicos. También se le recomienda modificar otras clases (para ayudarnos a probarlas) y agregar nuevos métodos a su voluntad.

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álisis de tareas


Después de analizar la tarea, como me pareció y parece ahora, bueno, no hay absolutamente nada complicado. Sin embargo, inmediatamente quiero llamar la atención sobre dos puntos que me confundieron un poco.

  1. "Por supuesto, el sistema asume que cualquier grupo más grande puede aburrirse de ver llegar a grupos más pequeños y poner sus mesas delante de ellos, y luego decidir irse, lo que significaría que abandonan la cola sin ser atendidos".
  2. Estructura de clase de RestManager

Con respecto al primer párrafo, el hecho es que nuestro sistema de distribución funciona de acuerdo con las reglas anteriores, por lo que la situación descrita en el párrafo 1 no se puede evitar. Lo único que escribí en la carta de respuesta es que puede agregar un retraso antes de emitir una tabla libre. Digamos que un grupo de 3 personas viene a un restaurante. Por el momento solo hay una mesa en la 6ta. Por convención, debemos proporcionarles una mesa (siempre debe sentar a sus clientes en una mesa vacía ... incluso si la mesa vacía es más grande que el tamaño del grupo). Pero si hace esto no inmediatamente, sino después de aproximadamente 5 minutos, durante este tiempo, existe la posibilidad, aunque pequeña, de que se libere un asiento o una mesa con una dimensión menor. Pero se ve frívola, por supuesto.
Para el segundo punto, al menos en mi humilde opinión, el método público de búsqueda de tablas no está en su clase. Podemos obtener una tabla con un captador de un cliente que, según la idea, debe almacenar un enlace a la tabla.

En general, destaqué dos puntos principales:

  1. Necesita ordenar las tablas en el orden correcto. La lógica de encontrar la tabla deseada se puede transferir fácilmente a la clasificación. La primera mesa que puede acomodar a un grupo de clientes y será necesaria.
  2. Solo dos eventos hacen necesario encontrar una tabla para un cliente o un cliente para una tabla. Esta es la llegada de un nuevo cliente y después de que el grupo dejó la mesa en consecuencia.

En realidad, todo el problema se reduce a los dos puntos enumerados anteriormente. Por cierto, no sirve de nada usar la colección. La cola es una cola y, por condición, cualquiera de las colas puede ser atendida, dependiendo de los lugares libres y el tamaño del grupo, y como resultado, no utilizaremos métodos relacionados con la cola.

Os dejo un enlace a git con una solución: RestaurantTask

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


All Articles