Experiencia de entrevista de Amazon para SDE-II (rondas virtuales)

Recibí una llamada de un reclutador de Amazon porque uno de mis amigos me recomendó para el puesto. Me envió el enlace de prueba de codificación que tuve que completar en una semana. Una vez que completé la prueba, recibí una llamada para programar las entrevistas en dos semanas. Se realizaron 3 entrevistas en Amazon Chime según lo programado. Publique que después de 4-5 días, el departamento de recursos humanos me informó que les gustaría continuar con la ronda final de subida de la barra, que sucedió en un par de días. Las siguientes son las preguntas que se hicieron:

Ronda en línea (Prueba de codificación – 90 minutos)

  1. Nos dan los costos de una lista de pantalones, camisas, zapatos, faldas. Tenemos una cierta cantidad de efectivo con nosotros, necesitamos determinar el número total de combinaciones posibles que podemos comprar dado que debemos comprar una y solo una de cada tipo.
    Eg: pants=[3, 5, 7], shirts = [4, 7, 8], 
    skirts = [5, 8], shoes = [3], budget = 25

    Entonces, en lo anterior, por ejemplo, aparte de la combinación [7, 8, 8, 3], todas las demás son posibles.

    Sugerencia: como tenemos que comprar todo, podemos combinar las dos primeras listas y las dos últimas listas, por lo que tendríamos listas de costos como pantalones_camisas = […] y 

    skirts_shoes = […], ahora podemos simplemente iterar sobre una lista y buscar binariamente la cantidad restante sobre la otra lista y agregar en consecuencia.

  2. Fue bastante trivial, así que no recuerdo exactamente.

La ronda 1:

El entrevistador hizo su presentación, me preguntó un poco sobre el tipo de proyectos en los que he trabajado. Luego comenzó con un problema de estructura de datos.

  1. Dado un árbol binario con el TreeNode siguiente, cree una copia del árbol sin utilizar ningún espacio adicional.
           TreeNode{
                  left*, right*, random*, val
           }

    Mi solución : primero le dije a una solución de hashmap donde mantendría un mapeo desde el Node original hasta el Node de copia en el nuevo árbol, y en el segundo recorrido, también podría asignar los punteros aleatorios. El entrevistador estuvo de acuerdo en que esto funcionaría, pero quería que lo hiciera sin el hashmap. Me tomó alrededor de 15-20 minutos más llegar al código final. Primero agregué el Node duplicado al elemento secundario izquierdo del Node original, algo así como:

               A                                    A
         B          C         ->                A'        C    
                                              B        C'
                                          B'

    De esta manera, al iterar sobre los Nodes originales, podemos asignar los punteros izquierdo y derecho, y necesitamos un recorrido más para asignar el puntero aleatorio.

  2. Nos dan N sistemas solares, cada sistema solar con M planetas. Podemos movernos a cualquier otro planeta del mismo sistema solar en 1 año luz. Aparte de esto, también se nos da una lista de agujeros de gusano, donde cada agujero de gusano especifica el planeta de entrada y el planeta de salida. Pasar a través de un agujero de gusano también tomaría 1 año luz.

    Ahora, dado el planeta de origen X y el planeta de destino Y, necesitamos encontrar el número mínimo de años luz que nos tomaría viajar.

    Mi solución: le dije que crearía un gráfico (que era una sugerencia bastante ridícula tbh: p) y luego haría bfs. Preguntó la complejidad del tiempo de crear un gráfico y luego aplicar mi enfoque. La complejidad era bastante mala, así que cambié a una nueva solución. Sugerí comenzar desde X, agregar todos los planetas vecinos a una distancia de 1 y si hay agujeros de gusano presentes en el planeta y hacer bfs sobre la marcha sin crear un gráfico. Dado que el tiempo era menor (ya que había pasado alrededor de 35-40 minutos en la primera pregunta), solo codifiqué un bfs nivelado y el entrevistador pareció convencido.

La ronda 2:

  1. Esto fue tomado por un gerente de ingeniería que me preguntó sobre mis proyectos durante unos 10-15 minutos y luego pasamos a un problema de diseño del sistema. Me pidió que diseñara el mensajero de Slack.

    Comencé enumerando los requisitos funcionales y no funcionales (sobre los cuales me cuestionó un poco), luego pasé a dibujar la arquitectura de alto nivel. Los componentes que dibujé fueron los clientes, el servicio de puerta de enlace (LB + autenticación, etc.), el servicio de mensajería, el servicio de usuario, el servicio Web Socket Manager, el servicio Fan Out (agregué esto para los mensajes grupales, pero no interrogó mucho en ese).

    Me preguntó cuál sería el esquema de mi tabla de mensajes y los escenarios en los que el usuario receptor está en línea/fuera de línea. También me preguntó sobre la clave de partición y la clave principal de las 2-3 tablas que había creado.

Ronda 3:

  1. Esto fue tomado por un chico de SDE III, quien nuevamente me preguntó sobre mis proyectos durante unos 10 minutos y luego pasó a una pregunta de diseño de bajo nivel. Me pidió que diseñara la plataforma HackerRank.

    Nuevamente, comencé enumerando los casos de uso que cubriría, el entrevistador me pidió que escribiera todas las API que necesitaría exponer.

    Hice varias clases como Pregunta (subclasificada en MCQ y CodingQuestion), Respuesta, Candidato, Prueba, Banco de preguntas, etc.

    Sorprendentemente (dado que se trataba de una ronda de LLD), me preguntó el esquema de las tablas y qué SQL/NoSQL elegiría y por qué. Luego me preguntó el caso cuando se cambia la pregunta, no pude responder eso, luego mencionó que esperaba algo como EditHistory dentro de cada Entidad de prueba.

Ronda 4 (elevación de la barra):

Esto fue nuevamente tomado por un gerente de ingeniería que discutió mis proyectos en profundidad durante unos 20-25 minutos. En el tiempo restante me hizo 2 preguntas dsa. (Sí, a mí también me sorprendió que no preguntara nada sobre el diseño).

  1. Dada una lista de strings, agrupe los anagramas. ( https://practice.geeksforgeeks.org/problems/print-anagrams-together/1 )
  2. Dadas dos listas enlazadas L1 y L2 donde el encabezado de la lista enlazada apunta al dígito más significativo, devuelva la creación de la lista enlazada después de restar estas dos listas. ( https://practice.geeksforgeeks.org/problems/subtraction-in-linked-list/1 )

NOTA:

  1. En casi todas las rondas, me hicieron preguntas relacionadas con los principios de liderazgo de Amazon, así que asegúrese de leerlas antes de sentarse para el proceso de entrevista. Puede consultar este enlace (https://kraftshala.com/what-questions-to-expect-in-amazon-interview/) para practicar lo mismo, lo encontré útil. 
  2. En las rondas de diseño, el entrevistador no espera la respuesta más ideal de usted y, a menos que su elección de tecnología sea escandalosamente incorrecta, no lo señalará con precisión.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *