Cómo me preparé para mi entrevista de Google

Todo ingeniero de software se esfuerza por impresionar a la gente con su destreza técnica. Los gigantes tecnológicos de este mundo son un gran lugar para trabajar para los técnicos que pueden brindar servicios a miles de millones de usuarios. En mi entrevista reciente, hubo varias rondas, recibí ofertas de Google y Amazon. En los últimos años, la comunidad en línea me ha ayudado mucho a prepararme para las entrevistas. En esta publicación, compartiré todo sobre mi camino para la entrevista y traeré de vuelta la contribución de la comunidad a mi aprendizaje.








Entrevista SWE



El proceso generalmente comienza con el reclutador armando una lista de candidatos potenciales. Luego, el candidato pasa por una evaluación inicial o evaluaciones en las que se determina si es adecuado para el trabajo. Una vez que esto está claro, se realiza una entrevista típica de SWE, que incluye los siguientes pasos:



  • Programación: de 3 a 5 rondas;

  • Diseño de sistemas - 1 ronda;

  • Principios de liderazgo - Ronda 1.



Me centraré en prepararme para el ciclo de codificación, ya que ocupa la mayor parte de la entrevista. Pero echaremos un vistazo rápido al diseño de sistemas y las habilidades de liderazgo en las siguientes secciones.



A. Programación



Los ingenieros de software a menudo se encuentran en situaciones difíciles, por ejemplo, trabajar con ambigüedad, requisitos poco claros, dividir tareas complejas en subtareas, manejar casos extremos, terminar el trabajo en un compromiso con compromisos, etc. La programación de entrevistas es una forma de tener una idea de estas habilidades.



En aras de la simplicidad, los pasos de programación se centran en resolver problemas utilizando estructuras de datos y algoritmos. Estas preguntas son generalmente complejas y proporcionan información valiosa sobre la capacidad analítica de un candidato.



Aprenda a resolver problemas utilizando algoritmos y estructuras de datos. Esta habilidad se adquiere con el tiempo, no hay atajos para ella; la única fórmula verdadera es la coherencia. Practique, practique y practique hasta que desarrolle su habilidad natural para resolver problemas.



Estrategia de preparación



1. Estimación del tiempo de preparación



La estimación del tiempo a menudo se ignora y no se considera necesaria. Sugiero calibrar qué tan bien estás resolviendo problemas con algoritmos y estructuras de datos. Examiné mis fortalezas y debilidades e hice una estimación aproximada del tiempo de preparación. Esta evaluación me ayudó a preparar mi mente para una meta a largo plazo (y a corto plazo) y me mantuvo motivado.



“Tómese el tiempo suficiente para prepararse. Siempre. Es mejor estar demasiado preparado que no suficientemente preparado **.


El tiempo total de preparación puede variar según su experiencia. En general, dividí los niveles de entrenamiento de la siguiente manera:



  • Un principiante puede escribir código cómodamente en al menos un lenguaje de programación. Carece de conocimientos básicos de DS y algoritmos. Dificultad para resolver problemas fáciles o para tomarse el tiempo.

  • Promedio. La persona conoce bien las estructuras de datos y los algoritmos. No hay problema con dificultad fácil. Puede resolver la mayoría de problemas de complejidad media. Lucha duro.

  • Avanzado. No hay problema con dificultad media. Capaz de resolver los problemas más complejos.



Antes de la entrevista, me coloqué en el nivel intermedio.





Estimación del tiempo de preparación



2. Plataformas en las que aprendes a programar



Practiqué principalmente programación con LeetCode , InterviewBit y GFG . Antes de la entrevista, resolví alrededor de 320 problemas de LeetCode, 80 InterviewBit y 30 preguntas de GFG.





Cómo se distribuyeron las tareas



Las tareas de dificultad media son muy importantes: la mayoría de las preguntas de la entrevista son de dificultad media. Resolver problemas de dificultad media te hará más rápido y aumentará tus habilidades de resolución de problemas.



Al principio, es importante comenzar con preguntas simples a medianas. Comience con tareas desafiantes tan pronto como sienta la confianza adecuada. Manténgase motivado si no puede resolver problemas difíciles. Es posible que lleve más tiempo del que esperaba trabajar y mejorar su solución. Siempre que me sentía abrumado, para aumentar mi motivación, volvía a las tareas fáciles.



Mantenga una mentalidad de crecimiento. Cada problema que no puede resolver es una oportunidad para aprender algo nuevo.



  • LeetCode: , . LeetCode — . . , LeetCode Premium; .

  • InterviewBit: . . , ( ). InterviewBit .

  • GFG: Usé esta plataforma para encontrar problemas y artículos sobre los conceptos básicos de algoritmos y estructuras de datos. Las explicaciones de los temas y las implementaciones son realmente buenas. El GFG también tiene un conjunto de tareas relacionadas con empresas y temas específicos.



No confié enteramente en ningún recurso. Todos me dieron nuevas ideas. Llevé un diario, ampliando constantemente mis conocimientos.



  • Especialización en algoritmos en Coursera : ¡Esta pista de Coursera es increíble! Hay 4 cursos en total, que cubren todos los temas básicos y varios avanzados de estructuras de datos y algoritmos. Genial para principiantes.

  • Youtube: . . ( , , THNLGf019nRo) — ! BackToBack SWE.

  • CTCI EPI:   . . , . .

  • CLRS:   , . , .



Por último, pero no menos importante, los artículos sobre BaseCS de Vaidehi Joshi . Escribe explicaciones intuitivas y sencillas sobre varios temas de algoritmos y estructuras de datos.



3. Inicie el temporizador



A medida que se reduce la duración de las entrevistas, es muy importante trabajar en cómo resolver los problemas. Por lo general, una entrevista de programación dura entre 45 y 50 minutos y se espera que el candidato resuelva dos problemas intermedios, uno difícil o uno fácil y uno difícil.



Incluso si pudo haber resuelto la pregunta original, pero pasó más tiempo, significa que no tiene suficiente tiempo para resolver la segunda.



Configuré un temporizador para contar el tiempo que tomó resolver problemas:



  • Tarea promedio: 20 minutos.

  • Tarea difícil: 40-45 minutos.



Los principiantes pueden ignorar el tiempo: para ellos, encontrar la solución adecuada es obviamente más importante.



4. Entrevista simulada



Antes de la entrevista real, pasé por muchas simulaciones. Una entrevista simulada puede resultar muy útil. El fracaso temprano en un entorno de prueba le brinda información útil. Le ayudará a detectar lagunas en su proceso de pensamiento. Intente corregir cada error y mejorar con cada entrevista falsa.



"Si pasa las simulaciones varias veces, tómelo como una buena señal".



Gratis:



  • Imitación en LeetCode .

  • [Esquema peer-to-peer gratuito ] Pramp .

  • [Peer-to-peer gratuito] InterviewBit .



Las entrevistas simuladas pagadas son beneficiosas. Por ejemplo, los comentarios posteriores a la entrevista brindan muchos detalles sobre lo que esperaba el reclutador.



  • [Pagado] ExpertMitra .

  • [Pagado] Mocki .

  • [Pagado] Entrevista técnica de prueba .



5. Prepare un plan de promoción



Hasta ahora, hemos hablado mucho sobre los distintos elementos de preparación. ¡Ahora intentemos poner todo junto y crear un plan de promoción! Mira una captura de pantalla de mi calendario un mes antes de la entrevista.





Calendario de preparación



He dividido toda la preparación en tareas. Establezca metas para cada día en las semanas (e incluso meses) antes de la entrevista. Esto me ayudó a evitar el caos y a no perderme en el camino hacia la meta.



  • Los días de semana, podría asignar algunas horas, porque estaba haciendo trabajo de oficina. He planeado la solución de problemas para este momento.

  • Leía teoría los fines de semana, cuando podía dedicarle mucho tiempo.

  • Más cerca de la entrevista, planeé imitaciones. En las últimas semanas, he reducido el número de sesiones de programación y me he centrado en leer el CTCI y el EPI.







Asignación de tiempo semanal



Sé que muchos de nosotros tenemos responsabilidades familiares y trabajos de tiempo completo. No todo y no siempre sale según lo planeado. Pero la idea es formar un hábito. Seguimiento de su progreso y lo que no se completó. Ajuste el horario hasta que encuentre uno adecuado.



B. Diseño de sistemas



Esta ronda pone a prueba las habilidades de diseño técnico. Se puede dividir en diseño de bajo nivel (LLD) y diseño de alto nivel (HLD). El conocimiento en esta área crece con la experiencia en la industria.



Intente adquirir conocimientos de conceptos como sistemas distribuidos, equilibrio de carga, protocolos de red, hashing consistente, teorema de CAP, replicación, fragmentación, etc.





C. Principios de liderazgo. Comportamiento



A diferencia de rondas anteriores, esta sección no es técnica. La empresa espera aprender más sobre el candidato con sus palabras. La empresa puede estar interesada en:

  • Personalidad del candidato.

  • Proyectos previos y experiencia laboral.

  • ¿Qué has hecho en situaciones difíciles?

  • ¿Cómo respondiste a las críticas buenas y malas?



Lo principal es ser transparente y ser tú mismo.

Destacaré el apartado mencionado en el CTCI sobre el modelo SAR (situación, acción, resultado). La idea es identificar discusiones importantes mediante la distribución de historias del trabajo anterior. Aquí hay un mapa de las habilidades de la comunidad (también conocidas como habilidades sociales) para que pueda aprender más sobre ellas.





SAR





  • LeetCode Codeforces. , , .

  • «Shuffle» LeetCode. . .

  • IDE, Google Docs, CollabEdit, .

  • . , .

  • , . , , . , .





Q1. ¿En qué temas de estructuras de datos y algoritmos debería centrarse? ¿A qué recursos se vinculó?

Los recursos de aprendizaje mencionados anteriormente serán útiles. No agregué un recurso separado para cada tema, esto hará que la publicación sea demasiado grande.



Temas sin ningún orden en particular:

Listas enlazadas, Manipulaciones de bits, Pilas y colas, Búsqueda binaria, Montones, Algoritmos codiciosos, Programación dinámica, Vectores / ArrayList, Notación Big O, Tiempo y espacio, Clasificaciones, Punteros, Windows TCP / IP, Sistemas separados conjuntos, operaciones de cadenas, gráficos y árboles, mantenimiento de la estabilidad del sistema, búsqueda en amplitud y profundidad, recursividad, retroceso, hash, árbol de sintaxis, poda de árboles y árboles binarios indexados.



Q2. ¿Qué lenguajes de programación has estudiado?

Aprenda un idioma por dentro y por fuera; en mi opinión, esto es suficiente. Prefiero Java.



Q3. ¿Cómo sabe qué tareas son apropiadas para practicar para resolver todos los problemas?

Es casi imposible resolver todos los problemas. Sin embargo, hay un máximo de 12 a 15 temas del campo de las estructuras de datos y los algoritmos. Intente dominar mejor cada tema resolviendo problemas temáticos. Con la práctica, podrá determinar la estructura y el algoritmo de datos deseados. Céntrese en la calidad sobre la cantidad.



Q4. ¿Tengo alguna oportunidad si no programo en competencias?

Si, absolutamente. La programación de competencias en este contexto es opcional.



  • La programación de competiciones es un deporte y su gama de tareas es más amplia que la programación de producción. Plataformas como CodeChef y Codeforces están más inclinadas hacia este tipo de programación.

  • Por supuesto, hay áreas donde la programación competitiva se superpone con la programación de producción y puede ser útil: por ejemplo, ayuda a llamar la atención de un reclutador sobre su perfil, habilidades para resolver problemas, etc.



Sin embargo, las rondas de codificación representan una etapa muy diferente y tienen diferentes prioridades.



Q5. ¿Cómo obtengo una invitación para una entrevista? ¿Cómo se postuló?

El reclutador me contactó directamente a través de LinkedIn. No sé cómo se seleccionan los candidatos. Pero tengo algunas sugerencias.



  • Mientras sea estudiante, concéntrese en sus estudios. Participa en concursos, hackatones, trabaja en proyectos interesantes e innovadores. Intente contribuir a un proyecto de código abierto. Hay muchas formas de hacer que su perfil se destaque.



Lo más importante es que disfrutes tu viaje. Sea diligente en su trabajo. Ten paciencia, respeto y esfuérzate siempre por ser mejor hoy que ayer, y no te olvides del código promocional especial HABR, que agregará un 10% al descuento en el banner. El resto seguirá.






imagen






Otras profesiones y cursos


















All Articles