¿Qué puedo hacer cuando el entrevistador no sabe la respuesta a su propia pregunta? [cerrado]


48

Ayer tuve una experiencia terrible en una entrevista.

El entrevistador me preguntó acerca de la función virtual pura. Dije: Puede o no tener definición en la clase base, pero las clases derivadas deben proporcionar definición a menos que también quieran ser una clase abstracta.

Pero el entrevistador siguió preguntando que "¿¡¿Puede virtual puro tener definición !!! ???" ... Dije que sí.

Nuevamente dijo "¿Puro?"

Dije si. Está permitido, las clases derivadas pueden llamar explícitamente a esa función si quieren ese comportamiento en particular.

El me envió afuera. Estoy seguro de que no sabe el hecho de que la función virtual pura puede tener definición.

¿Cómo lidiar con este tipo de entrevistadores?

Después de preguntar la segunda vez, ¿debo mentir que no puede tener definición? :)

¿O debería apegarme a mis palabras y perder la oportunidad de trabajo?


51
Debe contactarlos con un ejemplo de una función virtual pura con una definición, para que lo sepan.
GManNickG

22
La sugerencia de GMan es una excelente idea. Es probable que le impresione al entrevistador que le importó lo suficiente el trabajo para hacer un seguimiento, ya sea que lo crea o no. Y si le enseñas algo de la manera menos conflictiva posible, bueno, eso solo debería alentarlo a pensar mejor de ti como desarrollador. Sin embargo, sigue siendo una decisión difícil si quieres trabajar allí o no.
Cody Gray el

47
¿Pero realmente quieres trabajar para esas personas?

29
Uno de mis entrevistadores me había hecho una pregunta que involucraba esta expresión arr[++i] = i. Y cuando dije que esto invoca un comportamiento indefinido y le conté sobre los puntos de secuencia , se quedó sin palabras por un momento, y luego su expresión facial y sus preguntas adicionales me hicieron creer que nunca antes había escuchado estos términos.
Nawaz

10
Tenga en cuenta que los entrevistadores a menudo son seleccionados no por su habilidad técnica sino por su capacidad para evaluar los talentos de comunicación del entrevistado. La habilidad técnica se mide fácilmente, la capacidad de ser productivo y encajar en un equipo no lo es. Me parece que tienes muchas oportunidades para adaptar tu punto de vista y explicar tu insistencia en no hacerlo, pero tampoco lo lograste. Eso no fue bien.
Hans Passant

Respuestas:


82

No. Y deberías agradecer a tus estrellas de la suerte que te extrañó esa bala en particular. Trabajar para personas que se niegan a admitir que podrían no saberlo todo, y se niegan a aprender de los demás, es una experiencia MUY desagradable.


77
Más precisamente, el proceso de entrevista de trabajo funciona en ambos sentidos. Mientras la compañía me juzga como empleado, yo los juzgo como un empleador. Muchos se encuentran con ganas.
SOLO MI OPINIÓN correcta

En efecto. Durante mi entrevista telefónica para un puesto hace unos días, el entrevistador solicitó un ejemplo de algo que demostraría el conocimiento de alguien familiarizado con el idioma que están utilizando. Se agregó una pregunta al respecto en el último minuto a la entrevista en persona. Conozco a estos tipos y sé que son grandes desarrolladores, así que creo que quiero trabajar con ellos. :)
greyfade

49

Ejemplo de una función virtual pura con una definición:

// object.hpp
struct object
{
    // virtual destructor, to allow use as a public base class,
    // but pure to ensure object itself isn't instantiated
    virtual ~object() = 0; 
};

inline object::~object()
{
    // empty implementation
}

66
Este no es solo un ejemplo de una función virtual pura con una definición, sino un ejemplo de cómo puede ser realmente útil. +1.
j_random_hacker

3
No sabía que podías hacer eso. ¡Bueno! = D
gablin

2
Esta es una forma de crear un objeto polimórfico base. Luego puede usarlo para dinamizar de forma dinámica la jerarquía. Útil en algunas circunstancias, por ejemplo, complementos, para verificar que el complemento sea del tipo esperado (con el supuesto de que definitivamente se derivará de su clase base). Por cierto, un destructor virtual puro DEBE tener una definición.
CashCow

Ahora, si solo pudiera ser trivial también, sería bueno.
Deduplicador

42

El problema en cuestión no es la corrección técnica, sino las habilidades sociales / de comunicación. Mantente firme, pero reconoce el punto de vista del entrevistador y permítele salvar la cara.

Una vez que pueda ver lo que estaba pescando (¿"puro?" Es una buena pista), una buena respuesta puede ser:

Se cree comúnmente que las funciones virtuales puras no pueden tener una definición. Sin embargo, técnicamente hablando, para que la función virtual sea pura, debe tenerla =0en la declaración. Todavía puede tener una definición (¡pruébalo, se compilará!). Por supuesto, esto rara vez se usa, y en la práctica, cuando la mayoría de las personas dicen "virtual puro", implican que la definición está ausente.


3
Básicamente copiaste mi comentario 25 minutos. antes de que lo escribiera! ¿Cómo? - +1 y comentario de tema similar eliminado.
Steve314

3
Ese es otro buen punto. Una vez discutí mi calificación en un examen porque le mostré a mi profesor que el código que escribí en el examen compilaría. El compilador no miente ... nunca ...
jmort253

3
Este era exactamente mi pensamiento. Simplemente diciendo "sí puede", sin aclaraciones, me parece claro que el entrevistador pensó que no entendía la pregunta. Al ampliar la respuesta, deja en claro que a) comprende la pregunta yb) realmente sabe la respuesta. No creo que el entrevistador se haya equivocado necesariamente al tratar de presionar el punto, tampoco, es claramente un malentendido bastante común que la gente piense que las funciones virtuales puras no pueden tener una definición.
Dean Harding

10
@Steve, obtienes un viaje en el tiempo desde 500 repeticiones en adelante, debes
haberte

Hice lo mismo hace unos años en una entrevista en C ++ (para un sistema de alto rendimiento) donde le expliqué que usar un objeto de función puede tener un mejor rendimiento que usar un puntero de función debido a la alineación y se lo expliqué. También cité el libro "Efectivo C ++". En realidad se levantó para revisar el libro y dijo que no sabía esto y que estaba impresionado. Es bueno explicar tu respuesta.
softveda

10

Podría haber explicado cómo declarar una función virtual pura que tiene una implementación.

De hecho, desearía que lo hicieras aquí porque tampoco estoy familiarizado con cómo hacerlo.


55
Simplemente declara la función puramente virtual y luego proporciona una implementación. Hacer esto es una práctica poco común, pero en "Eficaz C ++, 3ª edición", Scott Meyers describe algunos escenarios en los que es útil. En particular, dado que la función es puramente virtual, la clase en la que se declara es abstracta, pero debido a que tiene una implementación, le da a las subclases una implementación predeterminada que pueden elegir explícitamente usar si lo desean.

1
Bueno, eso no explica CÓMO se hace. Si alguien está interesado, visite en.wikipedia.org/wiki/… . En cualquier caso, sigo pensando que explicar cómo hacerlo habría sido la mejor respuesta.

1
+1 - y yo segundo tu segunda línea. Peor aún, a menos que estuviera en un estado de ánimo excepcionalmente "pero a veces mal", me habría puesto del lado del entrevistador. El problema es que solo puedes adivinar tus creencias hasta cierto punto, o de lo contrario terminas sin saber nada.
Steve314

1
@ Steve314: Je, creo que cuanto más viejo me hago, más estoy dispuesto a equivocarme. Siempre hay alguien que sabe más que yo. :-)

@Jonathon: sí, pero sin una indicación 100% precisa de cuán seguro debería estar de todas mis opiniones, ¿cómo sé cuáles cuestionar? Y estar abierto a equivocarse, ¿eso significa que siempre debería asumir que otras personas tienen razón y que yo estoy equivocado? Todos podemos estar ocasionalmente confiados pero equivocados, pero ¿eso significa que nunca deberíamos afirmar nuestra confianza? Y si mi nivel de confianza no debería ser mi guía sobre si me quedo con mis armas hasta que vea evidencia sólida, ¿qué debería?
Steve314

6

Muchas veces, cuando entrevisto a un candidato, estoy buscando ver cómo la persona maneja la incertidumbre o enfrenta la confrontación. La próxima vez que esté entrevistando, sea sensible a esto e intente responder constructivamente a la pregunta o explicar su posición. Eso puede ser más importante que la respuesta correcta.


Esta es una respuesta genial.
Neil G

+1: Así es como entrevisto. Me importa más cómo interactuamos e intercambiamos pensamientos más que lo que está bien y lo que no. Elabore su posición y / o explique el razonamiento detrás de ella y demuestre que no solo es competente, sino que también es un "jugador de equipo".
mummey

Otro +1: creo que es importante contratar personas que puedan discutir bien . Si un nuevo empleado no puede defender sus ideas, ¡no llegará lejos en un equipo con otras personas de carácter fuerte!
Zan Lynx

5

He estado en entrevistas donde sabía más que mi entrevistador. Sin embargo, querían que alguien desempeñara un papel y no tenían a nadie (por supuesto) que pudiera entrevistar a ese nivel.

En su caso, ¿siente que fue ignorancia ciega o malentendido genuino? Quizás un correo electrónico de seguimiento con ejemplos y referencias: vea cómo reaccionan antes de decidir.

Me inclino por la "ignorancia ciega" aunque en función de su pregunta y me mantendría bien claro ...


El entrevistador solo hizo esta pregunta y me envió. No puedo contactarlos ya que no tengo identificación de correo electrónico.
bjskishore123

@ bjskishore123: a través de la agencia? Sin embargo, yo me alejaría si esto era que ...
GBN

Sí, a través de consultoría.
bjskishore123

+1 Es una experiencia común. Solo una vez tuve una entrevista con alguien que sabía lo suficiente como para verificar mi conjunto de habilidades correctamente.
Orbling

3

En una situación como esta, propondría escribir una clase simple con una función virtual con un cuerpo y ver si se compila. Por lo menos, propondría googlear el tema.

Si el entrevistador acepta el desafío, admite la derrota y no parece que esté a punto de estrangularte después de eso, entonces debes estar en buena forma. De lo contrario, esta probablemente no sea la persona con la que desea trabajar.


3

Estoy totalmente en desacuerdo con la idea de que debas renunciar a una empresa porque el tipo que te está entrevistando no sabe la respuesta a su pregunta. Incluso cuando trabajas, vas a conocer personas obstinadas incluso cuando están equivocadas. Es una buena habilidad maniobrar a las personas hacia la respuesta correcta.

En mi caso, el entrevistador preguntó cómo calcular la varianza de muchos números en muchas máquinas. Comencé diciendo que la varianza es la media de los cuadrados menos el cuadrado de las medias. Él intervino, "no, es E[(x - mu)²]".

Le dije: "Sí, tienes razón. Pero tu fórmula es la misma que la mía. Vamos a deducirlo juntos". Y luego lo derivamos juntos.

En su situación cuando reconoce que el entrevistador es incrédulo, necesita cambiar su enfoque. Dígale que es una característica poco conocida (esto es para que parezca menos sabelotodo) y, si lo desea, le enviará un programa de ejemplo o una referencia a un libro de C ++ después de la entrevista (esto es para que la entrevista pueda avanzar con gracia).

Intenta imaginar las cosas desde su perspectiva. Va a entrevistar a personas algún día y a veces se equivocará. ¿Cómo le gustaría que un candidato brillante respondiera a esa pregunta?


La media es E [(x - mu) ²] aunque probablemente quisiste decir eso. Entonces puede evaluar eso a E [x² - 2xmu + mu²] = E [x²] - E [2xmu - 2mu²] - E [mu²] E [(x-mu)] siempre es 0 y E [mu²] = mu² como mu es una constante así probada.
CashCow

2

Creo que deberías haber trasladado la entrevista del escritorio a una computadora con un compilador. Eso habría resuelto el problema.


1

EDITAR: aparentemente estoy totalmente equivocado, vea los comentarios debajo de esta respuesta. Dejando la respuesta aquí con fines educativos.

Lamentablemente, estás equivocado. Una función virtual puede tener una definición; una función virtual pura puede no serlo. La falta de definición es lo que lo hace puro.


8
No, lo siento. El tiene razón.
GManNickG

1
BZZT !!! ¡Incorrecto! El = 0 es lo que lo hace puro. Dichas funciones pueden tener definiciones.
Edward Strange el

44
eh, colorame sorprendido. Nunca supe esto.
Philip Potter

3
Wikipedia explica que "Aunque los métodos virtuales puros generalmente no tienen implementación en la clase que los declara, los métodos virtuales puros en C ++ pueden contener una implementación en su clase de declaración, proporcionando un comportamiento alternativo o predeterminado al que una clase derivada puede delegar si es apropiado. " Entonces, aunque es inusual o atípico que una función virtual pura defina su implementación, es posible.
Cody Gray el

1

Sabes que lo que respondiste es correcto. En mi opinión, hizo un buen trabajo al atenerse a su respuesta ya que tenía razón. ¡¡¡No hay necesidad de mentir porque si no hoy, algún otro entrevistador aprenderá sobre las funciones virtuales puras !!!! .. Él también podría estar probándote para comprobar qué tan firme eres en tus decisiones. ¿Eres la persona que se deja llevar fácilmente? No hay necesidad de perder la esperanza, ya que sabes lo correcto

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.