fundo
Em uma entrevista técnica, fui solicitado a escrever um algoritmo para percorrer um "objeto" (observe as aspas) em que A é igual a B e B é igual a C e A é igual a C.
É isso aí. Essa é toda a informação que me foi dada.
Perguntei ao entrevistador qual era o objetivo, mas aparentemente não havia um, apenas "atravesse" o "objeto".
Não conheço mais ninguém, mas isso me parece uma pergunta boba. Perguntei novamente: "Estou procurando um valor?". Não. Apenas "atravesse".
Por que eu iria querer fazer um loop infinito por esse "objeto"? Para derreter meu processador, talvez?
A resposta de acordo com o entrevistador foi que eu deveria ter escrito uma função recursiva.
OK, então por que não simplesmente me pede para escrever uma função recursiva? E quem escreveria uma função recursiva que nunca acaba?
Minha pergunta:
Esta é uma pergunta válida para o resto de vocês e, se sim, você pode fornecer uma dica sobre o que posso estar perdendo? Talvez esteja pensando demais em resolver problemas do mundo real. Eu tenho codificado com sucesso por um longo tempo, mas esse processo de entrevista técnica me faz sentir que não sei de nada.
fonte
Respostas:
É uma pergunta de entrevista desconcertante e inválida. O entrevistador não conseguiu articular claramente o que estava procurando e esperava que você lesse a mente dele, em vez de responder de maneira significativa às suas tentativas apropriadas de esclarecer a afirmação do problema. Considere-se com sorte por não ter conseguido o emprego.
O significado do verbo "atravessar" operando em um "objeto" genérico é ambíguo, na minha opinião. Comece a substituir uma variedade de substantivos diferentes pela palavra objeto e rapidamente se torna óbvio que a travessia de um objeto só é significativa para um pequeno subconjunto do universo de coisas que são objetos.
Faz sentido "atravessar" os nós de uma "árvore binária". Não faz sentido "atravessar" um "palhaço". No entanto, um objeto pode representar tão facilmente um "palhaço" quanto uma "árvore binária".
fonte
Eu posso ver três possibilidades aqui.
fonte
Este é apenas um palpite, mas supondo que o entrevistador esteja falando sobre referências de ponteiro (e é uma pergunta enganosa), a resposta é: não há nada a percorrer, porque todas as referências apontam para o mesmo objeto.
Uma função recursiva? Isso é para atravessar uma árvore. Não vejo nada na pergunta original que implique que ele esteja falando de uma árvore.
fonte
Embora eu não possa falar para esse entrevistador específico, vi perguntas semelhantes em uma entrevista de posição de desenvolvedor front-end, portanto o idioma que utilizarei neste exemplo será JavaScript.
Dado:
Uma resposta incorreta típica pode "atravessar" apenas o primeiro nível e imprimir / comparar:
Portanto, ao codificar um exemplo recursivo que atravessaria todos os níveis, eu mencionaria coisas como:
Portanto, a "solução" que eu acho que o entrevistador buscava era iniciar uma conversa sobre uma pergunta aparentemente simples, com muitos tópicos avançados - recursividade, indicadores / referências, expectativas etc.
fonte
Alguns entrevistadores tentam especificamente fazer perguntas para ver se o candidato é inteligente e honesto o suficiente para dar uma dessas duas respostas:
Eu não sei.
ou talvez:
Eu não posso responder isso como afirmado.
Eles não querem um candidato que aceite BS puro como uma especificação e desperdice o tempo de seus empregadores e pague tentando implementá-los.
fonte
Parece-me que esta é uma pergunta (pouco articulada) sobre uma lista circular vinculada. Eu provavelmente teria perguntado se era isso o que queria dizer (porque a resposta seria certamente diferente de outra acima, ou seja, todas elas são referências ao mesmo objeto).
Se essa era uma pergunta de lista vinculada, você (nesse caso) tem uma lista vinculada individualmente, em que o nó final aponta para o outro extremo (embora se tenha sido redigido como você diz - então pode ser duplamente vinculado se A apontar para B e C - mas esclarecimentos por parte do entrevistador ajudariam nisso).
A -> B -> C -> A
Além disso (e isso acontece o tempo todo), o entrevistador pode ter lido essa pergunta, pensado que era uma pergunta 'boa', mas na verdade não sabia a resposta (ou mesmo o que isso significava).
fonte
Parte do desafio aqui é obter mais detalhes fazendo perguntas específicas para descobrir que existe uma estrutura em árvore e quais são os componentes envolvidos na execução de uma travessia. Pode ter havido a suposição de que não existem muitas outras estruturas de dados que se atravessa além das árvores, mas isso é um salto para minha mente.
fonte
Eles podem tentar descobrir como você lida com problemas estranhos. Mas, neste caso, não tem nada a ver com uma "entrevista técnica". Parece mais uma entrevista psicológica.
fonte
Parece que a maioria das pessoas supõe que A, B e C são indicadores, mas também poderiam ser palhaços facilmente. (Ou membros da classe palhaço.) Ou podem ser nomes de palhaços. (Ou nomes de classes. Ou subclasses da classe palhaço.)
Eu teria virado a mesa e perguntado se é assim que eles normalmente preparam as especificações de desenvolvimento, e depois lhes diria como eu poderia ajudá-los no estágio de desenvolvimento de especificação de requisitos. Uma comunicação deficiente das expectativas leva a um produto de trabalho ruim. Ou eles pegariam ou não. Se não pegassem, eu iria embora.
fonte
Embora a pergunta tenha sido mal formulada e o entrevistador tenha sido claramente inútil em fornecer qualquer direção, tenho uma opinião um pouco diferente do que estava sendo solicitado.
Eu acho que o entrevistador estava procurando uma solução que atravessasse a estrutura do objeto usando algum tipo de reflexão. As informações de que os três objetos eram iguais deveriam ter solicitado uma conversa sobre comparação de identidade de objetos (A == B significa que os objetos são realmente o mesmo objeto na memória) ou comparação de igualdade de objetos (A == B significa que os valores dos objetos são o mesmo).
O fato de o entrevistador ter dito que a resposta era uma função "recursiva" provavelmente indicava uma discussão sobre cópia e comparação profunda versus superficial.
fonte
Chegando muito tarde para esta festa, mas acho que o entrevistador fez a pergunta incorretamente:
Escreva um algoritmo para percorrer uma matriz e determine que A é igual a B e B é igual a C e A é igual a C, nessa ordem.
Então a resposta correta seria um algoritmo recursivo.
fonte
O
object
em questão é constituído pelas partesA,B and C
e forma atriangle
. A pessoa está simplesmente perguntando se o objeto (uma coleção) contém todas as partes iguais.O entrevistador quer saber se são apresentadas partes,
A, B and C
você pode dizer se elas são iguais sem ficar presas em um loop infinito. Esta pergunta é estupidamente simples de entender e, mesmo assim, eles conseguiram se perguntar.Todos são iguais quando
A == B && B == C && A == C
, mas isso pode ser simplificado para apenasA == B && A == C
.A simplicidade da pergunta resultou em confusão, e é realmente mal formulada.
A redação correta deveria ter sido.
Sim, você pode responder à perguntaare all my parts equal
usando funções recursivas. Não, essa não é uma solução eficiente.EDIT : Depois de um pouco de reflexão. Não, não é possível verificar se uma coleção contém todas as partes iguais usando uma função recursiva.
A solução mais eficiente é a seguinte.
Esse problema ocorre na programação, e pedir a alguém para escrever um algoritmo para testar uma coleção é perfeitamente normal. Dependendo da linguagem de programação, esse problema geralmente pode ser resolvido com apenas uma linha de código.
Escrever como eles fizeram e esperar a resposta errada não é normal. Desde que esta pergunta foi feita há um ano. Eu realmente espero que você tenha acabado trabalhando em outro lugar. Eu estaria interessado em ouvir no post original como as coisas acontecem para ele / ela.
fonte
Esta foi uma pergunta de entrevista em Java, se sim, pode ser que ele queira testar suas habilidades substituindo "hashcode" e "igual".
Você precisaria substituir esses dois métodos e usar o método igual substituído para interromper a recursão ao comparar A com A.
Sem substituir, sua comparação para "objeto" A para B, A para C e A para A resultará verdadeira, mas após a substituição, somente quando o objeto A comparado ao objeto A retornará verdadeiro onde outras comparações retornarão falsas.
fonte