Plan de estudio para conseguir puestos de ingeniero de software sénior en Meta, Google y más

May 10 2022
Mi plan de 3 meses para prepararme mejor para las entrevistas de ingeniero de software sénior.
Primero, debo mencionar que este plan de preparación se basa en mi propia experiencia y podría no funcionar necesariamente para otros, sin embargo, hay recomendaciones generales que pueden ser beneficiosas para cualquier persona interesada en el proceso. TL; DR Aquí hay una pequeña historia de fondo sobre mí.
Foto de Rawpixel en iStockPhoto

Primero, debo mencionar que este plan de preparación se basa en mi propia experiencia y podría no funcionar necesariamente para otros, sin embargo, hay recomendaciones generales que pueden ser beneficiosas para cualquier persona interesada en el proceso.

TL;RD

Aquí hay una pequeña historia de fondo sobre mí. Trabajé en Amazon durante más de 7,5 años. En el momento de mi salida de la empresa, más del 97% de los amazonenses fueron contratados posteriormente. La decisión de irme fue el resultado de querer buscar oportunidades en otros lugares, explorar nuevos desafíos y aumentar mis ingresos totales. Fui entrevistador semiactivo en Amazon, pero aparte de eso, no me he preparado para entrevistas técnicas en varios años. Después de un par de meses de preparación y entrevistas con algunas empresas de software, recibí múltiples ofertas. Luego, después de algunas negociaciones, firmé una oferta y acepté un puesto de ingeniero senior en Meta (anteriormente Facebook).

Determina si realmente eres un ingeniero senior

Si realiza una búsqueda rápida en Google, encontrará muchos artículos que hablan sobre la definición de antigüedad para los puestos de ingeniero de software. Sin embargo, los años de experiencia no se traducen necesariamente en un nivel de antigüedad. Por ejemplo, si ha hecho algo de lo siguiente, considérese un ingeniero senior:

  • Lideró un proyecto con un alcance mayor que su equipo inmediato que incluía una gran cantidad de comunicación con equipos externos.
  • Están familiarizados con los conceptos de diseño de sistemas y diseñaron de forma independiente un sistema semicomplicado.
  • Su código está limpio, bien documentado y con casos de prueba adecuados.
  • Asesoró a otros ingenieros/pasantes. La tutoría puede tener diferentes formas y va desde la revisión del código de otros, la participación activa en reuniones de diseño o la creación de sesiones de aprendizaje hasta la tutoría completa de los ingenieros desde el principio hasta que se alcanza el objetivo de aceleración.
  • Buscar proactivamente formas de resolver un problema sin que se lo digan

Antes de la preparación

1. Determina cuánta preparación necesitas

El primer paso que tomé fue resolver preguntas fáciles populares en LeetCode sin medir el tiempo que me llevó resolver cada problema. Resolví alrededor del 70% de las preguntas sin prestar atención al tiempo. Esto también proporcionó un excelente curso de actualización para ciertas estructuras de datos como PriorityQueue (Heap) que nunca usé en mi trabajo diario. Según el resultado, noté que se requerían al menos 3 meses para aprobar las entrevistas en el sitio.

2. Descubre las empresas objetivo

Es importante investigar y compilar una lista de empresas a las que desea postularse. Para cada empresa, leo las descripciones de los puestos disponibles para determinar si están alineados con mis intereses y verifico si cumplí con los requisitos. Este paso también se puede realizar semanas antes de su preparación y le da una mejor idea de qué esperar de ciertas empresas y puestos.

Semana 1 a 4, antes de las entrevistas telefónicas

1. Centrarse en algoritmos/codificación

En mi puesto anterior, ya estaba diseñando sistemas a gran escala. La parte desafiante son las preguntas de codificación que requieren más tiempo para practicar. En cuanto a la dificultad de las preguntas, pasé el 20 % de mi tiempo en preguntas fáciles, el 70 % en preguntas medianas y el 10 % en preguntas populares y difíciles (p. ej. , Word Ladder 2 , Alien Dictionary , Minimal Window Substring y Word Break 2 ) . Una vez más, no me cronometré, pero me aseguré de hacer todo lo posible para resolver los problemas antes de saltar a las soluciones. Para aprovechar más el tiempo de preparación limitado, creé una lista de 10 cosas que no se deben hacer al resolver preguntas en LeetCode.

Otra estrategia fue reservar sesiones de entrevistas simuladas en TechMockInterview para comprender mejor qué áreas necesitaba mejorar desde el punto de vista de un profesional. Reservé sesiones de codificación con entrevistadores de Google y Meta que terminaron siendo muy beneficiosas.

2. Aplicar para los puestos

Apliqué a mis puestos específicos durante las primeras 2 semanas. El tiempo de respuesta varió: algunas empresas respondieron en cuestión de días, algunas en 1 o 2 semanas, algunas nunca respondieron y otras enviaron rechazos dentro de la fase de evaluación del currículum.

Durante este período, tomé la iniciativa de configurar la evaluación telefónica alrededor de la sexta semana con los reclutadores. Una vez que se finalizaron las fechas de selección telefónica, creé un documento para cada empresa y reuní todas las preguntas sobre codificación, diseño del sistema y comportamiento que pude a través de búsquedas en Glassdoor, la sección de discusión de LeetCode y los materiales de preparación que esas empresas habían proporcionado.

Semana 5 y 6: preparación final para las pantallas de los teléfonos

Las pantallas de los teléfonos están muy enfocadas en la codificación y quizás en algunas preguntas de comportamiento. Es una buena práctica tener un margen de al menos 2 o 3 días entre cada entrevista y usarlo para leer los documentos específicos de la empresa mencionados en la sección anterior. Esta vez, me cronometré durante los preparativos de codificación.

Una parte importante pero comúnmente pasada por alto son las preguntas de comportamiento. Una empresa como Snap menciona que una de las preguntas imprescindibles sería "¿Por qué Snap?" y justamente esta fue la primera pregunta que se hizo. También reuní una lista de preguntas de comportamiento y traté de responder a cada una con precisión de manera ESTRELLA .

Semana 7 a 12: Preparación en el sitio

Logré pasar todas las pantallas del teléfono excepto una. Irónicamente, fue la misma entrevista en la que me sentí más confiado. Es importante tener en cuenta que encontrará decepciones durante el proceso. Sin embargo, en lugar de tratar de analizar las razones detrás de cualquier rechazo, es más factible cambiar su enfoque al resto de las entrevistas que tiene programadas.

Foto de LinkedIn Sales Solutions en Unsplash

1. Diseño del sistema

Para las entrevistas de puestos sénior, debe esperar al menos una ronda de diseño del sistema. Esto juega un papel importante en la determinación de su nivel de antigüedad en la oferta final. Tenga en cuenta que

Si hace un trabajo encomiable en la codificación pero tiene un desempeño mediocre en la ronda de diseño del sistema, es posible que lo rechacen u ofrezcan un puesto intermedio.

Si se considera un ingeniero senior según los requisitos mínimos mencionados anteriormente, debe estar familiarizado con los conceptos básicos de diseño de sistemas y haber dirigido sesiones de diseño en su puesto actual. Para el diseño del sistema, estudié los siguientes materiales:

Canal de Youtube Tech Dummies : Sus videos se basan en su investigación en muchos blogs técnicos. Los diseños que explica están muy cerca de la arquitectura de los servicios del mundo real. Algunos videos pueden parecer extensos, pero hay muchos conceptos que se pueden aprender (p. ej., bosquejo de conteo-minuto) al mirar los videos.

Canal Gaurav Sen Youtube: El estilo de explicación de este canal en particular es muy parecido a lo que se espera en una entrevista de diseño de sistema. Sin embargo, una desventaja para mí fue que aceleró la voz en algunos videos, lo que puede ser un poco frustrante para algunos espectadores.

Grokking the System Design Interviews : mi preferencia personal son los videos sobre el texto, por lo que los tutoriales fueron una tarea para mí. Además, están muy enfocados en recopilar muchos números y cálculos que no son realmente necesarios. A menos que se le pregunte específicamente sobre la cantidad de servidores necesarios, simplemente necesita una idea aproximada sobre la escala del sistema a partir de los números recopilados. Por ejemplo, debe saber si almacenar datos en la memoria es una opción factible teniendo en cuenta el requisito o si necesita otra forma o incluso un enfoque híbrido para almacenar sus datos. Depende únicamente de la pregunta y la preferencia del entrevistador.

Seguí una estructura muy simple en mis entrevistas de diseño de sistema a menos que el entrevistador quisiera guiarme en una dirección diferente. En pocas palabras, estos son los métodos que funcionaron para mí:

  • Aclaración de preguntas, recopilación funcional y no funcional (p. ej., disponibilidad, consistencia, latencia, durabilidad, números relacionados con el uso del sistema, etc.): 10 minutos
  • Diseño de API: 5 minutos
  • Diseño de alto nivel (la mayoría de los casos siguiendo una arquitectura de microservicio): 10 minutos
  • Modelo de datos (por ejemplo, diseños de tablas): 5 minutos
  • Responder preguntas de seguimiento o entrar en detalles de un componente: 10 a 15 minutos

Independientemente de su puesto, las entrevistas de los ingenieros de software se centran en gran medida en la codificación. Debería esperar que las preguntas en el sitio sean un poco más difíciles que las pantallas de los teléfonos. En esta etapa, se debe poner más énfasis en el tiempo.

Durante mi preparación, noté 6 temas muy populares en las preguntas de los entrevistadores. Pasé más tiempo investigando las preguntas relevantes a estos temas.

También hay algoritmos/conceptos que se recomienda revisar en caso de que aparezcan en preguntas difíciles, estos incluyen la distancia más corta de Dijkstra, Bellman-Ford, el algoritmo Prim en MSP, Fisher-Yates Shuffle, Quick Select, Graph Coloring, Interval Tree y Árbol de segmentos.

3. Comportamiento

Nunca subestimes la importancia de las preguntas de comportamiento. El fracaso en este apartado es un fracaso en la entrevista independientemente de tu desempeño en la parte técnica. En Amazon, vi que muchos candidatos (aunque se desempeñaron bien en la parte técnica) fueron rechazados únicamente porque no proporcionaron escenarios aceptables en la sección de comportamiento.

4. Entrevistas simuladas

Hay algunas plataformas de entrevistas simuladas en línea. Como mencioné antes, utilicé TechMockInterview.com y quedé muy satisfecho con él. Antes de la ronda presencial, reservé un par de sesiones más con entrevistadores de Google/Meta y recibí valiosos comentarios sobre mi desempeño. Cabe señalar que sus preguntas fueron más interesantes y más desafiantes que lo que sucedió en mis entrevistas de la vida real. ¡Fueron tan eficientes que me sentí más estresado en las simulaciones que en las entrevistas reales! Es por eso que tener entrevistas simuladas con amigos o sesiones con servicios profesionales son esenciales para evaluar su desempeño en situaciones de entrevistas reales.

Negociaciones y Oferta Final

Foto de Razvan Chisu en Unsplash

Mi objetivo personal era recibir múltiples ofertas de las empresas que admiraba y en las que quería trabajar. La situación de oferta múltiple le da más poder para negociar y elegir su camino feliz con más confianza. Al final, conseguir una buena posición no se trata solo del dinero. Se trata de lo que te hace sentir satisfecho en el nuevo rol. Si rechaza una oferta solo porque otra empresa le ofreció un salario más alto, es posible que termine trabajando en un puesto que no le gusta. Esto podría conducir potencialmente a trabajar en un entorno frustrante y desalineado con sus objetivos profesionales. Piense profundamente en lo que quiere (oportunidad de crecimiento, equilibrio entre el trabajo y la vida personal, aprender nuevas tecnologías, etc.) y negocie hasta llegar a una decisión final que presente la representación más cercana a sus expectativas.

© Copyright 2021 - 2022 | unogogo.com | All Rights Reserved