¿Qué debo esperar de una evaluación técnica para C ++? [cerrado]

10

Me pidieron que realizara una prueba / evaluación técnica para un trabajo como desarrollador junior, principalmente usando C ++. Esta es mi primera prueba / evaluación, y dura 2 horas.

Mi C ++ está un poco oxidado ya que he estado haciendo proyectos recientemente en PHP.

Esta es una empresa del Reino Unido, sin embargo, supongo que las pruebas técnicas de los candidatos serán prácticamente las mismas en todas partes.

¿Qué debo esperar en una de estas pruebas?

pan de oso
fuente
1
Esta pregunta es para PHP, pero las respuestas se aplican: programmers.stackexchange.com/questions/73654/…
Eric Wilson

Respuestas:

5

Es C ++, así que puedes esperar cualquier cosa, quiero decir REALMENTE cualquier cosa.

Por lo general, eso implica preguntas capciosas y algún tipo de preguntas de polimorfismo.

Pero podría ser algo simple también.

Esté preparado para responder una pregunta sobre algo como "por qué haría un destructor virtual", qué es "volátil", "diseñe una clase" para algún problema poco realista, "implemente una lista vinculada", "invierta una cadena", etc.

Descifrador
fuente
Añadiría "¿Para qué se mutableusa la palabra clave?" a la categoría de cualquier cosa.
Tom
5

Si esta es una prueba pura de C ++ (es decir, no una prueba de Windows / MFC / C ++ administrada), entonces pase unas horas o un día con C ++ eficaz de Scott Meyer y debería hacerlo muy bien. No cubre las plantillas y el STL, pero si estuvieran interesados ​​en eso, probablemente no le darían una prueba de dos horas. Han pasado algunos años, pero solía entrevistar a desarrolladores de C ++ con frecuencia. Aunque las ideas en Effective C ++ son fundamentales para la programación de C ++, solo alrededor del diez por ciento de los candidatos las conocían.

Kevin Cline
fuente
1
+1 para recomendación de libros, y omita el libro de C ++ más eficaz de Scott Meyer. Cuando solía entrevistar a programadores, también buscaba la honestidad intelectual (¿intentas farolear o admites que no sabes?), Sabes lo que no sabes y sabes dónde encontrar una respuesta. (Si se entrevista a alguien que dice haber estado trabajando en C ++, las preguntas serían mucho más difíciles). Si no hubiera nada que sugiriera habilidades de programación en otros idiomas en su CV, también le pediría que escribiera un programa simple y mirara si cubrió los casos de esquina correctamente.
MZB
Soy un graduado en informática, me enseñaron cómo hacer programas en la consola en C ++, me enseñaron a implementar árboles de clasificación binaria y listas doblemente vinculadas, etc. Luego también nos enseñaron allí sobre clases abstractas, herencia y polimorfismo, pero no cómo implementarlos. El puesto de trabajo es para un graduado, por lo que no sé qué esperan de mí, porque no tengo experiencia real en la vida laboral de C ++.
bearbread
4

Bueno, depende de si te dejarán o no usar google. :PAG

Por lo general, me va bastante bien en las pruebas técnicas, siempre que pueda usar las herramientas que me rodean. Cuando quieren que codifique a ciegas es cuando me meto en problemas. Entonces, el mejor consejo que puedo darle es el código oculto en casa ... Asegúrese de recordar cosas triviales que damos por sentado porque podemos verificarlas fácilmente si no lo recordamos.

Además, generalmente verifica las habilidades específicas que necesitan, así que si sabes en qué trabajarás, concéntrate en eso.

(Esto es en mi experiencia general, no soy del Reino Unido)

AJC
fuente
¿Qué pasa con la teoría, el polimorfismo, la herencia? Solo conozco la teoría para eso solo por graduarme, pero no sé cómo implementarlo en C ++
bearbread
Su implementación no es tan difícil, probablemente pueda revisarlos muy rápidamente. La parte importante es saber cuándo es apropiado usarlos, cuándo lo va a necesitar. Son más un patrón funcional que un requisito previo real. Lo que quiero decir es que puede escapar sin usarlos, pero se esperaría de usted que los conozca si es necesario.
AJC
@bearbread: la teoría en sí misma no vale mucho. lea sobre patrones de diseño e intente implementarlos.
Karoly Horvath
Conozco patrones de diseño como MVC para PHP, ¿es eso lo que quieres decir?
bearbread
1

Practique el código kata Elija un algoritmo simple (anillo de búfer, torre de Hanoi, búsqueda binaria, lo que sea) y codifíquelo desde cero. Luego, vuelva a hacerlo la próxima vez, y la próxima vez, y la próxima vez, y la próxima vez, y así sucesivamente. Mira cómo puedes mejorarlos en cada iteración.

Sardathrion - contra el abuso SE
fuente
1
+1. También hazlo con un amigo que tenga un poco más de experiencia. Túrnense para programar, ambos aprenderán algo nuevo.
Tom
0

Es cierto que puedes esperar cualquier cosa.

Le dijeron que la prueba era C ++, pero tal vez es realmente el subconjunto C de C ++ que usan en sus pruebas (usará matrices de caracteres en lugar de cadenas de biblioteca estándar). Esto será difícil de saber.

Si realmente es C ++, le aconsejaría que vea los conceptos básicos:

  • Clases, variables, matrices.
  • referencias, punteros (y por qué no debe usarlos por defecto)
  • el uso de la palabra clave const
  • Conceptos de objetos orientados (herencia, polimorfismo ...)
  • Plantillas

entonces:

  • Usos estándar de la biblioteca (std :: string, std :: vector, contenedores, ...)
Nikko
fuente
0

Lo que se ha publicado ha sido excelente hasta ahora, ¡pero agregaré algo y una historia! Yo diría que practique la aplicación de lo que sabe en C ++ a problemas en el dominio de la compañía de software. Es genial si conoces todos los detalles de C ++, pero si no puedes aplicar a un problema, eres inútil para la empresa. Como se trata de un puesto de desarrollo junior, no creo que esperen que sepas todo sobre C ++.

Hice mi primera prueba técnica para mi primer trabajo de desarrollador la semana pasada y me sorprendió lo que encontré. Esperaba algo como FizzBuzz o algo más esencial (esto fue para Java, por cierto), pero lo que encontré fue que me dieron un archivo y me hicieron analizarlo a un nuevo formato, que es la parte del trabajo. Además de eso, me dejaron usar Google y sus propias bibliotecas. En pocas palabras, debe conocer C ++, pero si desea saber cómo puede ser la prueba, eche un vistazo al dominio de la posición que está solicitando y trabaje en la implementación de C ++ hacia algo en ese dominio.

Jetti
fuente
Supongo que <1% de los programadores de C ++ conocen todo el lenguaje :) Simplemente tome todos los casos de comportamiento indefinido / no especificado / definido por la implementación como un ejemplo.
0

Eres tú:

  1. Escribir código
  2. tomando una opción múltiple
  3. Entrevista en persona

Al escribir código

Esperarán que usted sepa (y use):

  • RAII
  • La regla de tres
  • Comprender los punteros inteligentes

Probablemente te pondrán a prueba en:

  • Herencia
  • Funciones virtuales
  • Serialización hacia / desde una secuencia
  • sobrecargue los operadores aritméticos (no se usan con frecuencia en la vida real pero es fácil escribir una prueba).

Si tienes mala suerte, pueden pensar

  • La herencia múltiple y las clases base virtuales es algo que debe saber.
    • No, pero algunas personas se vuelven locas.

Al tomar una opción múltiple

  • Comprender toda la terminología OO
  • Conozca las formas en C ++ de implementar OO

Entrevista en persona

  • Todo lo anterior.
  • Conocimiento de recursividad
  • Cómo convertir la recursividad en un bucle
  • Cómo estimar la complejidad de Big O ()
  • Los algoritmos de ordenación estándar (no solo burbuja).
Martin York
fuente
1
Soy un programador de C en lugar de C ++, por lo que no sé hablar ... pero nunca he oído hablar de RIAA y la regla de los tres. Sin embargo, he oído hablar de RAII (la adquisición de recursos es la inicialización, es decir, su destructor debe limpiar su propio desorden) y sé que si su código necesita un ctr de copia, un operador de asignación de sobrecarga o un destructor, necesita los tres. Me parece que una entrevista que es una trivial cursi en la jerga de programación en lugar de una prueba de tus habilidades, dice algo malo sobre la compañía.
1
E igualmente, si preguntan sobre la herencia múltiple y la recursividad, supongo que su código base es un gran desastre. Si esperan que conozca todos los algoritmos de clasificación comunes de la nada, cómo desenrollar la recursividad, serialización de objetos, etc., también dice algo malo sobre la compañía. ¿No esperan que sus desarrolladores sean robots? En el mundo real, buscas esas cosas antes de usarlas. Incluso si conozco la teoría detrás de todas esas cosas, aún las buscaría, solo para asegurarme de usar la solución óptima en lugar de algo así, así que se me ocurrió.
@Lundin: No necesita conocer los nombres sedosos pero sí conocer los principios, al mencionarlos aquí, es más fácil buscarlos. Debe conocer los algoritmos de clasificación porque necesita saber cuál usar y cuándo (y, lo que es más importante, por qué) (cosas que los robots no pueden hacer, pero los humanos lo hacen muy bien).
Martin York
No hay nada intrínsecamente malo con la recursividad o la herencia múltiple. El problema es con los desarrolladores sobre el uso (y hacerlo incorrectamente). Algunos problemas solo pueden resolverse (fácilmente) usando la recursividad (analizando primero la profundidad de la estructura de un árbol).
Martin York
@Lundin: Ver devblog.seomoz.org/2011/10/679
Martin York
-1

Conseguí en mi última entrevista:

Diferencia entre pasar un objeto a una función por valor / referencia / puntero y dónde y por qué haría eso.

Cambie los 2 últimos 8 bits de un entero, por ejemplo, RGBA a RGAB.

¿Qué es la RIAA?

Defina la meta programación de la plantilla: puede recibir una pregunta en términos de "resolver este problema con TMP .."

¿Qué significa mutable, volátil, constante, etc., etc.? Conozca todas las palabras clave.

herencia múltiple .... una y otra vez.

Subprocesamiento múltiple: consumidor productor y objetos de memoria compartida almacenados temporalmente

Algunas preguntas más sobre la periferia:

Agregación y composición UML

Patrones de diseño: implementar un singleton ... ¿Cuáles son los componentes comunes de MVC?

Pepe
fuente