Preparación para entrevistas con gigantes de TI: cómo supero la maldición de las entrevistas algorítmicas


Descargo de responsabilidad:


No he programado desde que tenía tres años, no conozco a Knuth de memoria, no soy un ganador de premios en competencias de informática o campeonatos en programación deportiva, no he estudiado en el MIT. Tengo experiencia en informática y 6 años de experiencia en desarrollo comercial. Y hasta hace poco, no podía ir más allá de la primera evaluación técnica para los gigantes de TI de FAANG (Facebook, Amazon, Apple, Netflix, Google y similares), aunque hice varios intentos. 

Pero ahora todo ha cambiado, recibí varias ofertas y quiero compartir mi experiencia sobre cómo llegar a esto. Se tratará del puesto de ingeniero de software en las oficinas europeas de las empresas que cotizan en bolsa.

¿Por qué necesito este FAANG? Mis ventajas subjetivas:

  1. buenas condiciones, el salario es más alto que el mercado;
  2. reubicación simple;
  3. procesos depurados;
  4. talentosos colegas de todo el mundo.

Y las ventajas de la preparación, incluso si no recibe la oferta:

  1. viajes;
  2. Mejora de la velocidad de escritura de código;
  3. la capacidad de verificar mentalmente el programa en busca de errores (método de la mirada);
  4. la capacidad de crear scripts complicados para las pruebas;
  5. la capacidad de encontrar cuellos de botella;
  6. capacitación de habilidades de diseño de sistemas, incluidas aquellas en una escala mayor que las que he encontrado.

Atraemos la atención de un reclutador


En mi caso, LinkedIn fue suficiente. Durante varios años, sin ningún propósito especial, mantuve un cierto nivel de actividad en mi perfil: regularmente agregaba amigos y me suscribía a las páginas de la empresa. Muy pronto, los primeros reclutadores comenzaron a tocar, y cuantos más contactos tenía, más a menudo me ofrecían vacantes. Llegué al punto de que en la última iteración durante un par de meses me escribieron directamente desde Google, Microsoft, Amazon y Facebook, parecía una conspiración de un cartel.

Contras de este enfoque: nunca se sabe cuándo tienes suerte. El reclutador puede ponerse al día de vacaciones con la noticia del evento de contratación en llamas, que debería ser en una semana. Pero en este caso hay ventajas: muy probablemente, debido a la urgencia, se encontrarán con usted y se perderán una de las etapas de la entrevista, por ejemplo, en el caso de Amazon, en línea con un especialista técnico.

Si tiene un lanzamiento y en el futuro cercano no está completamente a la altura de las tareas en la mañana, entonces puede acordar unos meses para prepararse. Las empresas entienden que sus entrevistas son complicadas y les resulta más fácil esperar unos meses que perderlo como candidato durante seis meses o un año (después de este período, las empresas pueden volver a presentar una solicitud).

Hay otro enfoque a menudo mencionado.- encuentre a una persona dentro de la compañía que lo recomiende. Esto te permitirá planificar mejor tu estrategia de entrenamiento. Pero no me detendré en eso, porque no lo he intentado yo solo y solo puedo compartir rumores de que la recomendación en Google agrega puntos durante la entrevista y aumenta las posibilidades de una decisión positiva por parte del comité de contratación (la etapa final es una reunión donde los resultados se discuten en ausencia y el candidato es aprobado o rechazado).

Esquemas de entrevista


Aquí encontrará una breve descripción del proceso de entrevistas en diferentes compañías con ejemplos, y en las siguientes secciones consideraré la preparación de cada parte con más detalle. Los pasos son similares, pero su orden y número pueden variar. Por ejemplo, Google es uno de los líderes en la cantidad de sesiones, hasta cinco en persona, y luego otra o más entrevistas con el equipo.


Esquema de entrevistas en Google (en adelante, los esquemas pueden variar ligeramente según la oficina y el puesto)

Algunas etapas, por teléfono o con un equipo, pueden reasignarse si alguna de las partes tiene dudas. Su número no afecta nada, esta es solo una oportunidad adicional que debe usar después de evaluar cuánto tiempo más se requiere para la preparación (si la entrevista es técnica). El enfoque general de Google y, por ejemplo, Microsoft es la separación del proceso para candidatos con experiencia mínima (<1 año) y candidatos con experiencia. Para el primero, se puede realizar una evaluación en línea adicionalmente.


Esquema de entrevista de Microsoft Las

preguntas de comportamiento pueden ser parte de cada sesión en persona, como, por ejemplo, lo hacen Microsoft y Amazon, y pueden ser una sesión separada. Como candidato, prefiero el segundo enfoque: en primer lugar, una entrevista de comportamiento por separado no le roba tiempo a la resolución de problemas si el entrevistador de repente se vuelve hablador y, en segundo lugar, es excelente cuando lo pone después de todas las sesiones técnicas: puede cambiar fácilmente a conversaciones Acerca de la vida.


Esquema de entrevistas de Amazon

En Microsoft y Amazon, las entrevistas de comportamiento se integran en sesiones técnicas, probablemente también porque a menudo estas etapas son realizadas por empleados de un equipo futuro. En aquellas empresas donde el enfoque es diferente, la comunicación con futuros colegas se lleva a cabo en una etapa separada. Por ejemplo, Google define un equipo después de completar con éxito la fase en persona. El proceso más original en Facebook: la elección de un equipo ocurre después de la contratación. Un nuevo empleado pasa 6 semanas en el campo de entrenamiento: estos son proyectos de prueba en diferentes equipos y luego toma una decisión.


Esquema de entrevistas en Facebook

Cribado no técnico


El primer paso es hablar con un reclutador. Por lo general, esta es una breve llamada para describir la vacante o los equipos que el reclutador ofrece para entrevistar, y para averiguar su interés y motivación. Es posible que no haya una vacante específica, todo depende del proceso de contratación de una empresa determinada (consulte "Esquemas de entrevistas" ). Parece que el escenario es bastante simple, pero no debes relajarte aquí. Pueden hacer algunas preguntas técnicas breves, por ejemplo, para estimar el número de caracteres en el poder de dos (Google). O pueden encontrar que la experiencia no es lo suficientemente relevante, o que usted, como candidato, no está muy interesado (esto es lo que practica Facebook). 

Preparación para una entrevista algorítmica


La evaluación técnica es la etapa que para mí con mayor frecuencia se convirtió en la última antes de que se me ocurriera todo este esquema de capacitación.
Por supuesto, me enviaron material para su revisión y me recomendaron que practicara en Hackerrank / Leetcode. Pero nunca dijeron que era necesario resolver al menos 100-200 problemas, y este es exactamente el número que finalmente me permitió llegar a las finales exitosas.
Se puede ver a simple vista que esto se debe a dos meses de resolución regular de problemas en presencia de trabajo y otra vida. Puede intentar dedicar unas vacaciones a esto y hacer frente más rápido, pero luego habrá preparación para la etapa de tiempo completo y aún tendrá que hacer amigos con su horario habitual.

Me preparé usando Leetcode, y mi elección fue así por varias razones: 

  • gran banco de tareas;
  • la mayoría de ellos tienen buena cobertura de prueba;
  • desglose conveniente pagado por frecuencia y empresas (también hay selecciones gratuitas);
  • comunidad activa: puede leer sobre enfoques de capacitación y entrevistas recientes.

Leetcode tiene, por supuesto, algunas desventajas:

  • es casi imposible agregar su tarea o caso de prueba y, por lo tanto, la información comienza a quedar obsoleta;
  • estimación imprecisa del tiempo de ejecución y la memoria: puede variar de principio a inicio;
  • condiciones insuficientemente claras en comparación con las tareas de programación deportiva;
  • No siempre las interfaces de funciones idiomáticas.

Los dos últimos puntos pueden ser ventajas en el sentido de que a veces tiene que enfrentar tales problemas en las entrevistas y necesita estar preparado para ellos. Parece que Leetcode simplemente no puede hacer frente al flujo de información que ha caído sobre él, pero en este momento sigue siendo la mejor herramienta de este tipo. Su fuerza también está en la comunidad que vota por preguntas, decisiones y encuentra errores.

Para mí, las tareas encajan perfectamente en la mañana antes del trabajo. Después del desayuno, configuré un temporizador y resolví un par de tareas de nivel medio. El temporizador es importante porque ayuda a crear un ambiente de combate. Aparté el tiempo según los niveles de dificultad: 20 minutos para los simples, 40 minutos para los medios, 60 minutos para los difíciles. Elegí principalmente tareas de nivel medio, ya que las complejas se preguntan muy raramente. Si después de un tiempo no se realizó la tarea, estudié la solución, la agregué a la lista y volví a ella después de un tiempo. Intenté primero estudiar el enfoque con palabras e intentar codificarlo. La solución se podía ver en el sitio mismo: de los autores de la tarea o los comentaristas, el video de Tushar Roy también ayudó, explica muy claramente con ejemplos. El análisis de casi cualquier tarea se puede encontrar en GeeksForGeeks, pero hay bastantes errores.

El enfoque más universal es ordenar todas las tareas por frecuencia y comenzar a resolverlas en orden descendente.
Si no conocía la informática antes, primero debe tomar un curso fundamental, pero no dejarse llevar. Ni el conocimiento de la informática, ni el libro leído Cracking the Coding Interview darán tal efecto, aunque son bastante útiles para comenzar. Al principio tenía un curso universitario, un curso de Sedgwick ( uno y dos) y el mencionado libro de McDowell: todo esto no me ayudó a superar ni siquiera una entrevista telefónica. Primero, los patrones de decisión deben estar a su alcance para que el candidato pueda verlos y aplicarlos rápidamente. Para hacer esto, no solo debes leer el análisis de la tarea, sino primero tratar de pensar (o recordar), y si no funciona, después del análisis, escríbelo de nuevo. Es aconsejable hacer esto con límites de tiempo y una muy buena cobertura de prueba, como en Leetcode, que no es proporcionado por cursos o libros. En segundo lugar, los cursos de informática, por regla general, no hablan de enfoques prácticos para soluciones como dos punteros o "liebres y tortugas"

Puede resolver estos mismos problemas no en una fila, sino de acuerdo con temas o patrones. Pero lo principal aquí es no involucrarse y no resolver todo el tema en un día. De lo contrario, puede parecer que todo está claro, y en un par de días después de un enfoque tan expreso solo habrá un vacío en auge. Dejé que los temas "se establecieran" y verifiqué lo que aprendí en las tareas restantes después de un tiempo.

Consejos y trucos


Cuando me estaba preparando para una entrevista con cierta compañía, cambié un poco mis tácticas en Leetcode. Con una suscripción paga, puede ver colecciones especiales de tareas para empresas populares allí y le ayudan a prepararse rápidamente. Muchas empresas asignan las mismas tareas y solo Google, que alienta a sus entrevistadores a proponer otras nuevas, se sale de ellas. Por lo tanto, el 70-80% resuelto de las tareas de tal selección casi garantiza el éxito.


Una selección con Leetcode para una empresa individual: las tareas más frecuentes están marcadas con comentarios que indican la etapa de la entrevista.

También me gustaría mencionar colecciones gratuitas para pruebas en línea ( por ejemplo, para Amazon), que la comunidad recoge cuidadosamente en los debates. No hay muchas tareas allí, pero coinciden casi por completo con las que se pueden detectar en las pruebas en línea. Recomiendo encarecidamente resolverlos si tal etapa está por delante, porque puede haber muchas trampas que consumirán su tiempo. No habrá una persona con la que pueda ponerse de acuerdo sobre una interfaz de función más conveniente o explicar con palabras qué más le gustaría arreglar, pero no tuvo tiempo. Solo un temporizador, no siempre la firma de método habitual (por ejemplo, matrices en C para C ++) y pruebas intransigentes. Para pasar con éxito, por cierto, se pueden suspender un par de pruebas.

La evaluación técnica generalmente usa alguna herramienta simple para la edición de código en línea. Un consejo muy banal que ayuda a salvar algunas células nerviosas es practicar de antemano con la herramienta en la que escribirá el código. Especialmente si es algo no trivial como Google Docs, donde necesitas acostumbrarte a formatear todo a mano.

De vez en cuando, puede leer los consejos "para informar al entrevistador si vio un problema que necesita resolver". Soy bastante escéptico de ellos por muchas razones. En primer lugar, si desmontó una tarea y no la memorizó, no será obvio que ya la haya visto. Además, siempre se puede llegar a un seguimiento que el candidato no hizo. En segundo lugar, las empresas aconsejan abiertamente capacitarse en Leetcode antes de la entrevista. Será interesante si el entrevistador se queda sin tareas desconocidas para usted. En tercer lugar, es muy difícil encontrar algunas soluciones desde cero incluso con las sugerencias del entrevistador. Espero que rara vez se les pregunte, pero no debe confiar en la suerte. Y en cuarto lugar, si la empresa realmente se preocupa por las tareas que conoce, motiva a los entrevistadores a proponer otras nuevas.

Si quería entender cuánto estaba listo para resolver problemas nuevos y desconocidos para mí, participaba en competencias de programación deportiva en Leetcode / Codeforces. Esto es más complicado que la entrevista real, porque no hay nadie con quien discutir la solución y obtener una pista si hay dificultades. Pero no existe la tentación de ejecutar su código en pruebas ya hechas sin una ejecución mental con ejemplos: corre el riesgo de recibir una multa. 

Todo parece ser? No, hay un pequeño detalle, literalmente una pregunta que puede arruinar toda la entrevista. Debe conocer las dificultades temporales y de memoria de los algoritmos estándar de memoria, y el resto, para poder generar y entrenar rápidamente para hacer esto para cada problema a resolver. El teorema maestro es útil para determinar la complejidad de los problemas recursivos .

En inglés por favor


La herramienta obvia que necesita para una entrevista es el inglés. El enfoque de su estudio no es el tema de nuestra conversación; solo quiero detenerme un poco en cómo practicarlo en la práctica en condiciones de combate. El hecho es que analizar una tarea sola no reproduce exactamente la entrevista. Porque, entre otras cosas, debe explicar su línea de pensamiento en inglés y hacerlo en paralelo con la escritura del código, y en algunos casos incluso sin él. Por lo tanto, será ideal encontrar una pareja. Puede ser un amigo que también se está preparando para una entrevista, puede ser un mitap especial ( ejemplo de Moscú ), o puede ser una persona aleatoria en uno de los sitios ( uno , dos) No utilicé los recursos del último tipo, pero puedes leer cómo funciona esto, por ejemplo, en este artículo .

Etapa a tiempo completo


Ahora esta etapa se ha convertido en línea debido al coronavirus. Parece que no debería haber ninguna diferencia, y las empresas también pueden ahorrar dinero. Pero me sorprendió descubrir que en el formato en línea las entrevistas parecían ser más lentas y estos 5-10 minutos a menudo resultaron ser críticos para mí. Espero que pronto las compañías se adapten y den más tiempo, o volvamos al formato de tiempo completo nuevamente.

Pizarron


¿Recuerdas cómo me familiaricé con las herramientas para la edición de código en línea para la primera etapa? En las entrevistas a tiempo completo, a menudo se usa una pizarra. Compré su casa para prepararse para la etapa de tiempo completo. El efecto fue más fuerte de lo que esperaba. Antes de eso, tenía miedo del tablero como una pizarra en blanco e incluso en el trabajo prefería evitarlo. Pero ahora, cuando me acostumbré, descubrí lo conveniente que es para las entrevistas:

  • puede solucionar la decisión sin dolor (en comparación con el papel);
  • fácil de dibujar una imagen;
  • conveniente para pintar un ejemplo;
  • más rápido y más cómodo que escribir en un teclado al que no está acostumbrado (si en el caso de una alternativa, sugieren codificar la solución en la computadora portátil provista).

Diseño de sistemas


Quizás este es un tipo de entrevista para la cual no existe un "camino real". Cabe señalar que antes de eso no tenía experiencia en el diseño de sistemas distribuidos. Hay mucha menos información sobre la preparación para una entrevista de diseño del sistema que sobre una entrevista algorítmica. Esto se ve agravado por el hecho de que las personas que publican análisis de tales problemas a menudo no tienen experiencia relevante. Sin embargo, inspirado por los patrones para la entrevista algorítmica, comencé a buscar algo similar y encontré un curso pagoeso parecía simple y efectivo ... hasta la primera entrevista, donde me di cuenta de que era muy superficial. Ni el proxy inverso ni la red de entrega de contenido, sobre lo que mis entrevistadores querían escuchar, se discutieron allí. Suficiente de él solo para el "grado C". Esto, por un lado, ayudó, hizo posible obtener una oferta, siempre que todas las otras partes se completaran bien. Por otro lado, redujo el nivel de la posición propuesta, ya que esta etapa es importante para evaluar la "antigüedad" del candidato. Bueno, dado que todas las sesiones de la etapa de tiempo completo se resumen, es mejor no perder puntos aquí, simplemente pueden no ser suficientes para un resultado positivo.

Durante el entrenamiento adicional, finalmente encontré un gran recurso gratuito. También es bastante corto: se puede leer en unas pocas horas, pero hay enlaces a cada parte para profundizar el material. Esta es una estrategia excelente, independientemente de la cantidad de tiempo disponible: puede comenzar con una breve descripción general y luego estudiar con más detalle.

Aprendí sobre esta selección del github de una carta con materiales de capacitación que me envió un reclutador. Esta es una fuente valiosa que no debe ser olvidada. Algunos de los recursos enviados pueden ser mejores que colecciones de artículos como este.

Entrevista conductual


Otro tipo de entrevista, que puede ser una sesión separada, o además de otras, es una entrevista conductual. Decidí prepararme para ello, porque a veces es difícil encontrar una situación adecuada o responder a una pregunta, y el entrevistador puede interpretar el problema como un intento de ocultar algo. Mi entrenamiento tomó muy poco tiempo y debería ser suficiente por mucho tiempo. Amazon tomó los principios como muestracomo las más numerosas y pintadas en cada principio 2-3 situaciones desde mi experiencia. ¿Porque tanto? El hecho es que diferentes entrevistadores pueden hacer la misma pregunta en el marco de una etapa en persona y no será muy bueno si todo se reduce a un proyecto. O, por el contrario, harán varias preguntas, para las cuales el mismo caso sirve como ejemplo. Para simplificar las respuestas, también identifiqué elementos clave para cada situación:

  • dificultades;
  • lo que no funcionó (y qué conclusiones saqué);
  • qué te gustó;
  • cómo me mostré a mí mismo;
  • conflictos

A menudo es difícil delinear rápidamente una situación para un entrevistador sin perder detalles importantes. El desglose de la narrativa de acuerdo con la técnica STAR ayudará a clara y secuencialmente : situación - tarea - acción - resultado. En esta parte, es importante no abusar de la palabra "nosotros", debe ser una cantidad mínima. Hable sobre lo que hizo, sin subestimar su contribución.

Aquí pueden preguntarle por qué quiere trabajar en nuestra empresa. Respondí esta pregunta de antemano, gracias a lo cual, mis entrevistadores quedaron satisfechos con los argumentos.

Cuando la etapa de tiempo completo no es la última


Como mencioné , algunas compañías organizan una entrevista con el equipo como una etapa separada. Pero puede que no sea definitivo. En un puesto en las oficinas europeas de Google, le sigue un comité de contratación, una reunión de expertos que determina si un candidato coincide con el puesto seleccionado. El papel principal lo desempeñan, por supuesto, los comentarios de los entrevistadores. Pero la etapa en el sitio rara vez es posible pasar perfectamente, y aquí entran en juego detalles adicionales. Las recomendaciones de los empleados existentes también son una ventaja, y un reclutador puede solicitar enlaces a los perfiles de Github y Topcoder / Codeforces / Leetcode. El comité de contratación está lejos de ser una etapa formal, el porcentaje de rechazos aquí puede ser comparable a la etapa de tiempo completo, en casos excepcionales pueden programar una entrevista adicional.

PD


Una vez tuve una entrevista, para la cual me preparé para un tiempo largo y difícil. Hice clic en tareas como loco, escribí rápidamente el código y me sentí entusiasmado. La parte técnica me pareció muy fácil, y terminé la llamada con total certeza de mi pasaje: "Si no puedo pasar ahora, no sé qué más necesitan". No había nadie más feliz que yo, hasta que volví a mi decisión y encontré un error. Durante las siguientes 48 horas, esperé una revelación que no llegó, y realmente pasé. Entonces me di cuenta de que los entrevistadores también están equivocados, y la confianza ayuda.

Referencias


  1. Los patrones de resolución de problemas más comunes: revisión gratuita y curso pagado
  2. Programación dinámica de patrones de resolución de problemas
  3. Tareas de video de Tushar Roy
  4. Fórmula para calcular la complejidad de los algoritmos recursivos.
  5. Entrevistas de trabajo entre pares: uno y dos 
  6. Recursos para prepararse para una entrevista de trabajo de diseño del sistema: curso gratuito y pago 
  7. Curso algorítmico de Sedgwick sobre Coursera: https://www.coursera.org/learn/algorithms-part1 y https://www.coursera.org/learn/algorithms-part2
  8. Principios de liderazgo de Amazon
  9. Técnica STAR
  10. Más sobre el tema: búsqueda de empleo en FAANG y preparación exitosa en Google

All Articles