La entrevista técnica es un componente crucial del ciclo de entrevistas para ingenieros de software, que mide la capacidad del candidato para desempeñar el puesto en cuestión. Las habilidades requeridas para completar con éxito una entrevista técnica en DoorDash incluyen conocimientos demostrables en estructuras de datos y algoritmos, y la capacidad de comunicarse de manera efectiva y resolver problemas.
Normalmente, un ingeniero experimentado asume el papel de entrevistador, evaluando los puntos fuertes y débiles del candidato. Aunque la entrevista técnica pueda parecer un reto, es importante recordar que el objetivo honesto del entrevistador es encontrar a alguien que pueda ser un gran colaborador en un equipo que trabaje en proyectos que cumplan los objetivos empresariales de la empresa.
Como miembro de un pequeño equipo de ingenieros aquí en DoorDash que contribuyen y examinan las preguntas formuladas en nuestras entrevistas técnicas, así como un entrevistador activo, voy a destacar algunas piezas clave de nuestra entrevista técnica. En última instancia, queremos excelentes candidatos que tengan éxito en cada parte de nuestro ciclo de entrevistas, encuentren un lugar en DoorDash y construyan una carrera altamente satisfactoria.
Fondo
Las entrevistas son un intento de sacar lo mejor de una situación difícil. En unas pocas horas tenemos que averiguar si un candidato puede contribuir con éxito a su equipo y a la empresa durante lo que podrían acabar siendo muchos años. Como señaló Lokesh Bisht, Director de nuestro equipo de Análisis de Clientes, en su artículo sobre la entrevista de ciencia de datos, la entrevista técnica es un medio para mitigar el coste de las malas contrataciones, al tomar una instantánea de algunas de las habilidades del candidato. Las preguntas de la entrevista deben estar bien pensadas para ofrecer una evaluación imparcial.
Los entrevistadores pueden tener diferentes estilos y expectativas sobre lo que esperan ver en un candidato seleccionado. Al destacar la estructura general y el proceso de nuestra entrevista técnica, queremos ofrecer a los candidatos la mejor preparación posible para el éxito.
Estructuras de datos y algoritmos
Muchas empresas tecnológicas llenan sus entrevistas con preguntas relacionadas con algoritmos y estructuras de datos específicos, y DoorDash no es diferente. Los candidatos deben sentirse cómodos utilizando y comprendiendo las principales diferencias y aplicaciones de las siguientes estructuras de datos:
Esta lista no implica que no se vayan a incluir otras estructuras de datos en la entrevista, sólo significa que las enumeradas anteriormente tienden a ser las más comúnmente cubiertas. También recomiendo encarecidamente a los candidatos que conozcan bien las complejidades de tiempo de ejecución peores, mejores y medias para insertar, eliminar y encontrar elementos en todas las estructuras de datos que se sientan cómodos utilizando.
Los candidatos también deben conocer bien los siguientes algoritmos:
- Gráficos
- de Dijkstra
- BFS
- DFS
- Recorridos por el árbol
- Pedido anticipado
- Para
- Postorder
- Listas enlazadas: sentirse cómodo manipulando una lista y detectando casos extremos.
- Recursividad: ser capaz de pensar recursivamente
- Divide y vencerás
- Caso(s) base y caso(s) recursivo(s) (inductivo(s))
- Recursividad de cola -> no se espera, pero se fomenta
- Soluciones de programación dinámica a cuestiones recursivas (identificación de subproblemas solapados y subestructura óptima) -> no se espera, pero se anima a ello
- Buscar en y ordenar:
- Algoritmos comunes de ordenación (fusión, inserción, burbuja, etc.) -> no se espera que los memorice, pero se recomienda comprender cuándo utilizarlos
- Búsqueda binaria
- Comodidad general en búsquedas y ordenaciones complejas en estructuras de datos anteriores.
Manténgase informado con las actualizaciones semanales
Suscríbase a nuestro blog de ingeniería para recibir actualizaciones periódicas sobre los proyectos más interesantes en los que trabaja nuestro equipo.
Introduzca una dirección de correo electrónico válida.
Gracias por suscribirse.
Comunicación
El concepto de tener un enfoque comunicativo para resolver problemas no siempre se enfatiza en entornos académicos. Sin embargo, utilizamos la comunicación como métrica para determinar el éxito de un candidato debido a la importancia del trabajo en equipo en nuestra organización de ingeniería. A continuación se indican algunos puntos clave a tener en cuenta.
Involucrar al entrevistador
Idealmente, queremos que el candidato complete el problema y todos los subproblemas asociados con éxito sin ninguna ayuda del entrevistador. Sin embargo, animamos a los candidatos a mantener informado al entrevistador sobre lo que están intentando conseguir. No es necesario mantener una conversación constante, pero es importante describir los pasos clave de la decisión mientras se responde a una pregunta.
He aquí algunos ejemplos:
- “We can use a stack for this solution because...”
- "Podemos usar un recorrido en árbol en orden para esta pregunta porque..."
- "Puede que haya pasado por alto algún caso extremo, déjame ver más de cerca mi solución".
- "Se me ocurre una solución en tiempo O(N2) haciendo X, pero creo que aquí podemos tener una solución lineal. Me gustaría tomarme un minuto para pensar en un enfoque".
Yo no esperaría que un candidato hablara mientras codifica o pseudocodifica su solución (de hecho, me resulta difícil pensar y hablar al mismo tiempo, así que prefiero el silencio durante esas partes de la entrevista). Los candidatos deben tomarse su tiempo para ordenar sus pensamientos, pero hay que asegurarse de que el entrevistador sigue el proceso en los puntos clave, por ejemplo:
- Preguntas aclaratorias después de plantear el problema
- El enfoque para resolver el problema
- Identificación de posibles fallos en el planteamiento
- Cambio de rumbo hacia un nuevo enfoque
El entrevistador está ahí para guiar suavemente al candidato hacia una solución final y ayudarle a conseguir el máximo de puntos posibles para la base de conocimientos y habilidades de ese candidato.
Está bien pensar
Con demasiada frecuencia, los tutoriales y guías de entrevistas técnicas sugieren que los largos momentos de silencio se consideran negativos y pueden hacer perder puntos. No hay absolutamente nada malo en tomarse tiempo para pensar en la pregunta de la entrevista y en construir una solución coherente. Yo animaría a los candidatos a hacer una pausa de uno o dos minutos en situaciones que requieran un pensamiento crítico.
Comentarios
No espere una retroalimentación constante cuando resuelva un problema. El trabajo de un entrevistador es ayudar a los candidatos a mantener el rumbo hacia una solución que funcione, pero sólo si lo necesitan. Por lo general, los candidatos perderán puntos si el entrevistador tiene que guiarles de nuevo hacia una solución o darles grandes pistas sobre algo que hayan pasado por alto. Formamos a nuestros entrevistadores para que sólo intervengan cuando crean que el candidato tiene más posibilidades de obtener una mejor puntuación con su intervención.
Resolver la cuestión
Independientemente del enfoque que adopte un candidato para resolver las preguntas de una entrevista técnica, hay algunos pasos que normalmente deben seguirse.
Eliminar la ambigüedad
Los ingenieros de DoorDash a menudo se encuentran resolviendo preguntas con muchas incógnitas y pocos caminos claros para avanzar. El proceso de entrevista nos ayuda a evaluar esta habilidad en los candidatos, que es necesaria para tener éxito aquí. A menudo hacemos preguntas ambiguas a propósito, y es responsabilidad del candidato eliminar cualquier ambigüedad. Un candidato puede pasar por alto casos extremos si no aclara el problema.
En esta pregunta de ejemplo enlazada, hay algunas restricciones que se han omitido específicamente en la descripción de la pregunta. Si no se tienen en cuenta en la solución, es posible que se pasen por alto algunos casos extremos, lo que daría lugar a una puntuación más baja.
Fuerza bruta
En general, aconsejo no optar por un enfoque de fuerza bruta como solución final. En todos los casos en los que existe una solución óptima con una mejora significativa de la complejidad, una solución típica de fuerza bruta dará como resultado una puntuación baja para el problema.
Construir una solución
No es necesario llegar a una solución perfecta al instante. Tómate tu tiempo para elaborar un planteamiento general y repítelo hasta que funcione. Recomiendo crear una solución que funcione y, a continuación, ejecutar un caso de prueba con el entrevistador para detectar posibles errores. Valoramos mucho las habilidades de depuración, y los candidatos no perderán puntos si son capaces de encontrar sus propios errores y rectificarlos sin la intervención del entrevistador. Después de encontrar una buena solución, los candidatos pueden seguir adelante con el análisis en tiempo de ejecución y las preguntas de seguimiento (que son muy habituales en nuestras entrevistas).
Análisis en tiempo real
Los candidatos deben tener un buen conocimiento de las complejidades del tiempo de ejecución y de la memoria. En general, los candidatos deben ser capaces de explicar con claridad cada paso de la solución y por qué la han elegido. Por ejemplo, ¿por qué utilizar una lista enlazada en lugar de una matriz?
Pruebas unitarias
Aunque no se espera en todas las preguntas, en algunas se pedirá a los candidatos que escriban sus propias pruebas unitarias. Conozca las prácticas de prueba estándar del sector y sea capaz de construir pruebas unitarias significativas y concisas. Demuestre claridad de pensamiento y comprensión en cada prueba unitaria, evitando la repetición y dando confianza a la solución.
Recomiendo libros como Clean Code y Code Complete 2 para obtener conocimientos teóricos sobre pruebas unitarias, así como otras prácticas estándar de ingeniería de software.
Preparación
La preparación es clave para afrontar la entrevista técnica. La situación ideal para los candidatos es encontrarse resolviendo un problema muy similar a otros que hayan resuelto anteriormente.
Considere los siguientes recursos:
- Herramientas de práctica de estructuras de datos/algoritmos, como LeetCode
- Herramientas de preparación de entrevistas individuales, como interviewing.io
- Fluidez general y éxito en las entrevistas, como Cracking the Coding Interview
Una buena forma de prepararse para la entrevista técnica consiste en practicar con un amigo y en una pizarra o a distancia utilizando una pantalla compartida. Resolver un problema de ejemplo de esta manera hará que la situación real de la entrevista te resulte más familiar.
Puntuación
Además del éxito general en la resolución de las preguntas planteadas, hay tres categorías principales que se tienen en cuenta a la hora de evaluar el éxito de un candidato:
- Fundamentos
- Comprende las estructuras de datos habituales y cuándo aplicarlas
- Puede realizar análisis de complejidad temporal y espacial
- Llega a una solución correcta y óptima (en el tiempo y en el espacio)
- Codificación
- Piensa en buenas abstracciones para resolver el problema en cuestión
- Escribe código bien organizado, con una sintaxis correcta, en el lenguaje de su elección (no hay diferencia de puntos por la elección del lenguaje).
- Pruebas y depuración eficaces del código
- Comunicación
- Hace preguntas aclaratorias para eliminar ambigüedades
- Explica su proceso de razonamiento a la hora de encontrar una solución.
- Recibe bien los comentarios, sin ponerse a la defensiva.
Otras entrevistas
Aunque lo anterior se centra en la parte de algoritmos/estructura de datos de nuestra entrevista técnica, hay otros módulos de nuestro bucle de entrevistas. Los módulos a los que se enfrenta un candidato dependen de la naturaleza y el nivel del puesto para el que se le entrevista.
Valores
Esta parte de la entrevista evalúa si un candidato puede ejemplificar nuestros valores DoorDash, como mostrar una predisposición a la acción, mejorar un 1% cada día y hacer sitio en la mesa. Todos los candidatos pasan por esta entrevista, que incluye preguntas generales sobre retos y éxitos pasados, cómo afrontarían determinadas situaciones teóricas y sus intenciones profesionales. El candidato también tendrá la oportunidad de hacer preguntas al final de esta entrevista para evaluar si DoorDash le parece un lugar donde puede hacer algunos de los mejores trabajos de su carrera.
Diseño del sistema
La entrevista de diseño de sistemas se suele realizar a los candidatos de nivel industrial, no a los de nivel inicial (L4-plus), y puede ser una herramienta importante para evaluar el nivel de conocimientos del candidato. Suele ser una entrevista más difícil de preparar. La pregunta evalúa la capacidad del candidato para construir un sistema escalable con decisiones de diseño bien pensadas. Estas preguntas suelen ser intencionadamente vagas y utilizan un escenario real. Esta entrevista suele profundizar en una o dos partes específicas del diseño, mientras que echa un vistazo más superficial a las demás partes.
Para prepararse, se anima a los candidatos a investigar y realizar ingeniería inversa de sistemas comunes dentro de su dominio. Los candidatos de frontend, por ejemplo, pueden practicar con aplicaciones populares como Gmail o DoorDash. Los ingenieros de backend pueden profundizar en áreas específicas dentro de grandes sistemas como Twitter o un servicio de mensajería.
Backend
La pregunta sobre el diseño del sistema backend suele agruparse con el conocimiento del dominio, pero también puede separarse en dos rondas en función del equipo que tenga la función abierta. Chao Li, ingeniero de backend en nuestro equipo de Anuncios y Promociones, comparte sus opiniones a continuación:
"Esta entrevista suele centrarse en un par de áreas, con niveles de dificultad crecientes:
- La primera parte, que la mayoría de los candidatos puede superar sin grandes dificultades, consiste en desglosar los requisitos del problema y sugerir componentes básicos. Esta parte requiere pasos como entender el planteamiento del problema, traducir los requisitos en componentes técnicos, desglosar el modelo de datos, sugerir una API e idear un esquema de base de datos.
- Los candidatos deben estar preparados para profundizar en cada componente y hablar de cómo se gestionan las distintas situaciones. Algunos ejemplos típicos son cómo gestiona un componente de pago las escrituras dobles o cómo gestiona una cola distribuida las sobrecargas y los fallos.
- Prepárate para discutir detalles sobre su enfoque. Por ejemplo, si un candidato menciona el uso de una cola de mensajes para resolver el problema, esperaríamos una justificación de por qué una cola de mensajes es la mejor solución, cuáles son las ventajas y desventajas del producto específico frente a otros productos (es decir, AWS Kinesis frente a un clúster de Kafka local), cuáles son otras posibles soluciones, cuáles son las ventajas y desventajas y cuáles son los escenarios de error de esta solución.
- La última parte de esta entrevista se refiere a la escalabilidad. Evaluamos si un candidato sabe cómo pasar de cero a una solución 1x, así como de una solución 1x a una 10x. En concreto, el candidato debe ser capaz de sugerir cómo tendrán que evolucionar la pila tecnológica y la arquitectura para lograr la escalabilidad."
iOS
La entrevista de iOS, comúnmente conocida como la entrevista de arquitectura, se sumergirá en el diseño de la aplicación, que más tarde se implementará en una ronda de codificación. Tom Taylor, ingeniero del equipo de la plataforma iOS de DoorDash, comparte sus opiniones a continuación:
"Durante la entrevista de arquitectura, los candidatos reciben una característica y un diseño y se les pide que dibujen en una pizarra un sistema iOS. Para esta entrevista no es necesario codificar; hablamos principalmente de elementos a nivel de clase, estructura o interfaz. Aunque no exigimos que todos los candidatos sean arquitectos de software expertos, es importante que al diseñar una función tengan en cuenta las pruebas, la escalabilidad, el flujo de datos y las técnicas para gestionar el código cuando se trabaja en una base de código mayor. Además, los candidatos deben entender cómo diseñar un sistema sin depender de bibliotecas de terceros."
Android
La entrevista de Android suele incluir una parte dedicada a repasar el diseño del sistema. Como preparación, recomendamos repasar algunas aplicaciones comunes y ser capaz de realizar una inmersión profunda o ingeniería inversa en ellas. Puede que la pregunta no sea diseñar una aplicación que realice una tarea específica, sino diseñar una biblioteca que pueda utilizar una aplicación. Por ejemplo, se puede pedir a los candidatos que diseñen una biblioteca de carga de imágenes similar a Glide.
Para tener éxito en esta entrevista, es importante contar con fundamentos sólidos, como la creación de hilos, el almacenamiento en caché, el consumo de memoria y batería, el uso de la red, la escalabilidad, la persistencia de las aplicaciones y la interacción con el sistema operativo.
Web
Esta entrevista tratará sobre el desarrollo de una aplicación web. Michael Sitter, director técnico del equipo de la plataforma web de DoorDash, comparte sus ideas a continuación:
“We don't expect candidates to necessarily be able to describe solutions for scalability and fault tolerance, but the best candidates are able to include those qualities in their designs. Instead, we try to focus on things like the contracts between the web/client applications and the backend APIs. What data do we need to collect? How should the client app respond to various API responses? Synchronous or asynchronous? How do we handle cases where we have high or low latency?”
"Esperamos que los candidatos sean capaces de describir claramente las interfaces cliente-servidor, aclarar los requisitos de rendimiento y manejar correctamente los casos límite del sistema".
Conocimientos
Las entrevistas sobre conocimientos de dominio ponen a prueba los fundamentos del candidato en la plataforma a la que opta. Deben sentirse cómodos con la terminología básica y las aplicaciones del ámbito en cuestión, así como demostrar un sólido conocimiento de la infraestructura que utilizan. Esta entrevista implica una inmersión profunda en un proyecto de ejemplo en el área de dominio. Normalmente realizamos esta entrevista en un formato de preguntas y respuestas, y en ocasiones se combina con la entrevista de diseño del sistema. Los candidatos de iOS normalmente no pasan por esta entrevista en su bucle, ya que se sustituye por una ronda de depuración que se explica en la sección Codificación más adelante.
Codificación
Some interview loops contain a coding round. This module usually follows a take-home project involving a real-world application and will ask the candidate to add or change a feature within their already built application. This interview is used to assess a candidate's proficiency in the language and platform they are working in as well as how they architect their code.
Codificación iOS
El ciclo de entrevistas de iOS difiere ligeramente del de otras plataformas. Los candidatos renunciarán a las entrevistas de conocimientos del dominio y codificación descritas anteriormente y, en su lugar, pasarán por dos rondas de codificación modificadas. En la primera ronda, el candidato implementará el diseño que ha construido en la entrevista de diseño/arquitectura del sistema. Durante la segunda ronda, recibirán una aplicación en xCode con algunos errores y fallos, y se espera que depuren el código base para convertirlo en una solución que funcione.
En las entrevistas para iOS tampoco hay proyecto para llevar a casa. En su lugar, pedimos a los candidatos que participen en una entrevista telefónica técnica en la que trabajarán con un ingeniero de iOS para terminar una aplicación parcialmente completada. Este módulo se realiza antes de las entrevistas presenciales.
Conclusión
La entrevista puede ser una experiencia desconcertante y a veces difícil, pero se hace mucho más fácil con la repetición y la práctica. Sin embargo, junto con una evaluación de habilidades, los candidatos también tienen la oportunidad de ver cómo piensan y se comunican sus posibles colegas, así como una visión de los tipos de problemas que resolvemos en DoorDash.
Espero proporcionar un amplio material de preparación para mitigar algunos de los prejuicios que acompañan a las entrevistas y dejar que el proceso ponga de relieve la posible conexión entre el entrevistado y la empresa. Sólo deseo éxito a los futuros candidatos y espero que podamos ser un gran entorno para que los candidatos avancen en sus carreras.
Si le interesa construir una plataforma logística que apoye las economías locales, considere la posibilidad de unirse a nuestro equipo.
Fotografía del encabezado de Fotis Fotopoulos en Unsplash.