Cómo prepararse para una entrevista en Google y no pasarla. Dos veces



El título del artículo parece un fracaso épico, pero de hecho, no todo está tan claro. Y en general, esta historia terminó de manera muy positiva, aunque no en Google. Pero este es un tema para otro artículo. En el mismo artículo, hablaré sobre tres cosas: cómo fue mi proceso de preparación, cómo fueron las entrevistas en Google y por qué, en mi opinión, no todo está tan claro como parece.

Como empezó todo


Una fría noche de invierno chipriota, de repente tuve la idea de que mi conocimiento de la informática clásica está muy lejos de ser el promedio, y hay que hacer algo con esto. Si, por cierto, alguien más no ha leído por qué la noche es chipriota y fría, entonces puede averiguarlo aquí . Después de pensarlo un poco, se decidió comenzar a tomar un curso en línea sobre algoritmos y estructuras de datos. Escuché de un ex colega sobre el curso de Robert Sedgewick sobre Coursera. El curso consta de dos partes ( parte 1 y parte 2 ). Si los enlaces cambian repentinamente, siempre puedes buscar en Google por el nombre del autor. Cada parte lleva 6 semanas. Las conferencias se dan al comienzo de la semana, y aún se necesitan ejercicios durante la semana. La primera parte del curso cubre las estructuras básicas de datos, los principales tipos de clasificación y la complejidad de los algoritmos. La segunda parte ya está más avanzada, comenzando con gráficos y terminando con cosas como Programación lineal e Intractabilidad. Después de pensar en todo lo anterior, llegué a la conclusión de que esto es exactamente lo que necesito. Aquí, por cierto, un lector curioso puede preguntar qué tiene que ver Google con él. Y de hecho, hasta ese momento no tuvo nada que ver con eso. Pero necesitaba un objetivo, ya que es un poco difícil hacer 12 semanas por la noche sin un objetivo. ¿Y cuál podría ser el propósito de adquirir nuevos conocimientos? Por supuesto, su aplicación en la práctica. En la vida cotidiana, esto es bastante problemático, pero en una entrevista en una gran empresa fácilmente. Un rápido google mostró que Google (disculpe por la tautología) es una de las compañías más grandes de Europa (y consideré a Europa), en la cual se realizan tales entrevistas. A saber, su oficina está en Zurich, Suiza. Así que está decidido: estudiamos y buscamos una entrevista en Google.

Preparación de la primera carrera


Pasaron 12 semanas inadvertidas y terminé los dos cursos. Mis impresiones sobre los cursos son más que positivas, y puedo recomendarlas a todos los interesados. Me gustaron los cursos por las siguientes razones:

  • El profesor habla un inglés razonablemente claro
  • El material está bien estructurado.
  • Presentaciones magníficas que muestran el interior de cada algoritmo.
  • Selección competente de material
  • Ejercicios interesantes
  • Los ejercicios se verifican automáticamente en el sitio, luego de lo cual se crea un informe

Mi trabajo en los cursos generalmente fue el siguiente. Durante 1-2 días escuché conferencias. Luego pasó una prueba rápida para conocer el material. El resto de la semana hizo el ejercicio en varias iteraciones. Después de la primera vez que obtuve mi 30-70%, las siguientes llevaron el resultado al 97-100%. El ejercicio generalmente consistía en la implementación de algún algoritmo, por ejemplo, Tallado de costura o bzip .

Después de completar el curso, me di cuenta de que mucho conocimiento es mucha tristeza. Si antes simplemente sabía que no sabía nada, ahora comencé a darme cuenta de que era yo quien no sabía.

Como todavía era solo el mes de mayo y había planeado una entrevista para el otoño, decidí continuar mi educación. Después de ver los requisitos para la vacante, se decidió ir en paralelo en dos direcciones: continuar estudiando algoritmos y tomar un curso básico sobre aprendizaje automático. Para el primer objetivo, decidí cambiar de cursos a un libro y elegí el monumental trabajo de Steven Skiena "Algoritmos. Guía de desarrollo ”(El manual de diseño de algoritmos). No tan monumental como el de Knut, pero aún así. Para el segundo objetivo, nuevamente fui a Coursera y me inscribí en el curso Andrew Ng Machine Learning .

Pasaron otros 3 meses y terminé el curso y el libro.

Comencemos con el libro. La lectura resultó ser bastante interesante, aunque no fácil. En principio, recomendaría el libro, pero no me gusta de inmediato. En general, el libro ofrece un análisis más profundo de lo que aprendí en los cursos. Además, descubrí (desde un punto de vista formal) cosas como la heurística y la programación dinámica. Naturalmente, solía usarlos antes, pero no sabía cómo se llamaban. También en el libro hay una cierta cantidad de historias de la vida del autor (War Story), que diluyen un poco la presentación académica. Por cierto, se puede omitir la segunda mitad del libro, hay más bien una descripción de los problemas existentes y los métodos para resolverlos. Es útil si se aplica regularmente en la práctica, de lo contrario se olvidará de inmediato.

El curso me ha más que complacido. El autor conoce claramente su trabajo y cuenta historias interesantes. Además, recordaba bastante de la universidad, algebra lineal y los conceptos básicos de las redes neuronales, por lo que no experimenté ninguna dificultad en particular. La estructura del curso es bastante estándar. El curso se divide en semanas. Cada semana, las clases se mezclan primero con pruebas cortas. Después de las conferencias, se da la tarea, que debe hacerse, enviarse y se comprobará automáticamente. En resumen, la lista de cursos es la siguiente:
- función de costo
- regresión lineal
- pendiente de gradiente
- función de escala
- ecuación normal
- regresión logística
- clasificación multiclase (uno frente a todos)
- redes neuronales
- propagación hacia atrás
- regularización
- sesgo / varianza
- curvas de aprendizaje
- métricas de error (precisión, recuperación, F1)
- Máquinas de vectores de soporte (clasificación de gran margen)
- K-significa
- Análisis de componentes principales
- detección de anomalías
- filtrado colaborativo (sistema de recomendación)
- descensos estocásticos, mini-lote, gradiente de lotes
- aprendizaje en línea
- mapa reducir
- análisis de techo
Después de completar el curso, hubo una comprensión de todos estos temas. Después de 2 años, casi todo fue olvidado naturalmente. Se lo recomiendo a aquellos que no están familiarizados con el aprendizaje automático y desean obtener una buena comprensión de las cosas básicas para seguir adelante.

Primera carrera


Ya era septiembre y era hora de pensar en una entrevista. Dado que enviar a través del sitio es bastante desastroso, comencé a buscar amigos que trabajen en Google. La elección recayó en datacompboy , ya que era la única que conocía directamente (aunque no personalmente). Él acordó transferir mi currículum, y pronto recibí una carta del reclutador ofreciéndome reservar un espacio en su calendario para la primera conversación. Después de un par de días, se realizó la llamada. Intentamos comunicarnos a través de Hangouts, pero la calidad era terrible, así que cambiamos al teléfono. Primero, discutieron rápidamente el estándar de cómo, por qué y por qué, y luego cambiaron al examen técnico. Consistió en una docena de preguntas en el espíritu de "cuál es la complejidad de insertar en un mapa hash", "qué árboles equilibrados conoces". No es difícil si hay un conocimiento básico de estas cosas. La proyección salió bien y, según los resultados, decidió organizar la primera entrevista en una semana.

La entrevista también fue a través de Hangouts. Primero, hablaron de mí durante unos 5 minutos, luego pasaron al rompecabezas. La tarea estaba en los gráficos. Rápidamente me di cuenta de qué hacer, pero elegí el algoritmo incorrecto. Cuando comencé a escribir código, me di cuenta de esto y cambié a otra opción, que agregué. El entrevistador hizo varias preguntas sobre la complejidad del algoritmo, preguntó si podría ser más rápido. De alguna manera me emboté y no pude. En este momento, sucedió y nos despedimos. Luego, después de unos 10 minutos, caí en la cuenta de que en lugar del algoritmo Dijkstra que usé, sería posible utilizar la búsqueda de amplitud primero específicamente en esta tarea, y eso sería más rápido. Después de un tiempo, el reclutador llamó y dijo que la entrevista en su conjunto salió bien y que se debería concertar una más. Acordado otra semana después.

Las cosas empeoraron esta vez. Si por primera vez el entrevistador fue amable y sociable, esta vez es algo sombrío. No pude resolver el problema de inmediato, aunque las ideas que di, en principio, podrían conducir a su solución. Como resultado, después de algunos consejos del entrevistador, tomé una decisión. Esta vez resultó ser una búsqueda de amplitud, con solo unos pocos puntos. Escribí las decisiones, dentro del límite de tiempo, pero olvidé los casos límite. Después de un tiempo, el reclutador llamó y dijo que esta vez el entrevistador no estaba satisfecho, porque en su opinión necesitaba demasiados consejos (3 o 4 piezas) y constantemente cambiaba el código mientras escribía. Con base en los resultados de dos entrevistas, se decidió no ir más allá, sino posponer la próxima entrevista por un año, si tengo ese deseo. Para sim y se despidió.

Y saqué varias conclusiones sobre esta historia:

  • La teoría es buena, pero debes navegarla rápidamente
  • Una teoría sin práctica no ayudará. Es necesario resolver problemas y llevar la escritura de código al automatismo.
  • Mucho depende del entrevistador. Y no hay nada que hacer.

Preparación para el segundo enfoque.


Después de pensar en la situación, decidí volver a intentarlo en un año. Y editó ligeramente el objetivo. Si antes el objetivo principal era estudiar, y la entrevista en Google era como una zanahoria distante, ahora pasar la entrevista era el objetivo, y estudiar era un medio.
Entonces, se desarrolló un nuevo plan, que incluía los siguientes elementos:

  • Continúa estudiando teoría leyendo libros y artículos.
  • Resolver problemas algorítmicos en la cantidad de 500-1000 piezas.
  • Continúa estudiando teoría viendo un video.
  • Continuar estudiando teoría a través de cursos.
  • Explore la experiencia de otras personas entrevistando en Google.

El plan fue completado por mí en un año. A continuación, describiré qué hice exactamente para cada uno de los puntos.

Libros y articulos


Ni siquiera recuerdo la cantidad de artículos que leí, los leí tanto en ruso como en inglés. Probablemente este resultó ser el sitio más útil. Aquí hay una descripción de una gran cantidad de algoritmos interesantes con ejemplos de código.

Leí 5 libros: Algorithms, 4th edition (Sedgewick, Wayne), Introduction to Algorithms 3rd Edition (Cormen, Leiserson, Rivest, Stein), Cracking the Coding Interview 4th edition (Gayle Laakmann), Programming Interviews Exposed 2nd edition (Mongan, Suojanen , Giguere), Elementos de entrevistas de programación (Aziz, Lee, Prakash). Se pueden dividir en 2 categorías. El primer libro incluye Sedgwick y Cormen. Esta es una teoria. El resto es preparación para la entrevista. Sedgwick en el libro cuenta lo mismo que en sus cursos. Solo por escrito. Tiene poco sentido leer atentamente si ha tomado el curso, pero debe pasarlo por alto de todos modos. Si no viste el curso, entonces tiene sentido leer. Korman me pareció demasiado aburrido. Él dominaba honestamente con dificultad. Solo sacó el teorema maestro , y algunos rara vez usaron estructuras de datos (montón de Fibonacci, árbol de Van Emde Boas, montón de radix).

Vale la pena leer al menos uno para preparar un libro para una entrevista. Todos se basan en aproximadamente el mismo principio. Describen el proceso de entrevistas en grandes empresas de tecnología, dan cosas básicas de informática, tareas para estas cosas básicas, resuelven problemas y analizan soluciones. De los tres, probablemente recomendaría Cracking the Coding Interview como la principal, y el resto según lo deseado.

Tareas Algorítmicas


Este fue probablemente el punto de entrenamiento más interesante. Por supuesto, puedes sentarte y resolver problemas estúpidamente. Hay muchos sitios diferentes para esto. Utilicé principalmente tres: Hackerrank , CodeChef y LeetCode . En CodeChef, las tareas se desglosan por complejidad, pero no por tema. En Hackerrank, tanto en complejidad como en tema.

Pero como descubrí de inmediato, hay una manera más interesante. Y estas son competencias (desafíos de programación o concursos de programación). Los tres sitios los proporcionan. Es cierto que hay un problema con LeetCode, una zona horaria incómoda. Por lo tanto, no participé en este sitio. Hackerrank y CodeChef ofrecen una gran cantidad de competiciones diferentes, con una duración de 1 hora a 10 días. Los diferentes formatos tienen reglas diferentes, bueno, sí, de esto se puede hablar durante mucho tiempo. El punto principal por el cual la competencia es buena es la introducción de un elemento competitivo (y nuevamente tautológico) en el proceso de aprendizaje.

En total, participé en 37 competiciones en Hackerrank. De estos, 32 fueron calificados y 5 fueron patrocinados (incluso recibí $ 25 en uno de ellos) o por fan. En la calificación, ingresé al 4% superior 10 veces, 11 veces al 12% superior y 5 veces al 25% superior. Los mejores resultados fueron 27/1459 en las 3 horas y 22/9721 en las semanales.

Me cambié a CodeChef cuando las competiciones eran menos frecuentes en Hackerrank. En total, logré participar en 5 competiciones. El mejor resultado fue 426/5019 en una competencia de diez días.

En total, en las competiciones y así, resolví un poco más de 1000 problemas, que encajan en el plan. Ahora, desafortunadamente, no hay tiempo libre para continuar con la actividad competitiva, ni hay una meta para la cual podamos atribuir el tiempo no libre. Pero fue divertido. Recomiendo a aquellos que estén interesados ​​en encontrar personas de ideas afines. Juntos o en grupo es mucho más interesante. Me divertí mucho con este amigo, así que tal vez salió muy bien.

Ver video


Después de leer el libro de Skien, en principio, me interesé en lo que estaba haciendo. Al igual que Sedgwick, es profesor en la universidad. En este sentido, en la red puedes encontrar videos de sus cursos. Decidí tomar un curso COMP300E - Desafíos de programación - 2009 HKUST . No diré que realmente me gustó. En primer lugar, la calidad del video no es muy buena. En segundo lugar, no traté de resolver yo mismo los problemas tratados en el curso. Entonces, la participación no fue muy alta.
Además, en el proceso de resolución de problemas, tratando de encontrar el algoritmo correcto, me encontré con un video de Tushar Roy. Trabajó en Amazon, y ahora trabaja en Apple. Como más tarde descubrí por mí mismo, tiene un canal de YouTube donde publica análisis de varios algoritmos. Al momento de escribir, el canal contiene 103 videos. Y debo decir que el análisis en su ejecución se hace muy bien. Traté de ver a otros autores, pero de alguna manera no funcionó. Así que definitivamente recomiendo este canal para ver.

Pasando cursos


Entonces no hice nada especial. Vi un video del desarrollador de Android Nanodegree de Google y tomé un curso de ITMO Cómo ganar competencias de codificación: secretos de campeones . Nanodegree está completamente imaginado, aunque naturalmente no aprendí nada nuevo a partir de ahí. El curso de ITMO en términos de teoría está un poco arrugado, pero las tareas fueron interesantes. No recomendaría comenzar con él, pero en principio se dedicó el tiempo por un buen motivo.

Explore las experiencias de otras personas


Por supuesto, muchas personas intentaron llegar a Google. Alguien golpeó, alguien no. Algunos escribieron artículos sobre esto. De cosas interesantes, probablemente mencionaré esta y esta . En el primer caso, una persona ha preparado una lista de lo que necesita aprender para convertirse en ingeniero de software y acceder a Google. Terminó en Amazon, pero esto no es tan importante. El segundo manual fue escrito por un ingeniero de Google, Larisa Agarkova ( Larrr ). Además de este documento, también puedes leer su blog .

Tiene sentido leer los comentarios sobre las entrevistas de Glassdoor. Todos son más o menos similares, pero se puede obtener alguna información útil.

No proporcionaré enlaces a otros artículos pequeños, usted mismo puede encontrarlos en Google muy bien.

Segunda carrera


Y ahora ha pasado el año. Resultó estar muy saturado en términos de estudio. Pero para la nueva caída se me ocurrió un conocimiento teórico mucho más profundo y habilidades prácticas. Quedaban algunas semanas más antes de la fecha límite para el año establecido para , cuando una carta de un reclutador de Google llegó por correo preguntándome si todavía tenía ganas de trabajar para Google y si hablar con él. Naturalmente, no me opuse. Aceptó llamar por teléfono en una semana. También me pidieron un currículum actualizado, al que agregué una breve descripción de lo que hice durante el año en el trabajo y, en principio.

Después de hablar de por vida, decidieron que en una semana habría una entrevista de Hangouts, como el año pasado. Pasó una semana, llegó el momento de una entrevista, pero el entrevistador no apareció. Pasaron 10 minutos, ya estaba empezando a ponerme nervioso, cuando de repente alguien irrumpió en el chat. Al final resultó que un poco más tarde, mi entrevistador por alguna razón no pudo aparecer y se le encontró urgentemente un reemplazo. El hombre no estaba preparado tanto en términos de configuración de la computadora como en términos de la realización de entrevistas. Pero entonces todo salió bien. Rápidamente resolví el problema, describí dónde hay trucos, cómo solucionarlos. Discutimos varias opciones diferentes para el problema, la complejidad del algoritmo. Luego hablaron durante otros 5 minutos, el ingeniero contó sus impresiones sobre su trabajo en Munich (no vieron un reemplazo urgente en Zurich), y se separaron.

El mismo día, un reclutador me contactó y dijo que la entrevista fue excelente y que están listos para invitarme a una entrevista en la oficina. Al día siguiente, llamaron a través de Hangouts y discutieron los detalles. Como necesitaba hacer una visa, decidimos programar una entrevista en un mes.

Mientras preparaba los documentos, en el camino, discutí con el reclutador la próxima entrevista. Una entrevista estándar de Google consta de 4 algoritmos y un diseño de sistema. Pero, desde que conseguí un trabajo como desarrollador de Android, me dijeron que parte de la entrevista será con detalles específicos de Android. Qué exactamente y cuáles serán los detalles del reclutador que no pude evitar. Según tengo entendido, se introdujo hace relativamente poco y él mismo no estaba muy actualizado. También me inscribí en dos sesiones de capacitación: cómo pasar por una entrevista algorítmica y cómo pasar por una entrevista de Diseño del sistema. Las sesiones fueron de mediana utilidad. Allí, tampoco, nadie podría decirme qué preguntan los desarrolladores de Android. Por lo tanto, mi preparación este mes se redujo a lo siguiente:

  • Comprar una pizarra y escribir de memoria de 2 a 3 docenas de los algoritmos más populares. 3-5 piezas todos los días. Total cada uno fue escrito varias veces.
  • Actualización de diversa información de Android que no uso todos los días
  • Mirando algunos videos sobre Big Scale y todo eso

Como dije, paralelamente estaba haciendo documentos para el viaje. Para comenzar, me pidieron datos para hacer una carta de invitación. Luego intenté durante mucho tiempo averiguar quién en Chipre otorga visas a Suiza, ya que la embajada suiza no hace esto. Al final resultó que, este es el consulado de Austria. Llamé e hice una cita. Solicitaron un paquete de documentos, pero nada particularmente interesante. Una foto, pasaporte, permiso de residencia, un montón de certificados diferentes y, naturalmente, una carta de invitación. La carta, mientras tanto, no llegó. Como resultado, fui con la impresión habitual y realmente funcionó. 3, FedEx . FedEx'e , , , (5 , ). , , . , . , . , , .

, . . — . . , , . ( ) Google. Google . . - , «» Google. . - , , . 3 , 2 .


Android. . , . , . UI . , . RxJava, , . , , Android . . , Activity, . . 30-50 , Android , «, , ». - 3 . Es decir - , .


Esta vez la entrevista fue sobre algoritmos. Y había dos entrevistadores. Uno es en realidad un entrevistador, y el segundo es un joven Padawan (entrevistador en la sombra). Era necesario crear una estructura de datos con ciertas propiedades. Primero, como siempre, discutimos el problema. Hice diferentes preguntas, respondió el entrevistador. Después de un tiempo, me pidieron que escribiera varios métodos de la estructura inventada en la pizarra. Esta vez, más o menos tuvo éxito, aunque con algunos errores menores, que corregí con la ayuda del entrevistador.

Entrevista número tres


System Design, Android. . , , . , . Job Scheduler . , , , . . , , . . . , . Android . .


, . Google . , . . , , , .


- . , , ( ) . . , . , 5-10 . .


Android . , ?
. . , , . . « », « », « Z». - , , , , . , . . .

, . , , , . . . Google . , . , . .

, . , «a bit below the bar». . , 2 , 2 , System Design . 3 , , . .

, , , . Google .

Conclusión


. , Google. Esto es triste , . , .

  • Durante un año y medio, aprendí muchas cosas relacionadas con el desarrollo de software.
  • Me dio mucho gusto participar en competencias de programación.
  • Fui por un par de días a Zurich. ¿Cuándo más voy a salir?
  • Obtuve una interesante experiencia de entrevista en una de las compañías de TI más grandes del mundo.

Por lo tanto, todo lo que sucedió durante el último año y medio puede considerarse simplemente capacitación o capacitación. Y los resultados de este entrenamiento se hicieron sentir. Mi idea de irme de Chipre estaba madura (por algunas razones familiares), pasé con éxito varias entrevistas con otra empresa conocida y después de 8 meses me mudé. Pero esta es una historia completamente diferente. , , Google , , 2 .

. IT, Google (Amazon, Microsoft, Apple ..). , - . , , . , , ( ) , , . , , . :)

Source: https://habr.com/ru/post/es419945/


All Articles