Quelles sont les questions de type FizzBuzz pour les développeurs Web ou SQL? [fermé]

10

Après un certain temps, nous recrutons à nouveau et j'examine les tests pour les programmeurs; certains d'entre eux sont un peu dépassés. Quelles sont certaines des questions de type FizzBuzz pour les développeurs Web et SQL? Ce n'est pas trop banal, mais toujours résoluble en cinq à dix minutes avec un stylo et du papier et sans Google?

J'élimine généralement environ les deux tiers ou plus des candidats sur la base du CV, puis tous, sauf quelques très bons candidats, lors d'une entrevue d'une heure (qui peut se faire par téléphone). À ce stade, le candidat écrit un test de personnalité et a la possibilité d'écrire un peu de code de type FizzBuzz. Donc, je n'essaie pas d'éliminer un tas de candidats, mais j'essaie de valider mon évaluation initiale que le candidat peut être embauché et capable de coder.

Domchi
la source
2
Quelles compétences recherchez-vous chez un développeur web?
Oded
Je suppose que je recherche la compréhension de HTML / CSS / JSON / HTTP; comme Rachel l'a mentionné, FizzBuzz est parfait pour tester Javascript / PHP / etc.
Domchi

Réponses:

12

Je vois FizzBuzz comme un test pour voir si les gens savent réellement ce qu'ils prétendent savoir sur leur CV. Je ne l'utiliserais pas comme autre chose qu'une question pour éliminer les candidats qui ne savent pas de quoi ils parlent.

Un remplacement SQL approprié consisterait simplement à demander au candidat d'écrire une instruction SQL telle que la sélection des champs Nom de deux tables jointes commençant par A. C'est simple et démontre que le candidat a effectivement une certaine connaissance 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%'

Pour un développeur Web, je voudrais simplement leur demander FizzBuzz. Ce n'est pas parce que vous programmez pour le Web que vous ne devriez pas avoir la capacité de faire une logique de programmation de base

Si vous cherchez de vraies questions d'entrevue, il y en a beaucoup de bonnes en ligne que vous pouvez trouver avec une recherche rapide. J'ai trouvé plus que ce que je veux énumérer en prenant 10 secondes avec Google.

Rachel
la source
2
Les jointures sont un bon moyen de séparer les recrues des programmeurs SQL les plus avancés, car en programmation SQL, il faut généralement un paradigme de réflexion différent de la programmation côté serveur, ce qui est généralement impératif. Les jointures et les sous-requêtes me bloquaient jusqu'à ce que je commence à penser aux instructions SQL en termes d'ensembles.
Chris C
@CCRicers Je suis d'accord. Et si vous interviewez pour un développeur SQL avancé, j'ajouterais en fait une exigence de GROUPE à cela, car j'ai beaucoup travaillé avec SQL avant de bien comprendre ce que signifiaient les groupes et comment ils fonctionnaient
Rachel
Envisagez d'exiger une auto-jointure: "CRÉER UN EMPLOYÉ DE TABLE (NUMÉRO D'IDENTIFICATION, NOM TEXTE, NUMÉRO DE GESTIONNAIRE)" puis "Comment puis-je répertorier les employés et leurs gestionnaires?"
kevin cline
Selon le type de base de données / poste SQL pour lequel vous embauchez (et l'expérience du développeur / votre environnement), vous pouvez demander une réponse «FizzBuzz» réelle .
Clockwork-Muse
Et cela a l'avantage supplémentaire d'être une mauvaise spécification, donc il teste si le candidat clarifie les exigences avant d'écrire du code.
Peter Taylor
4

Voici une réponse que j'ai donnée à une question très similaire (peut-être en double) qui a été fermée sur ce site.

Niveau extrêmement facile: étant donné une table d'employés avec les colonnes EmpID, FirstName, Lastname, HireDate et TerminationDate: Écrivez une requête pour renvoyer tous les employés travaillant encore pour l'entreprise avec des noms commençant par "Smith" triés par nom puis prénom.

Niveau facile Étant donné le tableau Employé ci-dessus, plus un nouveau tableau "AnnualReviews" avec les colonnes EmpID et ReviewDate: Écrivez une requête pour renvoyer tous les employés qui n'ont jamais eu d'avis triés par HireDate.

Niveau moyen
Compte tenu du tableau des employés ci-dessus, écrivez une requête pour calculer la différence (en jours) entre l'employé le plus ancien et le moins titulaire travaillant toujours pour l'entreprise?

Niveau difficile Compte tenu du tableau des employés ci-dessus, écrivez une requête pour calculer la période la plus longue (en jours) pendant laquelle l'entreprise a passé sans embaucher ou licencier quelqu'un.

Niveau plus difficile
En utilisant à nouveau les mêmes tableaux, écrivez une requête qui renvoie chaque employé et pour chaque ligne / employé inclut le plus grand nombre d'employés qui ont travaillé pour l'entreprise à tout moment pendant leur mandat et la première date à laquelle ce maximum a été atteint. Points supplémentaires pour ne pas utiliser de curseurs.

JohnFx
la source
1
Question interessante. Cependant, le niveau "Hard" / "Harder" me semble vraiment difficile. Même avec une expérience SQL décente, je pense que c'est probablement trop difficile à résoudre dans une situation d'entrevue. Peut-être si vous laissez le candidat seul pendant une demi-heure environ.
sleske
Je pouvais dire que la question "plus difficile" était difficile quand j'ai réalisé que je ne savais même pas vraiment ce qu'est un curseur ... et j'ai utilisé MySQL tous les jours! : - /
theunneversets
@Johnfx Pouvez-vous voir ces réponses pour les problèmes que j'ai interviewés après-demain, docs.google.com/document/d/…
mr_eclair
Pourquoi avez-vous besoin de moi pour le regarder? Vous pouvez le tester vous-même et voir si vous obtenez la bonne réponse.
JohnFx
3

Que diriez-vous de fizzbuzz lui-même? Voici une version 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

la source
1
+1 pour la génialité, mais je pense que les tableaux de nombres virtuels ne sont pas assez souvent affichés pour être dans la boîte à outils SQL de tout le monde. Il faudrait les repérer
Conrad Frix
0

Je trouve que les gens ont tendance à avoir beaucoup de mal à travailler avec le temps pour une raison quelconque, donc cela peut être un bon endroit pour faire un petit test.

Quelque chose comme ça:

Partie 1: Créez une fonction qui calculera le Nième ou dernier jour de la semaine d'un mois donné - c'est-à-dire; le premier, le troisième, mardi dernier le mois prochain.

Partie 2 (si vous le souhaitez): Concevez des tables pour contenir des expressions temporelles pour des programmes récurrents. Les horaires peuvent être "le Nième jour de semaine d'un ou plusieurs mois" ou "le Nème jour d'un ou plusieurs mois" ou "tous les N jours à partir de la date".

Exemple, le 15 de chaque mois, le dernier mercredi de chaque mars, le dernier jour de chaque mois, tous les 17 jours à partir du 2 décembre 2008, etc.

Eli
la source
2
-1: Travailler avec le temps et bien faire les choses EST vraiment difficile. Devinez pourquoi des bibliothèques comme JodaTime existent et ne sont pas simplement des logiciels triviaux.
sebastiangeiger
@sebastiangeiger Je suis d'accord. Je travaille avec SQL presque quotidiennement et bien que je puisse utiliser efficacement les fonctions de date de SQL, je ne pourrais pas faire quelque chose comme ça rapidement ou facilement sans l'aide de Google. En fait, je devais le faire il y a quelques mois et après quelques minutes d'essayer de le comprendre en SQL, je l'ai simplement recherché sur Google et j'ai obtenu des scripts que j'utilise avec quelques modifications pour répondre à mes besoins.
Rachel
Je ne recherche pas les zones à problèmes; Je suis à la recherche de quelque chose avec lequel un développeur moyen travaille quotidiennement et peut se rappeler sans aucun problème et dans un environnement inconnu (pas d'ordinateur disponible). Bien que votre exemple ne soit pas si difficile, c'est plus un problème que je donnerais à quelqu'un codant devant moi pour voir comment il pense.
Domchi
1
@Eli Je pense que FizzBuzz devrait être résolu / codé en conséquence.
Aaron McIver
1
Je ne pense pas que la partie 2 soit une bonne question. En fait, ce sujet a une solution étrange qui ne se produit presque pas dans tout autre problème de conception de base de données en entreprise. ne pas connaître la réponse n'est pas une indication d'une mauvaise connaissance de SQL.
NoChance