Ronda 1 (Evaluación en línea): esta ronda generalmente consta de dos preguntas de codificación, para las cuales debe escribir el código y dar una explicación adecuada en una ventana separada. El tiempo para esta ronda es de aproximadamente 1 hora.
Las preguntas que se hicieron fueron:
- Ordene una lista de pedidos de pedidos principales y no principales (https://leetcode.com/discuss/interview-question/1261316/amazon-oa-sde-1-new-grad-2021-batch-india). Hice esto simplemente pasando mi comparador personalizado a la función de clasificación estándar. Es fácil pero tiene algunos casos extremos, que me tomaron un poco de tiempo.
- Optimizar el uso de la memoria (https://leetcode.com/discuss/interview-question/373202)
Después de esto, tendrás que hacer algunas preguntas de tipo MCQ de comportamiento.
En todas las próximas rondas me hicieron preguntas tanto de comportamiento como de codificación, por lo que intentaré incluir ambas.
Ronda 2: Esta ronda comenzó con mi presentación y proyecto actual. Después de que este entrevistador me preguntó acerca de un momento en el que tuve que hacer un trabajo complejo inesperado y cómo manejé la situación.
Preguntas de codificación:
- Dado un árbol binario, calcule la suma de todas las hojas de la izquierda :
- Implementar caché LRU . El entrevistador deliberadamente dejó esta pregunta vaga simplemente citando «Implementar caché LRU», por lo tanto, hice muchas preguntas aclaratorias y lentamente llegué a una solución óptima utilizando una lista doblemente enlazada y mapas hash.
Ronda 3: Esta ronda también comenzó con mi introducción y trabajo actual.
Preguntas de codificación:
- Evalúa una expresión aritmética que se da como una string, la expresión solo contendrá números y las cuatro operaciones +, -, *, /
Input: "3*2+5" Output: 11
Decidí resolver esta pregunta usando dos pilas y almacenando todos los operadores aritméticos y números en diferentes pilas con reglas:
“Ningún operador de baja precedencia puede ser empujado sobre un operador de alta precedencia”
«Cuando se saca un operador, también se sacan dos números de la otra pila»
así que mi algoritmo fue básicamente este:
- iniciar dos pilas como operatorStack y operandStack
- escanear a través de la expresión
- si se encuentra un número, introdúzcalo en operandStack
- si se encuentra un operador y la parte superior de operatorStack tiene poca precedencia que este operador actual, presione en operatorStack
- si se encuentra un operador y la parte superior de operatorStack tiene una precedencia alta que este operador actual, entonces continúe extrayendo operadores de operatorStack hasta que la parte superior tenga una precedencia baja o igual que el operador actual. Con cada operador emergente, debe extraer dos números de operandStack y aplicar el operador emergente en estos dos números y enviar el resultado nuevamente a operandStack, algo como esto:
op = operatorStack.pop() number2 = operandStack.pop() number1 = operandStack.pop() operandStack.push(number1 op number2)
Observe aquí que el segundo número aparece primero.
- después del escaneo de la expresión, extraiga los operadores restantes de operatorStack con las mismas reglas anteriores
- Su respuesta final será la parte superior de la pila de operandos.
Hay un enfoque más simple, convertir la expresión infija a sufijo y evaluarla simplemente con una pila.
- Calcule el número mínimo de saltos necesarios para llegar al final de una array
Di dos enfoques para esta pregunta, uno O(n^2) y el otro O(n)
Como quedaba muy poco tiempo (alrededor de 15 minutos), tuve algunas dificultades para explicar el enfoque O(n), pero el entrevistador estaba convencido y me pidió que codificara eso.
Después de esto, se hicieron algunas preguntas relacionadas con la informática como:
- Qué tipo de bases de datos ha utilizado
- ¿Cuál es la diferencia entre las bases de datos SQL y NoSql y para qué tipo de consulta están optimizadas ambas?
- Diferencia entre hilo y proceso.
- ¿Por qué la comunicación es más rápida en el subproceso en comparación con el proceso (porque el subproceso comparte el mismo espacio de memoria)?
- ¿Qué son las cerraduras y los semáforos?
Ronda 4: En esta ronda de aproximadamente 30 minutos, la entrevista hizo preguntas de comportamiento y realmente quería respuestas detalladas y profundas para todas ellas. Cito los que recuerdo:
- Una característica compleja en la que ha trabajado, qué desafíos enfrentó, cómo manejó cada uno de esos
- Una época en la que se enfrentaba a plazos estrictos y estrictos, ¿cómo los cumplió?
- ¿Cómo aprendiste la tecnología en la que estabas trabajando, qué pasos tomaste?
- ¿Cómo te mejoraste a ti mismo? etc.
- En los siguientes 30 minutos, hizo esta pregunta de codificación: encuentre un par de números de una array cuya suma sea la más cercana a cero . Para esto, utilicé la clasificación y el enfoque de dos punteros.
Ronda 5: nuevamente en esta ronda, las preguntas de comportamiento consumieron aproximadamente 30 minutos y, al igual que en la anterior, también quería respuestas detalladas y profundas.
Preguntas de codificación:
- Intersección de dos listas vinculadas : di dos enfoques para esto: el primero: usar dos bucles for y el segundo: usar hashmap
- Árbol binario simétrico Lo resolví haciendo un dfs paralelo para el hijo de la raíz y comparando el Node en cada nivel.
Algunos consejos:
- No intente tomar demasiado tiempo para explicar la primera pregunta si fue fácil porque, por lo general, la entrevista también quiere hacer una segunda pregunta y, por lo tanto, le quedará muy poco tiempo para explicar y codificar la segunda pregunta.
- Sea honesto en todas las preguntas de comportamiento porque hacen muchas contrapreguntas sobre su respuesta, y si la ha inventado, seguramente se vendrá abajo en algún momento.
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