¿Quieres ser un programador integrado? Debes saber 0x10 preguntas básicas

  

La prueba del lenguaje C es una forma necesaria y efectiva de reclutar programadores integrados. A lo largo de los años, he participado y organizado muchas de estas pruebas. En el proceso, me di cuenta de que estas pruebas pueden proporcionar mucha información útil para el entrevistador y el entrevistado. Además, no se analiza la presión para abrir la entrevista. Muy interesante. Desde la perspectiva del entrevistado, puede aprender mucho sobre el emisor o el supervisor. ¿Esta prueba está diseñada por el sujeto para mostrar su conocimiento de los detalles del estándar ANSI en lugar de las habilidades técnicas? ¿Es esta pregunta estúpida? Si quieres responder al valor ASCII de un personaje. ¿Se centran estos problemas en las estrategias de asignación de memoria y llamadas de su sistema? Esto indica que el autor puede pasar tiempo en la microcomputadora en lugar de en el sistema integrado. Si la respuesta a cualquiera de las preguntas anteriores es " es " entonces sé que debo considerar seriamente si debo hacer el trabajo. Desde el punto de vista del entrevistador, una prueba puede revelar la calidad del candidato de muchas maneras: Básicamente, puede comprender el nivel de lenguaje C del candidato. De todos modos, es interesante ver cómo esta persona responde preguntas que no contestará. ¿Está el candidato haciendo una sabia elección con buena intuición, o es solo un pecado? Cuando el candidato está atascado en un problema, ¿es una excusa o muestra verdadera curiosidad por el problema, viéndolo como una oportunidad de aprendizaje? Encontré que esta información es tan útil como sus resultados en los exámenes. Con estas ideas en mente, decidí formular algunas preguntas para el examen que realmente apuntan al sistema integrado. Espero que estas preguntas sobre el dolor de cabeza ayuden a quienes buscan un trabajo. Estos problemas son realmente encontrados por mí en los últimos años. Algunas de estas preguntas son difíciles, pero todas deberían darle algo de inspiración. Esta prueba es adecuada para diferentes niveles de candidatos. La mayoría de los candidatos de nivel primario tendrán calificaciones bajas y los programadores experimentados deberían tener buenas calificaciones. Para que usted decida sus propias preferencias para ciertas preguntas, no hay puntaje asignado a cada pregunta. Si elige estas preguntas para su uso, asigne sus propios puntajes de acuerdo con sus deseos.
preprocesador

1. Declare una constante con la directiva de preprocesador #define para indicar cuántos segundos en un año (ignorando el problema del año bisiesto)

#define SECONDS_PER_YEAR (60 * 60 * 24 * 365) UL Quiero ver algunas cosas aquí: 1; # definir Conocimiento básico de gramática (por ejemplo: no puede terminar con un punto y coma, uso de paréntesis, etc.)

2; El preprocesador calculará el valor de la expresión constante para usted, por lo que es más claro y sin costo escribir directamente cómo calcula cuántos segundos en un año en lugar de calcular el valor real. 3; tenga en cuenta que esta expresión desbordará un entero de una máquina de 16 bits; por lo tanto, use el entero largo L para indicar al compilador que la constante es un entero largo. 4; Si usa UL (que indica enteros largos sin signo) en su expresión, entonces tiene un buen punto de partida. Recuerda, la primera impresión es importante. 2. Escriba una " estándar " macro MIN que toma dos argumentos y devuelve el más pequeño.

# define MIN (A, B) ((A) < = (B)? (A): (B))

Esta prueba es para los siguientes propósitos: 1; Identificar los conceptos básicos de la aplicación #define en macros. Esto es importante porque las macros son la única forma de generar fácilmente código incrustado hasta que el operador en línea se convierta en parte del estándar C. Para los sistemas incrustados, el código de incrustación a menudo es necesario para lograr el rendimiento requerido. Método 2; conocimiento del operador de triple condición. La razón por la que este operador existe en C es que le permite al compilador producir código que está más optimizado que if-then-else. Es importante comprender este uso. 3; sepa cómo encerrar cuidadosamente los parámetros entre paréntesis en la macro 4. También uso esta pregunta para comenzar a analizar los efectos secundarios de las macros, por ejemplo: ¿Qué sucede cuando escribe el siguiente código?

menos = MIN (* p ++, b);

3. ¿Cuál es el propósito del identificador del preprocesador #error? Si no sabe la respuesta, vea la Referencia 1. Esta pregunta es útil para distinguir entre un amigo normal y un empollón. Solo los nerds pueden leer el apéndice del libro de texto en lenguaje C para encontrar respuestas a tales preguntas. Por supuesto, si no está buscando un empollón, los candidatos deben esperar que no conozcan la respuesta. Bucles infinitos

4. Los bucles infinitos se usan a menudo en sistemas integrados. ¿Cómo se escriben bucles infinitos en C? Este problema utiliza varias soluciones. Mi solución preferida es:

while (1) {}


Algunos programadores prefieren lo siguiente:

para (;;) { }


Esta implementación me avergüenza porque esta gramática no expresa exactamente lo que está sucediendo. Si un candidato da esto como una solución, usaré esto como una oportunidad para explorar los principios básicos de hacerlo. Si su respuesta básica es: "Me enseñaron a hacerlo, pero nunca pensé por qué. " Esto me dejará una mala impresión. La tercera opción es usar goto

Loop: ... goto Loop;

El candidato da la solución anterior, lo que significa que es un programador de lenguaje ensamblador (esto puede ser Algo bueno) o es un programador de BASIC /FORTRAN que quiere ingresar nuevos campos.

Declaraciones de datos

5. Utilice la variable a para dar las siguientes definiciones a) un entero (un entero) b) un puntero a un entero (un puntero A un entero) c) Un puntero a un puntero que apunta a un entero (Un puntero a un puntero a un intege) rd) Una matriz de 10 enteros (Una matriz de 10 enteros e) Una matriz de 10 punteros que apuntan a un entero.
(Una matriz de 10 punteros a enteros) f) Un puntero a una matriz de 10 enteros (Un puntero a una matriz de 10 enteros) g) Un puntero a una función que tiene un argumento entero y devuelve un Un puntero a una función que toma un entero como un argumento y devuelve un entero h) una matriz de 10 punteros a una función que tiene un argumento entero y devuelve un entero (Una matriz de diez punteros a funciones que toman un argumento entero y devuelven un entero).

La respuesta es: a) int a; //Un entero b) int * a; //Un puntero a un entero c Int ** a; //Un puntero a un puntero a un entero d) int a [10]; //Una matriz de 10 enteros e) int * a [10]; //Una matriz de 10 punteros a enteros f Int (* a) [10]; //Un puntero a una matriz de 10 enteros g) Int (* a) (int); //Un puntero a una función a que toma un argumento entero y devuelve un entero h) Int (* a [10]) (int); //Una matriz de 10 punteros a funciones que toman un argum entero Entregue y devuelva un número entero. Las personas a menudo afirman que hay varias preguntas que son el tipo de preguntas que pueden responderse hojeando el libro. Estoy de acuerdo con esta afirmación. Cuando estaba escribiendo este artículo, para determinar la corrección de la gramática, revisé el libro. Pero cuando me entrevistaron, esperaba que me hicieran esta pregunta (o una pregunta similar). Porque durante la entrevista, estoy seguro de que sé la respuesta a esta pregunta. Si el candidato no sabe todas las respuestas (o al menos la mayoría de las respuestas), entonces no hay preparación para esta entrevista. Si el entrevistador no está preparado para la entrevista, ¿por qué puede prepararse?

Copyright © Conocimiento de Windows All Rights Reserved