¿Cuáles son las habilidades que Google y otras compañías de alto nivel buscan en un CV antes de llamar a un candidato?

No escribiré mucho aquí, solo copiaré un correo electrónico que recibí cuando decidieron entrevistarme.

Una NOTA para los lectores: Esta llamada fue para chicos de SDET, y no es algo genérico.

El correo dice lo siguiente:

Hola arka

¡He incluido algunos consejos para entrevistar a continuación para su opinión! Sé que es mucho para leer, ¡pero quería darte los materiales para prepararte! Espero que esta información te sea útil.

Solo 1 lenguaje de codificación es suficiente, no necesita conocer todos los idiomas OO.

——————————
Consejos para la entrevista de Google:
¡Aquí hay algunos consejos y sugerencias para ayudarlo a prepararse para el éxito! ¡Los que estudian tienden a hacerlo MUCHO mejor en sus entrevistas!

1) Planifique con anticipación:
Los ingenieros de Google que lo entrevistarán solo tienen un tiempo limitado para sus proyectos, ¡así que reserve tiempo en su agenda también! Esto también lo ayuda a relajarse y desempeñarse mejor en la entrevista. Tenga a mano un bolígrafo y papel en caso de que se le pida que escriba algunas cosas.

2) Qué esperar:
Entrevista técnica de hasta 45 minutos con un ingeniero de software de Google.
El entrevistador estará interesado en su conocimiento de los principios de la informática (estructuras de datos, algoritmos, etc.) y cómo se pueden utilizar en sus soluciones.

3) Preguntas de la entrevista:
Los temas de la entrevista pueden cubrir cualquier cosa en su CV (¡especialmente si ha declarado que es un experto!), Preguntas de codificación de pizarra, construcción y desarrollo de algoritmos complejos y análisis de sus características de rendimiento, problemas lógicos, diseño de sistemas y principios básicos de informática – tablas hash , pilas, matrices, etc. Los fundamentos de informática son requisitos previos para todos los roles de ingeniería en Google, independientemente de la antigüedad, debido a las complejidades y la escala global de los proyectos en los que terminaría participando.

4) Cómo tener éxito:
En Google, creemos en la colaboración y el intercambio de ideas. Lo más importante, necesitará más información del entrevistador para analizar y responder la pregunta en toda su extensión.
* Está bien cuestionar a su entrevistador.
* Cuando se le solicite que brinde una solución, primero defina y enmarque el problema tal como lo ve.
* Si no comprende, solicite ayuda o aclaraciones.
* Si necesita asumir algo, verifique verbalmente que sea una suposición correcta.
* Describa cómo quiere abordar la resolución de cada parte de la pregunta.
* Siempre hágale saber a su entrevistador lo que está pensando, ya que él / ella estará tan interesado en su proceso de pensamiento como su solución.
Además, si está atascado, pueden proporcionar pistas si saben lo que está haciendo.
* Finalmente, escuche, ¡no se pierda una pista si su entrevistador está tratando de ayudarlo!

5) ¿Qué busca Google ?:
“No estamos simplemente buscando ingenieros para resolver los problemas a los que ya conocen las respuestas; estamos interesados ​​en ingenieros que puedan resolver las respuestas a preguntas que no habían encontrado antes”.

Los entrevistadores analizarán tanto el enfoque de las preguntas como la respuesta:
* ¿El candidato escucha atentamente y comprende la pregunta?
* ¿Se hacen las preguntas correctas antes de continuar? (¡importante!)
* ¿Se utiliza la fuerza bruta para resolver un problema? (¡no está bien!)
* ¿Se asumen las cosas sin verificar primero? (¡no está bien!)
* ¿Se escuchan y se escuchan sugerencias?
* ¿El candidato es lento para comprender / resolver problemas? (¡no está bien!)
* ¿Le gusta al candidato encontrar múltiples soluciones antes de elegir la mejor?
* ¿Se buscan nuevas ideas y métodos para abordar un problema?
* ¿Es el candidato inventivo y flexible en sus soluciones y abierto a nuevas ideas?
* ¿Pueden las preguntas pasar a una resolución de problemas más compleja?

Google desea ver un código claro, eficiente y de muy alta calidad sin errores de escritura. Debido a que todos los ingenieros (en todos los niveles) colaboran a través de la base de código de Google, con un proceso de revisión de código eficiente, es esencial que cada ingeniero trabaje con el mismo alto nivel.

6) ¿Sigue leyendo …?

7) ¡Haz más preguntas !:
Asegúrese de tener una comprensión decente de Google como empresa, más allá de los principales productos de Google, descubra lo que hacemos aquí:
Empresa – Google O:
Google
Al final de la entrevista, la mayoría de los entrevistadores le preguntará si tiene alguna pregunta sobre la empresa, el entorno laboral, su experiencia, etc. Es inteligente tener algo preparado previamente para cada entrevista, pero no se preocupe demasiado si su la mente se queda en blanco.

Si tiene preguntas sobre el proceso de la entrevista, la remuneración o su desempeño, diríjalas a su reclutador.

8) Lectura adicional:
* Para comprender cómo funcionan los equipos de desarrollo de Google: desarrollo de software ágil
* Para saber más sobre los proyectos centrales de Google – Página en google.com
Si aún no ha leído los consejos de preparación técnica de Steve Yegge, consulte su blog:
Consigue ese trabajo en Google
* Debido al tamaño de los productos que vas a construir, es imperativo que te sientas cómodo con la notación O grande, aquí es donde repasar:
Gran notación

9) Consejos de preparación técnica !:
Las principales áreas de ingenieros de software deben prepararse para tener éxito en la entrevista en Google:

Complejidad del algoritmo: es bastante crítico que comprenda el análisis de complejidad big-O. Nuevamente, ejecute algunos problemas de práctica para obtener esto en la aplicación.

Clasificación: Sepa cómo ordenar. No hagas burbujas. Debe conocer los detalles de al menos un algoritmo de clasificación n * log (n), preferiblemente dos (por ejemplo, clasificación rápida y clasificación por fusión). La ordenación por fusión puede ser muy útil en situaciones en las que la clasificación rápida no es práctica, así que échale un vistazo.

Hashtables: posiblemente la estructura de datos más importante conocida por la humanidad. Absolutamente deberías saber cómo funcionan. Sea capaz de implementar uno usando solo matrices en su idioma favorito, en aproximadamente el espacio de una entrevista.

Árboles: saber acerca de los árboles; Algoritmos básicos de construcción, transversal y manipulación de árboles. Familiarícese con los árboles binarios, los árboles n-ary y los árboles trie. Estar familiarizado con al menos un tipo de
árbol binario equilibrado, ya sea un árbol rojo / negro, un árbol splay o un árbol AVL, y sepa cómo se implementa. Comprender los algoritmos de recorrido del árbol: BFS y DFS, y conocer la diferencia entre
orden, postorder y preorder.

Gráficos: los gráficos son realmente importantes en Google. Hay 3 formas básicas de representar un gráfico en la memoria (objetos y punteros, matriz y lista de adyacencia); familiarícese con cada representación y sus pros y contras. Debe conocer los algoritmos básicos de recorrido de gráficos:
búsqueda de amplitud y búsqueda de profundidad. Conozca su complejidad computacional, sus compensaciones y cómo implementarlos en código real.
Si tienes la oportunidad, trata de estudiar algoritmos más sofisticados, como Dijkstra y A *.

Otras estructuras de datos: debe estudiar tantas otras estructuras de datos y algoritmos como sea posible. Debe saber especialmente sobre las clases más famosas de problemas NP-completos, como el vendedor ambulante y el problema de la mochila, y poder reconocerlos cuando un entrevistador le pregunte disfrazado. Descubra lo que significa NP-complete.

Matemáticas: algunos entrevistadores hacen preguntas básicas de matemáticas discretas.
Esto es más frecuente en Google que en otras compañías porque estamos rodeados de problemas de conteo, problemas de probabilidad y otras situaciones de Discrete Math 101. Pase algún tiempo antes de la entrevista refrescando su memoria (o enseñándose) los elementos esenciales de la combinatoria y la probabilidad. Debería estar familiarizado con los problemas de n-choose-k y sus gustos: cuanto más, mejor.

Sistemas operativos: Conozca los procesos, hilos y problemas de concurrencia. Conozca las cerraduras y mutexes y semáforos y monitores y cómo funcionan. Conozca el punto muerto y el bloqueo en vivo y cómo evitarlos. Sepa qué recursos necesita un proceso y necesita un subproceso, y cómo funciona el cambio de contexto y cómo lo inicia el sistema operativo y el hardware subyacente. Conozca un poco sobre la programación. El mundo se está moviendo rápidamente hacia múltiples núcleos, así que conozca los fundamentos de las construcciones de concurrencia “modernas”.

Codificación: debe conocer al menos un lenguaje de programación realmente bueno, y preferiblemente debe ser C ++ o Java. C # también está bien, ya que es bastante similar a Java. Se espera que escriba un código en al menos algunas de sus entrevistas. Se espera que conozca una buena cantidad de detalles sobre su lenguaje de programación favorito.

10) Temas de muestra:
Codificación
Temas de muestra: construir / atravesar estructuras de datos, implementar rutinas del sistema, destilar grandes conjuntos de datos a valores únicos, transformar un conjunto de datos en otro.

Diseño / Análisis de Algoritmo
Temas de muestra: análisis big-O, clasificación y hashing, manejo de cantidades obscenamente grandes de datos. Consulte también los temas enumerados en “Codificación”.

Diseño de sistemas
Temas de muestra: conjuntos de características, interfaces, jerarquías de clases, diseño de un sistema bajo ciertas restricciones, simplicidad y robustez, compensaciones.

Discusión abierta
Temas de muestra: mayores desafíos enfrentados, mejores / peores diseños vistos, análisis de rendimiento y optimización, pruebas, ideas para mejorar los productos existentes.

Para practicar para su entrevista, puede visitar el sitio web www.topcoder.com. Si abre el widget “Arena” y luego va a las salas de práctica donde puede jugar con los problemas en la primera / segunda división como calentamiento. Otro gran sitio es projecteuler.net.

———————–
INFORMACIÓN SOBRE EL SET
¿Qué es un SET?
En Google, los ingenieros de software en prueba (SET) o el ingeniero de software en prueba desarrollan marcos de prueba y crean pruebas sólidas, escalables y efectivas. Los SET pasan la mayor parte de su tiempo codificando en C ++, Java o scripting en Python. Un SET es un ingeniero de software, un desarrollador principal, apasionado por la ingeniería de pruebas.

¿Cómo se realizan las pruebas de manera diferente en Google?
* Literalmente, dentro de los milisegundos de un registro de código, nuestro proceso de compilación seleccionará automáticamente las pruebas apropiadas para ejecutar en función del análisis de dependencia, ejecutará esas pruebas e informará los resultados.
* Al reducir la ventana de oportunidad para que el código incorrecto pase desapercibido, el tiempo de depuración general y el aislamiento de errores se reduce radicalmente. El resultado neto es que los equipos de ingeniería ya no dedican horas a la depuración de problemas de compilación y fallas de prueba.
* Los equipos de desarrollo escriben buenas pruebas porque se preocupan por los productos, pero también porque quieren pasar más tiempo escribiendo características y menos depurando.
* Los equipos de prueba se centran en abstracciones más altas, como identificar latencias, pruebas centradas en el sistema o en el cliente, y habilitar el proceso con herramientas.
* Los SET evitan convertirse en codependientes dentro de este sistema y generalmente no escriben pruebas unitarias u otras actividades que el desarrollador realiza mejor.

Más acerca de los SET
* Nuestros SET pasan tiempo desarrollando código para evitar errores. Google tiene un fuerte énfasis cultural en que los desarrolladores mejoren la calidad (es decir, pruebas unitarias, revisiones de código, revisiones de diseño, análisis de causa raíz). Queremos que nuestros ingenieros pasen su tiempo innovando, no reparando errores.
* Los SET permiten que los productos se inicien más rápido. Tienen gran influencia sobre los procesos internos y cómo los desarrolladores escriben el código.
* Una de las capacidades menos entendidas de Google es nuestro entorno informático distribuido masivo. Los grupos de prueba explotan esta infraestructura para hacer grandes cantidades de trabajo de manera muy rápida y elegante.
* Para alguien que quiere aprender y crecer como ingeniero, el acceso desinhibido a toda la base de código es una oportunidad única.

El área: Ingeniería
Los ingenieros de prueba de Google garantizan que el software de nuestra empresa funciona siempre para cada usuario mientras se escala a los niveles más altos. Abordamos enormes desafíos técnicos que empujan los límites de la informática. Nuestro equipo es una organización global y colaborativa que consta de ingenieros con los más altos niveles de profundidad técnica, habilidad de programación y pasión por la calidad.

El papel: ingeniero de software en prueba
Como ingeniero de software en prueba en nuestro equipo de ingeniería de prueba de Mountain View, examinará, validará y probará proyectos de desarrollo e implementación de software a gran escala, así como ayudará a diseñar y construir sistemas inteligentes que pueden explorar varios casos de uso y escenarios.

La gran variedad de productos de Google ofrece una increíble variedad de oportunidades para que pueda tener un gran impacto en la calidad del software visto por millones de personas en todo el mundo. Su responsabilidad principal como ingeniero de software en pruebas será trabajar con los equipos de desarrollo e ingeniería de pruebas para automatizar las pruebas, crear nuevos arneses de prueba, implementar nuevas herramientas de automatización y crear sistemas innovadores de pruebas automatizadas.

Las pruebas son al menos tan interesantes como el desarrollo
* ¿Te gusta la visión de Google del futuro de la información? Debería ver nuestra visión para el futuro de las pruebas. Google es el mejor campo de juego de los probadores con algunas de las herramientas e infraestructura más sofisticadas imaginables. Muchos de los aspectos aburridos y mundanos de las pruebas se han automatizado al olvido y los evaluadores de Google ahora se centran en los aspectos más difíciles e interesantes del software de pruebas. Imagine herramientas para visualizar la infraestructura interna de una aplicación, herramientas que proporcionan una pantalla de visualización de estilo de videojuego para la búsqueda de errores, herramientas que transforman las pruebas en un esfuerzo de redes sociales donde los evaluadores colaboran sin problemas y los casos de prueba se extraen de la nube a pedido. La visión del futuro de las pruebas que posee Google es amplia y cada probador es parte de ella, ya sea que alimenten la visión con sus innovaciones específicas o escriban las herramientas que la implementan.

Test es una organización separada en Google
* En la mayoría de las empresas, los evaluadores informan a su equipo de producto o al equipo de desarrollo. En muchos casos, esto crea una relación subordinada con los probadores en el extremo equivocado del espectro de subordinación. Este no es el caso en Google. Aquí, los evaluadores están en su propia división de Ingeniería de productividad. Nuestro trabajo es acelerar el desarrollo de productos ayudando a los desarrolladores a ayudarse a sí mismos. Nuestra tarea es hacer que los desarrolladores sean más efectivos para probar sus propios productos y, a menudo, los desarrolladores escriben más casos de prueba que los probadores. El desarrollo recluta activamente probadores para sus proyectos y debe trabajar para convencernos de que se toman en serio la calidad. Los equipos que no lo hagan no tendrán evaluadores en sus proyectos. El resultado son equipos de desarrollo que trabajan duro en la calidad y tratan a los evaluadores como socios valiosos.

Google y esas compañías siempre están en busca de candidatos que piensen fuera de la caja. No hay un conjunto fijo de pasos que seguirás y aterrizarás en Google. Pero aún así compartiré con ustedes lo que aprendí de mis amigos en Google.

  • No es necesario ser un “profesional” en todos los lenguajes de computadora. Como sabes que eres bueno en Python, trata de ser el mejor en el próximo 1 año. También debes ser muy bueno con “Algo stuffs”.
  • Comienza a participar y mejora tu rango en concursos de códigos en línea.
  • Participa en Google Code Jam.
  • Cree una cuenta en https://github.com/&nbsp ; y comenzar a contribuir a proyectos de código abierto. Su CV debe tener pocos proyectos a los que haya contribuido. Su experiencia laboral previa no contará más que su contribución en proyectos de código abierto, a menos que sea en una buena compañía orientada a productos. A los muchachos con años de experiencia en empresas orientadas al servicio, ninguna contribución de código abierto se les muestra las puertas incluso antes de ingresar al campus de Google.