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.
fuente
Respuestas:
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".
fuente
Puedo ver tres posibilidades aquí.
fuente
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.
fuente
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:
Una respuesta incorrecta típica puede "atravesar" solo el primer nivel e imprimir / comparar:
Entonces, al codificar un ejemplo recursivo que atraviese todos los niveles, mencionaría cosas como:
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.
fuente
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.
fuente
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).
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
El
object
en cuestión está formado por las partesA,B and C
, y forma atriangle
. 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 C
puede 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 soloA == 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.
Sí, puede responder la preguntaare all my parts equal
utilizando 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.
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.
fuente
¿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.
fuente