Quais são algumas perguntas do tipo FizzBuzz para desenvolvedores da Web ou SQL? [fechadas]

10

Depois de um tempo, estamos contratando novamente e estou revendo testes para programadores; alguns deles estão um pouco desatualizados. Quais são algumas das perguntas do tipo FizzBuzz para desenvolvedores da Web e SQL? Isto é, não muito trivial, mas ainda solucionável em cinco a dez minutos com caneta e papel e sem o Google?

Normalmente, elimino cerca de dois terços ou mais dos candidatos com base no currículo e, em seguida, todos, com exceção de alguns bons candidatos, em uma entrevista de uma hora (que pode ser por telefone). Nesse momento, o candidato está escrevendo um teste de personalidade e tem a chance de escrever um pouco do código semelhante ao FizzBuzz. Portanto, não estou tentando eliminar um monte de candidatos, mas estou tentando validar minha avaliação inicial de que o candidato é contratável e capaz de codificar.

Domchi
fonte
2
Quais habilidades você procura em um desenvolvedor web?
Oded
Acho que estou procurando o entendimento de HTML / CSS / JSON / HTTP; como Rachel mencionou, o FizzBuzz é bom para testar Javascript / PHP / etc.
Domchi

Respostas:

12

Eu vejo o FizzBuzz como um teste para ver se as pessoas realmente sabem o que afirmam saber em seu currículo. Eu não usaria isso como algo além de uma pergunta para eliminar candidatos que não sabem do que estão falando.

Uma substituição SQL adequada seria apenas pedir ao candidato que escrevesse uma instrução SQL, como selecionar os campos Nome de duas tabelas unidas que começam com A. É simples e demonstra que o candidato realmente tem algum conhecimento de SQL.

SELECT Table1.Name, Table2.Name
FROM Table1 
INNER JOIN Table2 ON Table1.Id = Table2.Id
WHERE Table1.Name LIKE 'A%' OR Table2.Name LIKE 'A%'

Para um desenvolvedor da Web, eu apenas pediria ao FizzBuzz. Só porque você está programando para a Web não significa que você não deve ter a capacidade de executar lógica de programação básica

Se você estiver procurando por perguntas reais da entrevista, há muitas perguntas on-line que você pode encontrar com uma pesquisa rápida. Encontrei mais do que gostaria de listar, levando 10 segundos com o Google.

Rachel
fonte
2
As junções são uma boa maneira de separar os novatos dos programadores SQL mais avançados, pois na programação SQL geralmente requer um paradigma diferente para pensar do que a programação no servidor, que geralmente é imperativa. Junções e subconsultas costumavam me surpreender até eu começar a pensar nas instruções SQL em termos de conjuntos.
Chris C
@CCRicers Eu concordo. E se você estiver entrevistando para um desenvolvedor avançado de SQL, eu também adicionaria um requisito GROUP a isso, já que trabalhei com SQL um pouco antes de entender completamente o que os grupos significavam e como eles funcionam
Rachel
Considere exigir uma auto-associação: "CREATE TABLE EMPLOYEE (ID NÚMERO, NOME TEXTO, MANAGER_ID NÚMERO)" e "Como posso listar funcionários e seus gerentes?"
Kevin cline
Dependendo do tipo de posição do banco de dados / SQL que você está contratando (e o histórico do desenvolvedor / seu ambiente), você pode solicitar uma resposta real do 'FizzBuzz'.
Clockwork-Muse
E tem a vantagem adicional de ser uma especificação ruim, por isso testa se o candidato esclarece os requisitos antes de escrever o código.
Peter Taylor
4

Aqui está uma resposta que eu dei a uma pergunta muito semelhante (possivelmente duplicada) que foi fechada neste site.

Nível extremamente fácil: Dada uma tabela de funcionários com as colunas EmpID, Nome, Sobrenome, HireDate e TerminationDate: escreva uma consulta para retornar todos os funcionários que ainda trabalham para a empresa com sobrenomes começando com "Smith", classificados por sobrenome e primeiro nome.

Nível fácil Dada a tabela Funcionário acima, além de uma nova tabela "Análises anuais" com as colunas EmpID e ReviewDate: escreva uma consulta para retornar todos os funcionários que nunca tiveram uma revisão classificada por HireDate.

Nível médio
Dada a tabela de funcionários acima, escreva uma consulta para calcular a diferença (em dias) entre o funcionário com menos e o cargo ainda trabalhando para a empresa?

Nível difícil Dada a tabela de funcionários acima, escreva uma consulta para calcular o período mais longo (em dias) que a empresa passou sem contratar ou demitir ninguém.

Nível mais difícil
Usando novamente as mesmas tabelas, escreva uma consulta que retorne cada funcionário e, para cada linha / funcionário, inclua o maior número de funcionários que trabalhavam para a empresa a qualquer momento durante seu mandato e a primeira data em que o máximo foi atingido. Pontos extras por não usar cursores.

JohnFx
fonte
11
Pergunta interessante. No entanto, o nível "Difícil" / "Difícil" parece realmente difícil para mim. Mesmo com uma experiência decente em SQL, acredito que seja provavelmente muito difícil de resolver em uma situação de entrevista. Talvez se você deixar o candidato em paz por meia hora ou mais.
sleske
Eu poderia dizer que a pergunta "mais difícil" era difícil quando percebi que nem sabia o que é um cursor ... e usei o MySQL todos os dias! : - /
thesunneversets 6/12/11
@Johnfx pode agradar ver essas respostas para os problemas ur Eu dia da entrevista depois de amanhã, docs.google.com/document/d/...
mr_eclair
Por que você precisa que eu olhe para isso? Você pode testá-lo e ver se obtém a resposta certa.
precisa saber é
3

Que tal o próprio fizzbuzz? Aqui está uma versão do Oracle:

select case when mod(level,35) = 0 then 'fizzbuzz'
            when mod(level,7) = 0 then 'buzz'
            when mod(level,5) = 0 then 'fizz'
            else to_char(level) end fizzbuzz
from dual connect by level <= 100

fonte
11
+1 por grandiosidade, mas acho que as tabelas de números virtuais não surgem com frequência suficiente para estar na caixa de ferramentas SQL de todos. Você teria que identificá-los assim:
Conrad Frix
0

Acho que as pessoas tendem a ter muitos problemas ao trabalhar com o tempo por algum motivo, de modo que pode ser um bom lugar para fazer um pequeno teste.

Algo assim:

Parte 1: Crie uma função que calcule o enésimo ou último dia da semana em um determinado mês - ou seja; a primeira, terceira e última terça-feira do próximo mês.

Parte 2 (se desejado): crie tabelas para armazenar expressões temporais para planejamentos recorrentes. Os agendamentos podem ser "no nono dia da semana de um ou mais meses" ou "no nono dia de um ou mais meses" ou "a cada nove dias a partir da data".

Por exemplo, os 15 de cada mês, a última quarta-feira de cada março, o último dia de cada mês, a cada 17 dias, de 2 de dezembro de 2008, etc.

Eli
fonte
2
-1: Trabalhar com o tempo e acertar é realmente difícil. Adivinhe por que bibliotecas como o JodaTime existem e não são apenas um software trivial.
sebastiangeiger
@sebastiangeiger Eu concordo. Trabalho com SQL quase diariamente e, embora possa usar as funções de data do SQL com eficiência, não seria capaz de fazer algo assim de maneira rápida ou fácil sem a ajuda do Google. Na verdade, eu precisava fazer isso há alguns meses e, depois de alguns minutos tentando descobrir isso no SQL, apenas pesquisei no Google e obtive alguns scripts que utilizo com algumas modificações para atender às minhas necessidades.
Rachel
Não estou procurando áreas problemáticas; Estou procurando algo com o qual qualquer desenvolvedor comum esteja trabalhando diariamente e possa me lembrar sem problemas e em um ambiente desconhecido (sem computador disponível). Embora seu exemplo não seja tão difícil, é mais um problema que eu daria a alguém que codifica na minha frente para ver como ele está pensando.
Domchi
11
@ Eli Acho que o FizzBuzz deve ser resolvido / codificado de acordo.
Aaron McIver
11
Eu não acho que a Parte 2 seja uma boa pergunta. De fato, este tópico possui uma solução estranha que não ocorre quase em nenhum outro problema de design de banco de dados nos negócios. não saber a resposta não é uma indicação de pouco conhecimento em SQL.
precisa saber é o seguinte