
El año pasado, pasé innumerables horas entrevistando a candidatos para varios puestos en Facebook. Y, dado que ahora tuve la oportunidad de visitar ambos lados del proceso de selección, me gustaría ayudarlo: estudiantes que están tratando de ingresar a su primera pasantía, desarrolladores más experimentados que se están preparando para mudarse a otra compañía, o aquellos que quieren ingresar a la programación de un entorno profesional completamente diferente.
En este artículo quiero resumir las lecciones más importantes que aprendí de la experiencia de entrevistar a programadores en Facebook. Espero que arrojen luz sobre algunas características de este proceso, que son muchísimos nervios agotadores.
Formato
Las entrevistas para programadores, por lo general, toman la forma de una conversación, duran 45 minutos y están destinadas a probar su conocimiento de estructuras de datos y algoritmos. Los pasantes generalmente solo necesitan pasar por una entrevista donde muestran sus habilidades para escribir códigos. Los desarrolladores de nivel superior probablemente tendrán que asistir a dos o tres entrevistas de redacción de códigos, una o dos entrevistas donde evaluarán sus habilidades de diseño del sistema, así como a una reunión separada para evaluar sus cualidades personales. Aquí solo hablaré sobre entrevistas en código.
Recientemente me preguntaron: "¿Qué pasa si no puedo encontrar una solución a este problema de inmediato?" Respondí: "Bueno, si la tarea se elige correctamente, entonces no deberías encontrarla de inmediato". De lo contrario, ¿cuál es el punto? El propósito de la entrevista es entender qué tan bueno eres en la programación. En el equipo de Facebook, la información que responde a esta pregunta se denomina señal. El entrevistador busca sacarle el máximo provecho. En otras palabras, si entendemos que ya está familiarizado con la tarea propuesta, nuestra responsabilidad es darle otra.
Necesitamos ver cómo lidias con las dificultades. Si, por casualidad, puede recitar la solución de memoria directamente de Cracking The Coding Interview, entonces no sabemos nada sobre su capacidad para resolver problemas.
Mejores prácticas para entrevistas de trabajo
Los mejores candidatos se convierten en la fuerza impulsora de la entrevista: ellos mismos tienen una conversación y prácticamente no necesitan que el empleado de la compañía los empuje en la dirección correcta. Por lo general, tales programadores por capricho, sin avisar desde el exterior, hacen lo siguiente:
- Haz preguntas aclaratorias.
- Analice las opciones de solución, sus ventajas y desventajas.
- Proyecto de código
- Mostrar implementación de solución
- Probar su solución
No confunda iniciativa con prisa. Una postura activa no significa que deba apresurarse inmediatamente a escribir código. Por el contrario, si inicia el código en los primeros cinco minutos de la conversación, esto puede arruinar la impresión. El primer paso para una entrevista de trabajo brillante es preguntas clarificadoras inteligentes.
Preguntas inteligentesAntes de tomar una decisión, debe comprender bien el problema. Algunos refinamientos reflexivos pueden aumentar seriamente sus posibilidades de éxito. Aquí hay algunos por ejemplo:
- ¿Esto debe hacerse sin memoria adicional?
- ¿En qué aportación debemos centrarnos?
- ¿Qué es más importante: rendimiento o bajo consumo de memoria?
De esta manera, puede concentrarse en lo que realmente importa y sacar todo lo demás de su cabeza. Saber lo que no puede pensar no es menos valioso que saber que requiere atención especial.
No piensesMuy a menudo, los candidatos comienzan a agregar algún tipo de especulación por sí mismos (las variables son solo números positivos, las matrices no pueden estar vacías, todos los datos de entrada están seguros). Esta es una campana seria. Nunca ajuste las condiciones para que le resulte más conveniente encontrar una solución. Pregunta
"¿Asumimos que todos los valores son positivos?"
En ninguna parte es más fácil. Si dicen que sí, eso es genial. No se requieren controles adicionales. De lo contrario, una sola declaración de condición es suficiente para proteger su código de cualquier posibilidad. A menudo, con la ayuda de tales preguntas, puede obtener una indicación de en qué dirección debe moverse.
Opciones de solucionLos entrevistadores son muy aficionados cuando los candidatos destacan varias soluciones. Esto demuestra que comprende: puede abordar cualquier tarea desde diferentes ángulos y, lo que es más importante, obliga al entrevistado a decirle sin que usted lo solicite directamente. Yeeee!
No podemos simplemente tomar y presentar la respuesta correcta para usted. Pero si propone dos opciones, A y B, y pregunta: “¿Qué enfoque, en su opinión, es más apropiado aquí?”, Entonces, sin duda, elegiremos lo que se parece más al deseado.
Redacte su solución en forma de códigoEn las entrevistas técnicas, la escritura suele ser necesaria en la pizarra. En consecuencia, no funcionará insertar operadores cuando y donde quiera. Debes tener una buena idea de lo que vas a hacer antes de comenzar a escribir.
Respira hondo y comienza a planificar tu código. Puede ser un borrador de código, puede ser un esquema, lo principal es que sepa qué estructuras de datos se utilizarán en ellas y qué variables serán de su interés. Creo que nadie quiere que el resultado de su trabajo se vea así:
Escribe la implementaciónEn esta etapa, todo generalmente se detiene, aunque en el buen sentido no debería ser. En teoría, la implementación de la solución es la más simple. Hiciste preguntas inteligentes, consideraste diferentes enfoques, pensaste en el algoritmo: todo lo que queda es pintar todo. Mientras tanto, no te olvides de ...
Comunicación!Habla en voz alta. Es bastante difícil llevarte al punto que necesitas, si no sé lo que estás pensando en absoluto. Si te llevas a un lugar equivocado, intervendré. Si te estás moviendo en la dirección correcta, lo más probable es que no te derribe.
Sin embargo, se debe hacer una advertencia: el estilo de entrevista personal decide mucho. Alguien interviene en el curso de la decisión más activamente, alguien prefiere mantenerse alejado.
PruebaCuriosamente, este paso se descuida con mayor frecuencia. Diría que el 98% de los desarrolladores que estuvieron en mis entrevistas deberían prestar más atención a verificar sus decisiones.
Al comienzo de la entrevista, al candidato generalmente se le da una opción de prueba junto con la tarea. Al finalizar el trabajo en la solución, ejecutan el código a través de la prueba adecuada. Pero hay un problema: le ofrecemos la opción de prueba más primitiva. Por lo general, no afecta los casos límite y no permite verificar el código como debería. Con estos parámetros, su algoritmo proporciona el resultado deseado; con otros, puede que no.
La forma más fácil de presumir en una entrevista técnica es escribir pruebas. Cuanto más, mejor. Cuanto más difícil mejor. Cuanto más completo, mejor. En la mayoría de los casos, esto le permitirá detectar errores antes de señalarlos. Y esas cosas hablan a tu favor.
Qué hacer si no sabes qué hacer
De todos modos, ¿qué debe hacer si se le asigna una tarea y no puede encontrar una solución de inmediato?
Proceder por etapas. Recuerde: quizás la tarea le parezca similar a cualquiera de las que resolvió anteriormente. Muchas de las tareas que propuse en las entrevistas eran tareas básicas, que se desmontan en cualquier curso donde se estudien algoritmos y estructuras de datos, pero con un subvertido.
Si no se le ocurre nada, no se asuste. Todo esta bien No se preocupe por tratar de encontrar de inmediato la solución más efectiva: comience con la más simple. Luego, llevándolo a un punto de partida, piense: ¿cuáles son los cuellos de botella aquí? ¿Qué requiere más optimización? ¿Cómo se puede optimizar esto?
Reduzca las debilidades del sistema con las fortalezas de las estructuras de datos. Cuando necesita hacer un algoritmo más eficiente, las estructuras de datos a menudo (aunque no siempre) vienen al rescate. Cada uno de ellos tiene sus propias ventajas y desventajas (la tabla hash es la velocidad de búsqueda de datos, el árbol de búsqueda binario los está ordenando y así sucesivamente). Las mejores soluciones se obtienen cuando logra cerrar un cuello de botella debido a la solidez de una u otra estructura de datos.
Bueno, por ejemplo, tienes una tarea:
Dada una propuesta, calcule cuántas veces aparece cada letra del alfabeto en ella.
Si utiliza el método de búsqueda exhaustivo, tendrá que contar cada letra por turno y luego resumir los datos en el resultado final. La ineficiencia del método radica en la necesidad de almacenar y buscar información: guardamos los datos que recibimos para cada carta y luego los extraemos para formar un resultado total. Si observa las estructuras de datos disponibles, notará que una se destaca entre las demás en la forma en que necesitamos:
- Árbol de búsqueda binaria
- Matriz
- Tabla hash
- Árbol AVL
- Pila
- Cola
La tabla hash almacena y recupera los datos de manera más efectiva. Si lo usa, no tiene que analizar la propuesta veintiséis veces, solo una es suficiente.
Buscar una pista
A menudo se introduce una pista en las tareas de programación que abre el camino a una solución más conveniente. Por lo general, esta es una especie de bagatela, una condición inusual debido a la cual puede actuar con mayor eficiencia que con otras iniciales. Verifique si hay algo como esto en su tarea.
Digamos:
Dados dos arreglos ordenados de tipo Integer, A y B; se requiere fusionar B de A. Se supone que A puede acomodar todos los elementos de B; El número de elementos inicializados en las matrices es myn, respectivamente.
La tarea se toma directamente del libro Cómo descifrar la entrevista de codificación. Notado una pista? Podríamos recibir solo dos matrices para fusionar, pero no: en nuestro escenario, una está completamente ubicada en la otra. De eso es de lo que estoy hablando. Si observa tales reservas, tenga en cuenta que no se incluyen accidentalmente.
Aquí el espacio libre le brinda la oportunidad de optimizar el proceso de fusión. La solución completa se puede ver
aquí .
Pedir ayuda
A veces sucede que pasaste por todos los pasos, pero te quedaste en un callejón sin salida. En este caso, solo necesita contactar a los entrevistadores para obtener ayuda.
Por el hecho de que nos sentaremos durante diez minutos en silencio, no será más fácil para nadie. Si realmente no tienes idea de qué hacer, pedir pistas será la mejor salida. Cada uno de nosotros necesita consejos de vez en cuando. Todo decide cómo podrás usarlo.
En conclusión
Una entrevista técnica es el mismo examen estandarizado que los que nos son familiares desde la graduación y la matrícula universitaria. Las tareas difieren en detalles, pero los conceptos básicos y las estrategias de solución siguen siendo más o menos estándar.
Muchos candidatos se ven interrumpidos por cosas muy simples: piensan en sus propias condiciones, no pronuncian el tren del pensamiento, prueban mal su decisión. Todos estos errores pueden corregirse, y "definitivamente no" puede convertirse en una "toma". Usa el sistema que bosquejé en este artículo y estarás en buena forma.