É uma prática ruim de entrevista pedir que os candidatos escrevam uma implementação de lista vinculada? [fechadas]


43

Lendo este site e SO, eu já vi muitas histórias de perguntas e respostas de entrevistas dizendo que um candidato tinha que implementar uma lista vinculada do zero. Normalmente, este é um exercício "fácil" para programar candidatos a funções, como escrever o FizzBuzz. A idéia é que, se o candidato não puder fazer isso, ele não poderá programar e deve ser rejeitado quase imediatamente.

No entanto, não posso deixar de pensar que isso pode ser uma prática ruim pelos seguintes motivos:

  • Linguagens modernas de nível superior, como C # e Python, usam nativamente listas extensivamente; escrever seu próprio objeto de lista vinculada seria necessário apenas em circunstâncias incomuns e, mesmo assim, provavelmente desaconselhado.
  • Linguagens de nível inferior, como C ++, têm bibliotecas padrão com iteradores / contêineres e objetos de lista.
  • À luz dos dois primeiros pontos, os codificadores podem levar anos sem sequer pensar em implementar uma lista (vinculada, duplamente vinculada etc.). Alguns podem nem mesmo ver essas coisas desde os tempos de faculdade.
  • O poder da computação também não é o fator de anos atrás; portanto, a eficiência via ponteiros não é o problema que costumava ser (em geral).
  • Uma simples pesquisa na web de algo como "exemplo de lista vinculada" traria muitos exemplos de código que poderiam ser memorizados e cuspidos de volta, sem realmente indicar a verdadeira competência do candidato.

Devo dizer que usar uma lista vinculada para levar a perguntas / discussões em aberto sobre a capacidade de resolver problemas / pensamento crítico dos candidatos é provavelmente uma prática de entrevista realmente boa. De qualquer maneira, um entrevistador pode realmente ver como é o candidato e como ele acha que é massivamente benéfico.

Eu acho que essa abordagem binária de "nenhum código de lista vinculada, nenhum trabalho" para programadores que trabalham em um aplicativo de desktop ou web está um pouco desatualizada. Também pode ser bastante prejudicial; um candidato que não se lembra de como trabalhar adequadamente com o cabeçalho de uma lista pode ser um excelente programador e colega de trabalho e se perder na mistura. Pensamentos?

EDIT : Existem muitos (bons) comentários sugerindo que se essa é uma pergunta boa ou ruim a ser feita depende do contexto do trabalho. Concordo plenamente, então deixe-me reformular esta pergunta: implementar uma lista vinculada é uma pergunta comum de entrevista para uma ampla gama de tarefas de codificação, semelhante a perguntas como o FizzBuzz ou a criação de uma função recursiva para calcular fatoriais. Essa pergunta tem utilidade suficiente para ser usada comumente na avaliação de candidatos de programação em geral? Ou deveria ser considerada uma pergunta ruim, exceto para os cargos "Desenvolvedor sênior, Equipe de listas vinculadas incorporadas"?


11
Que posição é essa? Que tipo de trabalho é esse? Em que domínio está?
Thomas Owens

1
Vejo suas edições, mas ainda assim - que tipo de trabalho é esse? Isso é um estágio? Um trabalho de nível de entrada? Um trabalho intermediário? Você procura contratar um programador, engenheiro ou cientista? Em que domínio é esse? Estariam em uma posição em que precisariam lançar seus próprios algoritmos ou estruturas de dados por qualquer motivo?
Thomas Owens

3
'C # (...) usa nativamente listas extensivamente' e 'eficiência por meio de ponteiros não era o problema que costumava ser': você sabe que essas listas nativas não são listas vinculadas, mas listas baseadas em matrizes? As matrizes tendem a ter um desempenho melhor devido ao armazenamento em cache. De fato, o IIRC, o framework .NET, nem sequer tinha listas vinculadas até a 2.0. Tenho certeza de que a maioria dos programas C # por aí não usa listas vinculadas.
1011 Alex12 Brink

1
@AlextenBrink Curiosamente, acho que isso significa que o conhecimento da lista vinculada é ainda menos importante para o C #. Por que implementar você mesmo uma estrutura de dados (com possíveis erros) quando eu posso usar uma estrutura melhor incorporada diretamente na linguagem?
Joshin4colours

A pergunta que tenho em mente é 'por que considerar considerar o uso de uma estrutura de dados quase sempre inferior a outra estrutura de dados'? A lista vinculada é mais lenta para a maioria das operações do que as listas baseadas em matrizes; a única coisa para a qual as listas vinculadas servem é a exclusão em tempo constante, mas há muito poucas situações nas quais isso é necessário. Observe que não estou falando sobre se seria uma boa estrutura de dados para uma pergunta de entrevista: os conceitos envolvidos podem ser um bom teste, eu não sei.
Alex10 Brink

Respostas:


52

Se responder à pergunta lhe diz o que você quer saber sobre um candidato, é uma boa pergunta para uma entrevista. Se não lhe diz isso, é uma pergunta ruim.

Perguntas fáceis como o FizzBuzz servem a um propósito específico. Se um candidato não pode codificar o FizzBuzz, ele simplesmente não pode codificar e você pode encerrar a entrevista mais cedo. Eu classificaria a implementação de uma lista vinculada apenas um pouco mais difícil, mas ele pode iniciar uma conversa sobre estruturas de dados em geral que revelará muito.

Lembre-se de que nenhuma pergunta da entrevista lhe dirá tudo o que você deseja saber. Você realmente precisa ter um grupo de perguntas pronto. Você deve fazer perguntas em uma sequência, do mais fácil ao mais difícil, para encontrar o limite do que o candidato sabe. Se você fizer uma pergunta e ela acertar, ainda não sabe o que mais eles fazem ou não.


Em relação à sua edição:

Essa pergunta tem utilidade suficiente para ser usada comumente na avaliação de candidatos de programação em geral? Ou deve ser considerada uma pergunta ruim, exceto para os cargos de "Desenvolvedor sênior, Equipe de listas vinculadas incorporadas"?

Eu acho que é uma boa pergunta de propósito geral que poderia ser usada para avaliar praticamente qualquer candidato a programação. Ele só precisa fazer parte de um grupo maior de perguntas. Seria um bom quebra-gelo para muitos tipos de posição (mesmo que o candidato não consiga implementar uma lista vinculada do zero, talvez eles possam explicar como o usaram antes e quais são as principais funções) ou o início de uma longa sequência de perguntas mais avançadas para a posição "Desenvolvedor sênior, Equipe de listas vinculadas incorporadas".


19
Seu primeiro parágrafo é metade da história. A outra metade é: se a pergunta faz o candidato querer trabalhar para você, é uma boa pergunta para a entrevista. Se isso faz com que o candidato não queira trabalhar para você, é uma pergunta ruim.
Ruakh 12/01

5
Você não consegue encontrar o limite do que o candidato conhece dessa maneira, porque não tem como afirmar que o que considera "complicado" e "básico" se aplica na mesma ordem ao seu candidato. O LinkedList é provavelmente o básico para um programador ensinado na universidade, mas um programador autodidata provavelmente nunca precisou escrever um. Afinal, ele provavelmente escreveu "LinkedList <string> ..." sempre que precisava de um. Isso significa que seu conhecimento está atrelado ao nível "linkedList"? Ele poderia ser um especialista em assuntos mais complexos e aprender LLs em 5 minutos no Google.
Sylverdrag

1
@Sylverdrag É por isso que eu disse que você precisa de mais de uma pergunta. Depois de encontrar o limite de seu conhecimento sobre listas vinculadas, vá para outro tópico.
Bill the Lizard

@ruakh Isso definitivamente desempenha um papel. Se todas as perguntas que eu faço em uma entrevista são sobre aspectos mundanos de aplicativos CRUD (ou seja, não acho que eu poderia aprender algo novo nessa empresa), isso não me excitaria em trabalhar lá.
Bill the Lizard

34

Perdi os empregos puramente porque minha mente ficou em branco com quebra-cabeças simples como esse. Eu também fiz brilhantemente esses quebra-cabeças em outras entrevistas - sei como implementar uma lista vinculada em um ambiente sem pressão. Eu nunca tive uma reclamação sobre minhas habilidades de alguém com quem trabalhei, então talvez eu não deva pensar que perdi empregos, devo pensar que eles perderam minha atenção.

Então, sim, acho que é uma prática questionável, na melhor das hipóteses, mas eu entendo. Também considerei a possibilidade de que não é culpa da pergunta, mas do questionador, por torná-la uma situação de alta pressão.

Pessoalmente, prefiro fazer perguntas abertas sobre um problema que o candidato já resolveu - recentemente, se possível, e abordando problemas de codificação e de processo. Se eles podem trazer amostras de código, fantástico.


Eles precisam perguntar algo, seja quebra-cabeça ou qualquer outra coisa. Qualquer pergunta pode fazer com que a pessoa fique em branco.
Sinal

2
@pdr - "Se eles podem trazer amostras de código, fantástico." Se eles escreveram os exemplos de código que trouxeram, não tem preço.
robrambusch

4
Se a mente de alguém apaga a implementação de uma lista vinculada e ela não pode trabalhar com isso com um pouco de estímulo ou se frustrar facilmente, acho que seria alguém que eu não me importaria de perder.
Bill K

1
@pdr - "E se você não puder, por quanto tempo acha que terá o emprego?" - Pelo tempo que for necessário para demiti-los sob qualquer regime de RH que você sofra. Depois, há o custo adicional de reiniciar sua pesquisa de candidatos. Além disso, o custo de oportunidade inerente ao fato de que a próxima pessoa que você entrevistaria pode ter se tornado o elemento técnico de todo o departamento. Mas é claro que agora eles não estão disponíveis porque você contratou a pessoa errada e eles encontraram outro emprego.
robrambusch

1
@robrambusch: Ele exibiu excelentes habilidades de resolução de problemas e falou bem sobre a estrutura da classe. Mas ele não escreveu código. Sobre o assunto de escrever código em uma entrevista, sim, isso pode ser útil, mas afirmo que posso aprender mais sobre você em uma hora conversando com você sobre os problemas que você resolveu do que com um único problema artificial que exige hora de resolver.
PDR

25

É preciso definir o tipo de trabalho de programação. Se você está no negócio de desenvolver compiladores e algoritmos, perguntas sobre essas coisas devem ser esperadas. Se você está em aplicativos do tipo de linha de negócios e espera que o candidato faça aplicativos CRUD, pode ser que o conhecimento do conceito (sem escrever um programa) seja suficiente. Hoje, o conhecimento das diferentes tecnologias necessárias para realizar o trabalho especialmente no tipo de aplicativos LOB substitui a necessidade de algoritmos puros.


Exatamente. No ano passado, escrevi um componente de classificação genética de uso geral que também usava um pouco de recozimento simulado (para criar horários de aulas) e utilizava várias estruturas de dados "avançadas" para obter desempenho. Eu não precisava codificar um. Se a estrutura .Net não tivesse o que eu precisava, usei C5 ou Power Collections.
ElGringoGrande 11/01

4
Concordo, eu escrevo aplicativos LOB o dia todo, no passado eu escrevi implementações de listas vinculadas ... na faculdade ... em COBOL. Eu poderia fazer isso de novo, mas por quê? Muitos desenvolvedores competentes de LOB provavelmente nunca escreveram um e nunca precisarão.
CaffGeek

1
Concordou em geral, mas uma lista vinculada não é nada exótica, realmente. É o básico, apenas um nível após o FizzBuzz.
Francesco De Vittori

1
@FrancescoDeVittori: Mas às vezes não é esse o problema? Alguém lhe dá um problema para resolver. Parece bastante simples, mas você nunca fez isso antes, então seu cérebro começa a acelerar, tentando encontrar as dicas, o que vai lhe custar a entrevista, se você não pensar nisso. E não está lá, mas isso está distraí-lo de resolver o problema real.
PDR

@FrancescoDeVittori: Você pode dar alguns exemplos de perguntas não básicas para entrevistas? Eu preciso disso para auto-aperfeiçoamento. Obrigado.
Den

9

Minha resposta é "Depende". Eu faria essa pergunta se um candidato listasse C ou C ++ em seu currículo. Pedir para implementar uma lista vinculada é um bom teste para o entendimento de ponteiros, que é absolutamente essencial para um programador de C ou C ++.

Por outro lado, se um candidato não alegar conhecer C ou C ++, eu não pediria que ele implementasse uma lista vinculada, mas consideraria fazer perguntas sobre isso. Explique em alto nível como uma lista vinculada funciona. Qual é a complexidade de adicionar um elemento ao cabeçalho da lista? O final da lista? Inserir um elemento no meio da lista? Quando você usaria uma lista em oposição a uma matriz? Estes são conceitos fundamentais da estrutura de dados que, IMHO, todo programador deve conhecer.


7

Eu não consideraria uma pergunta ruim para uma entrevista. Muita compreensão e programação da estrutura de dados começam com um bom entendimento das Listas Vinculadas. Dito isto, existem algumas advertências:

1) É uma pergunta do tipo fizz-buzz. Você está apenas validando algo muito básico: a pessoa entende uma lista vinculada? Peça e siga em frente.

2) Há um desafio com as listas vinculadas de que os idiomas que são mais adequados para mostrar sua compreensão dos conceitos de lista vinculada (por exemplo, C) podem não ser iguais aos idiomas com os quais eles trabalharão no trabalho. Você pode demonstrar entendimento básico em qualquer idioma com estruturas, é claro, mas pedir a um candidato para reimplementar uma lista vinculada em Erlang sem usar [] não é o mesmo desafio e não diz a mesma coisa sobre o entendimento de um candidato como pedir para fazer em C. Se o trabalho estiver em torno de Java, também está faltando um pouco.

3) Com isso em mente e os desafios gerais da "programação do quadro branco", ao fazer esse tipo de pergunta, eu aceitaria pseudocódigo ou diagramas, desde que demonstrem a compreensão dos princípios básicos. Não peço que as pessoas escrevam código em um quadro branco que seja sintático e logicamente perfeito, especialmente se puderem se virar e identificar problemas lógicos quando solicitados a analisá-lo novamente. YMMV.


6

Quando eu estava dando entrevistas, muitas vezes me pediam implementações de listas vinculadas e alguns algoritmos centrados em listas vinculadas. Eu resolvi a maioria deles, e alguns deles exigiram que eu exercitasse meus neurônios um pouco.

Se alguma vez eu estava fazendo uma entrevista, procuraria algum tipo de implementação de lista vinculada, não para testar o quão boa é uma pessoa na codificação, mas para verificar quanta atenção uma pessoa presta aos detalhes. Qualquer um pode escrever uma lista vinculada, mas é nos casos de fronteira que até alguns bons programadores falham. Não pergunte a ele: Write a code for linked list in C/C++. Peça que ele escreva uma lista vinculada genérica em C (não em C ++) etc.

Torça o problema e coloque outras condições na lista vinculada, e você terá uma boa pergunta a fazer. Algumas pessoas são obrigadas a cometer erros então.


2
Nenhuma coisa como uma lista encadeada genérica em C.
DeadMG

1
A sério? Eu pensei que os voidponteiros existem apenas para isso ... :) O primeiro link que encontrei no google para "lista vinculada genérica em c" foi: daniweb.com/software-development/c/threads/109260 e outro foi a entrevista técnica .com /… Eu pensei que todos sabiam disso!
C0da

Eu não testei esses códigos, mas eu não tenho esse tipo de lista ligada anteriormente, e com certeza funcionou bem ...
c0da

Até escrever uma lista vinculada genérica em C # tem uma ou duas "dicas" (por exemplo, comparar elementos do tipo T não é óbvio; por exemplo, (T v1, T v2) => {return v1 == v2;} falhará na compilação a menos que tenha restrições de classe ou usar o operador de igualdade padrão)
Steven Evers

@ c0da Na minha opinião, uma lista que usa voidponteiros não é genérica, mas apenas geral a qualquer momento. Eles podem conter qualquer tipo de coisa e até misturar tudo o que quiserem - e exatamente isso faz com que não seja genérico para mim. É como usar o tipo base objectem linguagens orientadas a objeto ...
picar

5

Nos meus 10 anos de programação profissional (e por mais dez anos como hobby), acho que nunca precisei implementar uma lista vinculada. Se alguém me pediu para fazer isso durante uma entrevista, eu poderia contestar perguntando se isso é algo que farei regularmente no trabalho.

Com certeza, há quase certamente são empregos lá fora, onde você vai precisar para escrever implementações mais ou menos-sala limpa de algoritmos comumente conhecidos - como implementar uma lista ligada a partir do zero. Mas para a maioria dos trabalhos de programação, que valor específico tem para a empresa que um candidato possa fazê-lo durante uma entrevista? É realmente tão importante nesse cenário que o candidato forneça uma implementação perfeita que lide com casos extremos corretamente, relate falhas de acordo com a prática comum no idioma ou na estrutura, e assim por diante? Ou você pode ignorar isso e, em vez disso, se concentrar em como eles realmente abordam um problema com o qual talvez não tenham sido confrontados em 10 a 20 anos?

Quando entrevistei para o meu trabalho atual, tive muito pouca experiência com a pilha de tecnologia em uso na empresa. Agora, alguns anos depois, eu regularmente recebo colegas e faço perguntas não apenas sobre os produtos, a implementação deles e os padrões implementados por eles, mas também sobre problemas de programação muito mais gerais (ontem mesmo me perguntaram o que as implicações eram de uma dependência circular em uma restrição padrão no SQL Server no contexto de uma tabela específica e seu uso em nosso caso - argumentando com isso, constatou-se que não havia implicações nesse caso específico). Também não precisava de uma implementação de lista vinculada totalmente nova.

Faça perguntas relevantes para o trabalho ao qual o candidato provavelmente será designadoe tente ter uma idéia de como eles se sentem ao adquirir novos conhecimentos. Como eles descobririam o significado de alguma sintaxe obscura que nunca viram? (Se você é uma loja C, por exemplo, pode tentar uma pergunta que envolva trigramas.) Para uma posição de programação, eles leem ou contribuem regularmente para fóruns como o Stack Overflow? Se lhes pedissem para executar alguma tarefa em uma linguagem ou estrutura de programação com a qual eles têm pouca ou nenhuma experiência (por exemplo, se você é principalmente uma loja Java, e o Clojure ou o .NET?), Como eles abordariam o problema? Talvez retire um bug real do seu rastreador de erros (pode até ser um que já foi resolvido há muito tempo) e pergunte a eles como eles, em termos gerais, abordariam a solução, e esteja pronto para explicar as partes relevantes do produto em questão.

Se o candidato puder lidar com tipos de problemas relevantes para o caso de negócios e tiver uma boa atitude em relação à aprendizagem de coisas novas, esse provavelmente é um indicador de ajuste muito melhor para essa posição específica do que ser capaz de fornecer respostas prontas para perguntas conhecidas, sejam elas as perguntas são sobre o FizzBuzz, listas vinculadas ou outra coisa. Mostre como o candidato se encaixa na equipe e eu acho que você está em um terreno bastante seguro.


4

É claro que a maioria das pessoas nunca precisaria implementar uma lista vinculada, mas para implementá-las do zero, provavelmente será necessário manipular os ponteiros corretamente. Eles pensam que o fato de ter formado um modelo mental consistente para ponteiros se correlaciona com a proficiência na linguagem, entendendo o que acontece em algum nível (abstrato) da máquina e a capacidade de abstrair em geral.

Não estou dizendo que essa seria necessariamente a melhor medida, mas apenas que há alguma correlação.


4

Você começa dizendo que são perguntas "geniais", mas depois ressalta que as pessoas não serão capazes de fazê-las. Estou confuso.

Aqui está como eu penso sobre isso:

  • Raramente é necessário escrever um, como você diz, para que as pessoas se esqueçam facilmente.
  • Eles não são incrivelmente difíceis de escrever.
  • Os conceitos usados ​​para escrevê-los podem ser considerados fundamentais.
  • Eles são usados ​​com muita frequência (mesmo que você não saiba).

Eu acho que isso faz com que sejam boas perguntas. Se você está preocupado com eles estudando para a entrevista, jogue uma lista. Peça que escrevam circularmente e perguntem qual é o tempo de execução assintótico de sua implementação. Ou eles escrevem outra estrutura de dados comum e / ou rápida ... Uma árvore de pesquisa binária? Uma fila (FIFO)? Uma pilha (FILO)? Uma O(n)fila de prioridade ingênua ( )? Conheço muitas pessoas que pensam que um BST é O(log n) apenas porque é uma árvore .

Se você está procurando alguém que vai trabalhar no metal, e precisa de uma muito sólida base em estruturas de dados ... estas podem até ser muito trivial demais para os candidatos que você está olhando para contratar.

Isso pressupõe, é claro, que você deseja um desenvolvedor que tenha o básico / fundamentos das estruturas de dados e que sua posição se beneficie desses fundamentos. Se você quiser alguém que possa reunir uma página asp em segundos, faça uma entrevista para isso. O ponto não é escolher uma pergunta para entrevista, porque todo mundo faz, mas escolher uma que mede as habilidades que você está procurando. Pessoalmente, acho que as perguntas sobre estruturas de dados são boas, lista vinculada ou não.


Não é confuso na prática. O FizzBuzz é uma pergunta ainda mais fácil e, no entanto, os candidatos rotineiramente não conseguem nem começar a respondê-la. O mesmo acontece com as listas vinculadas. É um mistério do mundo da programação.
Joshin4colours

@ joshin4colours: Não, estou confuso com a pergunta. No início, o OP diz que as questões de LL são essenciais, mas depois lista os pontos de por que um desenvolvedor qualificado falharia na pergunta.
Steven Evers

3

Essa pergunta tem utilidade suficiente para ser usada comumente na avaliação de candidatos de programação em geral?

Não, absolutamente não. Dependendo de como é redigido, o que ele dirá varia de "este candidato sabe como criar uma lista vinculada" a "este candidato pode programar uma lista vinculada no idioma X". Se você solicitar um pseudocódigo, ele tenderá mais para o primeiro. Se você solicitar uma implementação em uma linguagem específica, entenderá melhor a linguagem (especialmente em C e C ++, onde é possível lidar com ponteiros, referências e estruturas).

Eu chegaria ao ponto de dizer que não é possível avaliar todos os candidatos usando as mesmas perguntas. Você precisa adaptar as perguntas da entrevista para avaliar as habilidades que procura na posição.

Se a pessoa estiver em posição de escrever código, eu pensaria em incluir uma questão de algoritmo e / ou estrutura de dados, desde que fosse relevante para a posição. Eu tentaria escolher algo que poderia ter sido discutido ou usado antes. Eu também focaria em outras coisas além da implementação dos referidos algoritmos e estruturas de dados, como o tempo de execução e o consumo de memória (coisas como notação big-O). Esses conceitos são relevantes não apenas para criar a estrutura de dados, mas também para escolher qual implementação é mais adequada (como um ArrayListversus um, LinkedListpor exemplo).


3

Não acho que um trabalho regular de programação deva ser uma pergunta que elimine um candidato. Mas é bom ver se você está lidando com um programador realmente sênior ou com alguém que apenas codifica formulários de macacos há muitos anos. E mesmo assim, não deve ser um critério fundamental para a escolha de um programador. Talvez seja um ótimo programador com memória insuficiente e não leia as palavras "lista vinculada" há anos (ou não se lembre do nome), mas ainda possa fazer bons aplicativos.

Então, como alguns disseram, se vai ser um trabalho que precisa trabalhar com lista vinculada e muitos algoritmos sofisticados, etc. então ok. É que, para os dados de entrada usuais em um formulário, validar e mostrar é meio inútil e injusto.


2

Penso que este é um mau exemplo de uma pergunta de entrevista, mas por um motivo diferente. Uma lista vinculada é um conceito tão simples que saber o que é é saber como implementá-la. Se a pessoa não sabe o que é uma lista vinculada, é necessário explicar como ela funciona e, ao fazer isso, você fornece a resposta sem descobrir nada sobre se ela sabe ou não resolver problemas . Portanto, a pergunta é redutível para "você já sabe o que é uma lista vinculada e como ela funciona?", O que não diz nada útil sobre a adequação deles como programador.


2
As perguntas populares também estão sujeitas a jogos por pessoas que são boas em memorizar.
Paul Nathan

1
Se você tem que explicar como uma lista ligada trabalha para um candidato, do que você provavelmente não deveria contratá-lo para fazer a programação ...
Dima

2

Escrever uma implementação de lista vinculada é uma boa pergunta para entrevista, porque revelará muito sobre a maneira de codificar o candidato:

  • Ele sabe o que é uma API? Ele pode usar o código de outras pessoas? Ele pode escrever código para que outras pessoas possam usá-lo?

  • Ele sabe o que é uma lista vinculada? Ele conhece coleções, estruturas de dados, algoritmos?

Se ele nem sabe quais métodos uma Lista Vinculada deve oferecer, você sabe que ele provavelmente nunca usou uma ou sabe quando usá-la.

  • Como ele lida com o problema? Ele começa com uma análise primeiro, uma pequena especificação, alguns testes de antemão? Ou ele simplesmente começa a cortar feliz?

  • Ele lida com casos extremos? Que tal remover o último nó da lista vinculada? E se alguém tentar adicionar uma referência à própria lista vinculada à lista vinculada e excluir a coisa toda?

  • Ele lida com exceções? Cada linguagem de programação possui suas próprias convenções para lidar com exceções: em Java, você espera que um LinkedList gere uma NoSuchElementException quando você faz um getFirst () em uma lista vazia. Outros idiomas podem retornar indefinidos, -1 ou uma constante.


Em um exercício de codificação de entrevistas, a menos que seja solicitado especificamente, eu pularia todos os tipos de manipulação de casos extremos, manipulação de erros etc., além do necessário para uma prova de conceito. Mas eu também deixaria claro que é uma escolha que estou fazendo. As restrições durante uma entrevista de uma hora ou até algumas horas são muito diferentes da situação em que você está realmente trabalhando em algo que será realmente útil.
um CVn
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.