Eu acho que existem perguntas fáceis que fracassam, reverter uma string etc., e existem algumas perguntas. Se você ainda não as viu antes, é difícil obter a solução ideal pretendida com a pressão adicional da entrevista e o curto período de tempo. restrições. A pior parte é que, às vezes, os recrutadores sem conhecimento técnico fazem algumas dessas perguntas e procuram uma resposta muito específica ... Se você não der a resposta ideal, eles pensam que você é um idiota absoluto. Mesmo que sua resposta funcione, resolva o problema e, embora possa não ser o ideal, não é muito ineficiente ....
Alguns exemplos:
Como você baralha um baralho de cartas? Eles estão procurando o método Fisher-Yates http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffleoutras respostas estão "erradas" ..... Isso não é algo que você provavelmente saberá, a menos que queira embaralhar as cartas antes e procurá-las especificamente. Você pode se deparar com isso durante a resposta, mas, pelo que vi, eles esperam que você conheça esse frio, por isso é duvidoso que haverá muito tempo para permitir encontrar a solução. Outra maneira menos eficiente (mas talvez mais óbvia) é criar uma nova matriz com um ponteiro para a matriz original e um número que seja um número aleatório e depois classificar a matriz pelo número aleatório. Em seguida, use a matriz classificada para construir uma nova matriz de cartões. De qualquer forma, recebi 0 crédito por apresentá-lo a um recrutador.
Outro exemplo é a pergunta sobre como você detectaria um número duplicado em uma lista de n números, todos de 1 a n-1. A resposta óbvia (que é relativamente eficiente em uma perspectiva de tempo) é usar uma tabela de hash para inserir cada elemento e, se você encontrar um já inserido, encontrou a duplicata. A resposta ideal é que os números estão entre 1 e n, se não houver duplicatas, você pode obter a soma esperada como n (n + 1) / n. Então, se você soma a matriz, obtém a soma real que é nd menor que a soma esperada. Então, basicamente n - (soma esperada - soma real) = número duplicado ... É um caso muito especial ... Na verdade, vi algo antes em algum post on-line sobre problemas de entrevistas há muito tempo, sobre um relacionado com o mesmo truque, então Eu estava bem ....
Outro, inverta todas as palavras em uma string sem usar espaço adicional. Eu tive que pensar sobre isso e o recrutador ficou bastante impaciente nos 5 minutos que pensei (dividir e reencontrar a string no sentido inverso, ou passar palavra por palavra em uma nova matriz é muito fácil). Eu descobri a borda da última palavra, o final da primeira palavra e, constantemente, diminuindo a lista inteira em 1 e inserindo a letra apropriada. Em seguida, repita até chegar ao final da lista. Esse método funcionou e o entrevistador concordou (ele era um pouco técnico), mas é bastante ineficiente. Quando cheguei em casa, procurei a resposta ideal, e é apenas para inverter a lista e, em seguida, inverter cada palavra individualmente. Algumas pessoas podem pensar nisso,
Agora é verdade, depois de ver alguns desses problemas, você pode resolvê-los mais facilmente. Porque existem algumas perguntas semelhantes com alguns dos mesmos truques. Eu sei especialmente que a fórmula n (n-1) / 2 e a lista de números têm várias variações. Mas ainda não sei o que essas perguntas testam. Um FizzBuzz é algo que todos deveriam ser capazes de fazer (embora eu tenha visto variações que não são tão simples. Nesse caso, começo a questionar se isso é realista para uma situação de entrevista sem poder digitar / depurar o código). Algumas dessas perguntas são óbvias quando você as vê, mas se você não as viu, elas não são óbvias. Afinal, alguém mencionou que levou anos para a primeira implementação correta da pesquisa binária aparecer ... No momento, a pesquisa binária é tão óbvia, porque todos podem ler sobre isso.
No entanto, acho que a pior parte é quando pessoas não técnicas estão fazendo as perguntas, porque não podem apreciar que sua solução está correta, embora não seja ideal. Eles apenas sabem que sua solução não é a apresentada e, portanto, está tudo errado, você não recebe nenhum crédito pela tentativa. Mesmo soluções não ideais geralmente mostram um conhecimento de construções de programação. A menos que eu esteja programando jogos de pôquer, não me importo com a capacidade de alguém baralhar um baralho de cartas. E mesmo que eu estivesse, depois de mostrar a eles o algoritmo eficiente, tenho certeza de que qualquer pessoa decente poderia segui-lo.
As perguntas do modelo parecem apenas dar uma vantagem aos candidatos que estão entrevistando há mais tempo, pois é mais provável que tenham visto mais perguntas do modelo. Até o FizzBuzz, na primeira vez em que você o vê, pode se assustar, mas, ao vê-lo repetidamente, você se acostuma. A melhor coisa que você pode fazer é desafiar a codificação que requer lógica comercial personalizada. Por exemplo, crie um conjunto de dados (matriz de objetos / registros) e, em seguida, crie algumas regras de negócios a serem aplicadas a cada objeto e retorne uma resposta. Por exemplo, algum tipo de classificação, etc., mas regras muito personalizadas. Enquanto eles provavelmente viram loop através dos registros e aplicaram a lógica um zilhão de vezes, suas regras serão únicas, portanto, pelo menos, elas teriam que entender e implementar com êxito as regras que você criou.
Digamos que Salário projetado e uma lista de candidatos e seus três principais videogames favoritos e talvez um salário inicial. Candidatos que gostam de Zelda recebem uma penalidade de 300, candidatos que gostam da pequena sereia recebem um bônus de 200. Candidatos que gostam de Donkey Kong e Super Mario Brothers, mas não o Dr. Mario, recebem um bônus de 300. Os candidatos que gostam de Metroid ou Kid Icarus recebem um bônus de 200, etc .... Parece um pouco insano, mas mostraria a capacidade deles de traduzir regras de negócios em construções lógicas de programas e testar também sua compreensão da lógica booleana. No geral, não é muito diferente do que o fizzbuzz, exceto o uso de módulos e loops. Obviamente, você pode fornecer a lista a eles e fazer com que eles passem por ela e imprima os resultados na tela usando também critérios de saída específicos.