¿Soy solo yo o esta es una pregunta de entrevista de tecnología desconcertante? [cerrado]

153

Antecedentes

Me pidieron en una entrevista técnica que escribiera un algoritmo para atravesar un "objeto" (observe las comillas) donde A es igual a B y B es igual a C y A es igual a C.

Eso es. Esa es toda la información que me dieron.

Le pregunté al entrevistador cuál era el objetivo, pero aparentemente no había ninguno, solo "atravesar" el "objeto".

No sé de nadie más, pero me parece una pregunta tonta. Le pregunté de nuevo: "¿Estoy buscando un valor?". No. Simplemente "atravesarlo".

¿Por qué querría recorrer sin parar este "objeto"? ¿Para derretir mi procesador quizás?

La respuesta según el entrevistador fue que debería haber escrito una función recursiva.

Bien, entonces ¿por qué no simplemente pedirme que escriba una función recursiva? ¿Y quién escribiría una función recursiva que nunca termina?

Mi pregunta:

¿Es una pregunta válida para el resto de ustedes y, de ser así, pueden darme una pista de lo que podría estar perdiendo? Quizás estoy pensando demasiado en resolver problemas del mundo real. He estado codificando con éxito durante mucho tiempo, pero este proceso de entrevista técnica me hace sentir que no sé nada.

Matt Cashatt
fuente
197
La única respuesta correcta aquí es "No entiendo la pregunta".
user16764
16
Bueno, si realmente no dijeron qué son A, B y C (como si fueran objetos) y ponen el objeto entre comillas, parecen tener su propia terminología única. Si preguntaran cómo atravesar un gráfico de objeto donde el objeto A hace referencia al objeto B que hace referencia al objeto C que hace referencia al objeto A, habría sido inteligible, pero no sé por qué tiene que ser recursivo. Por cierto, no tiene por qué ser infinito si mantiene una lista de objetos ya visitados. Pero sí, me preocuparía trabajar para una empresa utilizando esa prueba; parecen confundidos.
psr
77
La pregunta como se describe no tiene sentido, y también lo es la respuesta. O estás recordando mal lo que le pidieron, o la persona que hace la pregunta es un idiota y probablemente sea mejor que no trabajes con él.
Mason Wheeler
26
¿Por qué las entrevistas de desarrollo tienen que ser dolorosas? ¿No podemos simplemente sentarnos y mirar el código del otro y discutir? Los desarrolladores sabrán dónde están otros desarrolladores haciendo esto y no tomará 6 horas. Las pruebas de código son las peores. No me importa admitir que soy un asco para ofrecer soluciones óptimas, mientras que 3 desarrolladores que nunca he conocido me observan mientras escribo.
Erik Reppen
19
Tuve que revisar tu perfil para ver si vivías en la misma área que yo porque trabajé por un corto tiempo en un trabajo donde un compañero que me entrevistaba me preguntó: "¿Estás orientado a los detalles?" A lo que respondí: "¿Puedes ser más específico?" Y su respuesta: "No puedo explicarlo, pero conozco a una persona orientada a los detalles cuando veo su trabajo". Ambigüedad amorosa.
Jesse C. Slicer

Respuestas:

305

Es una pregunta desconcertante e inválida para una entrevista. El entrevistador no pudo articular claramente qué era lo que estaba buscando y esperaba que leyera su mente en lugar de responder de manera significativa a sus intentos apropiados para aclarar el enunciado del problema. Considérese afortunado de no haber conseguido el trabajo.

El significado del verbo "atravesar" que opera en un "objeto" genérico es ambiguo, en mi opinión. Comience a sustituir una variedad de diferentes sustantivos por la palabra objeto y rápidamente se hace evidente que el recorrido de un objeto solo es significativo para un pequeño subconjunto del universo de cosas que son objetos.

Tiene sentido "atravesar" los nodos de un "árbol binario". No tiene sentido "atravesar" un "payaso". Sin embargo, un objeto puede representar tan fácilmente un "payaso" como puede representar un "árbol binario".

Mate
fuente
99
¡Recientemente me he metido en la práctica de reemplazar sustantivos en preguntas tontas con la palabra "payaso" +1 señor!
rupjones
108
"Recorrido del payaso": qué gran meme para una "pregunta técnica estúpida". ¡Pásalo!
radarbob
8
Hmm, puedo atravesar var payaso = {sombrero: "con flor", cabello: "rojo brillante", nariz: "bola roja", boca: "boca roja enmarcada en blanco", ...};)
mplungjan
37
¡Toda mi área de investigación teórica de CS implica un recorrido iterativo de payasos, insensible terrón!
66
@JackManey: Todos saben que los payasos deben atravesarse recursivamente .
Adam Robinson
39

Puedo ver tres posibilidades aquí.

  1. Ella era completamente incompetente. No hay mucho más que decir sobre eso.
  2. Ella deliberadamente lo estaba haciendo ambiguo, para ver qué tan bien harías al hacer preguntas para descubrir lo que se suponía que debías hacer, y lo que realmente buscaba.
  3. Por alguna razón, ella decidió que no quería que te contrataran, por lo que hizo una pregunta que no tenía respuesta. Cuando le preguntaron sobre sus habilidades, omitió esa parte y dijo algo como: "Le pregunté cómo atravesar un gráfico de tres nodos, y él estaba completamente perplejo, ni siquiera tenía idea de cómo para empezar. ¡Obviamente es extremadamente incompetente! Ni siquiera deberíamos considerar contratarlo ".
Jerry Coffin
fuente
77
"Le pregunté sobre cómo atravesar un gráfico de tres nodos, ..." Si la publicación de OP lo corrijo, no hay mención de un gráfico o nodo. solo "objetos". Esta es una forma de "falso testimonio". ¡Si ella escribe algo como esto puede ser procesado!
Emilio Garavaglia
99
¿Sueles utilizar pronombres femeninos cuando no se menciona el género de la persona?
Chan-Ho Suh
8
@EmilioGaravaglia: En primer lugar, es posible que nunca se escriba. En segundo lugar, incluso suponiendo que esté escrito, sin duda nunca tendrá acceso a él, solo una carta de "lamentamos informarle ...". Tercero, a menos que tenga una grabación de la entrevista, ¿cómo probaría que el entrevistador no estaba diciendo la verdad? En pocas palabras: en teoría deberías tener razón, pero en realidad, prácticamente no hay posibilidad.
Jerry Coffin
11
@ Chan-HoSuh: El OP menciona el género en uno de sus comentarios.
Jerry Coffin
44
@JerryCoffin Mis disculpas entonces.
Chan-Ho Suh
32

Esto es una suposición descabellada, pero suponiendo que el entrevistador esté hablando de referencias de puntero (y es una pregunta capciosa), la respuesta es: no hay nada que recorrer, porque todas las referencias apuntan al mismo objeto.

¿Una función recursiva? Eso es para atravesar un árbol. No veo nada en la pregunta original que implique que está hablando de un árbol.

Robert Harvey
fuente
28
Siga adelante. Hay mejores empresas para trabajar.
shufler
77
Nah Es una causa perdida. Si el entrevistador pensara que estaba equivocado, no habría hecho la pregunta en primer lugar. Una vez me pidieron que escribiera una muestra en cualquier idioma que quisiera; la persona que me entrevistó asumió que el pseudocódigo era una opción válida.
Robert Harvey
8
@Robert Harvey: ¿Qué tiene de malo el pseudocódigo?
James
66
@Robert Harvey: Para ser justos, todo lo que la mayoría de la gente quiere es descubrir cómo resuelve el problema para no descubrir si ha aprendido la sintaxis de un idioma en particular. Es bastante común que los algoritmos se especifiquen en pseudocódigo.
James
8
¿Cuál es la diferencia entre pseudocódigo y Python? :)
David Robinson el
15

Si bien no puedo hablar por este entrevistador específico, he visto preguntas similares en una entrevista de posición de desarrollador front-end, por lo que el lenguaje que usaré en este ejemplo será JavaScript.

Dado:

var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}

Una respuesta incorrecta típica puede "atravesar" solo el primer nivel e imprimir / comparar:

'value1'
2
[Object object]

Entonces, al codificar un ejemplo recursivo que atraviese todos los niveles, mencionaría cosas como:

  • Manejo de referencia circular
  • Cómo manejar matrices (¿deberían atravesarse recursivamente también?)
  • ¿Deben evaluarse las funciones y procesarse su valor de retorno?
  • Para JavaScript: ¿el prototipo debe coincidir y las propiedades heredadas también deben compararse?

Entonces, la "solución" que supongo que el entrevistador estaba buscando era comenzar una conversación sobre una pregunta aparentemente simple que tiene muchos temas avanzados: recursividad, punteros / referencias, expectativas, etc.

WSkid
fuente
55
Eso tiene sentido de esa manera, WSKid. Desafortunadamente, ninguno de ese contexto fue ofrecido.
Matt Cashatt
3
Es cierto, esto realmente se está agarrando a las pajitas. Deberían haber presentado un caso de uso, o un ejemplo de 3 objetos, o algo para dar una pista al problema real.
WSkid
1
Estaba pensando lo mismo, solo para los atributos de objetos python. Sabiendo que la pregunta que espera una respuesta en que habría sido muy útil, pero que se podía esperar por el contexto de la posición, es decir pitón dev, c # dev, javascript dev, php dev, etc
Ken
2
¡+1 para encontrar un contexto en el que la pregunta tenga sentido!
Donal Fellows
9

Algunos entrevistadores intentan específicamente hacer preguntas para ver si el candidato es lo suficientemente inteligente y honesto como para dar una de estas dos respuestas:

No lo sé.

o tal vez:

No puedo responder eso como se dijo.

No quieren un candidato que acepte BS puro como una especificación, y pierda el tiempo y el pago de su empleador tratando de implementarlo.

hotpaw2
fuente
66
Toda nuestra vida estamos condicionados, en un escenario como el de esta entrevista, para poder responder a una pregunta. Si decir "No sé" (lo cual hice, por cierto) fue aceptable, entonces también me deberían haber dicho eso de antemano. Un intento de buena fe para responder una pregunta de la entrevista no equivale necesariamente a cómo se trataría una especificación o conjunto de requisitos inadecuados. Y creo que este es el punto, estas entrevistas se han desviado y en muchos casos se han perdido el punto.
Matt Cashatt el
Que buena respuesta. Sin embargo, no olvide que se necesita mucha experiencia para poder decir esto. Personalmente, puedo decir que la experiencia con las entrevistas es una parte vital del trabajo. @MatthewPatrickCashatt si el entrevistador no acepta "No lo sé", entonces no hay mucho más que decir IMO.
arin
2
Las preguntas capciosas son trolling o incompetencia absoluta. De cualquier manera, si un entrevistador hace preguntas capciosas, no quiere trabajar allí.
Ben Brocka
7

Me parece que esta es una pregunta (poco articulada) con respecto a una lista circular vinculada. Probablemente habría preguntado si eso es lo que se quería decir (porque la respuesta sería ciertamente diferente a otra anterior, es decir, todas son referencias al mismo objeto).

Si se trata de una pregunta de lista vinculada, entonces (en este caso) tiene una lista individualmente vinculada, donde el nodo final apunta al otro extremo (aunque si estaba redactado como usted dice, entonces puede estar doblemente vinculado si A apunta a B y C, pero una aclaración por parte del entrevistador ayudaría a esto).

A -> B -> C -> A

Además (y esto sucede todo el tiempo), el entrevistador puede haber leído esta pregunta, pensó que era una "buena" pregunta, pero en realidad no sabía la respuesta (ni siquiera lo que significaba).

Maich
fuente
1
Gracias Maich. Creo que tu punto final es el más probable.
Matt Cashatt
5

Parte del desafío aquí es obtener más detalles haciendo preguntas específicas para descubrir que hay una estructura de árbol y cuáles son los componentes involucrados en hacer un recorrido. Puede haber asumido que no hay muchas otras estructuras de datos que uno atraviesa además de los árboles, pero eso es un salto en mi mente.

JB King
fuente
1
Gracias JB King. Es bueno un buen recordatorio para hacer preguntas. En este caso particular, lo hice. De hecho, incluso pregunté si era un árbol y la respuesta fue no. Pero su punto de vista es que es mi responsabilidad recabar la mayor cantidad de información posible haciendo preguntas.
Matt Cashatt
3

Es posible que quieran tratar de descubrir cómo lidiar con problemas extraños. Pero en este caso, no tiene nada que ver con una "entrevista técnica". Se parece más a una entrevista psicológica.

BenjaminB
fuente
55
Me encantaría ver un ejemplo de una de sus especificaciones técnicas para un proyecto de software.
Chuck D el
Si la entrevista es para un analista de sistemas o un puesto similar, esto es totalmente adecuado: su trabajo es ayudar a los clientes a aclarar sus preguntas, en lugar de responderlas.
reinierpost
1
@ reinierpost - No lo fue.
Matt Cashatt
3

Escriba un algoritmo para atravesar un "objeto" (observe las comillas) donde A es igual a B y B es igual a C y A es igual a C.

Parece que la mayoría de la gente supone que A, B y C son indicadores, pero también podrían ser payasos con la misma facilidad. (O miembros de la clase de payasos). O podrían ser nombres de payasos. (O nombres de clase. O subclases de la clase de payaso).

Hubiera cambiado las tornas y preguntado si así es como normalmente preparan las especificaciones de desarrollo, y luego les diría cómo podría ayudarlos con la etapa de desarrollo de la especificación de requisitos. La mala comunicación de las expectativas conduce a un producto deficiente del trabajo. O lo conseguirían o no, si no lo consiguieran, me iría.

Jim
fuente
2

Si bien la pregunta estaba mal redactada y el entrevistador claramente no fue útil para proporcionar ninguna dirección, tengo una opinión ligeramente diferente de lo que se le preguntó.

Creo que el entrevistador estaba buscando una solución que atravesara la estructura del objeto utilizando algún tipo de reflexión. La información de que los tres objetos eran iguales debería haber provocado una conversación de comparación de identidad de objeto (A == B significa que los objetos son realmente el mismo objeto en la memoria), o comparación de igualdad de objeto (A == B significa que los valores de los objetos son lo mismo).

El hecho de que el entrevistador dijera que la respuesta era una función "recursiva", probablemente indicaba que se esperaba una discusión sobre copia y comparación profunda versus superficial.

Lucas
fuente
2

Llegué muy tarde a esta fiesta, pero creo que el entrevistador hizo esta pregunta incorrectamente:

Escriba un algoritmo para atravesar una matriz y determine que A es igual a B y B es igual a C y A es igual a C, en ese orden.

Entonces la respuesta correcta sería un algoritmo recursivo.

pgthew
fuente
1

Me pidieron en una entrevista técnica que escribiera un algoritmo para atravesar un "objeto" (observe las comillas) donde A es igual a B y B es igual a C y A es igual a C.

El objecten cuestión está formado por las partes A,B and C, y forma a triangle. La persona simplemente pregunta si el objeto (una colección) contiene todas las partes iguales.

El entrevistador quiere saber si se le presentan partes, ¿ A, B and Cpuede decir si son todas iguales sin quedarse atrapado en un bucle infinito? Esta pregunta es estúpidamente simple de entender y aun así se las arreglaron para hacerle la pregunta.

Todos son iguales cuando A == B && B == C && A == C, pero eso se puede simplificar a solo A == B && A == C.

La simplicidad de la pregunta resultó en confusión, y realmente está mal redactada.

La redacción correcta debería haber sido.

Escriba un algoritmo para verificar las partes de una colección para ver si todas son iguales entre sí. Se debe tener cuidado de no quedar atrapado en un bucle infinito. Por ejemplo; si las partes A es igual a B y B es igual a C y A es igual a C podría causar problemas.


La respuesta según el entrevistador fue que debería haber escrito una función recursiva.

Sí, puede responder la pregunta are all my parts equalutilizando funciones recursivas. No, esta no es una solución eficiente.

EDITAR : Después de pensarlo un poco. No, no es posible verificar que una colección contenga todas las partes iguales utilizando una función recursiva.

La solución más eficiente es la siguiente.

function are_all_equal(parts)
{
   for(int i=1; i < parts.length; i++)
       if parts[i] is not same as parts[0]:
           return false;
   return true;
}

print are_all_equal(parts) ? "yes" : "no";

Este problema ocurre en la programación, y pedirle a alguien que escriba un algoritmo para probar una colección es perfectamente normal. Dependiendo del lenguaje de programación, este problema a menudo se puede resolver con una sola línea de código.

La redacción como lo hicieron, y esperar la respuesta incorrecta no es normal. Ya que esta pregunta fue hecha hace un año. Realmente espero que termines trabajando en otro lugar. Me interesaría saber en la publicación original cómo le van las cosas.

Reactgular
fuente
2
Las cosas salieron geniales: corrí lo más rápido que pude de esa compañía y desde entonces he sido feliz.
Matt Cashatt
0

¿Era esta una pregunta de la entrevista de Java? Si es así, es posible que él quisiera poner a prueba sus habilidades anulando "hashcode" e "equals".

Tendría que anular estos dos métodos y utilizar el método de igualdad anulada para detener la recursividad cuando compara A con A.

Sin anular, su comparación para el "objeto" A a B, A a C y A a A resultará verdadera, pero después de anular, solo cuando el objeto A en comparación con el objeto A devuelva verdadero, mientras que otras comparaciones devolverán falso.

rpatali
fuente