Preguntas de entrevista en Amazon
Las entrevistas de Amazon son conocidas por su rigor y enfoque en los principios de liderazgo (LPs). El proceso generalmente incluye una evaluación en línea, una entrevista telefónica y un ciclo de día completo de 4-5 entrevistas. Ponen gran peso en la resolución de problemas, estructuras de datos y algoritmos (DSA), diseño de sistemas y respuestas conductuales alineadas con sus 16 LPs. Espera una mezcla de preguntas técnicas y basadas en LP con un 'bar-raiser' que asegura la calidad.
En qué se centran las entrevistas de Amazon
Estructuras de datos y algoritmos
Amazon enfatiza fundamentos sólidos en DSA con problemas de LeetCode de nivel medio a difícil. Los candidatos deben sentirse cómodos con arreglos, cadenas, árboles, grafos, programación dinámica y análisis de complejidad.
Diseño de sistemas
Para roles senior (SDE2+), las entrevistas de diseño de sistemas evalúan la capacidad de arquitectar sistemas distribuidos escalables y tolerantes a fallos. Los diseños comúnmente discutidos incluyen acortadores de URLs, sistemas de chat y comercio electrónico tipo Amazon.
Conductual / Principios de liderazgo
Las preguntas conductuales se basan en los 16 principios de liderazgo de Amazon (por ejemplo, Obsesión por el Cliente, Propiedad, Profundizar). Usa el método STAR para proporcionar ejemplos concretos de experiencias laborales pasadas.
Dominio y competencia en codificación
Dependiendo del rol, se pueden evaluar conocimientos específicos del dominio (por ejemplo, AWS, aprendizaje automático, iOS). La codificación en pizarra o editor compartido es estándar para todas las entrevistas técnicas.
Preguntas comunes en entrevistas de Amazon
- Cuéntame sobre una vez que no estuviste de acuerdo con tu gerente. ¿Cómo lo manejaste? (Principio de liderazgo: Ten Columna; Discrepa y Comprométete)Lo que cubre una buena respuesta
- Discrepar respetuosamente con datos
- Buscar entender la perspectiva del gerente
- Proponer alternativa con métricas
- Comprometerse una vez tomada la decisión
- Enfoque en el éxito del equipo
Ver respuesta de ejemplo
En una ocasión, mi gerente quería lanzar una funcionalidad con una implementación que consideraba riesgosa porque no incluía pruebas de carga suficientes. Primero, agendé una reunión para entender sus prioridades: la fecha de lanzamiento era crítica para un cliente importante. Luego, presenté datos de pruebas de carga que mostraban que el sistema fallaría con el tráfico esperado, y propuse una solución intermedia: lanzar con un feature flag y escalar gradualmente. Mi gerente aceptó después de analizar los números. Aunque no estaba completamente de acuerdo, una vez que tomó la decisión, me comprometí plenamente y trabajé para que el lanzamiento fuera exitoso. El lanzamiento fue suave y el cliente quedó satisfecho. Esto refleja el principio 'Discrepa y Comprométete': discrepar basado en hechos y luego alinearse con la decisión del equipo.
- Diseña un servicio de acortamiento de URLs como TinyURL. (Diseño de sistemas)Lo que cubre una buena respuesta
- Hash de 7 caracteres (base62)
- Redirección HTTP 301/302
- Base de datos clave-valor (Cassandra/DynamoDB)
- Caché (Redis) para URLs populares
- Escalado mediante consistencia eventual y particionamiento
Ver respuesta de ejemplo
El servicio de acortamiento de URLs debe generar una clave única para cada URL larga y redirigir las peticiones cortas. Usaría una función hash (MD5 o SHA256) truncada a 7 caracteres en base62 (letras mayúsculas, minúsculas y números) para tener 62^7 ≈ 3.5 billones de combinaciones. Para evitar colisiones, se puede usar una tabla de consulta previa o un contador secuencial. La persistencia sería con una base de datos clave-valor como Cassandra o DynamoDB para alta disponibilidad y escalabilidad. Las URLs populares se cachean en Redis para acelerar las redirecciones. Las redirecciones pueden ser 301 (permanente, cacheable por navegadores) o 302 (temporal, útil para análisis). Para escalar, se particionan las claves por hash consistente y se usa un balanceador de carga. Un cuello de botella común es la generación de claves únicas sin bloqueos; se puede usar un servicio de IDs (ej. Snowflake) o pre-generar lotes de claves.
- Dado un arreglo de enteros, encuentra dos números que sumen un objetivo específico. (Codificación, comúnmente reportado)Lo que cubre una buena respuesta
- HashMap para búsqueda O(1)
- Iteración de un solo paso O(n)
- Manejo de duplicados
- Retornar índices o valores según pida
- Caso borde: array vacío o sin solución
Ver respuesta de ejemplo
El problema clásico de Two Sum se resuelve con un HashMap que almacena valor e índice. Al iterar, se calcula el complemento (target - valor actual). Si el complemento está en el mapa, se retornan los índices. Si no, se guarda el valor actual con su índice. La complejidad temporal es O(n) y espacial O(n) en el peor caso. Un error común es no manejar la situación donde el mismo elemento se usa dos veces; con esta implementación eso se evita porque primero se busca el complemento y luego se guarda el elemento actual. Si el problema pide retornar los valores en lugar de índices, se puede adaptar fácilmente. Para arrays muy grandes, es eficiente y se escala bien.
Solución de referenciapython def two_sum(nums, target): """Retorna índices de los dos números que suman target.""" seen = {} # valor -> índice for i, num in enumerate(nums): complement = target - num if complement in seen: return [seen[complement], i] seen[num] = i return [] # Según enunciado, siempre hay solución - Describe un proyecto donde tuviste que hacer una compensación entre velocidad y calidad. ¿Qué decidiste y por qué? (LP: Sesgo a la Acción vs. Insistir en los Más Altos Estándares)Lo que cubre una buena respuesta
- Priorizar velocidad de entrega con MVP
- Métrica de calidad reducida pero aceptable
- Plan de iteración posterior para mejorar
- Comunicar tradeoff a stakeholders
- Resultado: lanzamiento a tiempo y mejoras incrementales
Ver respuesta de ejemplo
En un proyecto de migración de microservicios, teníamos que decidir entre entregar rápido con una deuda técnica controlada o retrasar para una calidad óptima. Opté por el MVP (Producto Mínimo Viable) porque el negocio necesitaba la funcionalidad para una fecha límite. Esto implicó omitir ciertas optimizaciones de rendimiento y pruebas exhaustivas, pero documentamos las deudas técnicas y priorizamos su pago en sprints posteriores. Comunicamos claramente a los stakeholders que la versión inicial sería funcional pero con limitaciones. Tras el lanzamiento, monitoreamos de cerca y en dos iteraciones siguientes implementamos las mejoras. El resultado fue un lanzamiento a tiempo, sin impacto crítico en clientes, y una calidad final incluso mejor que si hubiéramos esperado. Esto refleja un balance entre 'Sesgo a la Acción' y 'Insistir en los Más Altos Estándares'.
- Implementa una función para serializar y deserializar un árbol binario. (Codificación, Árbol binario)Lo que cubre una buena respuesta
- Serialización con preorden o BFS
- Manejo de valores nulos para árboles incompletos
- Deserialización recursiva usando cola o índice
- Complejidad O(n) tiempo y espacio
- Alternativa: usar marcadores como '#'
Ver respuesta de ejemplo
La serialización de un árbol binario convierte la estructura en una cadena para almacenamiento o transmisión. Una forma común es usar preorden (raíz, izquierda, derecha) y representar los nodos nulos con un marcador (ej. 'null' o '#'). La serialización recorre el árbol recursivamente y construye una cadena separada por comas. La deserialización toma esa cadena, la divide, y reconstruye el árbol usando un iterador o cola. La complejidad temporal y espacial es O(n), donde n es el número de nodos. Un error frecuente no manejar árboles sesgados o con muchos nulos; el marcador asegura que la estructura se recupere correctamente. También se puede usar BFS (nivel por nivel) pero requiere más espacio.
Solución de referenciapython class Codec: def serialize(self, root): def dfs(node): if not node: return ['null'] return [str(node.val)] + dfs(node.left) + dfs(node.right) return ','.join(dfs(root)) def deserialize(self, data): values = data.split(',') self.i = 0 def dfs(): if values[self.i] == 'null': self.i += 1 return None node = TreeNode(int(values[self.i])) self.i += 1 node.left = dfs() node.right = dfs() return node return dfs() - Explica una vez que mejoraste significativamente un proceso o producto. ¿Qué pasos tomaste? (LP: Propiedad, Entregar Resultados)Lo que cubre una buena respuesta
- Identificar oportunidad de mejora con datos
- Implementar solución con métricas claras
- Colaborar con el equipo y stakeholders
- Medir impacto y iterar
- Resultado cuantificable (ej. reducción de tiempo 30%)
Ver respuesta de ejemplo
En un equipo de plataforma, noté que el tiempo de despliegue era alto (promedio 4 horas) debido a pruebas manuales y procesos manuales. Propuse automatizar el pipeline de CI/CD integrando pruebas unitarias, de integración y despliegue automatizado. Primero, convencí al equipo mostrando datos de tiempo perdido por semana. Luego, diseñé el pipeline con Jenkins, Docker y scripts de despliegue. Automatizamos las pruebas y el despliegue a un entorno de staging, y luego a producción con aprobación manual pero rápida. El nuevo proceso redujo el tiempo de despliegue a 30 minutos, un ahorro del 87%. Además, disminuyó los errores humanos. La clave fue medir antes y después, y obtener feedback del equipo para iterar. Este logro refleja 'Propiedad' porque tomé la iniciativa, y 'Entregar Resultados' por el impacto medible.
- Diseña un sistema de chat en tiempo real como WhatsApp o Messenger. (Diseño de sistemas, comúnmente reportado)Lo que cubre una buena respuesta
- WebSockets para comunicación bidireccional
- Arquitectura con servidores de chat y balanceador
- Persistencia en base de datos (Cassandra) con sharding
- Caché de mensajes recientes (Redis)
- Escalado horizontal con particionamiento por chat_id
Ver respuesta de ejemplo
Un sistema de chat en tiempo real usa WebSockets para mantener conexiones persistentes entre clientes y servidores. La arquitectura típica incluye un balanceador de carga (ej. NGINX) que distribuye conexiones a servidores de chat (ej. Node.js con Socket.IO). Cada servidor maneja múltiples salas de chat. Los mensajes se almacenan en una base de datos diseñada para escrituras intensivas, como Cassandra, particionada por chat_id para evitar cuellos de botella. Los mensajes recientes se cachean en Redis para entrega rápida y para mostrar conversaciones al reconectar. Para escalar, se añaden servidores de chat y se usa un pub/sub (ej. Redis Pub/Sub) para enviar mensajes entre servidores. Los cuellos de botella comunes son la concurrencia de escrituras y la sincronización de estado; se mitigan con sharding y consistencia eventual. También se debe considerar la entrega de mensajes offline y la seguridad con encriptación.
- Encuentra la subcadena más larga sin caracteres repetidos. (Codificación, Ventana deslizante)Lo que cubre una buena respuesta
- Ventana deslizante con dos punteros
- HashMap para almacenar última posición de cada char
- Ampliar ventana al mover puntero derecho
- Contraer al encontrar repetido (izquierdo salta)
- O(n) tiempo, O(k) espacio (k tamaño alfabeto)
Ver respuesta de ejemplo
Para encontrar la subcadena más larga sin caracteres repetidos, se usa una ventana deslizante con dos índices (izquierdo y derecho). Se mantiene un HashMap que almacena el carácter y su última posición + 1 (para saltar). Al recorrer la cadena con el puntero derecho, si el carácter ya está en el mapa, movemos el puntero izquierdo al máximo entre su valor actual y la posición almacenada. Actualizamos la longitud máxima. Finalmente, insertamos o actualizamos el carácter en el mapa con su nueva posición. La complejidad es O(n) tiempo y O(k) espacio, donde k es el tamaño del conjunto de caracteres (ej. 256 para ASCII). Un error común es no mover el izquierdo correctamente cuando hay repeticiones; la clave es saltar a la última posición+1. Para cadenas muy grandes, este algoritmo es eficiente.
Solución de referenciapython def longest_substring_without_repeating(s): char_map = {} # caracter -> última posición + 1 (inicio después de él) left = 0 max_len = 0 for right, ch in enumerate(s): if ch in char_map: # Si el carácter ya está, mover left más allá de su última aparición left = max(left, char_map[ch]) max_len = max(max_len, right - left + 1) char_map[ch] = right + 1 # +1 para que sea la posición de inicio del próximo caracter return max_len
Consejos para prepararse
- Internaliza los 16 principios de liderazgo y prepara 2-3 historias STAR por principio que demuestren su aplicación.
- Practica codificación en una pizarra o sin IDE para simular el entorno de entrevista; concéntrate en la comunicación clara de tu proceso de pensamiento.
- Para diseño de sistemas, estudia los conceptos básicos de escalabilidad, balanceo de carga, caché, bases de datos (SQL vs NoSQL) y practica diseñando sistemas populares.
- Siempre haz preguntas aclaratorias antes de lanzarte a una solución; Amazon valora la obsesión por el cliente y la comprensión profunda de los requisitos.
- Prepárate para discutir compensaciones y enfoques alternativos; los entrevistadores quieren ver tu capacidad para sopesar opciones y tomar decisiones informadas.
Preguntas frecuentes
¿Cuáles son las rondas típicas en una entrevista de Amazon?
El proceso incluye una evaluación en línea (OA) con preguntas de codificación y estilo de trabajo, una entrevista telefónica y un ciclo presencial (o virtual) de 4-5 entrevistas que consisten en dos de codificación, una de diseño de sistemas (para roles senior) y dos conductuales/enfocadas en LP.
¿Qué tan difícil es la entrevista de Amazon?
Las entrevistas de Amazon se consideran desafiantes, con un alto estándar para la resolución de problemas y la alineación con los LP. El éxito requiere DSA sólido, conocimiento de diseño de sistemas y ejemplos conductuales auténticos.
¿Cuánto dura el proceso de entrevista de Amazon?
Desde la solicitud hasta la oferta, generalmente toma de 2 a 4 semanas para la OA y la entrevista telefónica, y otras 1-2 semanas para programar el ciclo presencial, dependiendo del rol y la ubicación.
¿Qué valora más Amazon en los candidatos?
Amazon valora la capacidad de resolución de problemas, la alineación con los principios de liderazgo (especialmente Obsesión por el Cliente y Propiedad), y la capacidad de profundizar en decisiones técnicas.
¿Cómo puedo destacar en la entrevista de Amazon?
Muestra un conocimiento profundo de los principios de Amazon adaptando tus historias a ellos, demuestra un sesgo a la acción y articula claramente tu proceso de pensamiento en problemas técnicos. Ser impulsado por datos y centrado en el cliente también diferencia a los candidatos.
Practica preguntas estilo Amazon con retroalimentación instantánea de IA
Sube tu currículum y Offersly realiza una entrevista simulada personalizada, evalúa tus respuestas en relevancia, profundidad, claridad y corrección, y te muestra exactamente qué mejorar.