¿Cuál es la mejor manera de preparar una entrevista telefónica con Google (puesto de ingeniero de software)?

Actualmente, la mayoría de las veces hago entrevistas telefónicas en Google, porque mi laboratorio está lo suficientemente lejos del campus principal como para que sea demasiado complicado conducir hasta allí para las entrevistas presenciales. Aquí están las cosas que la mayoría de los candidatos podrían hacer mejor:

  1. Practicar problemas algorítmicos. La mayoría de las personas que entrevisto básicamente sólo saben cómo escribir bucles for y llamar a las API. Google no necesita gente que sólo escriba bucles for y llame a APIs. Google quiere personas que puedan resolver problemas reales, no que se dediquen a escribir código estándar. Cuando me entrevistaron en Google, pasé un mes trabajando en los problemas del libro de Gayle Laakmann, Cracking the Coding Interview. Y luego mi entrevista en Google fue divertida y fácil.
  2. Aprende los modismos de tu lenguaje elegido. Cuando veo a alguien escribiendo C++ o Python como si fuera C simple o pseudocódigo, pienso que se trata de alguien que no ha pasado suficiente tiempo programando para conocer realmente el lenguaje y su funcionamiento.
  3. Piensa realmente en cómo tu algoritmo lleva la cuenta de dónde se encuentra en el problema. Muchas veces sólo necesita un int o una lista para recordar lo que ha logrado hasta ahora. Pero muchas personas no entienden lo que están haciendo y que para utilizar la recursividad o múltiples hilos. O se confunden al tratar de iterar sobre dos estructuras de datos al mismo tiempo, porque quieren almacenar su contexto en una variable de bucle en lugar de un iterador.
  4. Haga preguntas para asegurarse de que usted y el entrevistador están en la misma página. Está perfectamente bien hacer preguntas aclaratorias.
  5. Me gusta mucho cuando el candidato se interesa por el problema en el que estamos trabajando, como un puzzle, y habla de cuáles son las dificultades o menciona algo similar en lo que ha trabajado. Demuestra que tiene pasión por el trabajo. Realmente odio la actitud de que esto es sólo una estúpida prueba aleatoria que tienen que realizar para conseguir un trabajo.
  6. ¡Practica más problemas algorítmicos! Esto no es para ver si has memorizado alguna trivialidad estúpida, como la implementación del árbol rojo-negro. Se trata de desarrollar tu habilidad para reconocer la estructura subyacente del problema y utilizar las herramientas que ya conoces para resolverlo.
  7. Entender la complejidad temporal y espacial. Cosas de la notación Big-O. Google trabaja a escala masiva. La diferencia entre una solución O(NlogN) y una solución O(N^2) puede ser de millones de dólares, cuando se trata de petabytes de datos.
  8. Sólo relájate y diviértete. La entrevista no es realmente tan difícil. Trátala como si ya estuvieras trabajando en Google y estuvieras tratando de resolver un puzzle con tu amigo.

Esta es la pregunta que tengo en la pantalla de mi teléfono: Tienes una escalera con N escalones, y puedes tomar cualquier mezcla de escalones simples y dobles para llegar a la cima. ¿De cuántas maneras diferentes puedes subir la escalera? [Esta es una pregunta prohibida ahora]

Si hay cuatro peldaños en la escalera, puedes hacer 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2.

Es un puzzle muy divertido. Hay muchas formas diferentes de resolverlo. Hay soluciones recursivas. Hay soluciones combinatorias. Hay soluciones algebraicas. Hay soluciones O(2^N). Hay soluciones O(N^2). Hay soluciones O(N). Incluso conozco una solución O(logN) y una solución O(1).

Tuve una experiencia realmente divertida y rápida con la pantalla de mi teléfono. Bromeamos y hablamos de por qué el problema era complicado. Después de que me contrataran, incluso hablé con mi entrevistador unas cuantas veces más sobre las nuevas soluciones que había encontrado.