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.