Enigmas interessantes de entrevistas técnicas

Eu participei de muitas entrevistas e estava nos dois lados do confronto. Agora é hora de compartilhar os quebra-cabeças mais interessantes com outras pessoas. Pois as entrevistas devem ser interessantes e memoráveis, e não miseráveis ​​e desmotivadoras.



Alguns comentários


  • Todas as tarefas em lógica e / ou programação. Sem conotações psicológicas e escotilhas redondas.
  • A decisão não é tomada intencionalmente. No entanto, garanto que quase todas as tarefas têm uma solução simples e bonita. Aproveite!

As tarefas


Aqui estão eles.


Espelhar seqüências de caracteres no SQL


Suponha que tenhamos uma tabela com uma coluna de string e desejemos encontrar linhas semelhantes com base em alguma condição (por exemplo, pode ser uma pesquisa de texto completo ou alguma função interna que receba dois valores na entrada e retorne verdadeiro / falso). Então, escrevemos auto-junção e, é claro, obtemos duplicatas entre os valores. Ou seja, obtemos pares de espelhos como resultado e os valores totais são exatamente duas vezes mais do que gostaríamos. Pergunta: como remover do resultado um por qualquer elemento de cada par de espelhos e deixar apenas valores únicos lá até permutações?


Dicas e truques
  • existe uma propriedade não óbvia de strings e instruções SQL básicas que você pode usar ...
  • Ou você pode pesquisar no Google, se a solicitação estiver correta, a resposta estará no primeiro link para o stackoverflow.

Localizando furos com SQL


Essa é uma excelente tarefa para avaliar o conhecimento de todos os recursos básicos do SQL.


Suponha que tenhamos uma tabela com uma coluna int. Não sabemos nada sobre os valores mínimos / máximos nele. Além disso, não sabemos nada sobre o número de linhas na tabela e, em geral, varia e não devemos confiar nela. Também sabemos que entre os valores há omissões cujo comprimento não excede um. Por exemplo, para uma tabela de 5 (cinco) elementos: 1, 2, 4, 6, 7. Pergunta: escreva uma única consulta SQL usando apenas os operadores básicos (ou seja, sem procedimento e variáveis), que retornarão o valor de todos os "furos". Para o exemplo acima, o resultado deve ser 3, 5. Lembre-se de que não há valores NULL nas lacunas. Os valores 3 e 5 não estão fisicamente na tabela.


Dica
  • se a movimentação falhar, escreva várias consultas ou use pl / sql e, se sua ideia estiver correta, você poderá logicamente ir para uma consulta.

Sugestão
  • a solicitação mais bonita será se a solicitação para as condições de entrada acima não retornar "3, 5", mas "3, 5, 8".

Loops em uma lista vinculada individualmente


Este é um problema sobre algoritmos e complexidade.


Suponha que tenhamos uma lista finita, simplesmente conectada. Sabemos que provavelmente tem um ciclo. Ou seja, um dos seguintes elementos refere-se a um dos anteriores. É necessário descrever o método de encontrar ciclos em tal estrutura em um tempo finito. Além disso, você precisa fornecer uma estimativa do tempo e da memória necessários para executar o algoritmo proposto.


Continuação


É necessário modificar o resultado para que a complexidade da memória seja O (1). Ou seja, para que o consumo de memória não dependa do tamanho da lista.


Sugestão
  • lembre-se de que, assim como a massa pode ser convertida em energia, a complexidade do tempo também pode ser convertida em consumo de memória e vice-versa.

Armazenamento de valor-chave


Outra tarefa para co-escrever código e discuti-lo durante a escrita.


Escreva o armazenamento de valores-chave em qualquer idioma desejado. Adicione a função set_all , que pega um valor e o define para todas as chaves existentes. Estime os custos de tempo e memória para a implementação resultante.


Agora faça set_all trabalhando para O (1).


E você pode garantir que a complexidade dos métodos get e set permaneça no início e set_all continue trabalhando para O (1)? Se sim, então implemente. Caso contrário, prove por que isso não é possível.


Salvando pessoas


E nesta tarefa, você precisa pensar e argumentar com o entrevistado. E a implementação é uma questão de tecnologia e não é particularmente interessante.


Imagine que temos um grupo de pessoas. A quantidade não importa. O grupo inteiro está alinhado na parte de trás da cabeça e um chapéu preto ou branco é colocado em cada cabeça. Ninguém sabe a cor do chapéu que ele usa. No entanto, todo mundo vê o que está acontecendo na frente deles e ouviu o que está acontecendo atrás deles. Depois disso, um estranho com uma pistola chega na parte de trás do último do grupo. Ele pergunta: "de que cor é o seu chapéu?" A resposta só pode ser preta ou branca. Não pode haver outras mensagens. Se uma pessoa adivinhou, ela o deixou ir. Caso contrário, ocorre uma tomada e, em qualquer caso, o processo se repete com o último membro "novo" na fila.


Um esclarecimento importante: antes de iniciar essa experiência desumana, todos os membros do grupo podem se encontrar e pensar sobre sua estratégia de sobrevivência.


Pergunta: como maximizar o número de sobreviventes e existe uma estimativa precisa do número de sobreviventes, dependendo do tamanho do grupo?


Dica
  • pense em como cada membro pode coletar todas as informações disponíveis e transmiti-las em um bit?

Sugestão
  • talvez par / ímpar ou o operador XOR possa ajudá-lo?

Isso é tudo. Agora é a sua vez de resolver qualquer um dos problemas e falar sobre sua interessante seleção de entrevistas.

Source: https://habr.com/ru/post/pt426345/


All Articles