Cómo superé las entrevistas del ingeniero de software del personal y obtuve múltiples ofertas (Spoiler: ¡no se requiere preparación de "LeetCode")!

Nov 06 2022
TL; DR: bueno, este no es el mejor resumen, ya que hay mucho que cubrir y compartir. Mencionaré el desglose de este artículo y dejaré que el lector determine si hay una sección que le interese, sin embargo, le recomiendo enfáticamente que tome una taza de café y tome los ~15 minutos completos para leer todo.
Foto de iMocha

TL; DR:  bueno, este no es el mejor resumen, ya que hay mucho que cubrir y compartir. Mencionaré el desglose de este artículo y dejaré que el lector determine si hay una sección que le interese, sin embargo, le recomiendo enfáticamente que tome una taza de café y tome los ~15 minutos completos para leer todo. ¡Prometo que valdrá la pena! El artículo se divide en las siguientes partes: Antecedentes, Entrevistas, Pensamientos finales/Conclusiones, Ofertas/Compensación e Información de contacto.

Fondo

Por primera vez en mi carrera de ingeniería, decidí participar en una juerga de entrevistas masivas. Habían pasado alrededor de 3 años desde la última vez que pasé por preguntas pesadas de algoritmos de estilo LeetCode. Sabía que estaba oxidado, pero tampoco tuve tiempo para sentarme y prepararme durante semanas o meses. He visto las publicaciones más populares en la comunidad de ingenieros sobre lo estresantes, difíciles y complicadas que se han vuelto las entrevistas de codificación. A pesar de todo esto, confié en mi instinto, aproveché mi experiencia en el mundo real y, después de ~70 rondas de entrevistas con 9 empresas , obtuve 6 ofertas.!!! Quería compartir lo que aprendí, cómo abordé y respondí cada entrevista, y arrojar luz sobre un enfoque diferente para entrevistar a empresas de tecnología en lugar de centrarme en resolver los problemas de LeetCode.

  • Aunque este rol era para Android , alrededor del 90% del proceso de entrevista es general. Por lo general, hay una porción de dominio y aquí es donde es más probable que se intercambie con una que sea relativa a su rol objetivo (iOS, Android, Backend, etc.).
  • Firmé algunos NDA "elegantes", por lo que no nombraré las empresas, pero compartiré las industrias: medios y entretenimiento, robótica, inteligencia artificial y aprendizaje automático, redes sociales, tecnología financiera, atención médica, transmisión de video, comercio electrónico, mensajería instantánea
  • Todos estos fueron para puestos remotos, y todas las entrevistas se realizaron a través de Hangouts de Zoom/Google.
  • El proceso de entrevistas en todas estas empresas fue para puestos de mayor jerarquía. Creo que los roles más jóvenes seguirían un proceso de entrevista ligeramente diferente. De todos modos, lo que voy a compartir será muy útil, independientemente del nivel para el que esté entrevistando. Al menos eso pienso :)

Muy bien, hablemos de las entrevistas, lo que implicó cada ronda y cómo pasarlas.

Detección de tecnología

Inicialmente, comenzará con una breve llamada telefónica con un reclutador de tecnología o un gerente de contratación, para obtener más información sobre el puesto y la empresa, así como para analizar sus antecedentes. ¡Tener un currículum bien escrito, pulido y actualizado hace que esto sea muy fácil! Debe poder comunicarse a un alto nivel, un poco sobre sus antecedentes y lo que está buscando. Evite la jerga tecnológica . ¡Comunicar sus habilidades técnicas y antecedentes de una manera no técnica realmente dice mucho!

Evaluación para llevar a casa (opcional)

Solo algunas empresas realizan este paso en su proceso de entrevista. La evaluación para llevar a casa es un pequeño proyecto de aplicación (en mi caso fue Android) o fueron 2 o 3 preguntas de codificación a través de diferentes plataformas como HackerRank, etc. Analicemos cada uno de estos por separado.

Aplicación para llevar a casa : si eres un desarrollador móvil, esto debería ser un paseo por el parque. Es su oportunidad de ser creativo y mostrar lo que hace en su día a día típico como ingeniero móvil. Cosas clave para recordar:

  • Solo dedica un par de horas.
  • Escriba el código del que estaría orgulloso de enviar. Concéntrese en código limpio, comentarios donde sea necesario, buen diseño y arquitectura. Estos son más importantes que dedicar todo su tiempo a crear animaciones elegantes, vistas personalizadas o una interfaz de usuario de píxeles perfectos.
  • Implemente su arquitectura y diseño preferidos. Me quedé con MVVM y separé mis aplicaciones en capas: App/UI/ViewModel, Domain y Data/API. Es posible que se le pida que hable sobre esto en las entrevistas de seguimiento, así que construya lo que le resulte más familiar y cómodo.
  • Escribe algunas pruebas! No es necesario realizar pruebas unitarias de todo. ¡ Pero mostrar algunas habilidades de prueba unitaria y específicamente lo que prueba, es muy útil!
  • Tomé 5 minutos para recorrer todas las preguntas primero. Los clasifiqué de los más fáciles a los más difíciles y abordé los más fáciles primero.
  • No me preocupé por tratar de "pensar fuera de la caja" y usar las estructuras de datos correctas o los algoritmos de libros de texto para usar. Me concentré solo en resolver el problema, sin importar el mal rendimiento de mi solución o la cantidad de trabajo que estaba duplicando.
  • Imagine que tiene memoria y CPU ilimitadas, solo aborde el problema paso a paso y concéntrese en la solución del camino feliz.
  • La mayoría de los problemas se pueden resolver con Maps, ArrayList, LinkedList y bucles simples. (¡Lo más probable es que lo use todos los días!) Sí, elegir la estructura de datos correcta o el conocimiento de los algoritmos puede facilitar la resolución del problema. Y aquí es donde ayuda tomarse semanas/meses para estudiar y practicar. Pero si tiene una limitación de tiempo, puede resolver todos los problemas con más pasos, en un enfoque de menor rendimiento, con el uso de estructuras de datos más comunes y bucles simples.
  • Estas evaluaciones suelen ser de aprobación/reprobación basadas en un sistema de puntos. Cuantas más pruebas pase para cada problema, más puntos obtendrá y, en última instancia, "aprobará" la evaluación.
  • Hay muy pocas posibilidades de que encuentre un problema súper complicado en estas evaluaciones para llevar a casa. Esas preguntas generalmente son ambiguas y requieren preguntas de seguimiento y claridad, y como tales no aparecerían en una pregunta para llevar a casa.
  • Si al final tiene tiempo extra, ahora puede revisar sus soluciones y mejorarlas.

¡Felicitaciones! Has llegado a la última ronda de entrevistas. Aquí es donde puede ser un poco inestable y variar de una compañía a otra. Me entrevisté con nuevas empresas bien financiadas (unicornios), empresas de primer nivel y también "FAANG". Aunque variaba un poco, casi todos tenían una estructura común que se describe a continuación. Los enumeraré con una breve descripción y luego profundizaré en cada uno para compartir consejos y estrategias que usé para cada uno.

  • 1–3 técnico : ya sea para resolver un problema de codificación con 1–2 ingenieros o desarrollar su proyecto para llevar a casa
  • 1 Diseño y arquitectura de sistemas : use algún tipo de herramienta de "pizarra" como LucidChart, GoogleDraw y MURAL, para dibujar de principio a fin cómo diseñaría una característica/problema. por ejemplo, "Queremos implementar una pantalla de perfil al tocar la imagen de un usuario"
  • 1 Dominio/Conocimiento : dada la función para la que estaba entrevistando, se trataba principalmente de preguntas sobre Android, Kotlin y Java.
  • 1 Preguntas y respuestas Experiencia en proyectos : profundiza en uno de tus proyectos donde puedes mostrar tu función, responsabilidades, desafíos, resultados y cualquier decisión técnica que hayas tomado.
  • 1 P/R Personas/Comportamiento — Su estándar “Háblame de un momento en el que…”
  • 1–3 Chatear con los EM : un encuentro relajado con un gerente de contratación/gerente de ingeniería para aprender sobre el rol, el equipo y responder cualquier pregunta que tenga.
  • 1–3 Chatear con el liderazgo : para las empresas emergentes, especialmente cuando se entrevista para puestos más altos, es más común tener múltiples encuentros y saludos con diferentes miembros del liderazgo para adaptarse a la cultura y la alineación de la misión para conocerse unos a otros.

Estos se basaban en su proyecto para llevar a casa o resolvían una pregunta de codificación. Profundicemos en cada uno.

Opción 1: Extensiones de proyecto para llevar a casa: ¡Esta fue muy divertida y no debería tener mucho de qué preocuparse! Es simplemente hacer lo que haces todos los días como ingeniero. En empresas anteriores, tenía mucha experiencia con sesiones de programación en pareja multiplataforma con diferentes miembros del equipo al abordar algún tipo de tarea técnica. ¡Esto no fue diferente! No se le dará algo irrazonable para hacer dentro de una hora, a menudo la tarea se basará en lo que hizo en la conclusión. Mantén la calma y haz esto como lo harías en un escenario del mundo real. Solo recuerde mencionar cualquier decisión, compensación, llamada, etc. a medida que implementa la función. Aquí hay algunos ejemplos reales de lo que hablé:

"Aunque no es lo ideal, voy a duplicar este código en ambos ViewModels y, si al final me dan más tiempo, intentaré mejorar esto moviéndolo a un UseCase dentro de mi capa de dominio".

“Por ahora me voy a centrar en simplemente conectar los datos y mostrarlo todo en la interfaz de usuario. Si tenemos más tiempo al final, puedo volver y mostrar mi conocimiento sobre cómo crear una interfaz de usuario más elegante”.

"Me concentraré en obtener la respuesta correcta y haré una clasificación y un filtrado menos que ideales aquí que probablemente se puedan mejorar y resolver de una mejor manera si tenemos tiempo".

"Estoy eligiendo almacenar estos datos en una tabla SQL en lugar de Caché porque..."

Este tipo de entrevista se trata más de mostrar cómo trabajas con los demás, hablar en voz alta mientras tomas decisiones técnicas y cómo abordas un problema del mundo real en partes.

Opción 2: Pregunta de codificación: bien, aquí estamos de nuevo con las temidas preguntas de LeetCode. Si sigue el mismo esquema mencionado anteriormente con la evaluación para llevar a casa, esto no es diferente, excepto que ahora tiene un ser humano real en la sala. Estos son los principales consejos para recordar:

  • Lea, luego vuelva a leer el problema. Asegúrese de entender absolutamente la pregunta. La parte más difícil de una pregunta de codificación es primero asegurarse de que comprende lo que se le pregunta. Si necesita claridad, haga preguntas y solicite ejemplos aclaratorios de: "Dada alguna entrada X, la solución debería generar Y"
  • Habla en voz alta sobre cómo quieres resolver el problema.
  • Transforme su plan en código: comience a implementar su solución. Grita cualquier cosa que estés pensando que puede ser un buen contexto para tu entrevistador. La mayoría de la gente piensa que tienes que hablar sin parar o que no estás hablando lo suficiente. Somos humanos, no robots. Es perfectamente aceptable decir "Oye, ¿puedo tener 2 minutos para ordenar rápidamente mis pensamientos aquí?". Grita lo que vas a hacer y luego hazlo. No es necesario que hables sin parar porque quieres evitar un silencio incómodo.
  • Si estás atascado, ¡dilo! Si estás completamente atascado, no es el fin del mundo (¡créeme!). Su entrevistador ya sabe lo estresante que es esto. Todos tenemos momentos de "congelación cerebral" y una simple pista nos ayuda a volver a la normalidad. Simplemente comuníquese con su entrevistador.
  • Grite las compensaciones, no optimice demasiado (inicialmente): a su entrevistador no le importa en particular qué tan rápido resuelva el problema o si necesita poca ayuda para encontrar la solución. Se trata de comunicación, comunicación y comunicación. No te preocupes por resolver el problema correctamente. Se trata de entender cómo piensas . Si todos en el mundo pensaran de la misma manera, todavía tendríamos teléfonos plegables (sin ofender a quien todavía los tenga). Adopte su enfoque para pensar y resolver problemas, incluso si le parece elemental. El código legible, simple y fácil de seguir es más fácil de escribir que crear un algoritmo inteligente y sofisticado.

Es muy probable que esta entrevista sea algo que verá si solicita un puesto de mayor jerarquía. La entrevista se enfoca menos en un dominio específico y más en su conocimiento general de cómo funcionan los sistemas de extremo a extremo y cómo crear productos/soluciones escalables.

Por lo general, su entrevista comenzará con presentaciones y luego una breve introducción de alguna herramienta de dibujo que puede usar opcionalmente . Algunas personas prefieren hablar en voz alta, depende completamente de ti. Se le presenta un problema del mundo real, como una nueva función, y se le asigna la tarea de diseñar todo de principio a fin.

  1. Hacer preguntas aclaratorias. Asegúrese de entender cuál es la tarea/función.
  2. Mencione cualquier posible incógnita, compensación o bloqueo:

¿Necesitamos autenticación?

¿Necesitamos conservar algún dato y/o admitir experiencias de usuario fuera de línea?

¿Necesitamos manejar errores y/o estados de carga?

3. Arquitectura del sistema

¿Necesitamos un backend, o es solo local? ¿Dependencias de terceros?

Escalabilidad: ¿podemos construir esto de una manera independiente de la plataforma que se pueda compartir entre proyectos, aplicaciones y equipos?

Conocimiento del dominio

Este es otro "fácil". Esta entrevista realmente solo prueba cuánto y qué sabe sobre su dominio. Como ingeniero de Android, esto giró en torno a las preguntas de Kotlin vs Java. Los temas incluyeron corrutinas, flujos y características del lenguaje. Los temas de Android giraron principalmente en torno al ciclo de vida, la persistencia de datos, la creación de subprocesos y preguntas generales sobre el marco de trabajo de Android. Digo que esto es "fácil" porque no sabes lo que no sabes. Simplemente responda lo mejor que pueda, hable sobre su pensamiento y lo más probable es que todas sus respuestas provengan de su experiencia pasada real.

Proyecto QA y Comportamiento

Junté estos dos tipos de entrevistas porque realmente van de la mano. Uno está más centrado en una inmersión técnica profunda de un proyecto de su elección. El otro trata sobre los desafíos y las situaciones a las que te enfrentaste trabajando en un equipo real en un proyecto de tu elección. Sinceramente, no se necesita preparación aquí. Simplemente responda con sinceridad, con ejemplos del mundo real, y debería estar listo para comenzar. Nuevamente, no sabes lo que no sabes, y no se te puede culpar por eso. Si una determinada situación no se aplica a usted o no ha tenido la oportunidad de experimentarla, simplemente dígalo. Tu entrevistador está más interesado en los ejemplos del mundo real que en los hipotéticos. Antes de comenzar una entrevista en cualquier lugar, simplemente elija un proyecto en su currículum en una empresa existente o anterior con la que esté más familiarizado y estará listo para comenzar.

Charlando con Gerentes de Contratación/Ingeniería

Por lo general, esta entrevista es su última entrevista, y debería ser realmente libre de estrés. Lo más probable es que esté conociendo a su futuro gerente potencial. Ahora es el momento de hacer todas las preguntas que puedas sobre el equipo y el puesto y conocer a tu futuro gerente. Uno de los aspectos más críticos de una carrera exitosa es tener un gran gerente. Y, sinceramente, a veces es como "citas". ¡Quiere encontrar a alguien con quien haga clic, que comparta intereses similares y cuyo estilo de gestión encaje bien con lo que está buscando para crecer en su carrera! Preparación fácil para este: ¡sé tú mismo y pregunta lo que necesites para disipar cualquier duda que puedas tener sobre el equipo o el rol!

Charlando con el liderazgo

Algunas personas encuentran esto estresante e intimidante. Recuerde: llegó a este punto porque es un candidato principal y la empresa realmente quiere invertir en usted . Es igualmente importante que conozca quién dirige su equipo, departamento y empresa. Esta es una gran oportunidad para aprender más sobre la cultura laboral, los puntos débiles de la empresa y los valores. ¡Todas las cosas que debe considerar seriamente al decidir qué oferta aceptar!

Adicional:

Quería compartir las preguntas que hice al final de cada ronda de entrevistas, sin importar con quién me reuní y qué cubrió la entrevista. Estas preguntas que hice parecieron realmente involucrar a mi entrevistador y todos parecían disfrutarlas genuinamente. También me dio mucha información sobre el estado actual de las cosas.

  1. Si tuviera una varita mágica que pudiera agitar para hacer desaparecer un solo problema técnico o no técnico en su empresa o equipo, ¿cuál sería? (Spoiler: la respuesta más popular que obtuve fue build-times *facepalm*)
  2. ¿Qué hace su empresa/equipo excepcionalmente bien?
  3. ¿Cuál es el problema más desafiante que su equipo ha tenido que resolver?

Aunque tuve un gran éxito en general con múltiples ofertas, hubo algunas empresas en las que me fue mal en las entrevistas. Después de cada entrevista, rápidamente anoté mis pensamientos sobre lo que pensé que hice mal y lo que pensé que hice muy bien.
Aquí están mis conclusiones clave:

  • DUERMA BIEN : en las rondas en las que lo hice muy mal, me faltaba sueño o no me sentía bien. Al final del día somos humanos , y mirando hacia atrás me di cuenta de que debería haber reprogramado mis entrevistas para un día diferente. Las empresas lo entenderán y, si no lo hacen, probablemente esquivó una bala allí.
  • COMUNICACIÓN:  genial, eres el ingeniero más inteligente de la sala, pero no puedes trabajar bien con los demás, no puedes comunicarte de manera efectiva y es difícil colaborar contigo... bueno... no se trata solo de codificación. Un ingeniero promedio o ligeramente por encima del promedio con habilidades de comunicación excepcionales producirá un radio de explosión mucho mayor que un ingeniero excepcional con habilidades de comunicación deficientes. ¡La comunicación efectiva es clave para triunfar en las entrevistas!
  • COLABORAR: no solo es divertido, un cambio de ritmo y una forma de aprender fuera de su dominio, sino que la programación en pares es una excelente manera de mejorar la conversación a través de sus pensamientos y la comunicación, compartir conocimientos y elevarse a sí mismo y a sus compañeros de equipo. . Si participa en esto en el mundo real, se desempeñará muy bien en las entrevistas técnicas.
  • EGO BAJO: incluso el ingeniero más brillante y experimentado comete errores y tiene espacio para crecer. Al contrario de lo que lee y cree, los entrevistadores no están tan interesados ​​en la rapidez con la que resuelve un problema, en obtener la solución correcta por sí mismo o en que demuestre que están equivocados durante las entrevistas de codificación. Incluso si muestran egoísmo, escuche sus opiniones y comentarios, haga preguntas si no está seguro y confíe en sus consejos, ya que realmente están tratando de guiarlo hacia la solución. ¡Esté abierto a la retroalimentación!

Sé que ya existen buenos recursos que dan más transparencia a las ofertas y cómo se puede negociar. Por esa razón, no entraré en detalles, solo confirmaré que sí, tener múltiples ofertas le permite negociar una oferta más competitiva. Sin embargo, las relaciones que establece a lo largo de sus entrevistas en combinación con su desempeño son el mayor impulsor para poder obtener una compensación más alta. Ten una actitud positiva y amistosa, dale tu máximo esfuerzo y obtendrás una gran oferta a pesar de todo. Cuando una empresa se encuentra con un candidato fuerte, independientemente de si tiene ofertas o no, hará lo que sea necesario para atraerlo.

Contacto

Estaría más que feliz de conectarme con cualquiera que esté interesado y echar un vistazo a su currículum (feliz de compartir el mío), realizar simulacros de entrevistas o profundizar en cualquier parte de este artículo. ¡Envíame un DM en Twitter @crocsandcoffee!

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