Cómo conseguir el trabajo de software integrado de sus sueños

Hay muchas guías sobre cómo prepararse para entrevistas de software. Las entrevistas de software incrustado son algo similares, pero aún es un juego diferente al que tienes que jugar.

Hay material útil en Internet y parte del contenido para la preparación de entrevistas por software se transfiere. Pero, en general, no pude encontrar una guía completa para comenzar.

Reclutar y preparar entrevistas para software integrado durante los últimos 4 meses me enseñó mucho sobre cómo abordar el proceso. Recientemente recibí ofertas de algunas grandes empresas de tecnología. En esta publicación, compartiré algunas ideas que obtuve a lo largo del camino.

Voy a dividir esta publicación en un par de secciones, ¡así que siéntete libre de saltar! Ya hay toneladas de contenido sobre formas inteligentes de reclutar, así que no voy a entrar en cómo conseguir entrevistas aquí.

  • Contenido para preparar y revisar
  • ¡La entrevista en sí!

Elegir un idioma

Como estándar, el desarrollo de software integrado se realiza principalmente en C, aunque C ++ se está volviendo más popular recientemente. Si ha realizado algún curso de arquitectura informática o sistemas integrados, probablemente haya utilizado uno u otro. Asegúrese de saber qué idioma utiliza la empresa que está entrevistando. Si está más familiarizado con C ++ pero ellos usan C, sea sincero al respecto; si conoce uno, podrá cambiar entre los dos con bastante facilidad.

Como estoy más familiarizado con C ++, las empresas me han permitido escribir código en C ++. Si es necesario, me ayudaron a hacer la transición de ese código a C. En su mayor parte, realmente no hace una diferencia. Esto es a menos que esté trabajando con algunas funciones y contenedores de biblioteca estándar de C ++ específicos.

Verilog se utiliza principalmente para el desarrollo de FPGA. Python se usa bastante para comunicarse entre el usuario y el sistema integrado en el que está trabajando. Lo más probable es que no le hagan ninguna pregunta al respecto.

Lo mismo ocurre con el lenguaje ensamblador (¿¡¡afortunadamente !!?).

Los fundamentos son los fundamentos

Comencé el viaje de manera similar a la mayoría de los estudiantes de informática, revisando mis estructuras de datos y algoritmos. Pero pronto me di cuenta de que el contenido del software integrado se divide en cierto punto. Está mucho más centrado en la arquitectura de la computadora, los sistemas operativos y algunos fundamentos de hardware que en estructuras de datos de nivel superior como árboles o algoritmos de clasificación.

Trabaja con código y hardware de nivel inferior en roles de software integrado. Pero desde el punto de vista de la programación, sus estructuras de datos y algoritmos siguen siendo muy relevantes. Al igual que en las entrevistas de software, ¡hay toneladas de recursos que lo ayudarán a prepararse para lo básico! Resolver algunos problemas de cada sección de Cracking the Coding Interview fue un buen punto de partida.

Poco después de eso, preferí usar LeetCode debido a la capacidad de ejecutar y probar instantáneamente. LeetCode es una plataforma increíble con una gran comunidad. En mi opinión, tiene preguntas más similares a las que encontrará en las entrevistas. Guarda todas las soluciones enviadas y también calcula los tiempos de ejecución. Haz la mayoría de las preguntas "Fácil" y una parte decente de las preguntas "Medio" y estarás bien :)

Además, Geeks For Geeks es un gran recurso con explicaciones muy completas para cientos de problemas.

Traspaso de entrevistas de software

Los siguientes temas son muy similares a los conceptos de las entrevistas de software, y se han probado exhaustivamente, ¡así que asegúrese de conocerlos bien!

  • Complejidad algorítmica (tanto tiempo como memoria)
  • Punteros
  • Matrices
  • Listas vinculadas
  • Cuerdas (y cuerdas C)
  • Pilas y colas

Los siguientes temas no están realmente probados, pero familiarícese con ellos conceptualmente. Conoce cómo funcionan, sus complejidades y cómo resolverlas a un nivel básico.

  • Recursividad
  • Árboles
  • Muchísimo
  • Hashing
  • Clasificación

Más allá del software

¡Aquí es donde comienza el verdadero contenido incrustado!

Manipulación de bits !!

Sepa esto como la palma de su mano.

Posiblemente sea el tema más importante de sus entrevistas. Sobre este tema específico, haga todas las preguntas en LeetCode.

  • Saber cómo se representan los números negativos en binario
  • Conoce las diferencias entre los complementos de uno y dos
  • Ser capaz de convertir entre binario, decimal y hexadecimal.
  • La operación XOR es poderosa . Sepa todo lo que puede hacer.

Este es un gran recurso que utilicé para obtener consejos y trucos útiles

Arquitectura de Computadores

Un segundo cercano a la manipulación de bits.

Probablemente no se le pedirá que implemente ninguno de estos, pero definitivamente se le preguntará cómo funcionan las cosas debajo del capó. Algunos temas para leer incluyen…

  • Registros importantes y cómo funcionan
  • Diferencia entre guardar llamadas y guardar llamadas
  • Cómo funcionan las interrupciones
  • Una comprensión básica de los canales de instrucción
  • Caches, TLB y cómo se implementa la memoria virtual
  • Varios tipos de memoria (ROM vs RAM, DDR, EEPROM, Flash, etc.)
  • Acolchado de memoria (instrucciones y clases)
  • ¿Qué sucede cuando arranca un sistema?

Sistemas operativos

Dependiendo de la empresa y el rol, los sistemas operativos pueden ser un tema muy importante. No se le pedirá que implemente ninguno de estos, ¡pero sepa cómo funcionan las cosas a nivel conceptual!

  • Proceso frente a hilo
  • Cómo funciona el multihilo
  • Sistemas operativos en tiempo real frente a sistemas operativos tradicionales
  • Programación de tareas (FIFO, Round Robin, basado en prioridades)
  • Cómo los semáforos y los mutexes protegen los datos
  • Inversión de prioridad, herencia de prioridad, spinlocks e interbloqueos
  • ¿Qué hace que una función sea 'reentrante'?
  • Secciones críticas
  • Niveles de prioridad en microcontroladores (EL0 - EL3)

Protocolos de comunicación

Conozca los beneficios y las compensaciones de usar los siguientes protocolos:

  • UART
  • SPI
  • I2C

Según sus experiencias anteriores, el puesto que está solicitando y la empresa, es posible que también le pregunten sobre otros. Por lo general, las empresas no esperan que usted conozca estos protocolos específicos y lo capacitarán en el trabajo. ¡Pero tener un conocimiento básico siempre puede ayudar a sorprender al entrevistador!

  • Automotriz: CAN, LIN
  • Inalámbrico: 3G, 4G LTE, conceptos básicos de 5G, 802.11 (Wifi), Bluetooth
  • Redes: HTTP, TCP / UDP, IP, 802.11 (Wifi), Ethernet

Fundamentos de hardware

El hardware no se prueba mucho para el software integrado, pero dependiendo del rol, su nivel de interacción puede variar. Consulte las descripciones de los puestos y hable con las personas que trabajan allí para tener una mejor idea.

  • Temporizadores de vigilancia
  • Temporizadores en general
  • Detalles sobre cualquier periférico que haya utilizado en sus proyectos (acelerómetros, sensores, LiDAR, motores, etc.)

Practicando

La práctica es clave , realmente no hay forma de evitar eso. Asegúrese de dedicar al menos 2 horas al día a la preparación de la entrevista, sin incluir la solicitud de empleo y comunicarse con los reclutadores.

Mientras practica en LeetCode, comente su código. Explique su algoritmo y las complejidades del tiempo de ejecución. Todos los días, antes de comenzar a codificar, revise los problemas en los que trabajó el día anterior. Al final de la semana, revise todos los problemas en los que trabajó esa semana. Esto te ayudará a recordar mejor los algoritmos y, poco a poco, te convertirás en un profesional en la coincidencia de patrones.

Las entrevistas integradas tienden a ser más conceptuales que las entrevistas típicas de software, debido a la naturaleza de algunos de los temas probados. Para estas áreas, mantuve un documento de Google de todas las preguntas que me podrían hacer, pero también todas sus respuestas. También incluí un enlace donde puedo leer más información para ser útil. Me ayudó a mantenerme organizado y revisar más rápido.

Mucha gente me ha pedido el enlace al documento de Google, así que aquí está: Preguntas de entrevista integradas

En la entrevista

Lo lograste - ¡gran trabajo!

Tomar una respiración profunda. Es hora de hacer un buen uso de todo su arduo trabajo. Por lo general, usted y el entrevistador pasarán por algunas preguntas conceptuales. También hablará de sus experiencias y proyectos anteriores. Asegúrese de poder responder en detalle las preguntas sobre sus contribuciones y los diversos desafíos que enfrentó.

Si se trata de una entrevista que se realiza de forma remota, probablemente se le pedirá que codifique en un documento compartido. Tenga listo papel para anotar puntos importantes y diagramas. Si le ayuda, también puede tener algunas notas a las que puede hacer referencia durante la entrevista. Siempre tengo a mano una hoja de complejidades algorítmicas básicas.

Verifique las zonas horarias. Compruébelos dos veces. No olvide usar auriculares. Esté en un ambiente tranquilo para que no haya molestias. Los problemas de comunicación solo harán que la entrevista sea más difícil.

Cuando recibas la pregunta

Nunca empieces a codificar de inmediato. Tan importante como llegar a la solución correcta es, el entrevistador realmente está mirando su enfoque.

Tómese un segundo y repita la pregunta al entrevistador, solo para asegurarse de que ambos estén en la misma página. Y si hay algún malentendido, el entrevistador siempre puede repetir y aclarar cualquier duda.

A continuación, comprenda el alcance del problema

  • ¿Qué tan grande es la entrada?
  • ¿Está ordenado?
  • ¿Existe un cierto tiempo o complejidad de memoria que debas cumplir?
  • ¿Hay duplicados? ¿Valores negativos? ¿Valores vacíos?
  • ¿Tiene que realizar una comprobación de errores?

Luego, revise su algoritmo. Comience con el enfoque de fuerza bruta más básico. Puede ser muy ineficiente y mencionar que lo estás usando como punto de partida. Explique las complejidades del tiempo y la memoria y por qué es una mala solución.

A partir de ahí, es hora de optimizar. En general, busque lugares donde pueda estar almacenando cantidades innecesarias de datos o secciones repetidas de código. Para las aplicaciones integradas, la memoria es importante. En lugar de usar una matriz o un vector, considere usar un conjunto de bits. Si solo está tratando con valores entre 0 y 31, ¡cambie los bits en un número entero! Aquí es donde la manipulación de bits resulta útil.

Es importante pensar en voz alta mientras hace una lluvia de ideas. Si está atascado o va en la dirección equivocada, el entrevistador puede ayudarlo a volver al camino. Una vez que ambos hayan acordado una solución, finalmente es hora de comenzar a codificar.

Código de escritura

Leer el código de los demás no siempre es lo más agradable. Hazle el trabajo un poco más fácil a tu entrevistador usando buen estilo. Eso no significa que tenga que escribir cada punto y coma o corchete, sino sangrar bien y usar nombres de variables significativos. Trate de escribir con prolijidad y utilice bien el espacio de la pizarra.

Mientras escribe código, siga comprobando el algoritmo que ha diseñado. Similar a la fase de lluvia de ideas, piense en voz alta . Proporcione comentarios verbales a su código. En cada paso, explique lo que está comprobando, lo que espera lograr y las decisiones de diseño que tome.

Una vez que haya terminado de escribir el código, no diga que ha terminado todavía. Da un paso atrás y analiza tu código desde una perspectiva de alto nivel. Verifique las entradas, las salidas y su lógica en busca de errores. ¡Asegúrese de detectar errores uno por uno! Luego, revise el código con algunos casos de prueba. Si hay algún problema que ve, revise y vuelva a trabajar su código según sea necesario.

Dependiendo de la entrevista, es posible que tenga una gran pregunta o un par de preguntas más pequeñas. Pero una vez que el entrevistador está de acuerdo con su solución, existe la posibilidad de que la extienda a diferentes parámetros. Probablemente no tenga que volver a trabajar el código, pero es posible que deba discutir cómo cambiar partes de su enfoque. Como mencioné antes, la memoria es importante en las aplicaciones integradas. Por lo tanto, una pregunta de seguimiento común suele ser sobre una mayor optimización de la memoria.

Pensamientos finales

La naturaleza de las entrevistas de software integrado depende en gran medida de la empresa y del trabajo que priorizan. Las empresas que trabajan en un protocolo de comunicación específico buscarán cosas diferentes a una empresa que desarrolla un sistema operativo en tiempo real o una empresa que trabaja en un producto de IoT.

Quería usar este artículo como un lugar para compartir algunos temas comunes en las entrevistas que he tenido, pero esto de ninguna manera es exhaustivo. Esto está destinado a utilizarse como punto de partida. Pero comuníquese con los empleados actuales y consulte Glassdoor para obtener más consejos para entrevistas específicas de la empresa.

Las entrevistas son difíciles, pero prepararse bien y trabajar duro ahora puede ayudarlo a conseguir un trabajo que ama :)

Espero que este artículo te haya ayudado y te deseo la mejor de las suertes.

Si te ha gustado este artículo, no olvides dejar un?. También puedes seguirme en Twitter o Quora :)