Si pudieras hacerle una pregunta a un programador de C ++ para medir sus habilidades en C ++, ¿cuál sería?
La pregunta que creo que es mejor es: ¿Puedes llamar a "eliminar esto"? dentro de una función miembro? (Pongo esto como un enlace para que pueda pensarlo primero, luego vaya a La mejor pregunta de entrevista de C ++ - ¡Nunca! Para ver la respuesta correcta).
No pregunto esto porque espero que la mayoría de la gente sepa la respuesta. Si lo hicieran, no sería una pregunta tan útil. Pido ver si pueden llegar a la respuesta correcta y cómo lo hacen.
La mejor pregunta de entrevista de C ++ sería un problema de programación, no una pregunta de prueba.
fuente
CString
,char*
,std::string
, etc .; ¿Devuelven una nueva cadena o invierten en su lugar? hacen un bucle manual sobre los caracteres o llaman a una función de biblioteca. Y, por supuesto, si no pueden hacer algo simple como invertir una cadena, ¡eso también te dice mucho sobre ellos! También hay muchas preguntas de seguimiento, como si funciona con Unicode, si funciona con UTF-8, etc.Les preguntaría qué les gusta de C ++ 0x. A partir de esto, podría "agruparlos" en varios estereotipos:
Lo más probable es que algunos de estos cubos sean perfectos para usted y otros "gracias por venir". Como una pregunta que le brinda mucha información rápidamente, este es mi ganador.
fuente
Estoy algo desconcertado de por qué "¿puedes eliminar esto?" Se considera una pregunta interesante. Cualquiera que haya escrito código COM en C ++ sabe que lo primero que aprende el primer día de la programación COM básica es cómo usar "eliminar esto" correctamente. Supongo que podría ser útil determinar si, por ejemplo, alguien está mintiendo en su currículum sobre haber escrito programas COM, pero como una pregunta general de C ++, si alguien no puede responder de inmediato, entonces no encajarán bien para mi equipo
De todos modos, si su objetivo es llegar a una pregunta que mida las habilidades de C ++, elegir una pregunta es el camino equivocado. Voltealo. La pregunta correcta es:
Esta no es la pregunta que te da la respuesta que deseas. Todos dicen "ocho" independientemente. La pregunta que te da la respuesta que deseas es:
Y boom , ahora los tienes. Si el candidato piensa que "algo que ver con la recursividad" o "cuándo usar un destructor virtual" es el tipo de cosas con las que un siete tiene dificultades, entonces sabe que sabe un poco sobre la recursividad o los destructores o lo que sea , y que su conocimiento no va mucho más allá de eso.
Eso debería darle una calibración mucho mejor que hacer una pregunta de trivia. Si me obligara a formular una buena pregunta sobre un hecho sobre C ++, probablemente le preguntaría algo como "¿cómo diseñaría el analizador semántico y el generador de código para la parte de un compilador de C ++ que se ocupa de métodos virtuales? llamado en un destructor de clase base? " Debes hacer preguntas que tengan que ver con cosas reales en las que trabajas y en las que es probable que el candidato trabaje. Ese es un problema en el que tuve que trabajar una vez, y creo que daría una idea bastante buena de cómo una persona diseña analizadores semánticos y generadores de código, así como su conocimiento de C ++.
fuente
Solo por diversión, he tenido programadores de C ++ tambaleándose con este pequeño bebé:
¿Por qué esto se ejecuta en un bucle infinito (y sí, está escrito correctamente)?
Es sorprendente cuántos se tropiezan. Por supuesto, no puedo usarlo más después de que apareció en Stack Overflow . Murmurar ... murmurar ...
(Para obtener la respuesta correcta, lea la confesión y definitivamente lea los comentarios)
Pregunta de bonificación añadida
Existe el clásico de todos los tiempos FizzBuzz (como aparece en el ahora famoso artículo Coding Horror ). En realidad, nunca lo usé en una entrevista, pero después de compartirlo con el equipo de desarrollo una hora de almuerzo, los resultados fueron ... mmm ... sorprendentemente precisos.
Confesión
Estaba atrapado en la respuesta estándar "x ++ devuelve el valor original". Sin embargo, la respuesta correcta es que el comportamiento no está definido debido a los puntos de secuencia. Nadie mencionó los puntos de secuencia en todas las veces que usé esto hasta que lo publiqué aquí.
He sido educado y realmente me gustaría agradecer a todos los que se han tomado el tiempo para comentar.
fuente
Lo primero que debe hacer es una pregunta simple sobre punteros. Me sorprendió ver cuántas personas que afirman conocer C ++ o, lo que es peor, C, no pueden responder. Luego haría una pregunta simple sobre las funciones virtuales. Esta combinación le dice muy rápidamente si la persona realmente conoce C ++ o no.
fuente
Eso depende mucho de qué tipo de C ++ está escrito en su empresa. (Cuando tuve que contratar programadores de C ++, nunca pregunté
delete
porque les pregunté sobre técnicas para evitar tener que escribir pordelete
completo).Idealmente, desea contratar personas que escriban código por encima del nivel de lo que su equipo escribe actualmente, pero no demasiado por encima, a menos que desee combinar esto con la capacitación del equipo para llevarlo a un nivel superior.
fuente
fuente
Creo que les preguntaría qué más saben, o más probablemente les haría una pregunta en algo muy diferente.
Demasiados codificadores de C ++ sobre quienes tienen poca experiencia con otros lenguajes. La experiencia estrecha suele ser restrictiva.
fuente
La mejor pregunta para un gran desarrollador de C ++ es "¿Dime las razones por las que NO deberíamos usar C ++?"
fuente
No creo que haya una mejor pregunta de C ++. C ++ es un lenguaje tan grande, y con C ++ 0X ha crecido, que puede ser fuerte en un cierto subdominio del lenguaje y no poco sobre otra parte del lenguaje. Una pregunta de 'una sola vez' solo ejercitará el conocimiento de alguien de una pequeña parte del idioma y se arriesgará a pasar por alto su conocimiento de otros aspectos del idioma.
fuente
Hay un montón en StackOverflow. Compartiré algunos:
/programming/2428404/tricky-interview-question-for-c
/programming/50447/favorite-c-interview-question
/programming/4269838/interview-question
/programming/2532102/can-a-pointer-ever-point-to-itself
/programming/3055141/interview-question-about-virtual-functions-in-c
fuente
Mi pregunta favorita es simple:
a) ¿Comenzó con C y luego cambió a C ++?
b) Si es así, ¿cuáles fueron las primeras cosas que aprendió a hacer de manera diferente?
Esta respuesta generalmente me da una idea de cómo el programador se acerca a C ++ y su comprensión de OOP y C ++ en general.
Aquí no hay una respuesta "correcta" o "incorrecta", pero generalmente es una excelente manera de tener una idea de dónde viene el candidato.
fuente
En realidad, le presentaría a la persona un poco de código de otro lenguaje de programación que estaba orientado a objetos y preferiblemente no en la lista de lenguajes que conoce. El código debe representar una tarea simple realizada en ese idioma.
El objetivo de esto no sería determinar su conocimiento de C ++ sino descubrir qué tan bien entienden la programación. Cuando comprenda los conceptos básicos detrás de la programación, podrá resolver problemas.
fuente
¿Cómo implementar funciones virtuales en C ++? Explicar un escenario del mundo real.
fuente
Por el momento, diría: "¿Cómo implementaría un constructor de movimiento para un contenedor?"
Mi razonamiento es que, dado que los constructores de movimientos son una característica del próximo estándar y no el actual, la respuesta del candidato indicará si el desarrollador en cuestión persigue activamente el conocimiento sobre su lenguaje o simplemente se atiene a los trucos que conoce.
fuente
Creo que me gustaría pedir su opinión sobre el diseño de, por ejemplo,
std::string
. También me pregunto si han usado otros diseños (por ejemplo, MFC / ATLCString
,wxString
etc.) y asumiendo que tienen, les piden que comparar y contrastar los diseños.Las cadenas se usan lo suficiente como para que casi cualquier persona con experiencia real en el uso de C ++ debería haber usado al menos uno o dos de los anteriores. Casi todos los diseños incorporan algunos compromisos entre la pureza teórica y el uso práctico. Algunos pueden funcionar realmente bien, pero solo si se usan exactamente como se esperaba, mientras que otros intercambian una mayor versatilidad por alguna posible torpeza. En definitiva, casi cualquier persona que tenga experiencia real debe ser capaz de expresar algunas opiniones significativos de sus diseños y las opiniones que debe contar una buena cantidad acerca de cómo piensan, cómo se diseñan código, el grado en el que el valor pragmatismo frente a la pureza teórica, y así.
fuente