Quais são as perguntas para testar o conhecimento de SQL de um programador? [fechadas]
14
Quais são as perguntas para testar o conhecimento de SQL de um programador? Qual é a resposta para a pergunta? E o que significaria a falta de uma resposta correta em termos de tempo provável para entender o (s) conceito (s) relacionado à pergunta?
Definitivamente, eu daria um exemplo real ao vivo e pediria para escrever uma consulta complexa. Por exemplo, peça para selecionar o mês mais rentável para cada um dos últimos 10 anos, se você tiver a tabela de compras. MAS, como você também faz perguntas e respostas, isso provavelmente significa que você não é especialista e não pode julgar. Nesse caso, você pode tentar algum serviço de teste de terceiros, pelo menos como filtro inicial antes da entrevista. Eu sugeriria tests4geeks.com . Eles têm teste SQL.
Dhaval Patel
Respostas:
20
Depende de quão difícil você quer que seja. Além disso, sou um pouco cauteloso em dar a resposta, porque a maioria dos problemas de SQL tem várias maneiras aceitáveis de fazer as coisas e também existem maneiras de resolver problemas de SQL de maneira desleixada que causarão outros problemas. A pessoa que "classifica" a resposta definitivamente precisa ser capaz de resolvê-la por conta própria.
Dito isto, aqui estão algumas que eu inventei em cima da minha cabeça.
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.
Legal, responda - gostei muito da evolução das perguntas. Por que a pessoa que faz as perguntas precisa ser capaz de respondê-las? Por que não apenas escrever teste de unidade com base na saída e no tempo de execução? Além disso, o que você diria o número de semanas conectivas de domínio progressivo dos conceitos de SQL que levaria o programador médio a atingir o nível mais difícil fornecido por você? Você também acreditaria que um programador capaz de responder à pergunta mais difícil que você responder seria capaz de resolver efetivamente uma grande maioria das tarefas relacionadas ao SQL?
erros
3
A razão pela qual eu gostaria que o solicitante (ou pelo menos o "avaliador") pudesse respondê-las é que a abordagem pode lhe dizer o resultado. Também me preocupo com o fato de um entrevistador não técnico ter uma resposta pré-escrita e não aceitar outras respostas potencialmente corretas (o cartão diz "Moop").
JohnFx
Se essas perguntas demonstram a capacidade de lidar com uma maioria muito alta de tarefas relacionadas ao SQL. Se o trabalho deles for escrever consultas, provavelmente sim. Se você espera que eles administrem um servidor de banco de dados, é necessário fazer perguntas específicas.
JohnFx
Obrigado pelos esclarecimentos, o entrevistador não técnico nesse caso não seria uma pessoa, mas um sistema, portanto, o teste de unidade e o tempo de execução. Claramente, os sistemas não estão escrevendo ou lendo código, os humanos são, mas existem tantos programadores no mundo, e a necessidade, na minha opinião, de tê-los no local é limitada, na melhor das hipóteses. Adivinhe se uma pessoa falhou no teste, mas pensou que estava certa, sempre poderia sinalizar como correta.
erros
E sim, o objetivo das perguntas seria um programador, não um administrador de banco de dados.
quer
4
Geralmente, eu apenas participo de entrevistas para especialistas em dados, então minhas perguntas tendem a ser difíceis. Mas uma coisa que eu exigiria de quem escreverá SQL é o conhecimento de junções e quando usar uma junção esquerda vs. uma junção interna. Qualquer pessoa que não entenda que não tem negócios em consultar um banco de dados de forma ou formato.
Outra coisa que eu faria é garantir que eles entendam como fazer um GROUP BY e usar funções agregadas.
E a diferença entre UNION e UNION ALL eliminou muitos candidatos pobres no meu trabalho.
Eu perguntaria "Por que e como você deve limpar os valores de entrada fornecidos pelo usuário que serão usados em uma consulta SQL?"
Isso é necessário para evitar injeções SQL, e ser capaz de responder a esta exige um bom conhecimento sobre a sintaxe SQL e comandos (tais como SELECT, UPDATE, DROP, DELETE, etc.), bem como aqueles que podem ser contornadas pelo uso de comentários SQL para quebrar uma consulta e injetar o que o usuário maligno pode querer fazer.
A resposta não é: nunca desinfete as entradas, use uma declaração preparada?
Kevin cline
@Emmad Kareem, quem não pode responder isso não deve escrever SQL.
HLGEM 30/10/11
@ Gablin, eu realmente não vejo por que isso é assim. Você poderia explicar um pouco? Quantos livros SQL discutem esse assunto?
NoChance
2
Eu tive uma mão no desenvolvimento de um teste técnico para programadores de banco de dados. As perguntas foram o que considero bastante básicas: escreva as instruções CREATE TABLE para uma determinada estrutura de tabela; faça algumas consultas simples; etc.
A maioria dos candidatos a emprego que se consideravam especialistas na SQL foi reprovada no teste. Um disse que, embora ele fosse desenvolvedor de SQL por muitos anos, ele nunca havia escrito uma instrução CREATE TABLE porque a GUI fazia isso por ele.
Tivemos experiências semelhantes com outros testes técnicos. Para a equipe de suporte do Windows, as tarefas são semelhantes a "criar um usuário de domínio", "adicionar uma impressora", "alterar permissões em um arquivo". A maioria das pessoas não pode fazer essas tarefas, principalmente sob pressão. Concluímos que, se você pode fazer coisas simples, provavelmente é bastante competente.
Receio estar do lado do desenvolvedor usando a GUI. Você pode passar uma carreira inteira sem escrever regularmente scripts CREATE TABLE. Muitas pessoas desenvolvem modelos de dados nas ferramentas CASE que geram automaticamente o DDL para você. Em geral, eu coíbe de quaisquer testes que se baseiam principalmente na memorização de sintaxe, em favor daqueles que teste uma compreensão mais ampla das questões envolvidas
cjmUK
+1 @ Barry Brown: Eu concordo, e é um ponto interessante.
erros
0
Se você preferir fazer mais perguntas abertas: faça perguntas gerais sobre os tipos de dados DATE, DATETIME .... Pergunte sobre as diferenças entre diferentes implementações / produtos de fornecedores. Fale sobre ferramentas de linha de comando, carregadores a granel, impressoras bonitas ... talvez você possa aprender um novo truque durante a entrevista.
Respostas:
Depende de quão difícil você quer que seja. Além disso, sou um pouco cauteloso em dar a resposta, porque a maioria dos problemas de SQL tem várias maneiras aceitáveis de fazer as coisas e também existem maneiras de resolver problemas de SQL de maneira desleixada que causarão outros problemas. A pessoa que "classifica" a resposta definitivamente precisa ser capaz de resolvê-la por conta própria.
Dito isto, aqui estão algumas que eu inventei em cima da minha cabeça.
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.
fonte
Geralmente, eu apenas participo de entrevistas para especialistas em dados, então minhas perguntas tendem a ser difíceis. Mas uma coisa que eu exigiria de quem escreverá SQL é o conhecimento de junções e quando usar uma junção esquerda vs. uma junção interna. Qualquer pessoa que não entenda que não tem negócios em consultar um banco de dados de forma ou formato.
Outra coisa que eu faria é garantir que eles entendam como fazer um GROUP BY e usar funções agregadas.
E a diferença entre UNION e UNION ALL eliminou muitos candidatos pobres no meu trabalho.
fonte
Eu perguntaria "Por que e como você deve limpar os valores de entrada fornecidos pelo usuário que serão usados em uma consulta SQL?"
Isso é necessário para evitar injeções SQL, e ser capaz de responder a esta exige um bom conhecimento sobre a sintaxe SQL e comandos (tais como
SELECT
,UPDATE
,DROP
,DELETE
, etc.), bem como aqueles que podem ser contornadas pelo uso de comentários SQL para quebrar uma consulta e injetar o que o usuário maligno pode querer fazer.fonte
Eu tive uma mão no desenvolvimento de um teste técnico para programadores de banco de dados. As perguntas foram o que considero bastante básicas: escreva as instruções CREATE TABLE para uma determinada estrutura de tabela; faça algumas consultas simples; etc.
A maioria dos candidatos a emprego que se consideravam especialistas na SQL foi reprovada no teste. Um disse que, embora ele fosse desenvolvedor de SQL por muitos anos, ele nunca havia escrito uma instrução CREATE TABLE porque a GUI fazia isso por ele.
Tivemos experiências semelhantes com outros testes técnicos. Para a equipe de suporte do Windows, as tarefas são semelhantes a "criar um usuário de domínio", "adicionar uma impressora", "alterar permissões em um arquivo". A maioria das pessoas não pode fazer essas tarefas, principalmente sob pressão. Concluímos que, se você pode fazer coisas simples, provavelmente é bastante competente.
fonte
Se você preferir fazer mais perguntas abertas: faça perguntas gerais sobre os tipos de dados DATE, DATETIME .... Pergunte sobre as diferenças entre diferentes implementações / produtos de fornecedores. Fale sobre ferramentas de linha de comando, carregadores a granel, impressoras bonitas ... talvez você possa aprender um novo truque durante a entrevista.
fonte