Sou eu ou essa é uma pergunta desconcertante de entrevista técnica? [fechadas]

153

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.

Matt Cashatt
fonte
197
A única resposta correta aqui é "Não entendi a pergunta".
usar o seguinte comando
16
Bem, se eles realmente não disseram o que A, B e C são (como - são objetos) e colocam objeto entre aspas, eles parecem ter uma terminologia única. Se eles perguntassem como atravessar um gráfico de objeto onde o objeto A faz referência ao objeto B que faz referência ao objeto C que faz referência ao objeto A, isso seria inteligível, mas por que ele deve ser recursivo, eu não sei. A propósito, não precisa ser infinito se você mantiver uma lista de objetos já visitados. Mas sim, eu estaria preocupado em trabalhar para uma empresa usando esse teste - eles parecem confusos.
Psr
77
A pergunta descrita não faz sentido, e a resposta também. Ou você está se lembrando errado do que eles pediram ou a pessoa que faz as perguntas é uma idiota e provavelmente é melhor não trabalhar com ele.
Mason Wheeler
26
Por que as entrevistas dos desenvolvedores precisam ser dolorosas? Não podemos todos nos sentar e olhar o código um do outro e discutir? Os desenvolvedores saberão onde estão os outros desenvolvedores fazendo isso e não levará 6 horas. Os testes de código são os piores. Não me importo em admitir que sou péssimo em fornecer soluções ideais, enquanto três desenvolvedores que eu nunca conheci me observam enquanto digito.
amigos estão dizendo sobre erik
19
Eu tive que verificar seu perfil para ver se você morava na mesma área que eu, porque eu trabalhei por um curto período de tempo em um emprego em que um colega me entrevistou perguntou: "Você é detalhista?" Ao que eu respondi: "Você pode ser mais específico?" E sua resposta: "Não sei explicar, mas conheço uma pessoa detalhista quando vejo seu trabalho". Ambiguidade de amor.
Jesse C. Slicer

Respostas:

305

É 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".

Matt
fonte
9
Recentemente, comecei a prática de substituir substantivos em perguntas tolas pela palavra "palhaço" +1 senhor!
rupjones
108
"Travessia de palhaço" - que ótimo Meme para "pergunta técnica estúpida". Passe adiante!
Radarbob 12/04/12
8
Hmm, eu posso atravessar var palhaço = {chapéu: "com flor", cabelo: "vermelho brilhante", nariz: "bola vermelha", boca: "boca vermelha emoldurada em branco", ...};)
mplungjan
37
Toda a minha área de pesquisa teórica em CS envolve travessia interativa de palhaços, seu insensível torrão!
6
@JackManey: Todo mundo sabe que os palhaços devem ser percorridos recursivamente .
11139 Adam Robinson
39

Eu posso ver três possibilidades aqui.

  1. Ela era completamente incompetente. Não há muito mais a dizer sobre isso.
  2. Ela estava deliberadamente fazendo isso ambíguo, para ver o quão bem você faria em fazer perguntas para descobrir o que deveria fazer e o que ela realmente estava procurando.
  3. Por qualquer motivo, ela decidiu que não queria que você fosse contratado, então fez uma pergunta que não podia ser respondida como dada. Quando lhe perguntavam sobre suas habilidades, ela pulava a parte e dizia algo como: "Perguntei a ele sobre como percorrer um gráfico de três nós, e ele ficou completamente perplexo - nem sabia como para começar. Obviamente ele é grosseiramente incompetente! Não devemos nem pensar em contratá-lo. "
Jerry Coffin
fonte
7
"Perguntei a ele sobre como percorrer um gráfico de três nós, ..." Se o OP postar correto, não há menção a um gráfico ou nó. apenas "objetos". Esta é uma forma de "falso testemunho". Se ela escreve algo assim, pode ser processado!
Emilio Garavaglia
9
Você costuma usar pronomes femininos quando o sexo da pessoa não é mencionado?
Chan-Ho Suh
8
@EmilioGaravaglia: Antes de tudo, talvez nunca seja escrito. Segundo, mesmo supondo que seja anotado, você sem dúvida nunca terá acesso a ele, apenas uma carta de "lamentamos informar você ...". Terceiro, a menos que você tenha uma gravação da entrevista, como você provaria que o entrevistador não estava dizendo a verdade? Conclusão: em teoria, você deve estar certo - mas, na realidade, não há praticamente nenhuma chance.
Jerry Coffin
11
@ Chan-HoSuh: O OP menciona o gênero em um de seus comentários.
Jerry Coffin
4
@JerryCoffin Minhas desculpas então.
Chan-Ho Suh
32

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.

Robert Harvey
fonte
28
Ir em frente. Existem empresas melhores para se trabalhar.
shufler
7
Nah. É uma causa perdida. Se o entrevistador pensasse que ele estava errado, ele não teria feito a pergunta em primeiro lugar. Me pediram uma vez para escrever uma amostra em qualquer idioma que eu quisesse; a pessoa que me entrevistou presumiu que o pseudocódigo era uma opção válida.
31712 Robert
8
@ Robert Harvey: O que há de errado com o pseudocódigo?
James
6
@ Robert Harvey: Para ser justo, tudo o que a maioria das pessoas quer é descobrir como você resolve o problema e não descobrir se você aprendeu a sintaxe de qualquer idioma em particular. É bastante comum que algoritmos sejam especificados no pseudocódigo.
James
8
Qual é a diferença entre pseudocódigo e Python? :)
David Robinson
15

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:

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

Uma resposta incorreta típica pode "atravessar" apenas o primeiro nível e imprimir / comparar:

'value1'
2
[Object object]

Portanto, ao codificar um exemplo recursivo que atravessaria todos os níveis, eu mencionaria coisas como:

  • Manuseio de referência circular
  • Como lidar com matrizes (elas também devem ser atravessadas recursivamente?)
  • As funções devem ser avaliadas e seu valor de retorno processado?
  • Para JavaScript: o protótipo deve corresponder e as propriedades herdadas também devem ser comparadas?

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.

WSkid
fonte
5
Isso faz sentido da maneira que você coloca, WSKid. Infelizmente, nenhum desse contexto foi oferecido.
Matt Cashatt
3
É verdade que isso é realmente emocionante. Eles deveriam ter apresentado um caso de uso, ou um exemplo de 3 objetos, ou algo para indicar o problema real.
WSkid
1
Eu estava pensando o mesmo, apenas para atributos de objetos python. Sabendo que questionar que esperavam uma resposta teria sido extremamente útil, mas que poderia ser esperado pelo contexto da posição, ou seja, python dev, c # dev, javascript dev, dev php, etc
Ken
2
+1 para encontrar um contexto em que a pergunta faça algum sentido!
Donal Fellows
9

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.

hotpaw2
fonte
6
Durante toda a nossa vida, estamos condicionados, em um cenário como este da entrevista, a ser capaz de responder a uma pergunta. Se dizer "eu não sei" (o que eu fiz, por sinal) era aceitável, então eu deveria ter sido informado disso antes. Uma tentativa de boa fé de responder a uma pergunta da entrevista não é necessariamente o equivalente a como tratar uma especificação ou conjunto de requisitos inadequados. E acho que esse é o ponto, essas entrevistas se desviaram do rumo e, em muitos casos, perdem o sentido.
Matt Cashatt
Que resposta boa. No entanto, não esqueça que é preciso muita experiência para poder dizer isso. Pessoalmente, posso dizer que a experiência com entrevistas é uma parte vital do trabalho. @MatthewPatrickCashatt se o entrevistador não aceitar "Não sei", não haverá muito mais para discutir a IMO.
Arin
2
Perguntas de truque são trolling ou abjeta incompetência. De qualquer maneira, se um entrevistador fizer perguntas complicadas, você não deseja trabalhar lá.
21712 Ben Brocka
7

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).

Maich
fonte
1
Obrigado Maich - acho que o seu ponto final é o mais provável.
Matt Cashatt
5

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.

JB King
fonte
1
Obrigado JB King. É um bom lembrete para fazer perguntas. Nesse caso em particular, eu fiz. Na verdade, eu até perguntei se era uma árvore e a resposta era não! Mas o seu ponto de vista é de que é minha responsabilidade destilar o máximo de informações possível, fazendo perguntas.
Matt Cashatt
3

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.

BenjaminB
fonte
5
Adoraria ver um exemplo de uma de suas especificações técnicas para um projeto de software.
mandril D
Se a entrevista é para um analista de sistemas ou uma posição semelhante, isso é perfeitamente adequado: seu trabalho é ajudar os clientes a esclarecer suas perguntas, em vez de respondê-las.
reinierpost
1
@ reinierpost - Não era.
precisa saber é o seguinte
3

Escreva 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.

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.

Jim
fonte
2

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.

Lucas
fonte
2

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.

pgthew
fonte
1

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.

O objectem questão é constituído pelas partes A,B and Ce forma a triangle. 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 Cvocê 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 apenas A == B && A == C.

A simplicidade da pergunta resultou em confusão, e é realmente mal formulada.

A redação correta deveria ter sido.

Escreva um algoritmo para verificar as partes de uma coleção para ver se são todas iguais. Deve-se tomar cuidado para não ficar preso em um loop infinito. Por exemplo; se as partes A são iguais a B e B é igual a C e A é igual a C pode causar problemas.


A resposta de acordo com o entrevistador foi que eu deveria ter escrito uma função recursiva.

Sim, você pode responder à pergunta are all my parts equalusando 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.

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";

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.

Reactgular
fonte
2
As coisas ficaram ótimas - correram o mais rápido possível da empresa e ficaram felizes desde então.
Matt Cashatt
0

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.

rpatali
fonte