Temas de desarrollo de software
¿Qué temas técnicos debería estar preparado para abordar?
Antes de empezar a repasar los temas técnicos sobre los que se le podría preguntar durante su entrevista, consúltele a su persona de contacto en el proceso de candidatura qué temas y habilidades saldrán a relucir durante la entrevista. En general, en nuestras entrevistas técnicas debe realizar ejercicios de programación y de diseño de sistemas en la pizarra blanca. Además, recuerde que la innovación está en nuestro ADN y que la tecnología es la herramienta clave que blandimos para desarrollar y mejorar cada aspecto de la experiencia que proporcionamos a nuestros clientes. Cuando revise los temas más abajo, no se olvide de tener siempre en cuenta cómo impactan al cliente.
¿Entrevista para un puesto de ingeniero de software que requiere al menos 2 años de experiencia? Conoce cómo mostrar con éxito tus habilidades en las entrevistas.
Temas técnicos
Lenguaje de programación
No es necesario que domine ningún lenguaje de programación específico antes de realizar una entrevista para un puesto técnico. Sin embargo, normalmente el dominio de al menos un lenguaje prominente suele ser un prerrequisito para tener éxito en la entrevista. Debería estar familiarizado con la sintaxis de lenguajes como C, C++, C++14, C#, Go, Java7, Java8, JavaScript, Kotlin, Objective-C, PyPy2, PyPy3, Python2, Python3, Ruby, Scala o Swift. También debería conocer algunas de las particularidades de estos lenguajes, como por ejemplo, cómo operan la gestión de memoria o las colecciones y bibliotecas más usadas, entre otros.
Estructuras de datos
La mayor parte del trabajo que realizamos requiere almacenar datos y proporcionar acceso a los mismos de manera eficiente. Para ello es necesario tener una buena base en estructuras de datos. Deberá comprender el funcionamiento interno de las estructuras de datos más comunes y ser capaz de comparar y contrastar su uso en diferentes aplicaciones. Esperaremos que conozca los tiempos de ejecución de las operaciones más comunes, así como el uso que hacen de la memoria.
Algoritmos
Su entrevista no se centrará en que conozca algoritmos de memoria. Sin embargo, una buena compresión de la mayoría de algoritmos más comunes le hará más fácil responder a las preguntas que se le formulen. Considere revisar algunos de los algoritmos más comunes, como recorridos de árboles, divide y vencerás, búsqueda en anchura (BFS) en comparación con búsqueda en profundidad (DFS) y entender las ventajas y desventajas de cada uno. Conocer los tiempos de ejecución, las limitaciones técnicas y la estrategias de aplicación básicas de los diferentes tipos de algoritmos es más importante que memorizar las especificidades de cada uno.
Programación
Se le pedirá que escriba códigos sintácticamente correctos, no pseudocódigo. Si se siente un poco oxidado como para programar sin un IDE o en un lenguaje específico, no sería mala idea sacudirse las telarañas y practicar un poco programando con lápiz y papel. La tarea más importante de un ingeniero/a de desarrollo de software en Amazon es la de escribir código escalable, robusto y bien testado. Esos serán los principales criterios de evaluación para su código. Asegúrese de comprobar si existen casos límite y que no se cuelan datos erróneos. Es su oportunidad de lucirse como programador.
Diseño orientado a objetos
Un buen diseño es fundamental para un código extensible, sin errores y duradero. Sabemos que hay maneras ilimitadas de resolver problemas con el software, pero cuando este debe ser extensible y fácil de mantener, un buen diseño es clave para el éxito. Una manera de crear software duradero es servirse de las mejores prácticas de diseño orientado a objetos. Debería tener un conocimiento práctico de algunos de los patrones de diseño más comunes y útiles, así como escribir software con un enfoque de diseño orientado a los objetos. Lo más seguro es que nadie le pida que describa en detalle cómo funcionan ciertos patrones de diseño, pero es muy posible que tenga que defender sus elecciones al respecto.
Bases de datos
La mayor parte del software que escribimos está respaldado por un almacén de datos. Muchos de los desafíos a los que se enfrentan los profesionales de la tecnología surgen cuando tratan de encontrar la manera más eficaz de recuperar y almacenar datos para uso futuro. Amazon ha estado a la vanguardia del movimiento de bases de datos no relacionales. Hemos puesto a disposición de la comunidad de programadores servicios de Amazon Web Services como DynamoDB para que puedan usar de manera sencilla en su beneficio las ventajas de las bases de datos no relacionales. Aunque no esperamos un determinado nivel de experiencia con bases de datos no relacionales, debe estar familiarizado con conceptos generales de bases de datos y sus aplicaciones. Cuanto más sepa de las ventajas comparativas entre bases de datos relacionales y no relacionales, mejor preparado estará.
Computación distribuida
Los sistemas de Amazon funcionan dentro de estrictos rangos de tolerancia y a alta carga. Aunque tenemos algunas herramientas internas que nos ayudan a crecer a escala, es importante entender algunos conceptos básicos de computación distribuida. Entender conceptos como arquitecturas orientadas a servicios, map-reduce, caché distribuido, equilibrio de carga y otros le ayudará a formular respuestas a algunas de las preguntas más complicadas de arquitectura distribuida que se pueda encontrar.
Sistemas operativos
No será necesario que sepa cómo construir su propio sistema operativo desde cero, pero deberá estar familiarizado con algunas cuestiones en torno a los SO que pueden influir en cómo rinde el código (p.ej.: gestión de memoria, procesos, hilos, sincronización, paginación y «multithreading»).
Temas de Internet
Esperamos de nuestros ingenieros que estén familiarizados con los principios básicos de cómo funciona Internet. Repase para obtener una comprensión global de cómo funcionan los buscadores, desde búsquedas de DNS y TCP/IP a conexiones a la toma de corriente. Debe comprender en profundidad los aspectos clave de funcionamiento de la red.
Aprendizaje automático general e inteligencia artificial
Puede esperar que le preguntemos acerca de modelado basado en datos, protocolos «train/test» (entrenamiento/prueba), análisis de error y significación estadística. Por ejemplo, si se le plantea un problema, ha de ser capaz de formularlo como un problema de aprendizaje automático y proponer una solución, incluyendo ideas de fuentes de datos, anotación, enfoques de modelos y posibles dificultades. Entienda los métodos y algoritmos básicos de AI/ML (inteligencia artificial y aprendizaje automático). Vuelva a mirarse sus libros de texto favoritos sobre inteligencia artificial y aprendizaje automático.
Entendemos que esta es una lista relativamente larga de temas para repasar. Debe saber que quienes le entrevisten no evaluarán su capacidad para memorizar todos los detalles de cada uno de estos temas. Lo que buscan es su capacidad para aplicar sus conocimientos para resolver problemas de manera eficiente y eficaz. Con el tiempo limitado (a veces) del que dispone para preparar una entrevista técnica, le recomendamos que revise los fundamentos básicos de la informática y que practique la escritura de código fuera de un ambiente integrado de programación. Es probable que este sea el uso de su tiempo que mejores resultados le dé.
¿Más preguntas?
CONSULTAR LAS ENTREVISTAS EN AMAZON. CONSULTAR NUESTRA SECCIÓN DE PREGUNTAS FRECUENTES.
INFORMARSE SOBRE LOS BENEFICIOS QUE OFRECEMOS. EXPLORAR NUESTRAS UBICACIONES.
Software Development Engineer Interview Preparation (SIP)
Amazon Leadership Principles
This video provides valuable insight to help you be successful when interviewing for Amazon’s Leadership Principles.
Amazon Coding Sample
This video dives into a coding example and how candidates should approach, analyze and solve such problems when interviewing at Amazon.
Amazon System Design Preparation
This video tackles a system design example question and how candidates should approach, analyze and solve such technical questions.